File size: 2,855 Bytes
3e5c7dd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from fastapi import APIRouter, HTTPException, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from typing import List
from ..core.dependencies import get_current_superuser
from ..db.database import get_db
from ..db.models import Branch
from ..db.schemas import BranchCreate, BranchInDB

router = APIRouter()

@router.post("/", response_model=BranchInDB)
async def create_branch(

    branch: BranchCreate,

    current_user = Depends(get_current_superuser),

    db: AsyncSession = Depends(get_db)

) -> BranchInDB:
    """Create a new branch (superuser only)"""
    db_branch = Branch(**branch.dict())
    db.add(db_branch)
    await db.commit()
    await db.refresh(db_branch)
    return db_branch

@router.get("/", response_model=List[BranchInDB])
async def list_branches(

    skip: int = 0,

    limit: int = 100,

    db: AsyncSession = Depends(get_db)

) -> List[BranchInDB]:
    """List all branches"""
    query = select(Branch).offset(skip).limit(limit)
    result = await db.execute(query)
    return result.scalars().all()

@router.get("/{branch_id}", response_model=BranchInDB)
async def get_branch(

    branch_id: int,

    db: AsyncSession = Depends(get_db)

) -> BranchInDB:
    """Get a specific branch"""
    stmt = select(Branch).where(Branch.id == branch_id)
    result = await db.execute(stmt)
    branch = result.scalar_one_or_none()
    
    if not branch:
        raise HTTPException(status_code=404, detail="Branch not found")
    return branch

@router.put("/{branch_id}", response_model=BranchInDB)
async def update_branch(

    branch_id: int,

    branch_update: BranchCreate,

    current_user = Depends(get_current_superuser),

    db: AsyncSession = Depends(get_db)

) -> BranchInDB:
    """Update a branch (superuser only)"""
    stmt = select(Branch).where(Branch.id == branch_id)
    result = await db.execute(stmt)
    branch = result.scalar_one_or_none()
    
    if not branch:
        raise HTTPException(status_code=404, detail="Branch not found")
    
    # Update branch fields
    for field, value in branch_update.dict().items():
        setattr(branch, field, value)
    
    await db.commit()
    await db.refresh(branch)
    return branch

@router.delete("/{branch_id}")
async def delete_branch(

    branch_id: int,

    current_user = Depends(get_current_superuser),

    db: AsyncSession = Depends(get_db)

):
    """Delete a branch (superuser only)"""
    stmt = select(Branch).where(Branch.id == branch_id)
    result = await db.execute(stmt)
    branch = result.scalar_one_or_none()
    
    if not branch:
        raise HTTPException(status_code=404, detail="Branch not found")
    
    await db.delete(branch)
    await db.commit()
    return {"status": "success", "message": "Branch deleted"}