Replaced duplicated server setup code with createServiceApp() factory: - platform-service: 91 → 39 lines - billing-service: 105 → 51 lines (keeps service-specific internal key auth) - growth-service: 83 → 33 lines - tracker-service: 88 → 36 lines Enhanced fastify-core with optional Swagger + Prometheus metrics support. Total reduction: ~208 lines of duplicated boilerplate eliminated. All 246 tests pass. |
||
|---|---|---|
| .. | ||
| src | ||
| .gitignore | ||
| Dockerfile | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
Tracker Service
Product-agnostic issue tracker for feature requests, bugs, and task management. Built with Fastify + TypeScript + Azure Cosmos DB.
Port
4004 (configurable via PORT env var)
Modules
- items — CRUD for tracker items (bugs, features, tasks) with filtering, pagination, and stats
- comments — Threaded discussion on items
- votes — Upvote toggle (1 per user per item)
API Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /items |
List/filter/search items |
| POST | /items |
Create item |
| GET | /items/stats |
Aggregate counts by type/status/priority |
| GET | /items/:id |
Get single item |
| PUT | /items/:id |
Update item |
| PATCH | /items/:id/status |
Quick status transition |
| DELETE | /items/:id |
Delete item |
| GET | /items/:itemId/comments |
List comments |
| POST | /items/:itemId/comments |
Add comment |
| PUT | /items/:itemId/comments/:id |
Edit comment |
| DELETE | /items/:itemId/comments/:id |
Delete comment |
| POST | /items/:itemId/vote |
Toggle upvote |
| GET | /items/:itemId/votes |
List voters |
| GET | /health |
Health check |
Setup
cp .env .env # fill in values
npm install
npm run dev # starts with tsx watch on port 4004
Testing
npm test # vitest run (29 tests)
Environment Variables
See .env for required variables:
COSMOS_ENDPOINT— Azure Cosmos DB endpointCOSMOS_KEY— Cosmos DB primary keyCOSMOS_DATABASE— Database nameJWT_SECRET— Shared secret for JWT verification (from platform-service)DEFAULT_PRODUCT_ID— Default product scope (e.g.,lysnrai)PORT— Server port (default4004)