git add .
git commit -m "feat: improve wheel UI with gold pointer and center circle sync"
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
DATABASE_URL=sqlite:///./spinwheel.db
|
||||
DATABASE_URL=sqlite:///./wheel.db
|
||||
|
||||
LOG_ENABLED=true
|
||||
LOG_LEVEL=DEBUG
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,28 +0,0 @@
|
||||
"""add prize column
|
||||
|
||||
Revision ID: b55808a86947
|
||||
Revises: ab09ab5070f7
|
||||
Create Date: 2026-05-29 19:32:41.615653
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = 'b55808a86947'
|
||||
down_revision: Union[str, Sequence[str], None] = 'ab09ab5070f7'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
"""Upgrade schema."""
|
||||
pass
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
"""Downgrade schema."""
|
||||
pass
|
||||
Binary file not shown.
Binary file not shown.
@@ -30,7 +30,7 @@ def get_items(db: Session = Depends(get_db)):
|
||||
logger.info(f"Items fetched: {len(items)} items")
|
||||
return items
|
||||
except Exception as e:
|
||||
logger.critical(f"Unexpected error fetching items: {e}")
|
||||
logger.error(f"Error fetching items: {e}")
|
||||
raise
|
||||
|
||||
|
||||
@@ -41,11 +41,11 @@ def create_item(
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
try:
|
||||
result = crud.create_item(db, item.title, item.value) # ✅ value اضافه شد
|
||||
result = crud.create_item(db, item.title)
|
||||
logger.info(f"Item created: {item.title}")
|
||||
return result
|
||||
except Exception as e:
|
||||
logger.critical(f"Unexpected error creating item: {e}")
|
||||
logger.error(f"Error creating item: {e}")
|
||||
raise
|
||||
|
||||
|
||||
@@ -65,29 +65,5 @@ def delete_item(
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.critical(f"Unexpected error deleting item: {e}")
|
||||
raise
|
||||
|
||||
@router.put("/items/{item_id}", response_model=ItemResponse)
|
||||
def update_item(
|
||||
item_id: int,
|
||||
item: schemas.ItemCreate,
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
try:
|
||||
updated = crud.update_item(db, item_id, item.title, item.value)
|
||||
|
||||
if not updated:
|
||||
logger.warning(f"Item not found: {item_id}")
|
||||
raise HTTPException(status_code=404, detail="Item not found")
|
||||
|
||||
logger.info(f"Item updated: {item_id}")
|
||||
return updated
|
||||
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.critical(f"Unexpected error updating item: {e}")
|
||||
raise
|
||||
|
||||
|
||||
logger.error(f"Error deleting item: {e}")
|
||||
raise
|
||||
@@ -29,7 +29,7 @@ def get_items(db: Session = Depends(get_db)):
|
||||
logger.info(f"User fetched items: {len(items)} items")
|
||||
return items
|
||||
except Exception as e:
|
||||
logger.critical(f"Unexpected error fetching items: {e}")
|
||||
logger.error(f"Error fetching items: {e}")
|
||||
raise
|
||||
|
||||
|
||||
@@ -38,26 +38,4 @@ def get_items(db: Session = Depends(get_db)):
|
||||
def spin(db: Session = Depends(get_db)):
|
||||
try:
|
||||
winner = crud.spin_wheel(db)
|
||||
|
||||
if not winner:
|
||||
logger.warning("Spin attempted but no items available")
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail="No items available"
|
||||
)
|
||||
|
||||
logger.info(f"Spin result: {winner.title}")
|
||||
|
||||
return {
|
||||
"winner": {
|
||||
"id": winner.id,
|
||||
"title": winner.title
|
||||
}
|
||||
}
|
||||
|
||||
except HTTPException:
|
||||
raise
|
||||
|
||||
except Exception as e:
|
||||
logger.critical(f"Unexpected error during spin: {e}")
|
||||
raise
|
||||
if not winner:
|
||||
Binary file not shown.
@@ -18,9 +18,4 @@ class Item(Base):
|
||||
title = Column(
|
||||
String,
|
||||
nullable=False
|
||||
)
|
||||
|
||||
value = Column(
|
||||
Integer,
|
||||
nullable=False
|
||||
)
|
||||
@@ -1,16 +1,10 @@
|
||||
from pydantic import Field
|
||||
from pydantic_settings import BaseSettings
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
DATABASE_URL: str = Field(..., alias="DATABASE_URL")
|
||||
|
||||
LOG_ENABLED: bool = Field(True, alias="LOG_ENABLED")
|
||||
LOG_LEVEL: str = Field("INFO", alias="LOG_LEVEL")
|
||||
DATABASE_URL: str
|
||||
|
||||
class Config:
|
||||
env_file = ".env"
|
||||
populate_by_name = True
|
||||
|
||||
|
||||
settings = Settings()
|
||||
Binary file not shown.
@@ -1,206 +1 @@
|
||||
2026-05-24 09:52:10 | INFO | test | test
|
||||
2026-05-24 12:00:16 | CRITICAL | user | Unexpected error fetching items: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: SELECT items.id AS items_id, items.title AS items_title
|
||||
FROM items]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:00:43 | ERROR | admin | Error fetching items: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: SELECT items.id AS items_id, items.title AS items_title
|
||||
FROM items]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:00:47 | ERROR | admin | Error fetching items: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: SELECT items.id AS items_id, items.title AS items_title
|
||||
FROM items]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:00:57 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:00:59 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:01:05 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:09:42 | ERROR | admin | Error fetching items: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: SELECT items.id AS items_id, items.title AS items_title
|
||||
FROM items]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:09:49 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:09:51 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:12:18 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:24:46 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-24 12:24:55 | INFO | admin | Item created: جایزه 1
|
||||
2026-05-24 12:24:55 | INFO | admin | Items fetched: 1 items
|
||||
2026-05-24 12:25:07 | INFO | admin | Item created: جایزه 2
|
||||
2026-05-24 12:25:07 | INFO | admin | Items fetched: 2 items
|
||||
2026-05-24 12:25:12 | INFO | admin | Item created: جایزه 3
|
||||
2026-05-24 12:25:12 | INFO | admin | Items fetched: 3 items
|
||||
2026-05-24 12:25:17 | INFO | user | User fetched items: 3 items
|
||||
2026-05-24 12:25:19 | INFO | user | Spin result: جایزه 3
|
||||
2026-05-24 12:26:33 | INFO | admin | Item created: پوچ
|
||||
2026-05-24 12:26:33 | INFO | admin | Items fetched: 4 items
|
||||
2026-05-24 12:26:38 | INFO | user | User fetched items: 4 items
|
||||
2026-05-24 12:26:40 | INFO | user | Spin result: جایزه 1
|
||||
2026-05-24 12:41:01 | INFO | user | User fetched items: 4 items
|
||||
2026-05-24 12:41:02 | INFO | user | User fetched items: 4 items
|
||||
2026-05-24 12:41:04 | INFO | user | Spin result: پوچ
|
||||
2026-05-24 12:45:29 | INFO | user | Spin result: پوچ
|
||||
2026-05-24 12:49:58 | INFO | user | Spin result: جایزه 1
|
||||
2026-05-24 12:50:31 | INFO | user | Spin result: پوچ
|
||||
2026-05-24 12:50:59 | INFO | user | Spin result: جایزه 2
|
||||
2026-05-24 12:51:10 | INFO | user | Spin result: جایزه 3
|
||||
2026-05-24 12:57:40 | INFO | admin | Item deleted: 4
|
||||
2026-05-24 12:57:40 | INFO | admin | Items fetched: 3 items
|
||||
2026-05-24 12:57:48 | INFO | admin | Item created: پوچ
|
||||
2026-05-24 12:57:48 | INFO | admin | Items fetched: 4 items
|
||||
2026-05-24 12:58:01 | INFO | admin | Item created: جایزه 3
|
||||
2026-05-24 12:58:01 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-24 12:58:49 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:43:29 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:43:34 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:43:35 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:44:03 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:44:05 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:44:28 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:45:17 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:45:18 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:45:19 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:45:22 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:45:22 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:45:22 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:45:23 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:45:23 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:47:15 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:47:16 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:47:16 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:47:17 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:47:17 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:47:17 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:47:17 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:47:17 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:47:18 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:47:20 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:47:21 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:47:21 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:47:21 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:48:16 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:49:38 | INFO | user | User fetched items: 5 items
|
||||
2026-05-29 19:49:45 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:53:58 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:53:59 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:54:00 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 19:54:00 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 20:00:58 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:01:00 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:01:03 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:02:53 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:03:50 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:03:51 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:03:53 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:05:26 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:11:18 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:11:59 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:12:12 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:15:16 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:15:27 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:20:21 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:29:30 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:29:33 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 20:29:40 | INFO | admin | Item created: سفر
|
||||
2026-05-29 20:29:40 | INFO | admin | Items fetched: 1 items
|
||||
2026-05-29 20:48:28 | INFO | admin | Items fetched: 1 items
|
||||
2026-05-29 20:48:31 | INFO | admin | Items fetched: 1 items
|
||||
2026-05-29 20:48:45 | INFO | admin | Item created: طلا
|
||||
2026-05-29 20:48:45 | INFO | admin | Items fetched: 2 items
|
||||
2026-05-29 20:48:52 | INFO | user | User fetched items: 2 items
|
||||
2026-05-29 20:48:55 | INFO | user | Spin result: سفر
|
||||
2026-05-29 20:49:35 | INFO | admin | Item deleted: 1
|
||||
2026-05-29 20:49:35 | INFO | admin | Items fetched: 1 items
|
||||
2026-05-29 20:50:46 | INFO | admin | Items fetched: 1 items
|
||||
2026-05-29 20:51:12 | INFO | admin | Item created: خانه
|
||||
2026-05-29 20:51:12 | INFO | admin | Items fetched: 2 items
|
||||
2026-05-29 20:51:18 | INFO | user | User fetched items: 2 items
|
||||
2026-05-29 20:51:23 | INFO | user | User fetched items: 2 items
|
||||
2026-05-29 20:51:26 | INFO | user | User fetched items: 2 items
|
||||
2026-05-29 20:51:40 | INFO | admin | Item created: زمين
|
||||
2026-05-29 20:51:40 | INFO | admin | Items fetched: 3 items
|
||||
2026-05-29 20:51:50 | INFO | user | User fetched items: 3 items
|
||||
2026-05-29 20:51:52 | INFO | user | Spin result: طلا
|
||||
2026-05-29 20:52:07 | INFO | user | Spin result: زمين
|
||||
2026-05-29 20:52:13 | INFO | user | Spin result: طلا
|
||||
2026-05-29 21:00:39 | INFO | user | User fetched items: 3 items
|
||||
2026-05-29 21:00:41 | INFO | user | Spin result: زمين
|
||||
2026-05-29 21:02:05 | INFO | user | User fetched items: 3 items
|
||||
2026-05-29 21:02:09 | INFO | user | Spin result: طلا
|
||||
2026-05-29 21:02:20 | INFO | user | Spin result: خانه
|
||||
2026-05-29 21:04:48 | INFO | user | User fetched items: 3 items
|
||||
2026-05-29 21:04:56 | INFO | user | Spin result: خانه
|
||||
2026-05-29 21:05:32 | INFO | user | User fetched items: 3 items
|
||||
2026-05-29 21:06:04 | INFO | user | Spin result: زمين
|
||||
2026-05-29 21:20:30 | INFO | admin | Item deleted: 2
|
||||
2026-05-29 21:20:30 | INFO | admin | Items fetched: 2 items
|
||||
2026-05-29 21:20:33 | INFO | admin | Item deleted: 3
|
||||
2026-05-29 21:20:33 | INFO | admin | Items fetched: 1 items
|
||||
2026-05-29 21:20:34 | INFO | admin | Item deleted: 4
|
||||
2026-05-29 21:20:34 | INFO | admin | Items fetched: 0 items
|
||||
2026-05-29 21:21:07 | INFO | admin | Item created: پوچ
|
||||
2026-05-29 21:21:07 | INFO | admin | Items fetched: 1 items
|
||||
2026-05-29 21:21:18 | INFO | admin | Item created: تخفيف يک ماهه
|
||||
2026-05-29 21:21:18 | INFO | admin | Items fetched: 2 items
|
||||
2026-05-29 21:21:47 | INFO | admin | Item created: تخفيف يک ساله
|
||||
2026-05-29 21:21:47 | INFO | admin | Items fetched: 3 items
|
||||
2026-05-29 21:22:08 | INFO | admin | Item created: تخفيف سه ماهه
|
||||
2026-05-29 21:22:08 | INFO | admin | Items fetched: 4 items
|
||||
2026-05-29 21:22:36 | INFO | admin | Item created: 10% تخفيف يک ماهه
|
||||
2026-05-29 21:22:36 | INFO | admin | Items fetched: 5 items
|
||||
2026-05-29 21:22:44 | INFO | admin | Item created: پوچ
|
||||
2026-05-29 21:22:44 | INFO | admin | Items fetched: 6 items
|
||||
2026-05-29 21:22:50 | INFO | user | User fetched items: 6 items
|
||||
2026-05-29 21:22:53 | INFO | user | Spin result: تخفيف سه ماهه
|
||||
2026-05-29 21:28:31 | INFO | user | Spin result: تخفيف يک ماهه
|
||||
2026-05-29 21:30:11 | INFO | user | Spin result: 10% تخفيف يک ماهه
|
||||
2026-05-29 23:55:52 | INFO | admin | Items fetched: 6 items
|
||||
2026-05-29 23:56:28 | INFO | admin | Items fetched: 6 items
|
||||
2026-05-29 23:56:41 | INFO | admin | Items fetched: 6 items
|
||||
2026-05-30 00:02:00 | INFO | admin | Items fetched: 6 items
|
||||
2026-05-30 00:02:05 | INFO | admin | Item updated: 1
|
||||
2026-05-30 00:02:05 | INFO | admin | Items fetched: 6 items
|
||||
2026-05-30 00:02:13 | INFO | admin | Item updated: 1
|
||||
2026-05-30 00:02:13 | INFO | admin | Items fetched: 6 items
|
||||
2026-05-30 00:02:19 | INFO | admin | Item updated: 1
|
||||
2026-05-30 00:02:19 | INFO | admin | Items fetched: 6 items
|
||||
2026-05-30 00:02:36 | INFO | user | Spin result: پوچ
|
||||
2026-05-30 00:05:46 | INFO | user | Spin result: تخفيف يک ماهه
|
||||
2026-05-30 00:13:50 | INFO | user | User fetched items: 6 items
|
||||
2026-05-30 00:14:24 | INFO | user | User fetched items: 6 items
|
||||
2026-05-30 00:31:05 | INFO | user | User fetched items: 6 items
|
||||
2026-05-30 00:33:44 | INFO | user | Spin result: تخفيف يک ساله
|
||||
2026-05-30 00:43:06 | INFO | user | User fetched items: 6 items
|
||||
2026-05-30 00:43:10 | INFO | user | Spin result: تخفيف يک ماهه
|
||||
2026-05-30 00:45:02 | INFO | user | User fetched items: 6 items
|
||||
2026-05-30 00:45:04 | INFO | user | Spin result: 10% تخفيف يک ماهه
|
||||
2026-05-30 00:45:41 | INFO | user | Spin result: تخفيف يک ساله
|
||||
2026-05-30 00:46:22 | INFO | admin | Item created: تخفیف هفتگی
|
||||
2026-05-30 00:46:22 | INFO | admin | Items fetched: 7 items
|
||||
2026-05-30 00:46:30 | INFO | user | User fetched items: 7 items
|
||||
2026-05-30 00:47:47 | INFO | user | Spin result: تخفيف يک ماهه
|
||||
2026-05-30 00:51:23 | INFO | user | User fetched items: 7 items
|
||||
2026-05-30 00:51:28 | INFO | user | Spin result: تخفيف سه ماهه
|
||||
2026-05-30 00:58:22 | INFO | user | User fetched items: 7 items
|
||||
2026-05-30 01:02:03 | INFO | user | User fetched items: 7 items
|
||||
2026-05-30 01:04:14 | INFO | admin | Item created: پوچ
|
||||
2026-05-30 01:04:14 | INFO | admin | Items fetched: 8 items
|
||||
2026-05-30 01:05:21 | INFO | user | User fetched items: 8 items
|
||||
2026-05-30 01:12:18 | INFO | user | Spin result: پوچ
|
||||
2026-05-30 01:12:25 | INFO | user | Spin result: تخفيف سه ماهه
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
2026-05-24 12:00:16 | CRITICAL | user | Unexpected error fetching items: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: SELECT items.id AS items_id, items.title AS items_title
|
||||
FROM items]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:00:43 | ERROR | admin | Error fetching items: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: SELECT items.id AS items_id, items.title AS items_title
|
||||
FROM items]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:00:47 | ERROR | admin | Error fetching items: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: SELECT items.id AS items_id, items.title AS items_title
|
||||
FROM items]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:00:57 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:00:59 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:01:05 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:09:42 | ERROR | admin | Error fetching items: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: SELECT items.id AS items_id, items.title AS items_title
|
||||
FROM items]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:09:49 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:09:51 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
2026-05-24 12:12:18 | ERROR | admin | Error creating item: (sqlite3.OperationalError) no such table: items
|
||||
[SQL: INSERT INTO items (title) VALUES (?)]
|
||||
[parameters: ('جایزه 1',)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/e3q8)
|
||||
|
||||
@@ -1,29 +1,21 @@
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
from app.db.session import engine
|
||||
from app.db.session import Base
|
||||
|
||||
from app.db.models import Item
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
from api.admin import router as admin_router
|
||||
from api.user import router as user_router
|
||||
|
||||
app.include_router(user_router, prefix="/user")
|
||||
|
||||
Base.metadata.create_all(bind=engine)
|
||||
app = FastAPI()
|
||||
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=[
|
||||
"http://localhost:3000",
|
||||
"http://127.0.0.1:3000",
|
||||
],
|
||||
allow_origins=["*"],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
app.include_router(admin_router, prefix="/admin")
|
||||
|
||||
app.include_router(admin_router, prefix="/admin")
|
||||
app.include_router(user_router, prefix="/user")
|
||||
@@ -1,20 +1,11 @@
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class ItemCreate(BaseModel):
|
||||
title: str
|
||||
value: int
|
||||
|
||||
|
||||
class ItemUpdate(BaseModel):
|
||||
title: str
|
||||
value: int
|
||||
|
||||
|
||||
class ItemResponse(BaseModel):
|
||||
id: int
|
||||
title: str
|
||||
value: int
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
Binary file not shown.
@@ -1,35 +1,61 @@
|
||||
import random
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.db.models import Item
|
||||
|
||||
def get_items(db: Session):
|
||||
|
||||
def get_items(
|
||||
db: Session
|
||||
):
|
||||
|
||||
return db.query(Item).all()
|
||||
|
||||
def create_item(db: Session, title: str, value: int): # ✅ prize → value
|
||||
item = Item(title=title, value=value) # ✅ prize → value
|
||||
|
||||
def create_item(
|
||||
db: Session,
|
||||
title: str
|
||||
):
|
||||
|
||||
item = Item(
|
||||
title=title
|
||||
)
|
||||
|
||||
db.add(item)
|
||||
|
||||
db.commit()
|
||||
|
||||
db.refresh(item)
|
||||
|
||||
return item
|
||||
|
||||
def update_item(db: Session, item_id: int, title: str, value: int): # ✅ prize → value
|
||||
item = db.query(Item).filter(Item.id == item_id).first()
|
||||
if item:
|
||||
item.title = title
|
||||
item.value = value # ✅ prize → value
|
||||
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()
|
||||
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):
|
||||
|
||||
def spin_wheel(
|
||||
db: Session
|
||||
):
|
||||
|
||||
items = db.query(Item).all()
|
||||
|
||||
if not items:
|
||||
|
||||
return None
|
||||
|
||||
return random.choice(items)
|
||||
Binary file not shown.
Reference in New Issue
Block a user