Merge branch 'refs/heads/feature/database' into feature/auth

This commit is contained in:
mmacierzanka committed 2026-09-30 19:38:31 +02:00
commit e9bd13e48b
3 files changed
+27 -6

No files matched your search

+15
View File
@@ -0,0 +1,15 @@
.PHONY: check-docker migrate migration-rollback
check-docker:
@command -v docker >/dev/null 2>&1 || { echo "Docker nie jest zainstalowany lub nie ma go w PATH." >&2; exit 1; }
@docker compose version >/dev/null 2>&1 || { echo "Docker Compose nie jest dostępny przez polecenie 'docker compose'." >&2; exit 1; }
MIGRATION_RUNNER = zyrarbot.storage.adapters.postgres.migration_runner
migrate: check-docker
docker compose run --build --rm discord-bot python -m $(MIGRATION_RUNNER) migrate
# Użyj np. `make migration-rollback TO=1`; domyślnie cofa wszystkie migracje.
TO ?= 0
migration-rollback: check-docker
docker compose run --build --rm discord-bot python -m $(MIGRATION_RUNNER) rollback --to $(TO)
+6 -4
View File
@@ -49,6 +49,8 @@ katalogach `uploads/<guild_id>/`.
### Migracje bazy
Przy uruchomieniu bot automatycznie stosuje oczekujące migracje PostgreSQL.
Można je też uruchomić jawnie przez `make migrate`. Makefile korzysta wyłącznie
z Dockera i sprawdza, czy dostępne są Docker oraz `docker compose`.
Zastosowane wersje i ich nazwy są zapisywane w tabeli `schema_migrations`.
Każda migracja jest osobną klasą z metodami `apply` i `rollback`, w osobnym
pliku w `zyrarbot/storage/adapters/postgres/migrations/`. Pliki należy nazywać
@@ -60,12 +62,12 @@ dodać także do krotki `MIGRATIONS` w `migrations/__init__.py`. Obecna migracja
Rollback wszystkich wersji wykonaj poleceniem:
```bash
docker compose exec discord-bot python -m zyrarbot.storage.adapters.postgres.migration_runner rollback
make migration-rollback
```
Aby cofnąć wersje nowsze niż wskazana, dodaj `--to N`, na przykład `--to 1`
pozostawi migrację w wersji 1. Przed rollbackiem zatrzymaj bota poleceniem
`docker compose stop discord-bot`. Rollback wykonuje migracje w odwrotnej kolejności,
Aby cofnąć wersje nowsze niż wskazana, ustaw `TO`, na przykład
`make migration-rollback TO=1` pozostawi migrację w wersji 1. Przed rollbackiem
zatrzymaj bota poleceniem `docker compose stop discord-bot`. Rollback wykonuje migracje w odwrotnej kolejności,
usuwa ich wpisy z `schema_migrations` i może trwale skasować dane z cofanych tabel.
Po rollbacku uruchomienie bota ponownie zastosuje brakujące migracje.
@@ -60,7 +60,7 @@ class MigrationRunner:
def main() -> None:
parser = argparse.ArgumentParser(description="Manage PostgreSQL schema migrations")
parser.add_argument("action", choices=("rollback",))
parser.add_argument("action", choices=("migrate", "rollback"))
parser.add_argument("--to", type=int, default=0, dest="target_version")
args = parser.parse_args()
@@ -71,7 +71,11 @@ def main() -> None:
user=os.environ.get("POSTGRES_USER", "zyrarbot"),
password=os.environ.get("POSTGRES_PASSWORD", "zyrarbot"),
) as connection:
MigrationRunner(MIGRATIONS).rollback_to(connection, args.target_version)
runner = MigrationRunner(MIGRATIONS)
if args.action == "migrate":
runner.apply_pending(connection)
else:
runner.rollback_to(connection, args.target_version)
if __name__ == "__main__":