灵符lingfu
F

fu.ling-lang.org

↓ 0 downloads

ทะเบียนแพ็กเกจ fu.ling-lang.org — เขียนด้วยภาษา Ling (ไทย) ทั้งหมด

Keywords registry, packages, web, ling, thai
lingfu install fu.ling-lang.org
LicenseApache-2.0 OR MIT
Authorsลิงลิน
READMECode / FilesVersionsDependency GraphDependentsSecurityBuildsSettings

Code / Files (22)

models/schema.ling
// models/schema.ling — โครงสร้างฐานข้อมูลของ fu.ling-lang.org
// ตาราง: users, organizations, org_members, packages, versions, api_keys

ฟังก์ชัน สร้างตาราง() {
    ฐานข้อมูลรัน("CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username TEXT NOT NULL UNIQUE,
        email TEXT NOT NULL UNIQUE,
        password_hash TEXT NOT NULL,
        bio TEXT NOT NULL DEFAULT '',
        github TEXT NOT NULL DEFAULT '',
        totp_secret TEXT NOT NULL DEFAULT '',
        totp_confirmed INTEGER NOT NULL DEFAULT 0,
        created_at TEXT NOT NULL DEFAULT (datetime('now'))
    )")

    ฐานข้อมูลรัน("CREATE TABLE IF NOT EXISTS sessions (
        token TEXT PRIMARY KEY,
        user_id INTEGER NOT NULL REFERENCES users(id),
        stage TEXT NOT NULL DEFAULT 'active',
        created_at TEXT NOT NULL DEFAULT (datetime('now'))
    )")

    ฐานข้อมูลรัน("CREATE TABLE IF NOT EXISTS organizations (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL UNIQUE,
        display_name TEXT NOT NULL DEFAULT '',
        bio TEXT NOT NULL DEFAULT '',
        created_at TEXT NOT NULL DEFAULT (datetime('now'))
    )")

    ฐานข้อมูลรัน("CREATE TABLE IF NOT EXISTS org_members (
        org_id INTEGER NOT NULL REFERENCES organizations(id),
        user_id INTEGER NOT NULL REFERENCES users(id),
        role TEXT NOT NULL DEFAULT 'member',
        PRIMARY KEY (org_id, user_id)
    )")

    ฐานข้อมูลรัน("CREATE TABLE IF NOT EXISTS packages (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL UNIQUE,
        description TEXT NOT NULL DEFAULT '',
        readme TEXT NOT NULL DEFAULT '',
        keywords TEXT NOT NULL DEFAULT '',
        homepage TEXT NOT NULL DEFAULT '',
        repository TEXT NOT NULL DEFAULT '',
        license TEXT NOT NULL DEFAULT '',
        authors TEXT NOT NULL DEFAULT '',
        owner_user_id INTEGER REFERENCES users(id),
        owner_org_id INTEGER REFERENCES organizations(id),
        suspended INTEGER NOT NULL DEFAULT 0,
        downloads INTEGER NOT NULL DEFAULT 0,
        created_at TEXT NOT NULL DEFAULT (datetime('now'))
    )")

    // อัปเกรดฐานข้อมูลเดิม: เพิ่มคอลัมน์เมทาดาทาที่ยังขาด (ไม่ทำลายข้อมูล)
    ย้ายฐาน()

    ฐานข้อมูลรัน("CREATE TABLE IF NOT EXISTS versions (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        package_id INTEGER NOT NULL REFERENCES packages(id),
        version TEXT NOT NULL,
        checksum TEXT NOT NULL DEFAULT '',
        yanked INTEGER NOT NULL DEFAULT 0,
        created_at TEXT NOT NULL DEFAULT (datetime('now')),
        UNIQUE (package_id, version)
    )")

    ฐานข้อมูลรัน("CREATE TABLE IF NOT EXISTS api_keys (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id INTEGER NOT NULL REFERENCES users(id),
        name TEXT NOT NULL DEFAULT 'default',
        key_hash TEXT NOT NULL,
        revoked INTEGER NOT NULL DEFAULT 0,
        created_at TEXT NOT NULL DEFAULT (datetime('now'))
    )")
}

// เพิ่มคอลัมน์ให้ตารางถ้ายังไม่มี (SQLite ไม่มี ADD COLUMN IF NOT EXISTS)
ฟังก์ชัน เพิ่มคอลัมน์ถ้าขาด(ตาราง, คอลัมน์, นิยาม) {
    ผูก แถวๆ = ฐานข้อมูลถาม("PRAGMA table_info(" + ตาราง + ")")
    ผูก ก = 0
    ผูก มี = เท็จ
    ขณะที่ ก < แถวๆ.len {
        ผูก แถว = รับรายการ(แถวๆ, ก)
        ถ้า แถว.name == คอลัมน์ {
            ผูก มี = จริง
        }
        ผูก ก = ก + 1
    }
    ถ้า มี == เท็จ {
        ฐานข้อมูลรัน("ALTER TABLE " + ตาราง + " ADD COLUMN " + คอลัมน์ + " " + นิยาม)
    }
}

// ย้ายฐาน — อัปเกรดฐานข้อมูลเดิมให้มีคอลัมน์เมทาดาทาของแพ็กเกจ
ฟังก์ชัน ย้ายฐาน() {
    เพิ่มคอลัมน์ถ้าขาด("packages", "readme", "TEXT NOT NULL DEFAULT ''")
    เพิ่มคอลัมน์ถ้าขาด("packages", "keywords", "TEXT NOT NULL DEFAULT ''")
    เพิ่มคอลัมน์ถ้าขาด("packages", "homepage", "TEXT NOT NULL DEFAULT ''")
    เพิ่มคอลัมน์ถ้าขาด("packages", "repository", "TEXT NOT NULL DEFAULT ''")
    เพิ่มคอลัมน์ถ้าขาด("packages", "license", "TEXT NOT NULL DEFAULT ''")
    เพิ่มคอลัมน์ถ้าขาด("packages", "authors", "TEXT NOT NULL DEFAULT ''")
}

← Back to index