Song Service
Song Service — это веб-приложение на Golang, реализующее REST API для управления песнями с поддержкой транзакций, пагинации и внешних API для обогащения данных. Приложение предоставляет документацию с использованием Swagger и поддерживает гибкую конфигурацию через файл .env.
Возможности
- CRUD-операции: добавление, получение, обновление и удаление песен.
- Пагинация и фильтрация: эффективная работа со списками песен.
- Обогащение данных: автоматическое дополнение информации о песнях через внешний API.
- Транзакции: обеспечение целостности и надёжности данных.
- Документация API: доступна через Swagger UI.
Структура проекта
.
├── cmd
│ └── main.go # Точка входа приложения
├── config
│ └── config.go # Конфигурация из .env
├── database
│ ├── migration.go # Миграции базы данных
│ └── transaction.go # Управление транзакциями
├── controllers
│ └── song_controller.go # Логика обработки запросов
├── models
│ └── song.go # Модель данных песни
├── routes
│ └── routes.go # Маршрутизация API
├── docs # Swagger-документация
└── .env # Файл конфигурации
Установка и запуск
1. Клонирование репозитория
git clone https://github.com/BaikalMine/SongService.git
cd SongService
2. Настройка окружения
Создайте файл .env в корне проекта с содержимым:
DB_USER=postgres
DB_PASSWORD=yourpassword
DB_NAME=songdb
DB_HOST=localhost
DB_PORT=5432
EXTERNAL_API_URL=http://localhost:8081
PORT=8080
2. Запуск приложения
go mod tidy
go build -o songservice ./cmd/main.go
./songservice
Сервис доступен на порту, указанном в файле конфигурации (PORT).
Документация API
Документация Swagger доступна по адресу:
http://localhost:8080/swagger/index.html
Основные эндпоинты
| Метод |
URL |
Описание |
| GET |
/songs |
Получить список песен (с пагинацией) |
| GET |
/songs/{id} |
Получить информацию о песне по ID |
| POST |
/songs |
Добавить новую песню |
| PUT |
/songs/{id} |
Обновить данные песни по ID |
| DELETE |
/songs/{id} |
Удалить песню |
Swagger UI
Swagger UI доступен по адресу:
http://localhost:8080/swagger/index.html
Лицензия
Проект распространяется под лицензией GNU GPLv3.