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 ### Migracje bazy
Przy uruchomieniu bot automatycznie stosuje oczekujące migracje PostgreSQL. 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`. Zastosowane wersje i ich nazwy są zapisywane w tabeli `schema_migrations`.
Każda migracja jest osobną klasą z metodami `apply` i `rollback`, w osobnym Każda migracja jest osobną klasą z metodami `apply` i `rollback`, w osobnym
pliku w `zyrarbot/storage/adapters/postgres/migrations/`. Pliki należy nazywać 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: Rollback wszystkich wersji wykonaj poleceniem:
```bash ```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` Aby cofnąć wersje nowsze niż wskazana, ustaw `TO`, na przykład
pozostawi migrację w wersji 1. Przed rollbackiem zatrzymaj bota poleceniem `make migration-rollback TO=1` pozostawi migrację w wersji 1. Przed rollbackiem
`docker compose stop discord-bot`. Rollback wykonuje migracje w odwrotnej kolejności, 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. usuwa ich wpisy z `schema_migrations` i może trwale skasować dane z cofanych tabel.
Po rollbacku uruchomienie bota ponownie zastosuje brakujące migracje. Po rollbacku uruchomienie bota ponownie zastosuje brakujące migracje.
@@ -60,7 +60,7 @@ class MigrationRunner:
def main() -> None: def main() -> None:
parser = argparse.ArgumentParser(description="Manage PostgreSQL schema migrations") 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") parser.add_argument("--to", type=int, default=0, dest="target_version")
args = parser.parse_args() args = parser.parse_args()
@@ -71,7 +71,11 @@ def main() -> None:
user=os.environ.get("POSTGRES_USER", "zyrarbot"), user=os.environ.get("POSTGRES_USER", "zyrarbot"),
password=os.environ.get("POSTGRES_PASSWORD", "zyrarbot"), password=os.environ.get("POSTGRES_PASSWORD", "zyrarbot"),
) as connection: ) 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__": if __name__ == "__main__":