Структура директорий
Relevant source files
The following files were used as context for generating this wiki page:
Проект Music Subscription Service организован с использованием модульной архитектуры на языке Go, разделяя инфраструктурный код, бизнес-логику и механизмы транспортировки данных. Основная цель структуры — обеспечить масштабируемость и четкое разделение ответственности между компонентами системы, такими как работа с базой данных, обработка HTTP-запросов и конфигурация.
Архитектура следует принципам Clean Architecture с выделением уровня core для общих компонентов и уровня features для изоляции функциональных модулей (например, авторизация, треки, плейлисты). Это позволяет легко добавлять новые функции, не затрагивая существующие части системы.
Sources: README.md:213-228, cmd/app/main.go:55-154
Верхнеуровневая структура
Проект разделен на несколько ключевых директорий, каждая из которых отвечает за определенный аспект жизненного цикла приложения: от развертывания до выполнения бизнес-логики.
| Директория | Описание |
|---|---|
cmd/ | Точки входа в приложение. Содержит main.go для запуска сервера. |
internal/ | Основной код приложения, закрытый для импорта внешними пакетами. Разделен на core и features. |
migrations/ | SQL-файлы для управления схемой базы данных PostgreSQL. |
docs/ | Сгенерированная документация API (Swagger). |
out/ | Директория для временных файлов, логов и данных контейнеров (Postgres, Redis). |
Sources: README.md:213-228, docker-compose.yml:18-45
Внутренняя архитектура (Internal)
Директория internal/ является ядром системы и разделена на два основных сегмента: core и features.
Core
Содержит переиспользуемые компоненты и инфраструктурный слой, не привязанный к конкретным бизнес-задачам.
- config: Загрузка и валидация конфигурации из переменных окружения.
- logger: Инициализация структурированного логирования (на базе
zap). - middleware: HTTP-посредники для аутентификации, логирования и обработки паник.
- postgres/redis: Клиенты для работы с хранилищами данных.
- transport: Общие интерфейсы и вспомогательные функции для сетевого взаимодействия.
Sources: internal/core/config/config.go:1-35, internal/core/middleware/middleware.go:1-155, cmd/app/main.go:21-44
Features
Каждая поддиректория в features представляет собой законченную функциональную единицу (фичу), организованную по слоям:
- model: Определение структур данных и сущностей.
- repository: Слой доступа к данным (PostgreSQL/Redis).
- service: Слой бизнес-логики.
- transport: Слой доставки (обычно
http), реализующий обработчики запросов.
Данная диаграмма иллюстрирует изоляцию функциональных модулей и типичную внутреннюю структуру слоев внутри каждой фичи.
Sources: cmd/app/main.go:46-53, internal/features/tracks/repository/postgres/track_repository.go:1-15, README.md:218-225
Инфраструктурные файлы
Помимо исходного кода, корень проекта содержит файлы для конфигурации среды разработки и деплоя.
docker-compose.yml: Описывает сервисы приложения, базы данных PostgreSQL и кэша Redis, а также вспомогательные контейнеры для миграций и проброса портов.fly.toml: Конфигурация для деплоя на платформу Fly.io.Makefile: Набор команд для автоматизации сборки, запуска тестов и генерации документации.migrations/: Содержит файлы.up.sqlдля последовательного изменения схемы БД.
Схема взаимодействия компонентов при запуске
Визуализация процесса инициализации приложения: от загрузки конфигурации до запуска HTTP-сервера.
Sources: cmd/app/main.go:55-154, docker-compose.yml:5-50, README.md:144-156
Заключение
Структура директорий проекта music-service строго следует принципам модульности. Разделение на core (инфраструктура) и features (бизнес-логика) позволяет минимизировать связность кода и упрощает тестирование компонентов. Использование стандартных для Go-сообщества подходов (директория internal, миграции в migrations) делает проект понятным для новых разработчиков.
Sources: README.md:213-228, cmd/app/main.go:55-154