Небольшое тестовое задание для бэкендера-дотнетчика.
В репозитории лежит незаконченный WebAPI-проект, который представляет собой CRUD над сущностью задачи (todo item).
API должен уметь отдавать в ответе список всех сущностей или конкретную, добавлять новую сущность или обновлять существующую. Ожидаемые контракты см. ниже.
- реализовать недостающие методы в API и исправить ошибки, если есть
- реализовать "ленивое" обновление сущности (через
MassTransit
, работающий вInMemory
-режиме) - написать
Dockerfile
для упаковки проекта в контейнер - добавить файл с SQL-скриптами для создания нужной структуры БД
- покрыть тестами обработчики запросов
- написать
docker-compose.yml
, в котором будут описаны контейнеры с Postgres (нужная структура БД должна создаваться автоматически) и данным сервисом - заменить
InMemory
-вариантMassTransit
наRabbitMQ
-вариант - прикрутить
m2m
-аутентификацию черезIdentityServer4
- покрыть тестами storage-сервисы
GET /todoItems
{
"items": [
{
"id": "0495b9a7-8c03-4efb-957c-8db9167cab11",
"title": "Выполнить тестовое задание",
"isCompleted": true
}
]
}
GET /todoItems/0495b9a7-8c03-4efb-957c-8db9167cab11
{
"id": "0495b9a7-8c03-4efb-957c-8db9167cab11",
"title": "Выполнить тестовое задание",
"isCompleted": true
}
POST /todoItems
{
"title": "Выполнить тестовое задание",
"isCompleted": true
}
{
"id": "0495b9a7-8c03-4efb-957c-8db9167cab11"
}
PUT /todoItems/0495b9a7-8c03-4efb-957c-8db9167cab11
{
"title": "Выполнить тестовое задание",
"isCompleted": true
}
{
// empty
}
{
"userMessage": "Задача не существует",
"errorCode": "NotFound"
}
Примеры кодов ошибок:
NotFound
: сущность не найденаInternalError
: внутренняя ошибкаInvalidModel
: некорректная модель запроса