admin frontend elkezdése, járművek tisztázása, frontend fejleszts

This commit is contained in:
Roo
2026-06-15 18:52:38 +00:00
parent ef8df9608c
commit 213ba3b0f1
80 changed files with 11615 additions and 2304 deletions

View File

@@ -0,0 +1,110 @@
# /opt/docker/dev/service_finder/backend/app/api/v1/endpoints/admin_services.py
"""
Admin Service Catalog CRUD végpontok.
Prefix: /admin/services
Védve: Depends(get_current_admin)
"""
from fastapi import APIRouter, Depends, HTTPException, status, Query
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, func
from typing import List
from app.api import deps
from app.models.identity import User
from app.models.core_logic import ServiceCatalog
from app.schemas.service_catalog import (
ServiceCatalogCreate,
ServiceCatalogUpdate,
ServiceCatalogResponse,
)
router = APIRouter()
@router.get("", response_model=List[ServiceCatalogResponse], tags=["Admin Service Catalog"])
async def list_service_catalog(
skip: int = Query(0, ge=0, description="Hány rekordot hagyjunk ki (lapozás)"),
limit: int = Query(50, ge=1, le=200, description="Maximum visszaadott rekordok száma"),
is_active: bool | None = Query(None, description="Szűrés aktív/inaktív státuszra"),
db: AsyncSession = Depends(deps.get_db),
admin: User = Depends(deps.get_current_admin),
):
"""
Szolgáltatás katalógus bejegyzések listázása lapozással.
"""
query = select(ServiceCatalog)
if is_active is not None:
query = query.where(ServiceCatalog.is_active == is_active)
# Teljes darabszám
count_query = select(func.count()).select_from(query.subquery())
total_result = await db.execute(count_query)
total = total_result.scalar() or 0
query = query.order_by(ServiceCatalog.id.desc()).offset(skip).limit(limit)
result = await db.execute(query)
items = result.scalars().all()
return items
@router.post("", response_model=ServiceCatalogResponse, status_code=status.HTTP_201_CREATED, tags=["Admin Service Catalog"])
async def create_service_catalog(
data: ServiceCatalogCreate,
db: AsyncSession = Depends(deps.get_db),
admin: User = Depends(deps.get_current_admin),
):
"""
Új szolgáltatás katalógus bejegyzés létrehozása.
"""
# Ellenőrizzük, hogy a service_code már létezik-e
existing = await db.execute(
select(ServiceCatalog).where(ServiceCatalog.service_code == data.service_code)
)
if existing.scalar_one_or_none():
raise HTTPException(
status_code=status.HTTP_409_CONFLICT,
detail=f"Service code '{data.service_code}' already exists.",
)
entry = ServiceCatalog(
service_code=data.service_code,
name=data.name,
description=data.description,
credit_cost=data.credit_cost,
is_active=data.is_active,
)
db.add(entry)
await db.commit()
await db.refresh(entry)
return entry
@router.patch("/{service_id}", response_model=ServiceCatalogResponse, tags=["Admin Service Catalog"])
async def update_service_catalog(
service_id: int,
data: ServiceCatalogUpdate,
db: AsyncSession = Depends(deps.get_db),
admin: User = Depends(deps.get_current_admin),
):
"""
Meglévő szolgáltatás katalógus bejegyzés módosítása.
"""
result = await db.execute(select(ServiceCatalog).where(ServiceCatalog.id == service_id))
entry = result.scalar_one_or_none()
if not entry:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"Service catalog entry with ID {service_id} not found.",
)
# Csak a megadott mezőket frissítjük
update_data = data.model_dump(exclude_unset=True)
for field, value in update_data.items():
setattr(entry, field, value)
await db.commit()
await db.refresh(entry)
return entry