feat: work shifts by QR codes
This commit is contained in:
@@ -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
87
routers/work_shifts.py
Normal 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)
|
||||
Reference in New Issue
Block a user