This commit is contained in:
Nucha 2025-06-12 09:28:47 +07:00
commit 715162b0ea
9 changed files with 73 additions and 0 deletions

Binary file not shown.

8
main.py Normal file
View File

@ -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"])

3
requirements.txt Normal file
View File

@ -0,0 +1,3 @@
fastapi
uvicorn
pydantic

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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()}

14
routers/auth_router.py Normal file
View File

@ -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")

26
routers/leave_router.py Normal file
View File

@ -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
}