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 | Метод | Описание | Доступ |
|---|---|---|---|---|
| 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
-
Создайте
.envв корне проекта:JWT_SECRET=сгенерированный_секрет_минимум_64_символа DATABASE_URL="postgresql://user:password@localhost:5432/dbname?schema=public"
-
Установите зависимости:
npm ci
-
Примените миграции:
npx prisma migrate dev --name init
-
(Опционально) Заполните тестовыми данными:
npx prisma db seed
Создаёт админа:
admin@example.com/password123 -
Запустите сервер:
npm run dev
Доступна по адресу:
👉 http://localhost:3000/api-docs
- Выполните
POST /loginс:{ "email": "admin@example.com", "password": "password123" } - Скопируйте
tokenиз ответа. - В Swagger нажмите Authorize → введите:
Bearer ваш_токен_здесь - Теперь доступны:
GET /usersPATCH /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 — не применялись