38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
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.")
|