|
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"] |
|
) |
|
|
|
|
|
def generate_reference_number(): |
|
return f"VST-{uuid.uuid4().hex[:8].upper()}" |
|
|
|
|
|
@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 |
|
|
|
|
|
@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() |
|
|
|
|
|
@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 |
|
|
|
|
|
@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") |
|
|
|
|
|
for key, value in visitor.dict().items(): |
|
setattr(db_visitor, key, value) |
|
|
|
db.commit() |
|
db.refresh(db_visitor) |
|
return db_visitor |
|
|
|
|
|
@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 |
|
|