No description
- Go 93.8%
- PLpgSQL 4.6%
- Dockerfile 1.6%
|
Some checks failed
Build and Test / build-and-push-image (push) Has been cancelled
|
||
|---|---|---|
| .github | ||
| cmd | ||
| internal | ||
| pkg | ||
| sql | ||
| tests | ||
| tools | ||
| .gitignore | ||
| compose.yml | ||
| dev-compose.yml | ||
| Dockerfile | ||
| embed.go | ||
| go.mod | ||
| go.sum | ||
| README.md | ||
| sqlc.yml | ||
| Taskfile.yml | ||
Muse Backend
PROD TODO:
- добавить лимит на количество треков
- добавить пагинацию на получение треков в плейлисте
- изменить логику получения роли (теперь роль кэшируется при действии с ней, см. handlers/group.go и handlers/chataction.go)
- добавить для YoutubeAPI прокси
API TODO:
- дока
- тесты
- отель
- ютуб
- спотик
- иноагенты
Запуск
# 1. докер прям надо
docker compose -f dev-compose.yml up -d
# 2. Запуск
go run cmd/main.go
Структура проекта
├── .gitignore
├── Dockerfile # Docker образ
├── .dockerignore # файлы, которые надо игнорировать при сборке
├── README.md
├── Taskfile.yml # аналог makefile, хранилище для скриптов
├── cmd
│ └── main.go # входная точка
├── compose.yml # PROD compose
├── dev-compose.yml # зависимости для dev режима
├── dev.env
├── embed.go # доступ до файлов, которые нужно хранить в бинарнике (миграции)
├── go.mod
├── go.sum
├── initdata.py # скрипт для генерации Telegram Init Data Raw
├── internal
│ ├── infra # базовые части приложения
│ │ ├── config.go
│ │ ├── db.go
│ │ ├── echo.go
│ │ ├── huma.go
│ │ ├── logger.go
│ │ └── queries # сгенерированный код для взаимодействия с PostgreSQL
│ │ ├── db.go
│ │ ├── models.go
│ │ └── queries.sql.go
│ ├── interfaces # интерфейсы для тестов, сервисов и хэндлеров
│ │ ├── api.go
│ │ └── service.go
│ ├── service # сервисы с логикой
│ │ ├── auth.go
│ │ ├── permission.go
│ │ ├── playlist.go
│ │ ├── track.go
│ │ └── user.go
│ └── transport
│ ├── api # REST API
│ │ ├── dto
│ │ │ ├── auth.go
│ │ │ ├── playlist.go
│ │ │ └── track.go
│ │ ├── handlers
│ │ │ ├── auth.go
│ │ │ ├── playlist.go
│ │ │ ├── setup.go
│ │ │ └── track.go
│ │ └── middlewares
│ │ ├── auth.go
│ │ └── logger.go
│ └── bot # Telegram Bot
│ ├── handlers
│ │ ├── chataction.go
│ │ ├── group.go
│ │ ├── setup.go
│ │ └── start.go
│ ├── models
│ │ └── permission.go
│ └── utils
│ ├── chat.go
│ ├── extract.go
│ ├── iterate.go
│ └── participant.go
├── pkg
│ ├── utils # функции хелперы
│ │ ├── db.go
│ │ └── errorz.go
│ └── youtube # Innertube API
│ ├── api.go
│ ├── models.go
│ └── parser.go
├── sql # сырые SQL запросы (миграции, код для SQLC)
│ ├── migrations
│ │ └── 20250926213346_init.sql
│ ├── queries.sql
│ └── schema.sql
└── sqlc.yml # конфиг SQLC
Roles
- owner (создатель плейлиста, может аппрувить треки и удалить плейлист ЕСТЬ НЮАНС СМ Types)
- moderator (модератор, может аппрувить треки)
- viewer (юзер, может просто кидать треки на аппрув)
Как получить
- owner выдаётся, если юзер - владелец канала или чата.
- moderator выдаётся, если юзер - администратор чата или канала (есть хотя бы подпись админа)
- viewer выдаётся, если юзер - член чата или канала
- роль убирается, если юзера забанят или он ливнет с чата
Types
- custom (создан через миниапп, добавлять людей нельзя, но можно удалить вручную)
- tg (создаётся, если добавить бота в группу, удалить можно только удалив бота из группы, автоматически подгружает роли для юзеров из группы в тг)
user story без нашего решения (сбор через гугл формы):
- нужно собирать треки вручную
- нет возможности пользователю сразу указать какой трек нужен (если нет возможности приложить ссылку)
- модерация треков слишком сложная (нужно найти трек, если не указана ссылка)
- скачивание сложное (нужно писать скрипты для загрузки аудио, нет единой площадки)
user story с нашим решением
- автоматическая система ролей (легко сделать модерацию от кучи людей)
- одна площадка
- лёгкая загрузка треков
- сразу можно увидеть информацию про трек
- пользователь может быть уверен, что скинет точно тот трек, который хотел
плюсы
процесс поиска трека по названию автоматизирован и сразу видно информацию о треке, то модераторы могут не тратить на это время, а значит основная задача - упрощение, выполнена
можно не тратить время на поиск треков на сторонних площадках и на поиск ссылки на их скачивание