Этот проект состоит из нескольких сервисов, работающих в Docker:
- db (PostgreSQL) — база данных
- redis — кэш
- server (Go-приложение) — серверная часть
- client (Vue-приложение с Nginx) — клиентская часть
- Запуск и перезапуска происходит через файл:
./start_docker.sh
- PostgreSQL (db) — запускается первым, загружает дамп базы из
dump.sql. - Redis (redis) — запускается следом.
- Go-сервер (server) — поднимается после успешного старта PostgreSQL и Redis (занимает некоторое время пока redis и pg пройдут стадию healthcheck, в терминале появятся логи с путями api контроллера после запуска).
- Vue-клиент (client) — собирает vite проект и запускается после сервера, проксируется через Nginx.
- Сервер (API):
http://localhost:$API_PORT - Клиент (Nginx):
http://localhost:$NGINX_PORT
Файл .env не добавлен в .gitignore для того что бы проверка работоспособности была удобнее
Серверное приложение написано на Go и организовано по чистой (луковой) архитектуре:
- config/ — конфигурация приложения связан с envoirment docker контейнера.
- external/ — контроллер api запросов (внешний слой).
- internal/ — внутренний слой.
- internal/repositroy — слой работы с базами данных.
- internal/usecase — слой бизнес логики.
- internal/entity — сущностни приложения (структуры данных, константы и т.д).
- redisclient/ — клиент для работы с Redis.
- tools/ — вспомогательные утилиты.
Такая реализация дает возможность масштабирования и изолированного тестирования бизнес логики
Клиентское приложения реализовано с помошью Vue.js 3 со сборщиком Vite
- components/ — переиспользуемые Vue-компоненты.
- composables/ — логика, используемая в нескольких компонентах.
- router/ — маршрутизация Vue.
- tools/ — вспомогательные утилиты.
- views/ — страницы приложения.
Содержит логику работы с API сервера, не зависит от реализации клиента и может быть вынесен в отдельный пакет.
- constants/ — константы, связанные с API (например, URL-эндпоинты, заголовки).
- methods/ — методы для выполнения запросов к API.
- types/ — описания типов данных, используемых в API.
- client/ — абстракция API-клиента.