ที่มาและปัญหา (Problem Statement):
การจัดการแข่งขัน eSports ระดับคอมมูนิตี้หรือทัวร์นาเมนต์ทางการมักประสบปัญหาการบันทึกคะแนนล่าช้า ตารางแข่งขันไม่เป็นปัจจุบัน การคำนวณสถิติรายบุคคล (MVP, KDA, Win Rate) มีความซับซ้อน และการรักษาความปลอดภัยของระบบกรอกผลแข่งหลังบ้านมักมีช่องโหว่
แนวทางการแก้ไข (Solution):
RoV SN Tournament Official (v3.0) ถูกพัฒนาขึ้นเพื่อเป็นแพลตฟอร์มศูนย์กลางครบวงจร ขับเคลื่อนด้วยสถาปัตยกรรม Modern Serverless:
| ฟีเจอร์ | รายละเอียดทางเทคนิค |
|---|---|
| 🏟️ Tournament Dashboard | ตารางแข่งขัน, ผลการแข่งย้อนหลัง, อันดับคะแนน (Standings) แบบ Real-time |
| 📊 Player & Team Stats | สถิติผู้เล่นรายบุคคล, MVP, KDA, Win Rate — คำนวณระดับ Database ด้วย RPC |
| 🎮 Hero Analytics | วิเคราะห์ฮีโร่ยอดนิยม, อัตราชนะ (Win Rate), Pick Rate และ Ban Rate |
| 🛡️ Comprehensive Admin Panel | จัดการทีม, รายชื่อผู้เล่น, จับฉลากแบ่งสาย, บันทึกผลแมตช์, อัปโหลดโลโก้ทีม |
| 🔐 SSO & Role-Based Auth | ยืนยันตัวตนผ่าน Supabase Auth พร้อมตรวจสอบสิทธิ์ Role (Admin/User) ทุกระดับ |
| 🌏 Multi-language Support | รองรับการสลับภาษาทั้งไทยและอังกฤษอย่างราบรื่น |
graph TD
Client["💻 Client (Browser / Mobile)"] --> Edge["⚡ Vercel Edge Middleware (Auth Guard)"]
Edge --> RSC["🖥️ Next.js 15 App Router (RSC)"]
Edge --> Admin["🛡️ Next.js Admin Client Pages"]
RSC --> ServerActions["⚙️ Server Actions (Business Logic)"]
Admin --> ServerActions
ServerActions --> SupabaseSDK["🔒 Supabase SDK (HTTPS)"]
subgraph SupabaseCloud ["☁️ Supabase Cloud Platform"]
SupabaseSDK --> RLS["🛡️ Row Level Security (40 Policies)"]
RLS --> PG[("🗄️ PostgreSQL (10 Tables, 4 Core RPCs)")]
SupabaseSDK --> Storage["📦 Supabase Storage (Team Logos, Hero Images)"]
SupabaseSDK --> Auth["🔑 Supabase Auth (SSO & Profiles)"]
end
จุดเด่นทางสถาปัตยกรรม: ไร้ Monolithic Express Server, ไร้ปัญหา CORS, ทำงานแบบ 100% Serverless Function บน Vercel พร้อม Data Layer ประสิทธิภาพสูงบน Supabase
ระบบยึดหลักการรักษาความปลอดภัยแบบหลายชั้น (Multi-layered Protection):
| ชั้นความปลอดภัย | เทคโนโลยี | บทบาทและหน้าที่ |
|---|---|---|
| 1️⃣ Edge Middleware | Vercel Edge Runtime | ดักจับและสกัดกั้นเส้นทาง /admin/* ก่อนที่ Request จะเข้าถึง Server |
| 2️⃣ Server Actions | Next.js Server Runtime | ตรวจสอบ Session Token และสิทธิ์ Role ของผู้ใช้ก่อนเริ่มทำ Data Mutation |
| 3️⃣ Row Level Security | PostgreSQL Engine | ป้อมปราการด่านสุดท้าย ควบคุมสิทธิ์การ Read/Write ในระดับแถวข้อมูล (Row-Level) |
profiles: ข้อมูลโปรไฟล์ผู้ใช้งานและ Role กำกับสิทธิ์tournaments: ข้อมูลรายการแข่งขัน eSportsteams: ข้อมูลทีมแข่งขันและ URL โลโก้players: รายชื่อผู้เล่นและ IGN (In-Game Name)matches: รายละเอียดผลการแข่งขัน (รองรับ Bo3 / Bo5)game_stats: สถิติรายเกมแบบละเอียด (K/D/A, MVP, ฮีโร่ที่ใช้)schedules: ตารางกำหนดการแข่งขันheroes: ข้อมูลฮีโร่ RoV และรูปภาพประจำตัวaudit_logs: บันทึกประวัติและ Timestamp การเปลี่ยนแปลงข้อมูลของ Adminseasons: ข้อมูลฤดูกาลแข่งขันcalculate_tournament_standings: คำนวณอันดับคะแนน ผลต่างได้-เสีย (Game Difference) อัตโนมัติget_player_leaderboard: จัดอันดับผู้เล่นยอดเยี่ยม (KDA Leaderboard, MVP count, Win Rate)get_team_stats: ประมวลผลสถิติภาพรวมระดับทีมget_season_overview: สรุปข้อมูลสถิติภาพรวมประจำฤดูกาลApp-RoV-Tournament-Platform-2026/
├── app/ # Next.js 15 App Router
│ ├── (public)/ # หน้าแสดงผลสาธารณะ (RSC)
│ │ ├── standings/ # ตารางคะแนนการแข่งขัน
│ │ ├── schedule/ # กำหนดการแข่งขัน
│ │ ├── results/ # รายงานผลการแข่งขัน
│ │ └── stats/ # สถิติผู้เล่นและทีม
│ └── admin/ # แผงควบคุมผู้ดูแลระบบ (Protected Routes)
│ ├── draw/ # ระบบจับฉลากตารางสายแข่ง
│ ├── game-stats/ # หน้าบันทึกสถิติรายแมตช์
│ ├── teams/ # จัดการทีมและอัปโหลดโลโก้
│ └── history/ # ระบบ Audit Log
├── components/ # Shared Reusable UI Components
├── features/ # Server Actions & Modular Business Logic
├── lib/ # Server & Client Data Fetching Utilities
├── utils/supabase/ # Supabase Client, Server, and Middleware Helpers
├── supabase/migrations/ # SQL Migration Files (Schemas, RLS, RPCs)
├── middleware.ts # Edge Route Guard Middleware
└── README.md # เอกสารแนะนำโปรเจกต์
git clone https://github.com/PhuriphatTyPeZ3r0/App-RoV-Tournament-Platform-2026.git
cd App-RoV-Tournament-Platform-2026
npm install
.env.local ในรูทของโปรเจกต์:
NEXT_PUBLIC_SUPABASE_URL=https://[YOUR_PROJECT_ID].supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=[YOUR_SUPABASE_ANON_KEY]
team-logos (ตั้งค่าเป็น Public)hero-images (ตั้งค่าเป็น Public)npm run dev
เปิดเบราว์เซอร์ไปที่: http://localhost:3000
โปรเจกต์นี้ได้รับการตั้งค่าให้รองรับการ Deploy ผ่าน Vercel อย่างสมบูรณ์:
NEXT_PUBLIC_SUPABASE_URL และ NEXT_PUBLIC_SUPABASE_ANON_KEY| เวอร์ชัน | สถาปัตยกรรม (Architecture) | จุดเด่นและข้อสังเกต |
|---|---|---|
| v1.0 | React SPA + Express.js + MongoDB | สถาปัตยกรรมแบบ Monolithic API เดิม |
| v2.0 | Next.js + Express API + MongoDB | แยกฝั่ง Frontend / Backend พร้อมเพิ่ม SSR |
| v3.0 | Next.js 15 + Supabase (Fullstack Serverless) | สถาปัตยกรรมปัจจุบัน: RLS, RPCs, Edge Middleware, Zero CORS |
Phuriphat Hemakul (PhuriphatTyPeZ3r0)