Spaces:
Paused
Paused
Upload 12 files
Browse files- app/api/v1/endpoints/__init__.py +1 -0
- app/api/v1/endpoints/__pycache__/__init__.cpython-312.pyc +0 -0
- app/api/v1/endpoints/__pycache__/auth.cpython-312.pyc +0 -0
- app/api/v1/endpoints/__pycache__/menu.cpython-312.pyc +0 -0
- app/api/v1/endpoints/__pycache__/orders.cpython-312.pyc +0 -0
- app/api/v1/endpoints/__pycache__/payments.cpython-312.pyc +0 -0
- app/api/v1/endpoints/__pycache__/reports.cpython-312.pyc +0 -0
- app/api/v1/endpoints/auth.py +21 -0
- app/api/v1/endpoints/menu.py +25 -0
- app/api/v1/endpoints/orders.py +36 -0
- app/api/v1/endpoints/payments.py +27 -0
- app/api/v1/endpoints/reports.py +36 -0
app/api/v1/endpoints/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
from . import auth, menu, orders, payments, reports
|
app/api/v1/endpoints/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (189 Bytes). View file
|
|
|
app/api/v1/endpoints/__pycache__/auth.cpython-312.pyc
ADDED
|
Binary file (1.15 kB). View file
|
|
|
app/api/v1/endpoints/__pycache__/menu.cpython-312.pyc
ADDED
|
Binary file (1.52 kB). View file
|
|
|
app/api/v1/endpoints/__pycache__/orders.cpython-312.pyc
ADDED
|
Binary file (2.44 kB). View file
|
|
|
app/api/v1/endpoints/__pycache__/payments.cpython-312.pyc
ADDED
|
Binary file (1.71 kB). View file
|
|
|
app/api/v1/endpoints/__pycache__/reports.cpython-312.pyc
ADDED
|
Binary file (1.38 kB). View file
|
|
|
app/api/v1/endpoints/auth.py
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import APIRouter, Depends, HTTPException
|
| 2 |
+
from app.services.auth_service import authenticate_user, create_access_token, get_current_user
|
| 3 |
+
from app.models.auth import LoginRequest, LoginResponse
|
| 4 |
+
from app.db.database import get_db, AsyncSession
|
| 5 |
+
|
| 6 |
+
router = APIRouter()
|
| 7 |
+
|
| 8 |
+
@router.post("/login", response_model=LoginResponse)
|
| 9 |
+
async def login(
|
| 10 |
+
user_data: LoginRequest,
|
| 11 |
+
db: AsyncSession = Depends(get_db)
|
| 12 |
+
):
|
| 13 |
+
user = await authenticate_user(user_data.email, user_data.password, db)
|
| 14 |
+
if not user:
|
| 15 |
+
raise HTTPException(status_code=401, detail="Invalid credentials")
|
| 16 |
+
access_token = create_access_token(data={"sub": user.email})
|
| 17 |
+
return LoginResponse(access_token=access_token, token_type="bearer", user=user)
|
| 18 |
+
|
| 19 |
+
@router.post("/logout")
|
| 20 |
+
async def logout(current_user: dict = Depends(get_current_user)):
|
| 21 |
+
return {"message": "Successfully logged out"}
|
app/api/v1/endpoints/menu.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import APIRouter, Depends, HTTPException, status
|
| 2 |
+
from app.services.menu_service import MenuService
|
| 3 |
+
from app.models.menu import MenuItem, Category
|
| 4 |
+
from typing import List
|
| 5 |
+
|
| 6 |
+
router = APIRouter(prefix="/v1")
|
| 7 |
+
|
| 8 |
+
@router.get("/items", response_model=List[MenuItem])
|
| 9 |
+
async def get_menu_items(
|
| 10 |
+
menu_service: MenuService = Depends(MenuService)
|
| 11 |
+
):
|
| 12 |
+
return await menu_service.get_menu_items()
|
| 13 |
+
|
| 14 |
+
@router.post("/items", response_model=MenuItem, status_code=status.HTTP_201_CREATED)
|
| 15 |
+
async def create_menu_item(
|
| 16 |
+
item: MenuItem,
|
| 17 |
+
menu_service: MenuService = Depends(MenuService)
|
| 18 |
+
):
|
| 19 |
+
return await menu_service.create_menu_item(item)
|
| 20 |
+
|
| 21 |
+
@router.get("/categories", response_model=List[Category])
|
| 22 |
+
async def get_categories(
|
| 23 |
+
menu_service: MenuService = Depends(MenuService)
|
| 24 |
+
):
|
| 25 |
+
return await menu_service.get_categories()
|
app/api/v1/endpoints/orders.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import APIRouter, HTTPException, status, Depends
|
| 2 |
+
from app.services.order_service import OrderService
|
| 3 |
+
from app.models.orders import Order, OrderStatus
|
| 4 |
+
from typing import List
|
| 5 |
+
|
| 6 |
+
router = APIRouter()
|
| 7 |
+
|
| 8 |
+
@router.post("/", response_model=Order, status_code=status.HTTP_201_CREATED)
|
| 9 |
+
async def create_order(order: Order, service: OrderService = Depends(OrderService)):
|
| 10 |
+
return await service.create_order(order)
|
| 11 |
+
|
| 12 |
+
@router.get("/{order_id}", response_model=Order)
|
| 13 |
+
async def get_order(order_id: int, service: OrderService = Depends(OrderService)):
|
| 14 |
+
return await service.get_order(order_id)
|
| 15 |
+
|
| 16 |
+
@router.put("/{order_id}/status", response_model=Order)
|
| 17 |
+
async def update_order_status(
|
| 18 |
+
order_id: int,
|
| 19 |
+
status: OrderStatus,
|
| 20 |
+
service: OrderService = Depends(OrderService)
|
| 21 |
+
):
|
| 22 |
+
return await service.update_status(order_id, status)
|
| 23 |
+
|
| 24 |
+
@router.get("/status/{status}", response_model=List[Order])
|
| 25 |
+
async def get_orders_by_status(
|
| 26 |
+
status: OrderStatus,
|
| 27 |
+
service: OrderService = Depends(OrderService)
|
| 28 |
+
):
|
| 29 |
+
return await service.get_orders_by_status(status)
|
| 30 |
+
|
| 31 |
+
@router.get("/daily/{date}", response_model=List[Order])
|
| 32 |
+
async def get_daily_orders(
|
| 33 |
+
date: str,
|
| 34 |
+
service: OrderService = Depends(OrderService)
|
| 35 |
+
):
|
| 36 |
+
return await service.get_daily_orders(date)
|
app/api/v1/endpoints/payments.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import APIRouter, HTTPException, status, Depends
|
| 2 |
+
from app.services.payment_service import PaymentService
|
| 3 |
+
from app.models.payment import Payment, PaymentStatus
|
| 4 |
+
|
| 5 |
+
router = APIRouter()
|
| 6 |
+
|
| 7 |
+
@router.post("/", response_model=Payment, status_code=status.HTTP_201_CREATED)
|
| 8 |
+
async def process_payment(
|
| 9 |
+
payment: Payment,
|
| 10 |
+
service: PaymentService = Depends(PaymentService)
|
| 11 |
+
):
|
| 12 |
+
return await service.process_payment(payment)
|
| 13 |
+
|
| 14 |
+
@router.get("/{payment_id}", response_model=Payment)
|
| 15 |
+
async def get_payment(
|
| 16 |
+
payment_id: int,
|
| 17 |
+
service: PaymentService = Depends(PaymentService)
|
| 18 |
+
):
|
| 19 |
+
return await service.get_payment(payment_id)
|
| 20 |
+
|
| 21 |
+
@router.put("/{payment_id}/status", response_model=Payment)
|
| 22 |
+
async def update_payment_status(
|
| 23 |
+
payment_id: int,
|
| 24 |
+
status: PaymentStatus,
|
| 25 |
+
service: PaymentService = Depends(PaymentService)
|
| 26 |
+
):
|
| 27 |
+
return await service.update_status(payment_id, status)
|
app/api/v1/endpoints/reports.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import APIRouter, Depends
|
| 2 |
+
from app.services.report_service import ReportService
|
| 3 |
+
from app.models.reports import DailyReport, WeeklyReport
|
| 4 |
+
from datetime import date
|
| 5 |
+
from fastapi.responses import JSONResponse
|
| 6 |
+
from fastapi import HTTPException, status
|
| 7 |
+
|
| 8 |
+
router = APIRouter()
|
| 9 |
+
|
| 10 |
+
@router.get("/daily/{date}", response_model=DailyReport)
|
| 11 |
+
async def get_daily_report(
|
| 12 |
+
date: date,
|
| 13 |
+
service: ReportService = Depends(ReportService)
|
| 14 |
+
):
|
| 15 |
+
try:
|
| 16 |
+
return await service.generate_daily_report(date.isoformat())
|
| 17 |
+
except Exception as e:
|
| 18 |
+
raise HTTPException(
|
| 19 |
+
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
| 20 |
+
detail=f"Failed to generate daily report: {str(e)}"
|
| 21 |
+
)
|
| 22 |
+
|
| 23 |
+
@router.get("/weekly", response_model=WeeklyReport)
|
| 24 |
+
async def get_weekly_report(
|
| 25 |
+
end_date: date = None,
|
| 26 |
+
service: ReportService = Depends(ReportService)
|
| 27 |
+
):
|
| 28 |
+
try:
|
| 29 |
+
return await service.generate_weekly_report(
|
| 30 |
+
end_date.isoformat() if end_date else None
|
| 31 |
+
)
|
| 32 |
+
except Exception as e:
|
| 33 |
+
raise HTTPException(
|
| 34 |
+
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
| 35 |
+
detail=f"Failed to generate weekly report: {str(e)}"
|
| 36 |
+
)
|