{"id":28287319,"url":"https://github.com/eclipsemode/song-library","last_synced_at":"2025-07-26T02:05:34.212Z","repository":{"id":289869194,"uuid":"921326970","full_name":"eclipsemode/song-library","owner":"eclipsemode","description":"Go song library project","archived":false,"fork":false,"pushed_at":"2025-01-23T18:47:51.000Z","size":44073,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-21T22:11:42.225Z","etag":null,"topics":["go","go-chi","sqlite3"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eclipsemode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-01-23T18:46:27.000Z","updated_at":"2025-01-23T18:48:35.000Z","dependencies_parsed_at":"2025-04-25T14:10:13.317Z","dependency_job_id":null,"html_url":"https://github.com/eclipsemode/song-library","commit_stats":null,"previous_names":["eclipsemode/song-library"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eclipsemode/song-library","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipsemode%2Fsong-library","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipsemode%2Fsong-library/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipsemode%2Fsong-library/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipsemode%2Fsong-library/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eclipsemode","download_url":"https://codeload.github.com/eclipsemode/song-library/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipsemode%2Fsong-library/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260488216,"owners_count":23016864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","go-chi","sqlite3"],"created_at":"2025-05-21T22:11:22.838Z","updated_at":"2025-07-26T02:05:34.188Z","avatar_url":"https://github.com/eclipsemode.png","language":"Go","readme":"# Реализация онлайн библиотеки песен 🎶\n\n## Данные\n\n### 1. Переменные env\nПриложение имеет следующие env переменные:\n\n- PORT = порт API\n- HOST = адрес API \n- TIMEOUT = Максимальное время ожидания в ms, после которого сервер закроет соединение\n- IDLE_TIMEOUT = Время ожидания клиента в ждущем состоянии до его закрытия\n- EXTERNAL_API = адрес внешнего API для запроса SongDetail\n\n### 2. Зависимости\nПроект использует версию Golang 1.23.4, и следующие важные библиотеки:\n\n- **Go chi**: Роутер для создания REST API.\n- **Swagger**: Для документирования API (Документация доступна по адресу http://localhost:8000/swagger/index.html при запущенном сервере).\n- **godotenv**: Для подключенимя .env.\n\n*Весь список зависимостей в файле go.mod\n\n### 3. Маршруты API\n\n- **DELETE /songs/{songId}** - Удаление песни по ID.\n- **POST /songs** - Добавление новой песни в библиотеку (Данные песни получаеются по внешнему API, используются query параметры).\n- **PUT /songs** - Обновление информации о песне.\n- **GET /songs** - Получение списка песен с фильтрацией и пагинацией (используются query параметры).\n- **GET /songs/{songId}** - Получение текста песни с пагинацией по куплетам (используются query параметры).\n\n### 4. База данных\nВ проекте используется простая и легковесная база данных sqlite. Данная база была выбрана из-за простоты проекта.\n\n\n## Запуск проекта\n\nПриложение требует предварительно изменить EXTERNAL_API в env переменной на внешний сервис.\n\nЗапуск приложения происходит командой:\n```sh\nmake run\n```\nДанная команда автоматически создаст Swagger документацию, бинарный файл, и запустит приложение.\n\nМиграции со структурой базы данных и моковыми данными осуществляется при запуске приложения.\n\n\n## Makefile Команды\n\nЗапуск приложения - предварительно запускает генерацию Swagger и создание бинарного файла\n```sh\nmake run\n```\n\n---\n\nЗапуск приложения в DEBUG режиме (отображаются логи уровня DEBUG) - предварительно запускает генерацию Swagger и создание бинарного файла\n```sh\nmake run-debug\n```\n\n---\n\nСоздание бинарного файла приложения\n```sh\nmake build\n```\n\n---\n\nГенерация Swagger документа:\n```sh\nmake swag\n```","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipsemode%2Fsong-library","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feclipsemode%2Fsong-library","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipsemode%2Fsong-library/lists"}