feat: work shifts by QR codes
This commit is contained in:
		
							
								
								
									
										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