feat: introduce database as a persistent storage for settings and history

refactor: arrange persistence layer as a port-adapter schema
This commit is contained in:
mmacierzanka committed 2026-09-30 17:42:09 +02:00
1 parent d9565f6eae
commit 6f50fce3f9
38 files changed
+539 -269

No files matched your search

+19 -12
View File
@@ -16,17 +16,21 @@ Wymagane zmienne środowiskowe (plik `.env`):
| --------------- | ----------------------------------------------------------- |
| `DISCORD_TOKEN` | Token bota Discord. |
| `GUILD_ID` | Opcjonalnie - synchronizuje komendy tylko z jednym serwerem. |
| `POSTGRES_PASSWORD` | Hasło użytkownika bazy; domyślnie `zyrarbot`, zalecana zmiana w `.env`. |
| `POSTGRES_DB` / `POSTGRES_USER` | Opcjonalna nazwa bazy i użytkownika; domyślnie `zyrarbot`. |
Panel działa pod `http://localhost:8000` podczas uruchomienia lokalnego. W Dockerze
jest dostępny pod `http://localhost` po wykonaniu `docker compose up --build`.
Panel obsługuje wiele serwerów Discorda. Wybór serwera w nagłówku przełącza jego
osobną kolejkę, historię, bazę plików i ustawienia odtwarzania. Istniejące dane ze
starego, wspólnego formatu są przypisywane do pierwszego użytego serwera.
Historia jest zapisywana w osobnych plikach `config/history/<guild_id>.json`, a
uploady w katalogach `uploads/<guild_id>/`.
Ostatnia kolejka jest zapisywana w `config/queues/<guild_id>.json` przy zatrzymaniu
lub rozłączeniu i może zostać przywrócona z widoku kolejki.
osobną kolejkę, historię, bazę plików i ustawienia odtwarzania. Ustawienia, historia
i migawki kolejek przechodzą przez porty persystencji, a PostgreSQL jest obecnym
adapterem wybranym w korzeniu aplikacji. Baza działa jako usługa Compose, a jej dane
trwale przechowuje wolumen `postgres_data`. Przy pierwszym uruchomieniu
bot importuje istniejące pliki JSON z `config/` do bazy, a pliki źródłowe zostają
na miejscu jako kopia. Starsze wspólne dane są przypisywane do pierwszego serwera,
do którego bot należy. Uploady pozostają w
katalogach `uploads/<guild_id>/`.
## Komendy Discorda
@@ -78,12 +82,15 @@ odpowiadające warstwom aplikacji:
zyrarbot/
├── settings.py Settings - konfiguracja ze zmiennych środowiskowych
├── application.py Application - korzeń kompozycji, spina bota i API
├── storage/ Warstwa trwałości (pliki JSON, katalog uploadów)
│ ├── json_file_store.py JsonFileStore
│ ├── guild_config_repository.py GuildConfigRepository
│ ├── history_repository.py HistoryRepository
│ ├── uploads_repository.py UploadsRepository
│ └── upload_file_info.py UploadFileInfo
├── storage/
│ ├── ports/ GuildConfigRepository, HistoryRepository,
│ │ QueueRepository, UploadsRepository, Persistence
│ ├── adapters/
│ │ ├── postgres/ PostgresGuildConfig, PostgresHistory, PostgresQueue,
│ │ │ PostgresPersistence, PostgresDatabase
│ │ ├── filesystem/ Adapter plików uploadu
│ │ └── json/ Adapter plikowego magazynu JSON
│ └── upload_file_info.py UploadFileInfo
├── audio/ Pozyskiwanie dźwięku
│ ├── ytdl_options.py YtdlOptions
│ ├── ytdl_source.py YTDLSource