รวมวิธีใช้งานทุกระบบของฟาอีฉงเต๋อ — บันทึกชั้นเรียน กิจกรรม ระบบสมาชิกกลาง คลังโอวาท และคลังความรู้ฟาอีฉงเต๋อ
FYCDTH มี 5 ระบบที่เชื่อมต่อกัน ทุกระบบใช้ ระบบสมาชิกกลาง (id.fycdth.com) เข้าสู่ระบบครั้งเดียวใช้ได้ทุกเว็บ
บันทึก จัดเก็บ และแชร์เนื้อหาการเรียน สไลด์ วิดีโอ และรูปภาพของแต่ละชั้นเรียน
ลงทะเบียนกิจกรรม เช็คอิน จัดฝ่ายงาน กำหนดการ การเงิน และใบประกาศ
เข้าสู่ระบบครั้งเดียวใช้ได้ทุกเว็บ จัดการสมาชิก สถานธรรม และสิทธิ์การเข้าถึง
ค้นหาและอ่านโอวาท เสี่ยงทาย บันทึกที่ชอบ และกำแพงกำลังใจ
ศูนย์รวมความรู้และสื่อการสอนกลาง — เนื้อหาธรรม เกมธรรมะ รูปแบบจัดชั้นเรียน วิธีบรรยาย และสไลด์กลาง
ระบบกลางสำหรับบันทึกและจัดเก็บเนื้อหาการเรียนของทุกชั้นเรียน (ซินหมิน จื้อซัน เผยเต๋อ ฯลฯ) รองรับสไลด์ วิดีโอ YouTube และอัลบั้มรูปภาพ พร้อมระบบแชร์ที่ควบคุมการเข้าถึงได้
ระบบจัดการกิจกรรมครบวงจร ตั้งแต่เปิดรับลงทะเบียน เช็คอินหน้างาน จัดฝ่ายงาน ไปจนถึงการเงินและออกใบประกาศ
ระบบยืนยันตัวตนกลาง — เข้าสู่ระบบครั้งเดียว ใช้ได้ทุกเว็บ (Single Sign-On) จัดการบัญชีสมาชิก สถานธรรม ภาค และตำแหน่งทางธรรมทั้งหมดไว้ที่เดียว
คลังพระโอวาทพร้อมระบบสุ่ม ค้นหา อ่านฉบับเต็ม ฟังเสียง AI และบันทึกที่ชื่นชอบ — ออกแบบให้ "สุ่มได้สาธารณะ" แต่ "เนื้อหาเชิงลึกสงวนสำหรับสมาชิกอาณาจักรธรรมที่ได้รับอนุมัติ" พร้อมระบบติดตามและคุ้มครองเนื้อหา
| ส่วน | ใครเข้าได้ |
|---|---|
| หน้าสุ่มพระโอวาท (หน้าแรก) | ✅ ทุกคน ไม่ต้องล็อกอิน |
| ค้นหา / อ่านฉบับเต็ม / บันทึก / กำแพงกำลังใจ / คัดสรร / โปรไฟล์ | 🔒 เฉพาะ สมาชิกที่อนุมัติแล้ว หรือแอดมิน |
| ส่วน | ใช้ |
|---|---|
| เว็บแอป | Next.js (App Router) + Tailwind CSS · โฮสต์บน Vercel |
| ฐานข้อมูล | Supabase (PostgreSQL) — teachings, curated, reviews, members, audit_log ฯลฯ |
| ล็อกอิน | FYCD Core SSO (OAuth2 + PKCE, JWT) → session ของแอป (เข้ารหัส) |
| เสียง | Text-to-Speech (อ่านพระโอวาทเป็นเสียง AI) |
แผนผังความสัมพันธ์ของตารางทั้งหมดในระบบคลังโอวาท — แสดงทุกคอลัมน์ ชนิดข้อมูล กุญแจหลัก (PK) กุญแจนอก (FK) และความสัมพันธ์ระหว่างตาราง เลื่อน/ซูมในกรอบด้านล่างเพื่อดูรายละเอียด
members.user_id คือ sub จาก FYCD Core (id.fycdth.com) ไม่ใช่ผู้ใช้ที่สร้างใน owat เอง · ส่วนกลุ่ม Better Auth (user/session/account) เป็นระบบล็อกอินสำรองภายใน
erDiagram
teachings ||--o{ curated_teachings : "source_id"
teachings ||--o{ passage_embeddings : "teaching_id"
teachings ||--o{ teaching_views : "teaching_id"
teachings ||--o{ teaching_likes : "teaching_id"
teachings ||--o{ oracle_logs : "source_id"
teachings ||--o{ audio_reports : "teaching_id"
teachings ||--o{ user_favorites : "teaching_id"
members ||--o{ audit_log : "user_id"
members ||--o{ teaching_views : "member_id"
user ||--o{ session : "userId"
user ||--o{ account : "userId"
user ||--o{ user_favorites : "userId"
teachings {
text id PK "รหัสบท เช่น 690509_xxx"
text content_th "เนื้อหา (ไทย)"
text content_zh "เนื้อหา (จีน)"
text content_en "เนื้อหา (อังกฤษ)"
text deity_th "ผู้ประทาน (ไทย)"
text deity_zh "ผู้ประทาน (จีน)"
text deity_en "ผู้ประทาน (อังกฤษ)"
text location_th "สถานที่ (ไทย)"
text location_zh "สถานที่ (จีน)"
text location_en "สถานที่ (อังกฤษ)"
text temple_th "สถานธรรม"
text province_th "จังหวัด"
text country "ประเทศ"
date date "วันที่ประทาน"
text category "หมวด"
boolean audio_approved "อนุมัติเสียง AI"
int view_count "ยอดดู (นับรวม)"
int like_count "ยอดถูกใจ (นับรวม)"
timestamptz created_at "วันที่เพิ่ม"
}
curated_teachings {
text id PK "รหัสบทคัดสรร"
text text "ข้อความคัดสรร"
text category "หมวด"
text source_id FK "อ้างอิง teachings.id"
text deity "ผู้ประทาน"
boolean audio_approved "อนุมัติเสียง"
timestamptz created_at "วันที่เพิ่ม"
}
passage_embeddings {
text passage_id PK "teachingId#idx"
text teaching_id FK "อ้างอิง teachings.id"
int idx "ลำดับย่อหน้า"
text text "ข้อความย่อหน้า"
vector embedding "เวกเตอร์ 1536 มิติ (pgvector) ค้นหาความหมาย"
timestamptz updated_at "อัปเดตล่าสุด"
}
members {
text user_id PK "sub จาก FYCD Core"
text email "อีเมล"
text name "ชื่อแสดง"
text image_url "รูปโปรไฟล์"
text status "pending|approved|rejected"
text source "admin|fycd_core|auto"
text approved_by "แอดมินที่อนุมัติ"
timestamptz approved_at "เวลาอนุมัติ"
text note "หมายเหตุ"
timestamptz created_at "สมัครเมื่อ"
timestamptz last_login "ล็อกอินล่าสุด"
text phone "เบอร์โทร"
text temple_code "รหัสสถานธรรม"
text temple_name "ชื่อสถานธรรม"
text zone_name "เขต"
text region_name "ภาค"
text position_name "ตำแหน่งธรรม"
text chinese_name "ชื่อจีน"
text thai_first_name "ชื่อ"
text thai_last_name "นามสกุล"
text nickname "ชื่อเล่น"
timestamptz profile_synced_at "ซิงก์โปรไฟล์ล่าสุด"
}
audit_log {
bigint id PK "ลำดับ"
text user_id FK "ผู้กระทำ (members.user_id)"
text user_email "อีเมลผู้กระทำ"
text user_name "ชื่อผู้กระทำ"
text action "teaching.create|delete|audio.approve ฯลฯ"
text target_type "ชนิดเป้าหมาย"
text target_id "รหัสเป้าหมาย"
jsonb metadata "รายละเอียด/สแน็ปช็อต"
text ip "ที่อยู่ IP"
timestamptz created_at "เวลา"
}
teaching_views {
bigint id PK "ลำดับ"
text teaching_id FK "อ้างอิง teachings.id"
timestamptz viewed_at "เวลาเปิดอ่าน"
text member_id FK "ผู้อ่าน (members.user_id)"
text member_email "อีเมลผู้อ่าน"
}
teaching_likes {
bigint id PK "ลำดับ"
text teaching_id FK "อ้างอิง teachings.id"
text session_id UK "อุปกรณ์/เซสชัน (กันกดซ้ำ)"
timestamptz created_at "เวลากดถูกใจ"
}
reviews {
bigint id PK "ลำดับ"
text name "ชื่อผู้เขียน"
text message "ข้อความกำลังใจ"
text emoji "อีโมจิ"
boolean approved "อนุมัติแสดง"
timestamptz created_at "เวลา"
}
questions {
bigint id PK "ลำดับ"
text question "คำถามเสี่ยงทาย"
timestamptz created_at "เวลา"
}
oracle_logs {
bigint id PK "ลำดับ"
text question "คำถาม"
text passage "บทที่เสี่ยงได้"
text source_id FK "อ้างอิง teachings.id"
text deity "ผู้ประทาน"
boolean ai_used "ใช้ AI ช่วยตอบ"
timestamptz created_at "เวลา"
}
audio_reports {
bigint id PK "ลำดับ"
text teaching_id FK "บทที่แจ้ง"
text teaching_type "teachings|curated"
text text_preview "ตัวอย่างข้อความ"
text status "สถานะรายงาน"
timestamptz created_at "เวลาแจ้ง"
}
user {
text id PK "รหัสผู้ใช้"
text name "ชื่อ"
text email UK "อีเมล (ไม่ซ้ำ)"
boolean emailVerified "ยืนยันอีเมล"
text image "รูป"
text phone "เบอร์"
text role "บทบาท (member ฯลฯ)"
timestamptz createdAt "สร้างเมื่อ"
timestamptz updatedAt "อัปเดตเมื่อ"
}
session {
text id PK "รหัสเซสชัน"
text userId FK "อ้างอิง user.id"
text token UK "โทเคน (ไม่ซ้ำ)"
timestamptz expiresAt "หมดอายุ"
text ipAddress "IP"
text userAgent "อุปกรณ์"
timestamptz createdAt "สร้างเมื่อ"
timestamptz updatedAt "อัปเดตเมื่อ"
}
account {
text id PK "รหัสบัญชี"
text userId FK "อ้างอิง user.id"
text accountId "รหัสบัญชีฝั่งผู้ให้บริการ"
text providerId "ผู้ให้บริการ"
text accessToken "access token"
text refreshToken "refresh token"
text idToken "id token"
text password "รหัสผ่าน (hash)"
timestamptz createdAt "สร้างเมื่อ"
timestamptz updatedAt "อัปเดตเมื่อ"
}
verification {
text id PK "รหัส"
text identifier "อีเมล/ตัวระบุ"
text value "ค่ายืนยัน"
timestamptz expiresAt "หมดอายุ"
timestamptz createdAt "สร้างเมื่อ"
timestamptz updatedAt "อัปเดตเมื่อ"
}
user_favorites {
text userId PK "อ้างอิง user.id"
text teaching_id PK "อ้างอิง teachings.id"
timestamptz createdAt "บันทึกเมื่อ"
}
💡 ||--o{ = หนึ่ง-ต่อ-กลุ่ม (one-to-many) · PK กุญแจหลัก · FK กุญแจนอก · UK ค่าไม่ซ้ำ · ความสัมพันธ์บางคู่ (views/likes/oracle/audio) เป็นการอ้างอิงเชิงตรรกะผ่าน teaching_id ไม่ได้บังคับ FK ในฐานข้อมูลเพื่อความเร็ว
ศูนย์รวมความรู้และสื่อการสอนกลางของฟาอีฉงเต๋อ — รวบรวมทุกอย่างที่ใช้เตรียมการสอนไว้ที่เดียว ตั้งแต่เนื้อหาธรรม เกมธรรมะ รูปแบบการจัดชั้นเรียน วิธีบรรยาย ไปจนถึงสไลด์กลางที่นำไปใช้ได้ทันที เพื่อให้ทุกคนมีแหล่งศึกษาและสื่อการสอนที่มีคุณภาพเท่าเทียมกัน
| ส่วน | บริการ | หน้าที่ |
|---|---|---|
| เว็บแอป (5 ระบบ) | Vercel | โฮสต์เว็บทั้งหมด ออก SSL อัตโนมัติ |
| ฐานข้อมูล | Supabase (PostgreSQL) | เก็บข้อมูลทุกระบบ แยก schema |
| ไฟล์/รูป/สไลด์ | Cloudflare R2 | เก็บไฟล์ 8.5GB+ เสิร์ฟผ่าน CDN |
| โดเมน/DNS | Cloudflare | จัดการ fycdth.com และซับโดเมน |