refactor: restructure project into layered architecture

This commit is contained in:
2026-05-17 03:36:28 +03:30
parent b4971fcb6a
commit be6e1fab8e
29 changed files with 240 additions and 302 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -1,37 +0,0 @@
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from fastapi.middleware.cors import CORSMiddleware
import models
import schemas
import crud
from database import SessionLocal, engine
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
# DELETE ITEM
@app.delete("/items/{item_id}")
def delete_item(
item_id: int,
db: Session = Depends(get_db)
):
item = crud.delete_item(db, item_id)
if not item:
raise HTTPException(
status_code=404,
detail="Item not found"
)
return {"message": "Item deleted"}
# CREATE ITEM
@app.post("/items", response_model=schemas.ItemResponse)
def create_item(
item: schemas.ItemCreate,
db: Session = Depends(get_db)
):
return crud.create_item(db, item.title)

64
backend/api/admin.py Normal file
View File

@@ -0,0 +1,64 @@
from fastapi import APIRouter
from fastapi import Depends
from fastapi import HTTPException
from sqlalchemy.orm import Session
import schemas
from services import crud
from app.db.session import SessionLocal
router = APIRouter()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
# CREATE ITEM
@router.post(
"/items",
response_model=schemas.ItemResponse
)
def create_item(
item: schemas.ItemCreate,
db: Session = Depends(get_db)
):
return crud.create_item(
db,
item.title
)
# DELETE ITEM
@router.delete("/items/{item_id}")
def delete_item(
item_id: int,
db: Session = Depends(get_db)
):
item = crud.delete_item(
db,
item_id
)
if not item:
raise HTTPException(
status_code=404,
detail="Item not found"
)
return {
"message": "Item deleted"
}

View File

@@ -1,38 +0,0 @@
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from fastapi.middleware.cors import CORSMiddleware
import models
import schemas
import crud
from database import SessionLocal, engine
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
# SPIN
@app.post("/spin")
def spin(db: Session = Depends(get_db)):
winner = crud.spin_wheel(db)
if not winner:
raise HTTPException(
status_code=400,
detail="No items available"
)
return {
"winner": {
"id": winner.id,
"title": winner.title
}
}
# GET ITEMS
@app.get("/items", response_model=list[schemas.ItemResponse])
def get_items(db: Session = Depends(get_db)):
return crud.get_items(db)

59
backend/api/user.py Normal file
View File

@@ -0,0 +1,59 @@
from fastapi import APIRouter
from fastapi import Depends
from fastapi import HTTPException
from sqlalchemy.orm import Session
import schemas
from services import crud
from app.db.session import SessionLocal
router = APIRouter()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
# GET ITEMS
@router.get(
"/items",
response_model=list[schemas.ItemResponse]
)
def get_items(
db: Session = Depends(get_db)
):
return crud.get_items(db)
# SPIN
@router.post("/spin")
def spin(
db: Session = Depends(get_db)
):
winner = crud.spin_wheel(db)
if not winner:
raise HTTPException(
status_code=400,
detail="No items available"
)
return {
"winner": {
"id": winner.id,
"title": winner.title
}
}