- Контракти API реалізовані в повній мірі, також сервіс власну документацію - http://localhost:8080/api/swagger/index.html
- Данні зберігаються в файлах
- Докер файл присутній
- Фреймворк - https://github.com/gin-gonic/gin
-
Сткурктура файлів проекту організована принципом розділення відповідальності, тобто транстпортний рівень (route) відокремлений від бізнес логіки (service). Плюс зовнішні сервіси винесені за рамки внутрішніх ресурсів.
-
Питання про інкапсуляцію модулів відкрите, в цьому проекті реалізовано наступне - кожен окремий ресурс або ж сервіс це окремий
package
, не впевнений, що це правильний підхід -
Зовнішні сервіси, це фіктивні методи які імітують роботу реальних. Вирішив не піключати, якщо правильно зрозумів, це не є основною задачею, і плюс реальні сервіси потребують ключів API, які потрібно правильно шарити та зберігати.
-
Сховище реалізоване простим читанням та додавання рядків в файл. модуль
file-storage
не ідеальний, одна з проблем: при кожному запиті файл читається двічі, краще було б тримати його відкритим а при заверщенні програми зберігати та закривати. Також це дуже примітивне сховище яке заточене тільки під збереження данних в вигладі списку. -
Явні проблеми
-
subscription.route.go:[subscribeController]
- не явно оброблені помилки, виклик методуsubscribe
може повертати не тільки конфлікти а й інші типи виключень, наприкладpermission denied
при спробі читання файлу. Не став додавати типи дляerr
, так як не знаю як краще реалізувати це в golang, тому всі виключення з цього методу це - конфлікт. -
rate сервіс побудований на фіктивній реалізації, тому в ньому немає помилок, але якби це був реальний сервіс і у випадку коли це сервіс не повернув значення то й наш додаток не повертає релевантні значення, в цьому випадку стане в нагоді кешування попердніх результатів
-
file-storage складний в розширенні, нові вимоги приведуть до маштабого рефакторингу, потрбно доопрацювати контракти і розширити можливіть роботи з різними файлами. або як варіант знайти open-source рішення яке задовільнить поточні вимого і можливо майбутні
-
Потрібно додати pre-commit hook для перевірки повідомлень комітів, лінтер, форматування. Також це саме портібно додати до github actions
-