feat: work shifts by QR codes

This commit is contained in:
2024-11-20 13:04:52 +04:00
parent 29211dd442
commit 9707faf60c
10 changed files with 349 additions and 0 deletions

View File

@@ -13,3 +13,4 @@ from .payroll import payroll_router
from .time_tracking import time_tracking_router
from .billing import billing_router
from .task import task_router
from .work_shifts import work_shifts_router

87
routers/work_shifts.py Normal file
View File

@@ -0,0 +1,87 @@
from io import BytesIO
from fastapi import APIRouter, Response
from backend.dependecies import SessionDependency, CurrentUserDependency
from generators.work_shifts_qr_code_generator import WorkShiftsQRCodeGenerator
from schemas.work_shifts import StartShiftResponse, FinishShiftResponse, ActiveWorkShiftsResponse, DeleteShiftResponse, \
FinishShiftByIdResponse
from services.work_shifts import WorkShiftsService
work_shifts_router = APIRouter(
prefix="/work-shifts",
tags=["work-shifts"],
)
@work_shifts_router.get(
"/generate-qr-code/{user_id}",
operation_id="generate_qr_code",
)
async def generate_qr_code(
session: SessionDependency,
user_id: int,
):
pdf_file: BytesIO = await WorkShiftsQRCodeGenerator(session).generate(user_id)
return Response(pdf_file.getvalue(), media_type="application/pdf")
@work_shifts_router.post(
"/start-shift/{user_id}",
response_model=StartShiftResponse,
operation_id="start_shift",
)
async def start_shift(
session: SessionDependency,
user_id: int,
):
return await WorkShiftsService(session).start_shift(user_id)
@work_shifts_router.post(
"/finish-shift/{user_id}",
response_model=FinishShiftResponse,
operation_id="finish_shift",
)
async def finish_shift(
session: SessionDependency,
user_id: int,
user: CurrentUserDependency,
):
return await WorkShiftsService(session).finish_shift(user, user_id)
@work_shifts_router.post(
"/finish-shift-by-id/{shift_id}",
response_model=FinishShiftByIdResponse,
operation_id="finish_work_shift_by_id",
)
async def finish_work_shift_by_id(
session: SessionDependency,
user: CurrentUserDependency,
shift_id: int,
):
return await WorkShiftsService(session).finish_shift_by_id(user, shift_id)
@work_shifts_router.get(
"/get-active-shifts",
response_model=ActiveWorkShiftsResponse,
operation_id="get_active_shifts",
)
async def get_active_shifts(
session: SessionDependency,
):
return await WorkShiftsService(session).get_active_shifts()
@work_shifts_router.delete(
"/delete-shift/{shift_id}",
response_model=DeleteShiftResponse,
operation_id="delete_work_shift",
)
async def delete_work_shift(
session: SessionDependency,
shift_id: int,
):
return await WorkShiftsService(session).delete_shift(shift_id)