Skip to content

ngrushet/newdisk-test-task

Repository files navigation

Тестовое задание - компания Новый Диск

Запуск решения:

  • Создать файл .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

GET /users

Используется для получения списка пользователей.

Пример запроса:

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]"
}
]

POST /users

Используется для создания пользователя.

Пример запроса:

curl -X POST 'http://localhost:8080/api/users' -H "Content-Type: application/json" -d '{"name": "Джонни", "email": "[email protected]"}'

Пример ответа:

{
	"id": "1",
	"name": "Джонни",
	"email": "[email protected]"
}

GET /lessons

Используется для получения списка занятий с оценками пользователей.

Пример запроса:

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]"
          }
          }
    ]
  }
]

POST /lessons

Используется для создания занятия.

Пример запроса:

curl -X POST 'http://localhost:8080/api/lessons' -H "Content-Type: application/json" -d '{"name": "Музыка", "code": "music"}'

Пример ответа:

{
	"id": "2",
	"name": "Музыка",
	"code": "music"
}

POST lessons/:id/evaluations

Проставление оценки за занятие.

Пример запроса:

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"
}

Модель данных

Отношения между таблицами выполните самостоятельно.

Users

fields type
id integer
name string(100)
email srting(30)

Evaluations

fields type
id integer
score integer
createdAt date

Lessons

fields type
id integer
name srting(100)
code srting(20)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published