This repository has been archived on 2026-08-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Proxmox-VPS-Panel-secure/backend/app/routers/templates.py
T

59 lines
1.9 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy import select
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import Session
from .. import models, schemas
from ..database import get_db
from ..deps import get_current_user, require_admin
router = APIRouter(prefix="/templates", tags=["templates"])
@router.get("", response_model=list[schemas.TemplateOut])
def list_templates(
db: Session = Depends(get_db),
_: models.User = Depends(get_current_user),
):
"""Возвращает только активные шаблоны."""
return list(
db.scalars(
select(models.Template)
.where(models.Template.is_active.is_(True))
.order_by(models.Template.created_at.desc())
)
)
@router.post("", response_model=schemas.TemplateOut, status_code=status.HTTP_201_CREATED)
def create_template(
payload: schemas.TemplateCreate,
db: Session = Depends(get_db),
_: models.User = Depends(require_admin),
):
"""Создаёт шаблон только от имени администратора."""
template = models.Template(**payload.model_dump())
db.add(template)
try:
db.commit()
except IntegrityError:
db.rollback()
raise HTTPException(status_code=409, detail="Шаблон с таким именем уже существует")
db.refresh(template)
return template
@router.delete("/{template_id}")
def deactivate_template(
template_id: int,
db: Session = Depends(get_db),
_: models.User = Depends(require_admin),
):
"""Деактивирует шаблон без удаления связанных инстансов."""
template = db.get(models.Template, template_id)
if template is None:
raise HTTPException(status_code=404, detail="Шаблон не найден")
template.is_active = False
db.commit()
return {"ok": True}