73 lines
2.8 KiB
Python
73 lines
2.8 KiB
Python
from typing import List, Any, Dict
|
|
from fastapi import APIRouter, Depends, Query, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
from core.database import get_core_db
|
|
from core.security import get_current_user, validate_access_to_resource
|
|
from . import services, dto
|
|
|
|
router = APIRouter()
|
|
|
|
@router.get("/", response_model=List[dto.ItemPresetResponse])
|
|
def list_item_presets(
|
|
company_id: int = Query(...),
|
|
db: Session = Depends(get_core_db),
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
):
|
|
"""List all item presets for a company"""
|
|
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
|
return services.get_presets(db, tenant_id, company_id)
|
|
|
|
@router.post("/", response_model=dto.ItemPresetResponse)
|
|
def create_item_preset(
|
|
data: dto.ItemPresetCreate,
|
|
company_id: int = Query(...),
|
|
db: Session = Depends(get_core_db),
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
):
|
|
"""Create a new item preset"""
|
|
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
|
return services.create_preset(db, tenant_id, company_id, data)
|
|
|
|
@router.get("/{preset_id}", response_model=dto.ItemPresetResponse)
|
|
def get_item_preset(
|
|
preset_id: int,
|
|
company_id: int = Query(...),
|
|
db: Session = Depends(get_core_db),
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
):
|
|
"""Get a specific item preset"""
|
|
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
|
preset = services.get_preset_by_id(db, preset_id, tenant_id, company_id)
|
|
if not preset:
|
|
raise HTTPException(status_code=404, detail="Item preset not found")
|
|
return preset
|
|
|
|
@router.put("/{preset_id}", response_model=dto.ItemPresetResponse)
|
|
def update_item_preset(
|
|
preset_id: int,
|
|
data: dto.ItemPresetUpdate,
|
|
company_id: int = Query(...),
|
|
db: Session = Depends(get_core_db),
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
):
|
|
"""Update an item preset"""
|
|
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
|
preset = services.update_preset(db, preset_id, tenant_id, company_id, data)
|
|
if not preset:
|
|
raise HTTPException(status_code=404, detail="Item preset not found")
|
|
return preset
|
|
|
|
@router.delete("/{preset_id}")
|
|
def delete_item_preset(
|
|
preset_id: int,
|
|
company_id: int = Query(...),
|
|
db: Session = Depends(get_core_db),
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
):
|
|
"""Delete an item preset"""
|
|
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
|
success = services.delete_preset(db, preset_id, tenant_id, company_id)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Item preset not found")
|
|
return {"status": "success", "message": "Preset deleted"}
|