docker-compose up. Sign in as different roles to see the authorization actually bite.Sign in to continue. Permissions come from the role you sign in as.
Or jump straight in as one of the seeded roles:
Read from GET /auth/me, which resolves them from the database —
not from the token. Change the matrix below and press “Refresh permissions” to watch this list move.
Permissions are rows in role_permissions, not constants in the code. A Supervisor
edits the matrix at runtime through PUT /admin/permissions and every subsequent request
is checked against the new state.
GET /rpc-test publishes to task_queue with an exclusive reply queue and a
correlation id, then waits. A 10-second timeout tears the queue down so a silent consumer can't hang
the request forever.
Every insert into records writes an audit_logs row from a
PL/pgSQL trigger, inside the same transaction — the application cannot forget to log.
Documents are chunked, embedded and stored in a VECTOR(768) column with an HNSW index
over cosine distance. Each chunk records which model produced it, because vectors from different
models aren't comparable.
Lookups go through Redis. If Redis is down the server still starts and reads straight from PostgreSQL — the cache is an optimisation, never a dependency.
RedisThe Express app is built without binding a port, so integration tests drive it through Supertest with no listening server.
Jest · Supertest# PostgreSQL (pgvector), RabbitMQ, Redis and the API git clone https://github.com/ardazeybek-dev/microservice-management-panel cd microservice-management-panel cp .env.example .env # add your Gemini API key docker-compose up --build npm run setup-db # schema + baseline roles, seeds the first Supervisor