- Создать файл
.production.env
в корневой директории проекта со следующим содержанием:
PORT=8080
POSTGRES_HOST = postgres-db
POSTGRES_USERNAME = your_username
POSTGRES_PASSWORD = your_password
POSTGRES_DATABASE = your_database
POSTGRES_PORT = 5432
- запустить команду
docker-compose up -d
Приложение будет доступно на localhost:8080
Документация будет доступна на localhost:8080/api/docs
Тестовое задание на позицию «backend-разработчик».
Необходимо создать сервис для хранения и получения оценок за занятия. Занятия, оценки и ученики должны храниться в базе данных. Сервис должен предоставлять API в формате JSON.
- Язык программирования NodeJS (JavaScript/TypeScript) с использованием фреймворка NestJS.
- Финальную версию нужно выложить на любой удобный для вас репозиторий с публичным доступом (github, gitlab, bitbucket, etc).
- Простая инструкция для запуска.
- 5 методов: получение списка учеников, добавление одного ученика, добавление занятия, получение списка занятий с оценками учеников, добавление оценки ученика по занятию.
- Методы документированы (Swagger).
- Хранение данных в PostgreSQL (используйте TypeORM).
Если есть сомнения по деталям — решение принять самостоятельно, но в своём README.md рекомендуем выписать вопросы и принятые решения по ним.
Сервис должен реализовывать API с следующими эндпоинтами:
GET /users
POST /users
GET /lessons/
POST /lessons
POST /lessons/{id}/evaluations
Используется для получения списка пользователей.
Пример запроса:
curl -X GET 'http://localhost:8080/api/users' -H 'Content-Type: application/json'
Пример ответа:
[
{
"id": "1",
"name": "Джонни",
"email": "[email protected]"
},
{
"id": "2",
"name": "Билл",
"email": "[email protected]"
}
]
Используется для создания пользователя.
Пример запроса:
curl -X POST 'http://localhost:8080/api/users' -H "Content-Type: application/json" -d '{"name": "Джонни", "email": "[email protected]"}'
Пример ответа:
{
"id": "1",
"name": "Джонни",
"email": "[email protected]"
}
Используется для получения списка занятий с оценками пользователей.
Пример запроса:
curl -X GET 'http://localhost:8080/api/lessons' -H "Content-Type: application/json"
Пример ответа:
[
{
"id":"2",
"name": "Музыка",
"code": "music",
"evaluations": [
{
"id": "3",
"score": "56",
"user":
{
"id": "1",
"name": "Джонни",
"email": "[email protected]"
}
},
{
"id": "7",
"score": "0",
"user":
{
"id": "2",
"name": "Билл",
"email": "[email protected]"
}
}
]
}
]
Используется для создания занятия.
Пример запроса:
curl -X POST 'http://localhost:8080/api/lessons' -H "Content-Type: application/json" -d '{"name": "Музыка", "code": "music"}'
Пример ответа:
{
"id": "2",
"name": "Музыка",
"code": "music"
}
Проставление оценки за занятие.
Пример запроса:
curl -X POST 'http://localhost:8080/api/lessons/3/evaluations' -H "Content-Type: application/json" -d '{"user_id": "1", "score": "56"}'
Пример ответа:
{
"id": "3",
"user_id": "1",
"score": "56"
}
Отношения между таблицами выполните самостоятельно.
fields | type |
---|---|
id | integer |
name | string(100) |
srting(30) |
fields | type |
---|---|
id | integer |
score | integer |
createdAt | date |
fields | type |
---|---|
id | integer |
name | srting(100) |
code | srting(20) |