Refactor API

This commit is contained in:
Lev 2026-04-16 00:07:48 +03:00
parent 9c813cdfbe
commit 8aa4828239
21 changed files with 731 additions and 363 deletions

58
API/routers/server.py Normal file
View file

@ -0,0 +1,58 @@
from datetime import datetime
from fastapi import APIRouter, Request, Depends, HTTPException
from sqlalchemy import select, update
from sqlalchemy.ext.asyncio import AsyncSession
from models.server import Server
from schemas.server import ServerAdd, ServerDel, ServerInfo
from utils.database import get_db
router = APIRouter(prefix="/server")
@router.post("/add", status_code=201)
async def add_server(body: ServerAdd, request: Request, db: AsyncSession = Depends(get_db)):
ip = request.client.host
existing = await db.execute(
select(Server).where(
(Server.name == body.name) |
(Server.code == body.code) |
(Server.host == ip)
)
)
if existing.scalar_one_or_none():
raise HTTPException(
status_code=409,
detail="Name, ip or code is already exists"
)
new_server = Server(
name=body.name,
code=body.code,
host=ip,
port=body.port,
user=body.user,
password=body.password,
inbound_id=body.inbound_id
)
db.add(new_server)
await db.commit()
await db.refresh(new_server)
return ServerInfo.model_validate(new_server, from_attributes=True)
@router.delete("/delete", status_code=204)
async def del_server(body: ServerDel, db: AsyncSession = Depends(get_db)):
result = await db.execute(
select(Server).where(
(Server.name == body.name) &
(Server.user == body.user) &
(Server.password == body.password) &
(Server.deleted_at.is_(None))
)
)
server = result.scalar_one_or_none()
if not server:
raise HTTPException(
status_code=404,
detail="Server not found, or invalid secure_key"
)
server.deleted_at = datetime.utcnow()
await db.commit()
return None