An open API service indexing awesome lists of open source software.

https://github.com/eclipsemode/song-library

Go song library project
https://github.com/eclipsemode/song-library

go go-chi sqlite3

Last synced: 8 months ago
JSON representation

Go song library project

Awesome Lists containing this project

README

          

# Реализация онлайн библиотеки песен 🎶

## Данные

### 1. Переменные env
Приложение имеет следующие env переменные:

- PORT = порт API
- HOST = адрес API
- TIMEOUT = Максимальное время ожидания в ms, после которого сервер закроет соединение
- IDLE_TIMEOUT = Время ожидания клиента в ждущем состоянии до его закрытия
- EXTERNAL_API = адрес внешнего API для запроса SongDetail

### 2. Зависимости
Проект использует версию Golang 1.23.4, и следующие важные библиотеки:

- **Go chi**: Роутер для создания REST API.
- **Swagger**: Для документирования API (Документация доступна по адресу http://localhost:8000/swagger/index.html при запущенном сервере).
- **godotenv**: Для подключенимя .env.

*Весь список зависимостей в файле go.mod

### 3. Маршруты API

- **DELETE /songs/{songId}** - Удаление песни по ID.
- **POST /songs** - Добавление новой песни в библиотеку (Данные песни получаеются по внешнему API, используются query параметры).
- **PUT /songs** - Обновление информации о песне.
- **GET /songs** - Получение списка песен с фильтрацией и пагинацией (используются query параметры).
- **GET /songs/{songId}** - Получение текста песни с пагинацией по куплетам (используются query параметры).

### 4. База данных
В проекте используется простая и легковесная база данных sqlite. Данная база была выбрана из-за простоты проекта.

## Запуск проекта

Приложение требует предварительно изменить EXTERNAL_API в env переменной на внешний сервис.

Запуск приложения происходит командой:
```sh
make run
```
Данная команда автоматически создаст Swagger документацию, бинарный файл, и запустит приложение.

Миграции со структурой базы данных и моковыми данными осуществляется при запуске приложения.

## Makefile Команды

Запуск приложения - предварительно запускает генерацию Swagger и создание бинарного файла
```sh
make run
```

---

Запуск приложения в DEBUG режиме (отображаются логи уровня DEBUG) - предварительно запускает генерацию Swagger и создание бинарного файла
```sh
make run-debug
```

---

Создание бинарного файла приложения
```sh
make build
```

---

Генерация Swagger документа:
```sh
make swag
```