Высокая сложностьВысокий уровень

Тестовое задание по C# от компании СКБ Контур

Задание

Напишите сервер статистики для многопользовательской игры-шутера. Матчи этой игры
проходят на разных серверах, и задача сервера статистики — строить общую картину по
результатам матчей со всех серверов.
Сервер должен представлять собой standalone-приложение, реализующее описанный
ниже RESTful API.
Общая схема работы такая: игровые сервера анонсируют себя advertise-запросами, затем
присылают результаты каждого завершенного матча. Сервер статистики аккумулирует
разную статистику по результатам матчей и отдает её по запросам (статистика по
серверу, статистика по игроку, топ игроков и т.д.).

Нельзя​​использовать​​.NET​​Core. Требования к решению

● Сервер должен реализовывать описанное выше API.
● Сервер должен поддерживать работу на произвольном HTTP-префиксе (задается
при запуске).
● Сервер не должен терять данные при перезапуске. Если на PUT-запрос сервер
вернул 200 OK, данные не должны быть потеряны даже в случае аварийного
завершения приложения. Допустима потеря данных при внезапном выключении
хоста.
Для​​хранения​​данных​​можно​​использовать​​как​​собственное​​решение,​​так​​и
готовую​​embedded-базу​​данных.​​В​​качестве​​БД​​не​​рекомендуется
использовать​​MSSQL​​LocalDB.

● Сервер не должен падать при получении некорректных запросов. На такие
запросы нужно отправлять ответ с кодом, отличным от 200 OK. Допустимы любые
коды вида 4xx и 5xx.
● Сервер должен быстро обслуживать все виды запросов.
● Сервер должен уметь логировать ошибки.
● Код должен быть покрыт тестами.
● Код должен быть написан аккуратно и с любовью к деталям.

Оформление решения

● Все внешние модули, от которых зависит решение, должны содержаться в папке с
решением. Также допускаются зависимости от nuget-модулей.
● Решение должно успешно собираться с помощью msbuild: nuget restore &&
msbuild /p:Configuration=Release. В результате сборки папка
Kontur.GameStats.Server/bin/Release внутри папки с решением должна
содержать всё необходимое для работы приложения.
● Сервер должен запускаться из папки bin/Release следующим образом:
Kontur.GameStats.Server.exe --prefix http://+:8080/, где вместо
http://+:8080/ может быть любой UrlPrefix.
● Можно использовать в качестве заготовки проект из репозитория на гитхабе:
https://github.com/DQKrait/Kontur.GameStats