Это простое CRUD-приложение, в нем нет ничего сложного. Пользователь может пройти регистрацию и создавать или получать посты. Суть проекта заключалась в ознакомлении с Golang и его стандартными библиотеками.
Я использовал роутер от chi, он показался мне наиболее привлекательным, потому что хорошо совместим со стандартной библиотекой "net/http". По той же причине выбрал библиотеку sqlx, для запросов к базе данных. В качестве базы данных выбрал Postgres. Для валидации данных использовал validator
В проекте реализована авторизация с использованием access и refresh токенами. Особое внимание старался уделить принципам чистой архитектуры, надеюсь, у меня получилось. Использовал утилиту air для live-reload. Миграции проводил с помощью библиотеки goose. Приложение не покрывал никакими тестами, поскольку не хотелось долго останавливаться на таком небольшом и простом проекте, ведь его задача была совсем другой.
- cmd - файлы с точками входа в приложение
- configs - конфигурационные файлы (local.yaml)
- internal - вся внутренняя логика приложения
- app - файлы для сборки приложения
- config - обработка конфигов (пункт 2)
- di - интерфейсы сервисов и репозиториев
- domain - модели приложения, бизнес-сущности (user, post)
- repository - слой репозитория
- service - сервисный слой
- transport - обработка внешний запросов (http)
- migrations - файл миграции базы данных
- pkg - вся экспортируемая/переиспользуемая логика
- db - логика подключения к базе данных
- jwt - парсинг и создание jwt
- logger - настройка логгера
- req - обработка тела запроса
- res - создание ответа