Skip to content

Alex5200/backend_express_prisma_LoginJWT

Repository files navigation

🚀 User Management API

REST-сервис для управления пользователями, разработанный в соответствии с техническим заданием.

Запрещённые технологии не использованы (NestJS отсутствует)
Разрешённые технологии применены: Express + TypeScript + Prisma (ORM) + PostgreSQL


📋 Соответствие требованиям задания

✅ Модель пользователя содержит:

Поле Тип Описание
name String Имя
surname String Фамилия
seconame String Отчество
dateBirthday String Дата рождения ("YYYY-MM-DD")
email String Уникальный email
password String Хэшированный пароль
role String "user" или "admin"
status Boolean true — активен, false — заблокирован

🔐 Пароли хэшируются с помощью bcrypt.


✅ Реализованные endpoint’ы

Endpoint Метод Описание Доступ
1 /signup POST Регистрация нового пользователя Все
2 /login POST Авторизация (JWT) Все
3 /user/:id GET Получение пользователя по ID Админ или сам пользователь
4 /users GET Список всех пользователей Только админ
5 /user/:id/block PATCH Блокировка пользователя (status = false) Админ или сам пользователь

🔒 Все защищённые endpoint’ы требуют JWT в заголовке:
Authorization: Bearer <token>


🛠️ Технологии

  • Backend: Express.js
  • Язык: TypeScript
  • ORM: Prisma
  • База данных: PostgreSQL (поддерживается любая через Prisma)
  • Аутентификация: JWT + jsonwebtoken
  • Хэширование паролей: bcrypt
  • Документация: Swagger UI (/api-docs)
  • Тесты: Jest + Supertest

📦 Установка и запуск

  1. Создайте .env в корне проекта:

    JWT_SECRET=сгенерированный_секрет_минимум_64_символа
    DATABASE_URL="postgresql://user:password@localhost:5432/dbname?schema=public"
  2. Установите зависимости:

    npm ci
  3. Примените миграции:

    npx prisma migrate dev --name init
  4. (Опционально) Заполните тестовыми данными:

    npx prisma db seed

    Создаёт админа: admin@example.com / password123

  5. Запустите сервер:

    npm run dev

📚 Документация (Swagger)

Доступна по адресу:
👉 http://localhost:3000/api-docs

Как протестировать как админ:

  1. Выполните POST /login с:
    { "email": "admin@example.com", "password": "password123" }
  2. Скопируйте token из ответа.
  3. В Swagger нажмите Authorize → введите:
    Bearer ваш_токен_здесь
    
  4. Теперь доступны:
    • GET /users
    • PATCH /user/{id}/block

🧪 Тестирование

Запуск тестов:

npm test

Покрыты сценарии:

  • Регистрация и вход
  • Получение профиля (самим пользователем и админом)
  • Блокировка (самостоятельная и админом)
  • Защита от неавторизованного доступа

📁 Структура проекта (лучшие практики)

src/
├── server.ts              # Точка входа
├── app.ts                 # Express app (без логики запуска)
├── swagger.ts             # Конфигурация OpenAPI
├── routes/                # Маршруты по доменам
│   ├── auth.routes.ts
│   ├── user.routes.ts
│   └── post.routes.ts     # (доп. функционал)
└── middleware/            # Переиспользуемая логика
    └── authenticateToken.ts
tests/                     # Изолированные unit/integration тесты
prisma/                    # Схема и миграции

✅ Чёткое разделение ответственности
✅ Поддержка масштабирования
✅ Лёгкость тестирования


🚫 Что не использовано

  • NestJS — полностью исключён
  • Любые фреймворки поверх Express — не применялись

About

REST API boilerplate with Express, TypeScript, Prisma ORM, and JWT authentication. Includes Swagger docs and ready-to-use auth routes.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors