- Added `RestoreMessageHandler` and route at `/account/messages/restore` - Updated `users_messages` table to support `archived_at` reset - Added restore button to archived messages template - Ensures archived messages can be moved back into inbox
81 lines
2.3 KiB
Go
81 lines
2.3 KiB
Go
package handlers
|
|
|
|
import (
|
|
"database/sql"
|
|
"net/http"
|
|
"synlotto-website/helpers"
|
|
"synlotto-website/models"
|
|
"synlotto-website/storage"
|
|
)
|
|
|
|
func SyndicateInviteHandler(db *sql.DB) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
syndicateID := helpers.Atoi(r.FormValue("syndicate_id"))
|
|
recipientUsername := r.FormValue("username")
|
|
senderID, ok := helpers.GetCurrentUserID(r)
|
|
if !ok {
|
|
helpers.RenderError(w, r, 403)
|
|
return
|
|
}
|
|
|
|
recipient := models.GetUserByUsername(recipientUsername)
|
|
if recipient == nil {
|
|
helpers.SetFlash(w, r, "User not found")
|
|
http.Redirect(w, r, "/account/syndicates", http.StatusSeeOther)
|
|
return
|
|
}
|
|
|
|
err := storage.InviteUserToSyndicate(db, syndicateID, recipient.Id, senderID)
|
|
if err != nil {
|
|
helpers.SetFlash(w, r, "Failed to invite user")
|
|
} else {
|
|
helpers.SetFlash(w, r, "Invitation sent to "+recipientUsername)
|
|
}
|
|
http.Redirect(w, r, "/account/syndicates", http.StatusSeeOther)
|
|
}
|
|
}
|
|
|
|
func ViewInvitesHandler(db *sql.DB) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
userID, ok := helpers.GetCurrentUserID(r)
|
|
if !ok {
|
|
helpers.RenderError(w, r, 403)
|
|
return
|
|
}
|
|
|
|
invites := storage.GetPendingInvites(db, userID)
|
|
data := BuildTemplateData(db, w, r)
|
|
context := helpers.TemplateContext(w, r, data)
|
|
context["Invites"] = invites
|
|
|
|
tmpl := helpers.LoadTemplateFiles("invites.html", "templates/syndicates/invites.html")
|
|
tmpl.ExecuteTemplate(w, "layout", context)
|
|
}
|
|
}
|
|
|
|
func AcceptInviteHandler(db *sql.DB) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
inviteID := helpers.Atoi(r.URL.Query().Get("id"))
|
|
userID, ok := helpers.GetCurrentUserID(r)
|
|
if !ok {
|
|
helpers.RenderError(w, r, 403)
|
|
return
|
|
}
|
|
err := storage.AcceptInvite(db, inviteID, userID)
|
|
if err != nil {
|
|
helpers.SetFlash(w, r, "Failed to accept invite")
|
|
} else {
|
|
helpers.SetFlash(w, r, "You have joined the syndicate")
|
|
}
|
|
http.Redirect(w, r, "/account/syndicates", http.StatusSeeOther)
|
|
}
|
|
}
|
|
|
|
func DeclineInviteHandler(db *sql.DB) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
inviteID := helpers.Atoi(r.URL.Query().Get("id"))
|
|
_ = storage.UpdateInviteStatus(db, inviteID, "declined")
|
|
http.Redirect(w, r, "/account/syndicates/invites", http.StatusSeeOther)
|
|
}
|
|
}
|