commit b7f8704e987314ff5bab67e88d78a24c99fb3db2 Author: Anahita-Mahmoudi Date: Sat May 9 22:21:38 2026 +0330 initial commit diff --git a/backend/__pycache__/crud.cpython-313.pyc b/backend/__pycache__/crud.cpython-313.pyc new file mode 100644 index 0000000..8f54d78 Binary files /dev/null and b/backend/__pycache__/crud.cpython-313.pyc differ diff --git a/backend/__pycache__/database.cpython-313.pyc b/backend/__pycache__/database.cpython-313.pyc new file mode 100644 index 0000000..7bbf02c Binary files /dev/null and b/backend/__pycache__/database.cpython-313.pyc differ diff --git a/backend/__pycache__/main.cpython-313.pyc b/backend/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000..59f1ccc Binary files /dev/null and b/backend/__pycache__/main.cpython-313.pyc differ diff --git a/backend/__pycache__/models.cpython-313.pyc b/backend/__pycache__/models.cpython-313.pyc new file mode 100644 index 0000000..2f72788 Binary files /dev/null and b/backend/__pycache__/models.cpython-313.pyc differ diff --git a/backend/__pycache__/schemas.cpython-313.pyc b/backend/__pycache__/schemas.cpython-313.pyc new file mode 100644 index 0000000..55bb1dd Binary files /dev/null and b/backend/__pycache__/schemas.cpython-313.pyc differ diff --git a/backend/crud.py b/backend/crud.py new file mode 100644 index 0000000..f483ea2 --- /dev/null +++ b/backend/crud.py @@ -0,0 +1,32 @@ +from sqlalchemy.orm import Session +from models import Item +import random + +def get_items(db: Session): + return db.query(Item).all() + +def create_item(db: Session, title: str): + item = Item(title=title) + + db.add(item) + db.commit() + db.refresh(item) + + return item + +def delete_item(db: Session, item_id: int): + item = db.query(Item).filter(Item.id == item_id).first() + + if item: + db.delete(item) + db.commit() + + return item + +def spin_wheel(db: Session): + items = db.query(Item).all() + + if not items: + return None + + return random.choice(items) \ No newline at end of file diff --git a/backend/database.py b/backend/database.py new file mode 100644 index 0000000..3154273 --- /dev/null +++ b/backend/database.py @@ -0,0 +1,18 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker + +DATABASE_URL = "sqlite:///./wheel.db" + +engine = create_engine( + DATABASE_URL, + connect_args={"check_same_thread": False} +) + +SessionLocal = sessionmaker( + autocommit=False, + autoflush=False, + bind=engine +) + +Base = declarative_base() \ No newline at end of file diff --git a/backend/main.py b/backend/main.py new file mode 100644 index 0000000..8fd1c0b --- /dev/null +++ b/backend/main.py @@ -0,0 +1,79 @@ +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() + +# CORS +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +# Database Session +def get_db(): + db = SessionLocal() + + try: + yield db + finally: + db.close() + +# GET ITEMS +@app.get("/items", response_model=list[schemas.ItemResponse]) +def get_items(db: Session = Depends(get_db)): + return crud.get_items(db) + +# 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) + +# 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"} + +# 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 + } + } \ No newline at end of file diff --git a/backend/models.py b/backend/models.py new file mode 100644 index 0000000..4f0b3bf --- /dev/null +++ b/backend/models.py @@ -0,0 +1,8 @@ +from sqlalchemy import Column, Integer, String +from database import Base + +class Item(Base): + __tablename__ = "items" + + id = Column(Integer, primary_key=True, index=True) + title = Column(String, nullable=False) \ No newline at end of file diff --git a/backend/schemas.py b/backend/schemas.py new file mode 100644 index 0000000..e36081c --- /dev/null +++ b/backend/schemas.py @@ -0,0 +1,11 @@ +from pydantic import BaseModel + +class ItemCreate(BaseModel): + title: str + +class ItemResponse(BaseModel): + id: int + title: str + + class Config: + from_attributes = True \ No newline at end of file diff --git a/backend/wheel.db b/backend/wheel.db new file mode 100644 index 0000000..72215ed Binary files /dev/null and b/backend/wheel.db differ diff --git a/frontend-admin/admin.html b/frontend-admin/admin.html new file mode 100644 index 0000000..e69de29 diff --git a/frontend-admin/app.js b/frontend-admin/app.js new file mode 100644 index 0000000..e69de29 diff --git a/frontend-admin/index.html b/frontend-admin/index.html new file mode 100644 index 0000000..e69de29 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b736f1b Binary files /dev/null and b/requirements.txt differ