How taushifreza/go-social works
GoSocial is a REST social-network backend. A client request enters the API, passes shared middleware, and reaches user, post/feed, or comment handlers; those handlers use persistence and, for user profiles, a Redis cache. Registration also dispatches activation email, while authentication and role checks protect restricted operations. The README documents follow relationships, optimistic post updates, rate limiting, and runtime metrics. Wiring for several handlers and integrations is described but not present in the sampled source, so those links reflect documented behavior; uncertain implementation details are omitted.
Main entry points: main.go HTTP server · storage.go Storage interfaces · users.go User handlers · db.go DB connection
Components 22
API transport
- HTTP server
cmd/api/main.go - Middleware
cmd/api/middleware.go - JSON responses
cmd/api/json.go - Runtime metrics
cmd/api/main.go
Social features
- User handlers
cmd/api/users.go - Post handlers
cmd/api/posts.go - Feed handlers
cmd/api/feed.go - Comment handlers
cmd/api/comments.go
Security controls
- JWT auth
internal/auth/auth.go - Rate limiter
internal/ratelimiter/fixed-window.go
Persistence and integrations
- Storage interfaces
internal/store/storage.go - User repository
internal/store/users.go - Post repository
internal/store/posts.go - Comment repository
internal/store/comments.go - DB connection
internal/db/db.go - Profile cache
internal/cache/users.go - Email sender
internal/mailer/mailer.go - Role repository
internal/store/role.go
Other components
- API client
- PostgreSQL
- Redis
- Email service
Connections 31
- API client → HTTP server: sends requests
- HTTP server → Middleware: routes through
- Middleware → Rate limiter: checks rate
- Middleware → JWT auth: verifies tokens
- HTTP server → User handlers: dispatches users
- HTTP server → Post handlers: dispatches posts
- HTTP server → Feed handlers: dispatches feeds
- HTTP server → Comment handlers: dispatches comments
- User handlers → JSON responses: writes responses
- Post handlers → JSON responses: writes responses
- Feed handlers → JSON responses: writes responses
- Comment handlers → JSON responses: writes responses
- User handlers → Storage interfaces: uses storage
- Post handlers → Storage interfaces: uses storage
- Feed handlers → Storage interfaces: loads feed
- Comment handlers → Storage interfaces: uses storage
- Storage interfaces → User repository: provides users
- Storage interfaces → Post repository: provides posts
- Storage interfaces → Comment repository: provides comments
- User repository → DB connection: queries
- Post repository → DB connection: queries
- Comment repository → DB connection: queries
- Role repository → DB connection: queries
- DB connection → PostgreSQL: reads and writes
- User handlers → Profile cache: checks profile
- Profile cache → Redis: reads and writes
- User handlers → Email sender: sends activation
- Email sender → Email service: dispatches email
- HTTP server → Runtime metrics: publishes metrics
- JWT auth → API client: issues tokens
- Post handlers → Role repository: checks permissions