How rostyslav452/keyboardbuilderapi works
This is a REST API for authenticating users, managing mechanical-keyboard parts, and creating user-owned builds. The main workflow is an HTTP request through Express routing and validation to a controller, then a domain service and Sequelize models backed by MySQL; build operations combine a user’s selected switch, case, PCB, and keycaps. Authentication additionally issues and rotates JWTs while persisting refresh tokens. The README documents security, logging, pagination, and health-check capabilities; some route and middleware wiring is represented from documentation because those implementations were not sampled.
Main entry points: index.ts Sequelize models · app.ts Express app · routers API routers · auth.service.ts Auth service
Components 25
HTTP handling
- HTTP server
src/server.ts - Express app
src/app.ts - API routers
src/routers - Validated handler
src/utils/createValidatedHandler.ts - Request schemas
src/schemas - Error handling
src/middlewares/errorHandler.ts - Request logging
src/middlewares/requestLogger.ts - Health endpoint
src/app.ts
Identity and security
- Request security
src/middlewares - Auth controller
src/controllers/auth.controller.ts - Auth service
src/services/auth.service.ts - JWT utilities
src/utils/jwt.util.ts - Auth schemas
src/schemas/auth.schema.ts
Parts and builds
- Parts controller
src/controllers/parts.controller.ts - Parts service
src/services/part.service.ts - Part schemas
src/schemas/part.schema.ts - Build controller
src/controllers/builds.controller.ts - Build service
src/services/build.service.ts - Build schemas
src/schemas/build.schema.ts
Persistence
- Sequelize models
src/models/index.ts - Users and tokens
src/models/user.model.ts - Keyboard parts
src/models/part.model.ts - Keyboard builds
src/models/build.model.ts
Other components
- API client
- MySQL database
Connections 34
- API client → HTTP server: sends requests
- HTTP server → Express app: serves
- HTTP server → MySQL database: authenticates connection
- Express app → API routers: mounts routes
- Express app → Health endpoint: serves health check
- Express app → Request security: applies middleware
- Express app → Request logging: logs requests
- Express app → Error handling: handles errors
- API routers → Auth controller: dispatches auth
- API routers → Parts controller: dispatches parts
- API routers → Build controller: dispatches builds
- API routers → Request security: protects private routes
- Auth controller → Validated handler: wraps handlers
- Parts controller → Validated handler: wraps handlers
- Build controller → Validated handler: wraps handlers
- Validated handler → Request schemas: parses requests
- Auth controller → Auth schemas: validates auth input
- Parts controller → Part schemas: validates part input
- Build controller → Build schemas: validates build input
- Auth controller → Auth service: invokes auth
- Parts controller → Parts service: invokes parts
- Build controller → Build service: invokes builds
- Auth service → Sequelize models: reads and writes
- Parts service → Sequelize models: reads and writes
- Build service → Sequelize models: reads and writes
- Auth service → JWT utilities: signs and verifies
- Request security → JWT utilities: validates access tokens
- Sequelize models → Users and tokens: initializes
- Sequelize models → Keyboard parts: initializes
- Sequelize models → Keyboard builds: initializes
- Sequelize models → MySQL database: queries via Sequelize
- Auth service → Users and tokens: uses user records
- Auth service → Users and tokens: stores refresh tokens
- Build service → Keyboard parts: loads build components