Compare commits
1 Commits
df3ccb1886
...
spin-wheel
| Author | SHA1 | Date | |
|---|---|---|---|
| 3db63569e6 |
329
backend/README.md
Normal file
329
backend/README.md
Normal file
@@ -0,0 +1,329 @@
|
||||
# Spin Wheel System
|
||||
|
||||
A web-based Lucky Wheel application developed with **FastAPI**, **JavaScript**, and **SQLite**. The system allows administrators to manage rewards, configure winning probabilities, customize the wheel appearance, and provide an engaging user experience with animations and sound effects.
|
||||
|
||||
---
|
||||
|
||||
# Features
|
||||
|
||||
## User Features
|
||||
|
||||
* Interactive spin wheel
|
||||
* Smooth spinning animations
|
||||
* Sound effects during wheel rotation
|
||||
* Winner notification modal
|
||||
* Reward description display
|
||||
* Responsive user interface
|
||||
* Customizable page title
|
||||
* Customizable background color
|
||||
|
||||
## Admin Features
|
||||
|
||||
* Create, edit, and delete rewards
|
||||
* Configure reward probabilities
|
||||
* Manage reward descriptions
|
||||
* Configure wheel page title
|
||||
* Customize wheel appearance
|
||||
* Manage reward types
|
||||
* Real-time reward management
|
||||
|
||||
---
|
||||
|
||||
# Supported Reward Types
|
||||
|
||||
The system supports three reward categories:
|
||||
|
||||
| Reward Type | Description |
|
||||
| ------------- | ------------------------- |
|
||||
| Empty | No reward |
|
||||
| Discount Code | Promotional discount code |
|
||||
| LiveCoin (LC) | Virtual currency reward |
|
||||
|
||||
---
|
||||
|
||||
# Technology Stack
|
||||
|
||||
## Backend
|
||||
|
||||
* Python 3.10+
|
||||
* FastAPI
|
||||
* SQLAlchemy
|
||||
* Alembic
|
||||
* SQLite
|
||||
|
||||
## Frontend
|
||||
|
||||
* HTML5
|
||||
* CSS3
|
||||
* JavaScript (Vanilla JS)
|
||||
* Dana Font
|
||||
|
||||
## Development Tools
|
||||
|
||||
* Git
|
||||
* Uvicorn
|
||||
|
||||
---
|
||||
|
||||
# Project Structure
|
||||
|
||||
```text
|
||||
spin-wheel/
|
||||
│
|
||||
├── backend/
|
||||
│ ├── alembic/
|
||||
│ ├── api/
|
||||
│ │ ├── admin.py
|
||||
│ │ └── user.py
|
||||
│ │
|
||||
│ ├── app/
|
||||
│ ├── core/
|
||||
│ ├── logs/
|
||||
│ ├── services/
|
||||
│ │
|
||||
│ ├── main.py
|
||||
│ ├── schemas.py
|
||||
│ ├── config.py
|
||||
│ ├── requirements.txt
|
||||
│ └── spinwheel.db
|
||||
│
|
||||
├── frontend/
|
||||
│ ├── assets/
|
||||
│ │ ├── css/
|
||||
│ │ └── fonts/
|
||||
│ │
|
||||
│ ├── js/
|
||||
│ │ ├── admin.js
|
||||
│ │ └── api.js
|
||||
│ │
|
||||
│ ├── admin.html
|
||||
│ └── index.html
|
||||
│
|
||||
└── README.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Installation
|
||||
|
||||
## 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd spin-wheel
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Create a Virtual Environment
|
||||
|
||||
### Windows
|
||||
|
||||
```bash
|
||||
python -m venv venv
|
||||
venv\Scripts\activate
|
||||
```
|
||||
|
||||
### Linux / macOS
|
||||
|
||||
```bash
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Install Backend Dependencies
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Configure Environment Variables
|
||||
|
||||
Create a `.env` file inside the backend directory if required.
|
||||
|
||||
Example:
|
||||
|
||||
```env
|
||||
DATABASE_URL=sqlite:///spinwheel.db
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Run Database Migrations
|
||||
|
||||
```bash
|
||||
alembic upgrade head
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Start Backend Server
|
||||
|
||||
```bash
|
||||
uvicorn main:app --reload
|
||||
```
|
||||
|
||||
Backend API:
|
||||
|
||||
```text
|
||||
http://127.0.0.1:8000
|
||||
```
|
||||
|
||||
Swagger Documentation:
|
||||
|
||||
```text
|
||||
http://127.0.0.1:8000/docs
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. Start Frontend
|
||||
|
||||
Serve the frontend application on port 3000.
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
python -m http.server 3000
|
||||
```
|
||||
|
||||
Frontend URL:
|
||||
|
||||
```text
|
||||
http://localhost:3000/index.html
|
||||
http://localhost:3000/admin.html
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# API Endpoints
|
||||
|
||||
## User APIs
|
||||
|
||||
### Get Rewards
|
||||
|
||||
```http
|
||||
GET /user/items
|
||||
```
|
||||
|
||||
### Spin the Wheel
|
||||
|
||||
```http
|
||||
POST /user/spin
|
||||
```
|
||||
|
||||
Example Response:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 1,
|
||||
"reward_type": "DISCOUNT_CODE",
|
||||
"title": "20% Discount",
|
||||
"description": "Get 20% off on your next purchase.",
|
||||
"probability": 15
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Admin APIs
|
||||
|
||||
### Get Rewards
|
||||
|
||||
```http
|
||||
GET /admin/items
|
||||
```
|
||||
|
||||
### Create Reward
|
||||
|
||||
```http
|
||||
POST /admin/items
|
||||
```
|
||||
|
||||
### Update Reward
|
||||
|
||||
```http
|
||||
PUT /admin/items/{id}
|
||||
```
|
||||
|
||||
### Delete Reward
|
||||
|
||||
```http
|
||||
DELETE /admin/items/{id}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Reward Probability System
|
||||
|
||||
Each reward has a configurable probability value.
|
||||
|
||||
The winner is selected using a weighted random selection algorithm.
|
||||
|
||||
Example:
|
||||
|
||||
| Reward | Probability |
|
||||
| ------------- | ----------- |
|
||||
| Empty | 50 |
|
||||
| Discount Code | 30 |
|
||||
| LiveCoin | 20 |
|
||||
|
||||
Higher values increase the chance of winning that reward.
|
||||
|
||||
---
|
||||
|
||||
# Customization Options
|
||||
|
||||
The admin panel allows configuration of:
|
||||
|
||||
* Wheel page title
|
||||
* Background color
|
||||
* Reward descriptions
|
||||
* Reward probabilities
|
||||
* Reward types
|
||||
* Wheel appearance
|
||||
|
||||
---
|
||||
|
||||
# User Experience Enhancements
|
||||
|
||||
* Wheel spinning animation
|
||||
* Sound effects
|
||||
* Winner modal popup
|
||||
* Reward details display
|
||||
* Modern Persian typography using Dana Font
|
||||
|
||||
---
|
||||
|
||||
# Future Improvements
|
||||
|
||||
* Authentication & Authorization
|
||||
* User Accounts
|
||||
* Spin History
|
||||
* Analytics Dashboard
|
||||
* Campaign Management
|
||||
* Multi-language Support
|
||||
* Docker Deployment
|
||||
|
||||
---
|
||||
|
||||
# Security Recommendations
|
||||
|
||||
For production environments:
|
||||
|
||||
* Enable HTTPS
|
||||
* Protect admin endpoints
|
||||
* Validate all incoming requests
|
||||
* Store secrets in environment variables
|
||||
* Configure proper CORS policies
|
||||
|
||||
---
|
||||
|
||||
# License
|
||||
|
||||
This project is intended for educational purposes and commercial lucky wheel campaigns. It can be extended and customized based on business requirements.
|
||||
Reference in New Issue
Block a user