How spgodev/new-chat works
This is a Gin-based direct-messaging API. Clients register or log in, use bearer tokens on protected routes, find users and create direct chats, then send messages or retrieve chat history. The graph follows the route wiring in main.go and the sampled controller, service, and token code; several other service and PostgreSQL repository implementations are represented from their filenames and wiring, so their internal behavior is not expanded.
Main entry points: main.go Gin API · usersPG.go Users repository · controller Auth controllers · token_service.go Token lifecycle
Components 22
HTTP API
- Gin API
backend/cmd/api/main.go - JWT middleware
backend/internal/middleware/auth_jwt.go
Identity
- Auth controllers
backend/internal/controller - Profile controller
backend/internal/controller/me_controller.go - Registration
backend/internal/story/registraton_service.go - Login
backend/internal/story/login_service.go - Token lifecycle
backend/internal/story/token_service.go - Logout
backend/internal/story/logout_service.go - Current user
backend/internal/story/me_service.go
Messaging
- Chat controllers
backend/internal/controller - Message controllers
backend/internal/controller - User search
backend/internal/story/searchUsers_service.go - Create direct chat
backend/internal/story/createChat_service.go - List chats
backend/internal/story/getChats_service.go - Send message
backend/internal/story/sendMessage_service.go - Chat history
backend/internal/story/getChatHistory_service.go
Persistence
- Users repository
backend/internal/repository/usersPG.go - Direct-chat repository
backend/internal/repository/directChatsPG.go - Messages repository
backend/internal/repository/messagesPG.go - Refresh-token repository
backend/internal/repository/tokensPG.go - PostgreSQL
Other components
- Client
Connections 36
- Client → Gin API: HTTP requests
- Gin API → Auth controllers: routes auth
- Gin API → Profile controller: routes profile
- Gin API → Chat controllers: routes chats
- Gin API → Message controllers: routes messages
- Gin API → JWT middleware: protects API
- JWT middleware → Token lifecycle: parses token
- Auth controllers → Registration: registers
- Auth controllers → Login: authenticates
- Auth controllers → Token lifecycle: refreshes
- Auth controllers → Logout: logs out
- Profile controller → Current user: loads profile
- Chat controllers → User search: searches users
- Chat controllers → Create direct chat: creates chat
- Chat controllers → List chats: lists chats
- Message controllers → Send message: sends message
- Message controllers → Chat history: loads history
- Registration → Users repository: checks and creates user
- Registration → Token lifecycle: issues tokens
- Login → Users repository: loads credentials
- Login → Token lifecycle: issues tokens
- Token lifecycle → Refresh-token repository: stores and rotates
- Logout → Refresh-token repository: revokes token
- Current user → Users repository: loads user
- User search → Users repository: searches prefix
- Create direct chat → Users repository: loads participants
- Create direct chat → Direct-chat repository: creates chat
- List chats → Direct-chat repository: loads chats
- Send message → Direct-chat repository: checks chat access
- Send message → Messages repository: persists message
- Chat history → Direct-chat repository: checks chat access
- Chat history → Messages repository: loads messages
- Users repository → PostgreSQL: queries
- Direct-chat repository → PostgreSQL: queries
- Messages repository → PostgreSQL: queries
- Refresh-token repository → PostgreSQL: queries