(add): Backup/Restore

This commit is contained in:
2026-07-16 22:38:01 -04:00
parent 76040c1f91
commit 1e6b7787b3
14 changed files with 343 additions and 12 deletions
+2 -2
View File
@@ -7,8 +7,8 @@ from fastapi import APIRouter, Header
class Basket:
prefix: str
b_id: int
description: str = ""
donors: str = ""
description: str | None = ""
donors: str | None = ""
winning_ticket: int = 0
class BasketRepo(RepoTemplate):
+9 -7
View File
@@ -1,5 +1,6 @@
from fastapi import FastAPI
from system.auth import auth_router
from system.backuprestore import backuprestore_router
from system.prefixes import prefix_router
from data.tickets import tickets_router
from data.baskets import basket_router
@@ -8,10 +9,11 @@ from data.reports import reports_router
from data.search import search_router
def imp_routers(app: FastAPI):
app.include_router(auth_router)
app.include_router(prefix_router)
app.include_router(tickets_router)
app.include_router(basket_router)
app.include_router(drawing_router)
app.include_router(reports_router)
app.include_router(search_router)
app.include_router(auth_router)
app.include_router(prefix_router)
app.include_router(tickets_router)
app.include_router(basket_router)
app.include_router(drawing_router)
app.include_router(reports_router)
app.include_router(search_router)
app.include_router(backuprestore_router)
+37
View File
@@ -0,0 +1,37 @@
from data.baskets import Basket, BasketRepo
from data.tickets import Ticket, TicketRepo
from .prefixes import Prefix, PrefixRepo
from dataclasses import dataclass, field
from typing import List
from fastapi import APIRouter, Header
from .auth import AuthRepo
chunk_size = 300
@dataclass
class BackupFile:
prefixes: List[Prefix] = field(default_factory=list)
baskets: List[Basket] = field(default_factory=list)
tickets: List[Ticket] = field(default_factory=list)
@dataclass
class ReturnMessage:
message: str
backuprestore_router = APIRouter(prefix="/api/backuprestore")
@backuprestore_router.get("")
def get_backup_file(tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
return BackupFile(prefixes=PrefixRepo().get_all_prefixes(), baskets=BasketRepo().get_all_baskets(), tickets=TicketRepo().get_all_tickets())
@backuprestore_router.post("")
def post_backup_file(bf: BackupFile, tam_key: str = Header("")):
AuthRepo().verify_key(tam_key)
for i in range(0, len(bf.prefixes), chunk_size):
PrefixRepo().post_prefixes(bf.prefixes[i:i+chunk_size])
for i in range(0, len(bf.baskets), chunk_size):
BasketRepo().post_baskets(bf.baskets[i:i+chunk_size])
for i in range(0, len(bf.tickets), chunk_size):
TicketRepo().post_tickets(bf.tickets[i:i+chunk_size])
return ReturnMessage(message="Backup file imported successfully.")