Skip to content

NarMadat/user-management-api

Repository files navigation

User Management

A toolkit for managing users: REST API powered by Hono + TypeORM, PostgreSQL, and Docker.

Stack

  • Node.js + TypeScript
  • Hono, Zod, OpenAPI
  • TypeORM, PostgreSQL
  • pnpm workspace
  • Docker Compose

Project structure

apps/
  api/              # API source code
docker-compose.yml  # Docker services entry point
.infastructure.env  # infrastructure environment variables

Environment variables

.infastructure.env (shared by Docker and the API):

DOCKER_POSTGRES_USER=...
DOCKER_POSTGRES_PASSWORD=...
DOCKER_POSTGRES_DB=...
DOCKER_POSTGRES_PORT=5432
USER_MANAGEMENT_API_PORT=3000

apps/api/.env (local API configuration):

USER_MANAGEMENT_API_PORT=3000
USER_MANAGEMENT_API_PREFIX=/api
USER_MANAGEMENT_API_VERSION=v1

src/database/data-source.ts loads .infastructure.env automatically, so keep it up to date for local and container runs.

Local development

pnpm install
pnpm --filter api dev

Make sure PostgreSQL is running with credentials from .infastructure.env.

Docker

docker compose --env-file .infastructure.env up -d --build
docker compose logs -f api

Migrations

pnpm typeorm-ts-node-esm migration:generate ./src/database/migrations/<name> -d ./src/database/data-source.ts
pnpm typeorm-ts-node-esm migration:run -d ./src/database/data-source.ts

Key endpoints

Method Path Description Access
POST /auth/register Register a user Guest
POST /auth/login Authenticate a user Guest
GET /users/:id Get user by ID Admin or resource owner
GET /users List users Admin
POST /users/:id/block Block a user Admin or resource owner

Send the token via Authorization: Bearer <token> header.

Scripts

pnpm --filter api build
pnpm --filter api start
pnpm --filter api openapi   # generate OpenAPI spec
pnpm lint
pnpm test

About

User Management API built with TypeScript, Hono, TypeORM, JWT and PostgreSQL.

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages