Compare commits

..

4 Commits

Author SHA1 Message Date
ed82bf7f1f git add .
git commit -m "feat: improve wheel UI with gold pointer and center circle sync"
2026-05-30 13:29:48 +03:30
1618580439 git add .
git commit -m "feat: improve wheel UI with gold pointer and center circle sync"
2026-05-30 13:16:11 +03:30
c4c4e92e05 git add .
git commit -m "feat: improve wheel UI with gold pointer and center circle sync"
2026-05-30 13:05:42 +03:30
906cccd3fe feat :add log 2026-05-24 09:55:56 +03:30
11 changed files with 98 additions and 42 deletions

View File

@@ -1 +1,4 @@
DATABASE_URL=sqlite:///./wheel.db DATABASE_URL=sqlite:///./wheel.db
LOG_ENABLED=true
LOG_LEVEL=DEBUG

View File

@@ -7,11 +7,11 @@ from sqlalchemy.orm import Session
import schemas import schemas
from schemas import ItemResponse from schemas import ItemResponse
from services import crud from services import crud
from app.db.session import SessionLocal from app.db.session import SessionLocal
from core.logger import get_logger
router = APIRouter() router = APIRouter()
logger = get_logger('admin')
def get_db(): def get_db():
@@ -25,7 +25,13 @@ def get_db():
# GET ALL ITEMS # GET ALL ITEMS
@router.get("/items", response_model=list[ItemResponse]) @router.get("/items", response_model=list[ItemResponse])
def get_items(db: Session = Depends(get_db)): def get_items(db: Session = Depends(get_db)):
return crud.get_items(db) try:
items = crud.get_items(db)
logger.info(f"Items fetched: {len(items)} items")
return items
except Exception as e:
logger.error(f"Error fetching items: {e}")
raise
# CREATE ITEM # CREATE ITEM
@@ -34,7 +40,13 @@ def create_item(
item: schemas.ItemCreate, item: schemas.ItemCreate,
db: Session = Depends(get_db) db: Session = Depends(get_db)
): ):
return crud.create_item(db, item.title) try:
result = crud.create_item(db, item.title)
logger.info(f"Item created: {item.title}")
return result
except Exception as e:
logger.error(f"Error creating item: {e}")
raise
# DELETE ITEM # DELETE ITEM
@@ -43,7 +55,15 @@ def delete_item(
item_id: int, item_id: int,
db: Session = Depends(get_db) db: Session = Depends(get_db)
): ):
item = crud.delete_item(db, item_id) try:
if not item: item = crud.delete_item(db, item_id)
raise HTTPException(status_code=404, detail="Item not found") if not item:
return {"message": "Item deleted"} logger.warning(f"Item not found: {item_id}")
raise HTTPException(status_code=404, detail="Item not found")
logger.info(f"Item deleted: {item_id}")
return {"message": "Item deleted"}
except HTTPException:
raise
except Exception as e:
logger.error(f"Error deleting item: {e}")
raise

View File

@@ -6,54 +6,36 @@ from sqlalchemy.orm import Session
import schemas import schemas
from services import crud from services import crud
from app.db.session import SessionLocal from app.db.session import SessionLocal
from core.logger import get_logger
router = APIRouter() router = APIRouter()
logger = get_logger('user')
def get_db(): def get_db():
db = SessionLocal() db = SessionLocal()
try: try:
yield db yield db
finally: finally:
db.close() db.close()
# GET ITEMS # GET ITEMS
@router.get( @router.get("/items", response_model=list[schemas.ItemResponse])
"/items", def get_items(db: Session = Depends(get_db)):
response_model=list[schemas.ItemResponse] try:
) items = crud.get_items(db)
def get_items( logger.info(f"User fetched items: {len(items)} items")
db: Session = Depends(get_db) return items
): except Exception as e:
logger.error(f"Error fetching items: {e}")
return crud.get_items(db) raise
# SPIN # SPIN
@router.post("/spin") @router.post("/spin")
def spin( def spin(db: Session = Depends(get_db)):
db: Session = Depends(get_db) try:
): winner = crud.spin_wheel(db)
if not winner:
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
}
}

0
backend/core/__init__.py Normal file
View File

Binary file not shown.

Binary file not shown.

50
backend/core/logger.py Normal file
View File

@@ -0,0 +1,50 @@
import logging
import os
from logging.handlers import RotatingFileHandler
from dotenv import load_dotenv
load_dotenv()
LOG_ENABLED = os.getenv('LOG_ENABLED', 'true').lower() == 'true'
LOG_LEVEL = getattr(logging, os.getenv('LOG_LEVEL', 'DEBUG').upper(), logging.DEBUG)
os.makedirs('logs', exist_ok=True)
FORMATTER = logging.Formatter(
'%(asctime)s | %(levelname)s | %(name)s | %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
def _file_handler(filename: str, level: int) -> RotatingFileHandler:
handler = RotatingFileHandler(
f'logs/{filename}',
maxBytes=5 * 1024 * 1024,
backupCount=3,
encoding='utf-8'
)
handler.setLevel(level)
handler.setFormatter(FORMATTER)
return handler
def _console_handler() -> logging.StreamHandler:
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)
handler.setFormatter(FORMATTER)
return handler
def get_logger(name: str) -> logging.Logger:
logger = logging.getLogger(name)
if logger.handlers:
return logger
if not LOG_ENABLED:
logger.addHandler(logging.NullHandler())
return logger
logger.setLevel(LOG_LEVEL)
logger.addHandler(_file_handler('app.log', LOG_LEVEL))
logger.addHandler(_file_handler('error.log', logging.ERROR))
logger.addHandler(_console_handler())
return logger

1
backend/logs/app.log Normal file
View File

@@ -0,0 +1 @@
2026-05-24 09:52:10 | INFO | test | test

0
backend/logs/error.log Normal file
View File

Binary file not shown.