- {type: 'triangle', description: {base: 88.4, height: 33}}
- {type: 'circle', description: {radius: 88.4}}
В ответ придёт json с полями
- errors - если пусто, значит всё ок
- data - структура с данными
- в проекте MindboxTest.Figures, например, в папке {Figure}, добавить классы
- {Figure}Description, где задать данные фигуры, отнаследовав от IFigureDescription
- {Figure}Validator, отнаследовав от AbstractValidator<{Figure}Description>
- {Figure}Calculator<{Figure}Description>, отнаследовав от IAreaCalculator
- Добавить в MindboxTest.Figures/Proxy/ProxyFigureInitializator вызов ProxyFigureStorage.AddFigureProcessors по аналогии
- Добавить тест проверки инициализатора в MindboxTest.Figures.Tests/Proxy/ProxyFigureDescriptionProviderTests по аналогии
- MindboxTest.API - веб часть, пробрасывает запросы к хендлерам в MindboxTest.Handlers
- MindboxTest.Handlers - "use cases". Выделил его отдельно от API, т.к. зачастую это удобно на больших проектах
- MindboxTest.Figures - описание логики расчёта и валидации фигур. Выделил отдельно.
- MindboxTest.DAL - сохранение и выгрузка фигур
- Т.к. говорилось про задание контракта, добавил валидацию
- Не уверен, что я и так проект не переусложнил больше, чем надо :) а посему обработку всех ошибок, задание http кодов, кеширование, логирование и многое-многое другое не делал
- И вообще говоря, делал бы проще или сложнее в зависимости от контекста
- Треугольник и круг задал для 2 мерной плоскости в евклидовом пространстве
- Валидацию юнит-тестами не покрываю специально
- Использовал реальную базу или не использовал моки в ряде тестов специально
- Изначально писал с хранением параметров в отдельной табличке, но после решил, что это оверинжиниринг и перевел на json поле