# Implementation Guide - Gaming Tournament Platform

## Project Overview

এটি একটি সম্পূর্ণ গেমিং টুর্নামেন্ট প্ল্যাটফর্ম যা নিম্নলিখিত প্রধান উপাদান অন্তর্ভুক্ত করে:

1. **ব্যবহারকারী ব্যবস্থাপনা** - নিবন্ধন, লগইন, প্রোফাইল
2. **ওয়ালেট সিস্টেম** - ডিপোজিট, উইথড্রও, লেজার ট্র্যাকিং
3. **টুর্নামেন্ট ম্যানেজমেন্ট** - ম্যাচ তৈরি, যোগদান, ফলাফল
4. **পেমেন্ট প্রসেসিং** - bKash, Nagad, Rocket
5. **প্রশাসক প্যানেল** - সম্পূর্ণ ব্যবস্থাপনা সুবিধা

## প্রকল্প কাঠামো

```
/src
  /app                    # Next.js App Router
    /api                  # API endpoints
      /auth              # Authentication endpoints
      /matches           # Match operations
      /wallet            # Wallet operations
      /admin             # Admin operations
    /dashboard           # User dashboard pages
    /components          # Reusable components
    /layout.tsx          # Root layout
    /page.tsx            # Home page
  /components
    /ui                  # UI components
      Header.tsx
      Footer.tsx
      MatchCard.tsx
      WalletCard.tsx
  /db
    index.ts            # Database connection
    schema.ts           # Drizzle schema
  /lib
    auth.ts             # Auth utilities
    utils.ts            # General utilities
  /types
    index.ts            # TypeScript types
  /app/globals.css      # Global styles

/database
  schema.sql            # PostgreSQL schema

/public
  /uploads              # User uploads

.env.example           # Environment variables template
README.md              # User documentation
```

## প্রধান বৈশিষ্ট্য বাস্তবায়ন

### 1. ব্যবহারকারী প্রমাণীকরণ

**ফাইল:** `src/app/api/auth/register/route.ts`, `src/app/api/auth/login/route.ts`

**মূল বিষয়:**
- PDO প্রস্তুত বিবৃতি (SQL ইনজেকশন প্রতিরোধ)
- BCrypt পাসওয়ার্ড হ্যাশিং
- ইনপুট যাচাইকরণ
- ফোন নম্বর ইউনিকনেস

**কাজ করার জন্য প্রয়োজনীয় কাজ:**
- [ ] ইমেইল যাচাইকরণ
- [ ] দুই-ফ্যাক্টর প্রমাণীকরণ
- [ ] পাসওয়ার্ড রিসেট

### 2. ওয়ালেট সিস্টেম

**ফাইল:** 
- `src/app/api/wallet/deposit/route.ts`
- `src/app/api/wallet/withdrawal/route.ts`
- `src/app/api/admin/deposit/approve/route.ts`

**মূল বিষয়:**
- ডাবল-এন্ট্রি বুককিপিং
- অপরিবর্তনীয় লেজার
- রিয়েল টাইম ব্যালেন্স ট্র্যাকিং
- লেনদেন ID বাহ্যিকীকরণ (SHA-256)

**কাজ করার জন্য প্রয়োজনীয় কাজ:**
- [ ] ডাটাবেস লেনদেন সহ সম্পূর্ণ পরিসীমা
- [ ] রোল-ব্যাক মেকানিজম
- [ ] লেনদেন ব্লকিং

### 3. ম্যাচ যোগদান

**ফাইল:** `src/app/api/matches/join/route.ts`

**মূল বিষয়:**
- স্লট যাচাইকরণ
- ব্যালেন্স যাচাইকরণ
- ডুপ্লিকেট যোগদান প্রতিরোধ
- স্বয়ংক্রিয় উইথড্রো

**কাজ করার জন্য প্রয়োজনীয় কাজ:**
- [ ] ডাটাবেস লেনদেন সঙ্গে সম্পূর্ণ কাঠামো
- [ ] টিম যোগদান যুক্তি
- [ ] চেক-ইন সিস্টেম

### 4. পুরস্কার বিতরণ

**ফাইল:** `src/app/api/admin/winning/distribute/route.ts`

**মূল বিষয়:**
- ইউনিক পুরস্কার কনস্ট্রেইন্ট
- স্বয়ংক্রিয় ওয়ালেট আপডেট
- লেজার প্রবিষ্টি

**কাজ করার জন্য প্রয়োজনীয় কাজ:**
- [ ] বাল্ক পুরস্কার বিতরণ
- [ ] স্বয়ংক্রিয় স্কোরিং

## নিরাপত্তা বাস্তবায়ন

### SQL ইনজেকশন প্রতিরোধ
```typescript
// সঠিক - প্রস্তুত বিবৃতি ব্যবহার
const user = await db.query.users.findFirst({
  where: eq(users.phone, phone),
});

// ভুল - কখনও এটি করবেন না
const query = `SELECT * FROM users WHERE phone = '${phone}'`;
```

### পাসওয়ার্ড সুরক্ষা
```typescript
// সঠিক
import { hash, compare } from 'bcryptjs';
const hashedPassword = await hash(password, 12);
const isValid = await compare(inputPassword, hashedPassword);

// ভুল
const hashedPassword = md5(password); // কখনও MD5 ব্যবহার করবেন না
```

### লেনদেন ID বাহ্যিকীকরণ
```typescript
// সঠিক - SHA-256 হ্যাশিং
function generateTransactionHash(transactionId: string): string {
  return crypto
    .createHash('sha256')
    .update(transactionId.trim().toUpperCase())
    .digest('hex');
}

// যাচাই করুন যে হ্যাশ ইতিমধ্যে বিদ্যমান
const existing = await db.query.depositRequests.findFirst({
  where: sql`trx_hash = ${trxHash}`,
});
```

## পরবর্তী বাস্তবায়ন পদক্ষেপ

### ফেজ 1: মূল এন্ডপয়েন্ট (সম্পূর্ণ)
- ✅ ব্যবহারকারী নিবন্ধন এবং লগইন
- ✅ ডিপোজিট/উইথড্রও অনুরোধ
- ✅ ম্যাচ যোগদান যুক্তি
- ✅ পুরস্কার বিতরণ

### ফেজ 2: ব্যবহারকারী ইন্টারফেস (অংশত সম্পূর্ণ)
- ✅ হোম পৃষ্ঠা
- ✅ নিবন্ধন পৃষ্ঠা
- ✅ লগইন পৃষ্ঠা
- ✅ ড্যাশবোর্ড
- ✅ টুর্নামেন্ট তালিকা
- ✅ ডিপোজিট পৃষ্ঠা
- ⬜ উইথড্রও পৃষ্ঠা (স্টাব)
- ⬜ প্রোফাইল সম্পাদনা (স্টাব)
- ⬜ আমার ম্যাচ (স্টাব)

### ফেজ 3: প্রশাসক প্যানেল (স্টাব)
- ⬜ ব্যবহারকারী ব্যবস্থাপনা
- ⬜ ডিপোজিট অনুমোদন
- ⬜ উইথড্রও অনুমোদন
- ⬜ ম্যাচ ব্যবস্থাপনা
- ⬜ পুরস্কার বিতরণ
- ⬜ অডিট লগ

### ফেজ 4: উন্নত বৈশিষ্ট্য (স্টাব)
- ⬜ SMS নোটিফিকেশন
- ⬜ ইমেইল নোটিফিকেশন
- ⬜ রেফারেল সিস্টেম
- ⬜ লিডারবোর্ড
- ⬜ টিম ব্যবস্থাপনা

## ডাটাবেস মাইগ্রেশন

### প্রাথমিক সেটআপ
```bash
# PostgreSQL এ সংযোগ করুন
psql -U postgres

# নতুন ডাটাবেস তৈরি করুন
CREATE DATABASE gaming_tournament;

# স্কিমা চালান
psql -U postgres -d gaming_tournament < database/schema.sql

# যাচাই করুন যে টেবিল তৈরি হয়েছে
\dt
```

### ড্রিজল মাইগ্রেশন
```bash
# নতুন মাইগ্রেশন তৈরি করুন
pnpm exec drizzle-kit generate:pg

# মাইগ্রেশন চালান
pnpm exec drizzle-kit migrate
```

## পরিবেশ ভেরিয়েবল সেটআপ

```bash
# .env.local তে নিম্নলিখিত যোগ করুন:

# ডাটাবেস
DATABASE_URL="postgresql://user:password@localhost:5432/gaming_tournament"

# প্রমাণীকরণ
NEXTAUTH_SECRET="আপনার-গোপন-কী-এখানে"
NEXTAUTH_URL="http://localhost:3000"

# পেমেন্ট সেটিংস
MIN_DEPOSIT_AMOUNT="10"
MAX_DEPOSIT_AMOUNT="50000"
WITHDRAWAL_CHARGE="0"

# SMS (ঐচ্ছিক)
SMS_PROVIDER="nexmo"
SMS_API_KEY="আপনার-api-key"
```

## পরীক্ষা চেকলিস্ট

### ব্যবহারকারী নিবন্ধন
- [ ] বৈধ ইনপুট নিবন্ধন সফল
- [ ] ডুপ্লিকেট ফোন সংখ্যা প্রত্যাখ্যান করা
- [ ] দুর্বল পাসওয়ার্ড প্রত্যাখ্যান করা
- [ ] ইউজারনেম ইউনিকনেস যাচাই

### ওয়ালেট কার্যক্ষমতা
- [ ] ডিপোজিট রিকোয়েস্ট সাবমিশন
- [ ] লেনদেন ID বাহ্যিকীকরণ কাজ করে
- [ ] ডাবল ডিপোজিট প্রত্যাখ্যান করা হয়
- [ ] প্রশাসক অনুমোদন ব্যালেন্স আপডেট করে

### ম্যাচ যোগদান
- [ ] পর্যাপ্ত ব্যালেন্স সহ যোগদান সফল
- [ ] অপর্যাপ্ত ব্যালেন্স সহ যোগদান প্রত্যাখ্যান করা
- [ ] ডুপ্লিকেট যোগদান প্রত্যাখ্যান করা
- [ ] স্লট পূর্ণ হলে যোগদান প্রত্যাখ্যান করা

## সাধারণ সমস্যা সমাধান

### "পাসওয়ার্ড প্রয়োজনীয়তা পূরণ করে না"
**সমাধান:** পাসওয়ার্ড অবশ্যই:
- কমপক্ষে ৮ অক্ষর হতে হবে
- কমপক্ষে একটি বড় অক্ষর থাকতে হবে
- কমপক্ষে একটি ছোট অক্ষর থাকতে হবে
- কমপক্ষে একটি সংখ্যা থাকতে হবে

### "এই Transaction ID ইতিমধ্যে ব্যবহার করা হয়েছে"
**সমাধান:** প্রতিটি ডিপোজিট অবশ্যই একটি অনন্য লেনদেন ID ব্যবহার করবে। আপনার পেমেন্ট সেবা থেকে একটি নতুন ID পান।

### "আপনার পর্যাপ্ত Deposit Balance নেই"
**সমাধান:** আপনার ডিপোজিট ব্যালেন্স অবশ্যই কমপক্ষে প্রবেশ ফি এর সমান হতে হবে। ড্যাশবোর্ডে আরও ডিপোজিট করুন।

## উত্পাদন স্থাপনা চেকলিস্ট

- [ ] Environment variables সেট করুন
- [ ] ডাটাবেস ব্যাকআপ নিন
- [ ] SSL সার্টিফিকেট সক্ষম করুন
- [ ] লগিং সেটআপ করুন
- [ ] মনিটরিং সক্ষম করুন
- [ ] রেট লিমিটিং সক্ষম করুন
- [ ] ব্যাকআপ সিস্টেম সেটআপ করুন

## সহায়তা এবং রক্ষণাবেক্ষণ

### নিয়মিত কাজ
- দৈনিক: লগ চেক করুন
- সাপ্তাহিক: ডাটাবেস ব্যাকআপ
- মাসিক: পারফরম্যান্স পর্যালোচনা

### পর্যবেক্ষণ
- পরিদর্শন ট্র্যাকিং
- ত্রুটির হার
- ডাটাবেস কর্মক্ষমতা
- পেমেন্ট ব্যর্থতা

---

**শেষ আপডেট:** ২০২৪
**সংস্করণ:** ১.০
