diff --git a/backend/.env b/backend/.env index 7841a24..e8403d6 100644 --- a/backend/.env +++ b/backend/.env @@ -1,4 +1,3 @@ -DATABASE_URL=sqlite:///./wheel.db - +DATABASE_URL=sqlite:///./spinwheel.db LOG_ENABLED=true LOG_LEVEL=DEBUG \ No newline at end of file diff --git a/backend/__pycache__/config.cpython-313.pyc b/backend/__pycache__/config.cpython-313.pyc index 3a0cad9..ac76f95 100644 Binary files a/backend/__pycache__/config.cpython-313.pyc and b/backend/__pycache__/config.cpython-313.pyc differ diff --git a/backend/__pycache__/main.cpython-313.pyc b/backend/__pycache__/main.cpython-313.pyc index 5524bfe..8048de5 100644 Binary files a/backend/__pycache__/main.cpython-313.pyc and b/backend/__pycache__/main.cpython-313.pyc differ diff --git a/backend/__pycache__/schemas.cpython-313.pyc b/backend/__pycache__/schemas.cpython-313.pyc index 069f2ab..b605276 100644 Binary files a/backend/__pycache__/schemas.cpython-313.pyc and b/backend/__pycache__/schemas.cpython-313.pyc differ diff --git a/backend/alembic/versions/__pycache__/b55808a86947_add_prize_column.cpython-313.pyc b/backend/alembic/versions/__pycache__/b55808a86947_add_prize_column.cpython-313.pyc new file mode 100644 index 0000000..4f01da5 Binary files /dev/null and b/backend/alembic/versions/__pycache__/b55808a86947_add_prize_column.cpython-313.pyc differ diff --git a/backend/alembic/versions/b55808a86947_add_prize_column.py b/backend/alembic/versions/b55808a86947_add_prize_column.py new file mode 100644 index 0000000..623134a --- /dev/null +++ b/backend/alembic/versions/b55808a86947_add_prize_column.py @@ -0,0 +1,28 @@ +"""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 diff --git a/backend/api/__pycache__/admin.cpython-313.pyc b/backend/api/__pycache__/admin.cpython-313.pyc index 80a2500..d8926f4 100644 Binary files a/backend/api/__pycache__/admin.cpython-313.pyc and b/backend/api/__pycache__/admin.cpython-313.pyc differ diff --git a/backend/api/__pycache__/user.cpython-313.pyc b/backend/api/__pycache__/user.cpython-313.pyc index 891e14f..51e0d47 100644 Binary files a/backend/api/__pycache__/user.cpython-313.pyc and b/backend/api/__pycache__/user.cpython-313.pyc differ diff --git a/backend/api/admin.py b/backend/api/admin.py index 1677316..2d76f01 100644 --- a/backend/api/admin.py +++ b/backend/api/admin.py @@ -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.error(f"Error fetching items: {e}") + logger.critical(f"Unexpected 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) + result = crud.create_item(db, item.title, item.value) # ✅ value اضافه شد logger.info(f"Item created: {item.title}") return result except Exception as e: - logger.error(f"Error creating item: {e}") + logger.critical(f"Unexpected error creating item: {e}") raise @@ -65,5 +65,29 @@ def delete_item( except HTTPException: raise except Exception as e: - logger.error(f"Error deleting item: {e}") - raise \ No newline at end of file + 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 + + \ No newline at end of file diff --git a/backend/api/user.py b/backend/api/user.py index a93d67b..e8e0fb9 100644 --- a/backend/api/user.py +++ b/backend/api/user.py @@ -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.error(f"Error fetching items: {e}") + logger.critical(f"Unexpected error fetching items: {e}") raise @@ -38,4 +38,26 @@ def get_items(db: Session = Depends(get_db)): def spin(db: Session = Depends(get_db)): try: winner = crud.spin_wheel(db) - if not winner: \ No newline at end of file + + 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 \ No newline at end of file diff --git a/backend/app/db/__pycache__/models.cpython-313.pyc b/backend/app/db/__pycache__/models.cpython-313.pyc index 4c2cd42..36d6023 100644 Binary files a/backend/app/db/__pycache__/models.cpython-313.pyc and b/backend/app/db/__pycache__/models.cpython-313.pyc differ diff --git a/backend/app/db/models.py b/backend/app/db/models.py index 8c90d5b..48d048c 100644 --- a/backend/app/db/models.py +++ b/backend/app/db/models.py @@ -18,4 +18,9 @@ class Item(Base): title = Column( String, nullable=False + ) + + value = Column( + Integer, + nullable=False ) \ No newline at end of file diff --git a/backend/config.py b/backend/config.py index 67d7bac..363adcc 100644 --- a/backend/config.py +++ b/backend/config.py @@ -1,10 +1,16 @@ +from pydantic import Field from pydantic_settings import BaseSettings -class Settings(BaseSettings): - DATABASE_URL: str +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") class Config: env_file = ".env" + populate_by_name = True + settings = Settings() \ No newline at end of file diff --git a/backend/core/__pycache__/logger.cpython-313.pyc b/backend/core/__pycache__/logger.cpython-313.pyc index 92185cb..3bfba40 100644 Binary files a/backend/core/__pycache__/logger.cpython-313.pyc and b/backend/core/__pycache__/logger.cpython-313.pyc differ diff --git a/backend/logs/app.log b/backend/logs/app.log index 78e4cd8..c3509ca 100644 --- a/backend/logs/app.log +++ b/backend/logs/app.log @@ -1 +1,289 @@ 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: تخفيف سه ماهه +2026-05-30 11:40:34 | INFO | admin | Items fetched: 8 items +2026-05-30 11:40:38 | INFO | admin | Items fetched: 8 items +2026-05-30 11:40:41 | INFO | admin | Items fetched: 8 items +2026-05-30 11:41:08 | INFO | user | User fetched items: 8 items +2026-05-30 11:41:11 | INFO | user | User fetched items: 8 items +2026-05-30 11:41:12 | INFO | user | User fetched items: 8 items +2026-05-30 11:41:12 | INFO | user | User fetched items: 8 items +2026-05-30 11:41:12 | INFO | user | User fetched items: 8 items +2026-05-30 11:41:13 | INFO | user | User fetched items: 8 items +2026-05-30 11:41:13 | INFO | user | User fetched items: 8 items +2026-05-30 11:41:13 | INFO | user | User fetched items: 8 items +2026-05-30 11:41:13 | INFO | user | User fetched items: 8 items +2026-05-30 11:48:14 | INFO | user | Spin result: پوچ +2026-05-30 11:50:10 | INFO | user | User fetched items: 8 items +2026-05-30 11:50:45 | INFO | user | User fetched items: 8 items +2026-05-30 11:52:01 | INFO | user | User fetched items: 8 items +2026-05-30 11:52:53 | INFO | user | User fetched items: 8 items +2026-05-30 11:52:58 | INFO | user | Spin result: 10% تخفيف يک ماهه +2026-05-30 11:54:03 | INFO | user | User fetched items: 8 items +2026-05-30 11:54:47 | INFO | user | User fetched items: 8 items +2026-05-30 11:56:34 | INFO | user | User fetched items: 8 items +2026-05-30 11:56:38 | INFO | user | User fetched items: 8 items +2026-05-30 11:56:54 | INFO | user | User fetched items: 8 items +2026-05-30 11:57:12 | INFO | user | User fetched items: 8 items +2026-05-30 11:58:04 | INFO | user | User fetched items: 8 items +2026-05-30 12:02:35 | INFO | user | User fetched items: 8 items +2026-05-30 12:02:45 | INFO | user | User fetched items: 8 items +2026-05-30 12:03:29 | INFO | user | User fetched items: 8 items +2026-05-30 12:04:32 | INFO | user | User fetched items: 8 items +2026-05-30 12:05:09 | INFO | user | User fetched items: 8 items +2026-05-30 12:06:05 | INFO | user | User fetched items: 8 items +2026-05-30 12:06:57 | INFO | user | User fetched items: 8 items +2026-05-30 12:07:43 | INFO | user | User fetched items: 8 items +2026-05-30 12:10:41 | INFO | user | User fetched items: 8 items +2026-05-30 12:13:15 | INFO | user | User fetched items: 8 items +2026-05-30 12:13:50 | INFO | user | User fetched items: 8 items +2026-05-30 12:15:50 | INFO | user | User fetched items: 8 items +2026-05-30 12:16:21 | INFO | user | User fetched items: 8 items +2026-05-30 12:17:21 | INFO | user | User fetched items: 8 items +2026-05-30 12:17:45 | INFO | user | User fetched items: 8 items +2026-05-30 12:18:16 | INFO | user | User fetched items: 8 items +2026-05-30 12:19:04 | INFO | user | User fetched items: 8 items +2026-05-30 12:19:18 | INFO | user | User fetched items: 8 items +2026-05-30 12:19:33 | INFO | user | User fetched items: 8 items +2026-05-30 12:19:54 | INFO | user | User fetched items: 8 items +2026-05-30 12:21:31 | INFO | user | User fetched items: 8 items +2026-05-30 12:22:30 | INFO | user | User fetched items: 8 items +2026-05-30 12:23:33 | INFO | user | User fetched items: 8 items +2026-05-30 12:24:29 | INFO | user | User fetched items: 8 items +2026-05-30 12:24:49 | INFO | user | User fetched items: 8 items +2026-05-30 12:25:02 | INFO | user | User fetched items: 8 items +2026-05-30 12:26:12 | INFO | user | User fetched items: 8 items +2026-05-30 12:26:23 | INFO | user | Spin result: تخفيف يک ماهه +2026-05-30 12:27:13 | INFO | user | User fetched items: 8 items +2026-05-30 12:27:39 | INFO | user | User fetched items: 8 items +2026-05-30 12:28:21 | INFO | user | User fetched items: 8 items +2026-05-30 12:28:44 | INFO | user | User fetched items: 8 items +2026-05-30 12:29:09 | INFO | user | User fetched items: 8 items +2026-05-30 12:29:31 | INFO | user | User fetched items: 8 items +2026-05-30 12:29:55 | INFO | user | User fetched items: 8 items +2026-05-30 12:30:01 | INFO | user | Spin result: پوچ +2026-05-30 12:30:51 | INFO | user | User fetched items: 8 items +2026-05-30 12:31:19 | INFO | user | User fetched items: 8 items +2026-05-30 12:31:40 | INFO | user | User fetched items: 8 items +2026-05-30 12:32:00 | INFO | user | User fetched items: 8 items +2026-05-30 12:32:23 | INFO | user | User fetched items: 8 items +2026-05-30 12:32:54 | INFO | user | User fetched items: 8 items +2026-05-30 12:33:20 | INFO | user | User fetched items: 8 items +2026-05-30 12:35:04 | INFO | user | User fetched items: 8 items +2026-05-30 12:35:31 | INFO | user | User fetched items: 8 items +2026-05-30 12:35:48 | INFO | user | User fetched items: 8 items +2026-05-30 12:36:41 | INFO | user | User fetched items: 8 items +2026-05-30 12:37:39 | INFO | user | User fetched items: 8 items +2026-05-30 12:38:22 | INFO | user | User fetched items: 8 items +2026-05-30 12:38:45 | INFO | user | User fetched items: 8 items +2026-05-30 12:39:00 | INFO | user | User fetched items: 8 items +2026-05-30 12:43:07 | INFO | user | User fetched items: 8 items +2026-05-30 12:43:19 | INFO | user | Spin result: تخفيف يک ماهه +2026-05-30 12:45:27 | INFO | user | User fetched items: 8 items +2026-05-30 12:49:55 | INFO | user | User fetched items: 8 items +2026-05-30 12:50:43 | INFO | admin | Items fetched: 8 items +2026-05-30 12:51:00 | INFO | user | User fetched items: 8 items +2026-05-30 12:53:57 | INFO | user | Spin result: پوچ diff --git a/backend/logs/error.log b/backend/logs/error.log index e69de29..9d08148 100644 --- a/backend/logs/error.log +++ b/backend/logs/error.log @@ -0,0 +1,40 @@ +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) diff --git a/backend/main.py b/backend/main.py index 003c12e..fa62976 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,21 +1,29 @@ 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") -app = FastAPI() - +Base.metadata.create_all(bind=engine) app.add_middleware( CORSMiddleware, - allow_origins=["*"], + allow_origins=[ + "http://localhost:3000", + "http://127.0.0.1:3000", + ], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) - -app.include_router(admin_router, prefix="/admin") -app.include_router(user_router, prefix="/user") \ No newline at end of file +app.include_router(admin_router, prefix="/admin") \ No newline at end of file diff --git a/backend/schemas.py b/backend/schemas.py index e36081c..45c04a2 100644 --- a/backend/schemas.py +++ b/backend/schemas.py @@ -1,11 +1,20 @@ 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 \ No newline at end of file diff --git a/backend/services/__pycache__/crud.cpython-313.pyc b/backend/services/__pycache__/crud.cpython-313.pyc index a988918..3c9f161 100644 Binary files a/backend/services/__pycache__/crud.cpython-313.pyc and b/backend/services/__pycache__/crud.cpython-313.pyc differ diff --git a/backend/services/crud.py b/backend/services/crud.py index b9545a4..c17828a 100644 --- a/backend/services/crud.py +++ b/backend/services/crud.py @@ -1,61 +1,35 @@ 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 -): - - item = Item( - title=title - ) - +def create_item(db: Session, title: str, value: int): # ✅ prize → value + item = Item(title=title, value=value) # ✅ prize → value 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() - +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: - - db.delete(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() + 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) \ No newline at end of file diff --git a/backend/wheel.db b/backend/spinwheel.db similarity index 56% rename from backend/wheel.db rename to backend/spinwheel.db index 61ec360..f2d2d47 100644 Binary files a/backend/wheel.db and b/backend/spinwheel.db differ diff --git a/frontend/admin.html b/frontend/admin.html index 0ae1a68..462e254 100644 --- a/frontend/admin.html +++ b/frontend/admin.html @@ -1,20 +1,92 @@ +
-مدیریت آیتمها و جوایز گردونه
+| # | +عنوان جایزه | +مقدار | +عملیات | +
|---|