Architecture¶
Process model¶
main.go loads .env, reads database and port settings, opens and pings
the MySQL connection, ensures the user profile table exists, registers the
default net/http routes, and starts http.ListenAndServe.
Handlers receive a shared *sql.DB through handlers.NewUserAPI.
Authentication is cookie-based and sessions are held in process memory; a
restart invalidates every session.
Request domains¶
The handler package is split by domain:
User.go— registration, login, profiles, account email, and user lookup;Servers.goandChannels.go— servers, roles, channels, invites, and server messages;Friends.goandConversations.go— friend relationships and direct or group conversations;Attachments.goandReactions.go— message-associated features;Websocket.go— live channel and conversation connections;Admin.goandReports.go— account standing and moderation;Email.go— verification and password reset messages.
The frontend calls these handlers with fetch and opens WebSocket
connections for live message updates.