commit 715162b0eaef574cd59c4dee9980221681c57b20 Author: Nucha Date: Thu Jun 12 09:28:47 2025 +0700 fet:---> diff --git a/__pycache__/main.cpython-312.pyc b/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000..dfedd21 Binary files /dev/null and b/__pycache__/main.cpython-312.pyc differ diff --git a/main.py b/main.py new file mode 100644 index 0000000..e03b13e --- /dev/null +++ b/main.py @@ -0,0 +1,8 @@ +from fastapi import FastAPI +from routers import auth_router, attendance_router, leave_router + +app = FastAPI(title="Attendance API") + +app.include_router(auth_router.router, prefix="/auth", tags=["Auth"]) +app.include_router(attendance_router.router, prefix="/attendance", tags=["Attendance"]) +app.include_router(leave_router.router, prefix="/leave", tags=["Leave"]) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..81a4930 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +fastapi +uvicorn +pydantic \ No newline at end of file diff --git a/routers/__pycache__/attendance_router.cpython-312.pyc b/routers/__pycache__/attendance_router.cpython-312.pyc new file mode 100644 index 0000000..bd8cd06 Binary files /dev/null and b/routers/__pycache__/attendance_router.cpython-312.pyc differ diff --git a/routers/__pycache__/auth_router.cpython-312.pyc b/routers/__pycache__/auth_router.cpython-312.pyc new file mode 100644 index 0000000..9263993 Binary files /dev/null and b/routers/__pycache__/auth_router.cpython-312.pyc differ diff --git a/routers/__pycache__/leave_router.cpython-312.pyc b/routers/__pycache__/leave_router.cpython-312.pyc new file mode 100644 index 0000000..93fa2e9 Binary files /dev/null and b/routers/__pycache__/leave_router.cpython-312.pyc differ diff --git a/routers/attendance_router.py b/routers/attendance_router.py new file mode 100644 index 0000000..567fa64 --- /dev/null +++ b/routers/attendance_router.py @@ -0,0 +1,22 @@ +from fastapi import APIRouter, Header, HTTPException +from datetime import datetime +from pydantic import BaseModel + +router = APIRouter() + +class CheckinRequest(BaseModel): + lat: float + long: float + +@router.post("/checkin") +def check_in(request:CheckinRequest, authorization: str = Header(None),): + print(request) + if authorization != "Bearer fake-jwt-token": + raise HTTPException(status_code=403, detail="Unauthorized") + return {"checked_in_at": datetime.now()} + +@router.post("/checkout") +def check_out(authorization: str = Header(None)): + if authorization != "Bearer fake-jwt-token": + raise HTTPException(status_code=403, detail="Unauthorized") + return {"checked_out_at": datetime.now()} \ No newline at end of file diff --git a/routers/auth_router.py b/routers/auth_router.py new file mode 100644 index 0000000..4f9033a --- /dev/null +++ b/routers/auth_router.py @@ -0,0 +1,14 @@ +from fastapi import APIRouter, HTTPException +from pydantic import BaseModel + +router = APIRouter() + +class LoginRequest(BaseModel): + email: str + password: str + +@router.post("/login") +def login(request: LoginRequest): + if request.email == "test@test.com" and request.password == "1234": + return {"token": "fake-jwt-token"} + raise HTTPException(status_code=401, detail="Invalid credentials") \ No newline at end of file diff --git a/routers/leave_router.py b/routers/leave_router.py new file mode 100644 index 0000000..12c1cbd --- /dev/null +++ b/routers/leave_router.py @@ -0,0 +1,26 @@ +from fastapi import APIRouter, Header, HTTPException +from pydantic import BaseModel + +router = APIRouter() + +class LeaveRequest(BaseModel): + leave_type: str + reason: str + from_date: str + to_date: str + +@router.post("/") +def request_leave(request: LeaveRequest, authorization: str = Header(None)): + if authorization != "Bearer fake-jwt-token": + raise HTTPException(status_code=403, detail="Unauthorized") + return {"status": "Leave request submitted"} + +@router.get("/summary") +def leave_summary(authorization: str = Header(None)): + if authorization != "Bearer fake-jwt-token": + raise HTTPException(status_code=403, detail="Unauthorized") + return { + "sick_leave": 2, + "personal_leave": 3, + "vacation_leave": 1 + } \ No newline at end of file