vst / app /routers /visitor_log.py
MFF212's picture
Upload 16 files
13933bf verified
raw
history blame
2.98 kB
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import List
import uuid
from app.database.database import get_db
from app.models.models import VisitorLog
from app.schemas.schemas import VisitorLogCreate, VisitorLogResponse, VisitorWithStatusResponse
router = APIRouter(
prefix="/visitor-log",
tags=["visitor-log"]
)
# Generate unique reference number
def generate_reference_number():
return f"VST-{uuid.uuid4().hex[:8].upper()}"
# Create visitor log
@router.post("/", response_model=VisitorLogResponse, status_code=status.HTTP_201_CREATED)
def create_visitor_log(visitor: VisitorLogCreate, db: Session = Depends(get_db)):
reference_number = generate_reference_number()
db_visitor = VisitorLog(
full_name=visitor.full_name,
email_address=visitor.email_address,
phone_number=visitor.phone_number,
company_name=visitor.company_name,
qid_id_number=visitor.qid_id_number,
purpose_of_visit=visitor.purpose_of_visit,
person_to_meet=visitor.person_to_meet,
preferred_datetime=visitor.preferred_datetime,
reference_number=reference_number
)
db.add(db_visitor)
db.commit()
db.refresh(db_visitor)
return db_visitor
# Get all visitor logs
@router.get("/", response_model=List[VisitorLogResponse])
def get_all_visitor_logs(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
return db.query(VisitorLog).offset(skip).limit(limit).all()
# Get visitor log by reference number
@router.get("/{reference_number}", response_model=VisitorWithStatusResponse)
def get_visitor_log(reference_number: str, db: Session = Depends(get_db)):
db_visitor = db.query(VisitorLog).filter(VisitorLog.reference_number == reference_number).first()
if db_visitor is None:
raise HTTPException(status_code=404, detail="Visitor log not found")
return db_visitor
# Update visitor log
@router.put("/{reference_number}", response_model=VisitorLogResponse)
def update_visitor_log(reference_number: str, visitor: VisitorLogCreate, db: Session = Depends(get_db)):
db_visitor = db.query(VisitorLog).filter(VisitorLog.reference_number == reference_number).first()
if db_visitor is None:
raise HTTPException(status_code=404, detail="Visitor log not found")
# Update visitor log fields
for key, value in visitor.dict().items():
setattr(db_visitor, key, value)
db.commit()
db.refresh(db_visitor)
return db_visitor
# Delete visitor log
@router.delete("/{reference_number}", status_code=status.HTTP_204_NO_CONTENT)
def delete_visitor_log(reference_number: str, db: Session = Depends(get_db)):
db_visitor = db.query(VisitorLog).filter(VisitorLog.reference_number == reference_number).first()
if db_visitor is None:
raise HTTPException(status_code=404, detail="Visitor log not found")
db.delete(db_visitor)
db.commit()
return None