big update: added reactions, groups, media share
CI / Go (build + vet + test) (push) Canceled after 0s
CI / Web (build + lint) (push) Canceled after 0s

This commit is contained in:
vantablackTea
2026-09-27 21:59:48 +03:00
parent ae24bdd0e0
commit 9d03ea4c51
41 changed files with 2548 additions and 172 deletions
+14 -2
View File
@@ -6,6 +6,7 @@ import (
"strings"
"messenger/internal/auth"
"messenger/internal/media"
"messenger/internal/platform/config"
"messenger/internal/realtime"
"messenger/internal/store"
@@ -17,17 +18,19 @@ type apiHandler struct {
hub *realtime.Hub
log *slog.Logger
secure bool
media media.Storage
}
// NewHandler builds the /api/v1 route tree with all middleware applied.
// static, when non-nil, serves the built frontend for non-API paths.
func NewHandler(st *store.Store, tm *auth.TokenManager, hub *realtime.Hub, log *slog.Logger, cfg *config.Config, static http.Handler) http.Handler {
func NewHandler(st *store.Store, tm *auth.TokenManager, hub *realtime.Hub, log *slog.Logger, cfg *config.Config, ms media.Storage, static http.Handler) http.Handler {
h := &apiHandler{
store: st,
tokens: tm,
hub: hub,
log: log,
secure: cfg.Environment == "production",
media: ms,
}
mux := http.NewServeMux()
@@ -50,9 +53,18 @@ func NewHandler(st *store.Store, tm *auth.TokenManager, hub *realtime.Hub, log *
mux.Handle("DELETE /api/v1/contacts/{user_id}", requireAuth(tm, h.removeContact))
mux.Handle("GET /api/v1/conversations", requireAuth(tm, h.listConversations))
mux.Handle("POST /api/v1/conversations", requireAuth(tm, h.createDM))
mux.Handle("POST /api/v1/conversations", requireAuth(tm, h.createConversation))
mux.Handle("GET /api/v1/conversations/{id}/members", requireAuth(tm, h.listMembers))
mux.Handle("POST /api/v1/conversations/{id}/members", requireAuth(tm, h.addMember))
mux.Handle("DELETE /api/v1/conversations/{id}/members/{user_id}", requireAuth(tm, h.removeMember))
mux.Handle("GET /api/v1/conversations/{id}/messages", requireAuth(tm, h.listMessages))
mux.Handle("POST /api/v1/conversations/{id}/messages", requireAuth(tm, h.sendMessage))
mux.Handle("PUT /api/v1/conversations/{id}/messages/{msg_id}/reactions", requireAuth(tm, h.addReaction))
mux.Handle("DELETE /api/v1/conversations/{id}/messages/{msg_id}/reactions/{emoji}", requireAuth(tm, h.removeReaction))
mux.Handle("POST /api/v1/media", requireAuth(tm, h.uploadMedia))
mux.Handle("GET /api/v1/media/{id}", requireAuth(tm, h.downloadMedia))
mux.Handle("GET /api/v1/media/{id}/thumb", requireAuth(tm, h.downloadThumb))
mux.Handle("GET /ws", authHandler)