49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
from dataclasses import dataclass
|
|
from db import RepoTemplate
|
|
from .auth import AuthRepo
|
|
from fastapi import APIRouter, Header
|
|
|
|
@dataclass
|
|
class Prefix:
|
|
prefix: str
|
|
color: str = ""
|
|
weight: int = 0
|
|
|
|
class PrefixRepo(RepoTemplate):
|
|
def get_all_prefixes(self):
|
|
self.cur.execute("SELECT * FROM prefixes ORDER BY weight, prefix")
|
|
results = self.cur.fetchall()
|
|
return [Prefix(*r) for r in results]
|
|
def post_prefixes(self, ps: list[Prefix]):
|
|
for p in ps:
|
|
self.cur.execute("""INSERT INTO prefixes VALUES (?, ?, ?)
|
|
ON CONFLICT (prefix) DO UPDATE SET
|
|
color = EXCLUDED.color, weight = EXCLUDED.weight""", (p.prefix, p.color, p.weight))
|
|
self.conn.commit()
|
|
return ps
|
|
def del_prefix(self, p: str):
|
|
self.cur.execute("DELETE FROM prefixes WHERE prefix = ? RETURNING *", (p,))
|
|
result = self.cur.fetchone()
|
|
self.conn.commit()
|
|
if result:
|
|
return Prefix(*result)
|
|
else:
|
|
return Prefix(p, "gray", 1)
|
|
|
|
prefix_router = APIRouter(prefix="/api/prefixes")
|
|
|
|
@prefix_router.get("")
|
|
def get_all_prefixes(tam_key: str = Header("")):
|
|
AuthRepo().verify_key(tam_key)
|
|
return PrefixRepo().get_all_prefixes()
|
|
|
|
@prefix_router.post("")
|
|
def post_prefixes(ps: list[Prefix], tam_key: str = Header("")):
|
|
AuthRepo().verify_key(tam_key)
|
|
return PrefixRepo().post_prefixes(ps)
|
|
|
|
@prefix_router.delete("")
|
|
def delete_prefixes(p: str, tam_key: str = Header("")):
|
|
AuthRepo().verify_key(tam_key)
|
|
return PrefixRepo().del_prefix(p)
|