灵符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/packages.ling
// models/packages.ling — โมเดลแพ็กเกจ (crate)

ฟังก์ชัน แพ็กเกจสร้าง(ชื่อ, คำอธิบาย) {
    ฐานข้อมูลรัน("INSERT OR IGNORE INTO packages (name, description) VALUES (?1, ?2)", ชื่อ, คำอธิบาย)
}

ฟังก์ชัน แพ็กเกจทั้งหมด() {
    คืน ฐานข้อมูลถาม("SELECT id, name, description, suspended, downloads, created_at FROM packages WHERE suspended = 0 ORDER BY name")
}

ฟังก์ชัน แพ็กเกจหา(ชื่อ) {
    คืน ฐานข้อมูลถาม("SELECT id, name, description, readme, keywords, homepage, repository, license, authors, suspended, downloads, created_at FROM packages WHERE name = ?1", ชื่อ)
}

// ตั้งเมทาดาทาของแพ็กเกจ (จากตอนเผยแพร่หรือ seed)
ฟังก์ชัน แพ็กเกจข้อมูล(ชื่อ, คีย์เวิร์ด, โฮมเพจ, ที่เก็บ, ใบอนุญาต, ผู้เขียน, รีดมี) {
    ฐานข้อมูลรัน("UPDATE packages SET keywords = ?2, homepage = ?3, repository = ?4, license = ?5, authors = ?6, readme = ?7 WHERE name = ?1",
        ชื่อ, คีย์เวิร์ด, โฮมเพจ, ที่เก็บ, ใบอนุญาต, ผู้เขียน, รีดมี)
}

ฟังก์ชัน แพ็กเกจนับ() {
    ผูก แถว = ฐานข้อมูลถาม("SELECT COUNT(*) AS n FROM packages WHERE suspended = 0")
    ผูก หัว = รับรายการ(แถว, 0)
    คืน หัว.n
}

// ── ค้นหา: ชื่อหรือคำอธิบาย, เรียงตามดาวน์โหลด ──
ฟังก์ชัน แพ็กเกจค้นหา(คำ) {
    ผูก รูปแบบค้น = "%" + คำ + "%"
    คืน ฐานข้อมูลถาม("SELECT id, name, description, downloads, created_at FROM packages WHERE suspended = 0 AND (name LIKE ?1 OR description LIKE ?1) ORDER BY downloads DESC, name LIMIT 50", รูปแบบค้น)
}

// ── ดัชนีตามตัวอักษร: ตัว = 'a'..'z' หรือ '0' (เลขทั้งหมด) ──
ฟังก์ชัน แพ็กเกจตามอักษร(ตัว, ออฟเซ็ต, จำนวน) {
    ถ้า ตัว == "0" {
        คืน ฐานข้อมูลถาม("SELECT id, name, description, downloads, created_at FROM packages WHERE suspended = 0 AND substr(name,1,1) BETWEEN '0' AND '9' ORDER BY name LIMIT ?1 OFFSET ?2", จำนวน, ออฟเซ็ต)
    }
    ผูก รูปแบบค้น = ตัว + "%"
    คืน ฐานข้อมูลถาม("SELECT id, name, description, downloads, created_at FROM packages WHERE suspended = 0 AND name LIKE ?1 ORDER BY name LIMIT ?2 OFFSET ?3", รูปแบบค้น, จำนวน, ออฟเซ็ต)
}

ฟังก์ชัน แพ็กเกจนับอักษร(ตัว) {
    ถ้า ตัว == "0" {
        ผูก แถว = ฐานข้อมูลถาม("SELECT COUNT(*) AS n FROM packages WHERE suspended = 0 AND substr(name,1,1) BETWEEN '0' AND '9'")
        ผูก หัว = รับรายการ(แถว, 0)
        คืน หัว.n
    }
    ผูก รูปแบบค้น = ตัว + "%"
    ผูก แถว = ฐานข้อมูลถาม("SELECT COUNT(*) AS n FROM packages WHERE suspended = 0 AND name LIKE ?1", รูปแบบค้น)
    ผูก หัว = รับรายการ(แถว, 0)
    คืน หัว.n
}

// ── หน้าแรก: ใหม่ล่าสุด / ยอดนิยม ──
ฟังก์ชัน แพ็กเกจล่าสุด(จำนวน) {
    คืน ฐานข้อมูลถาม("SELECT id, name, description, downloads FROM packages WHERE suspended = 0 ORDER BY id DESC LIMIT ?1", จำนวน)
}

ฟังก์ชัน แพ็กเกจยอดนิยม(จำนวน) {
    คืน ฐานข้อมูลถาม("SELECT id, name, description, downloads FROM packages WHERE suspended = 0 ORDER BY downloads DESC, name LIMIT ?1", จำนวน)
}

ฟังก์ชัน แพ็กเกจระงับ(ชื่อ) {
    ฐานข้อมูลรัน("UPDATE packages SET suspended = 1 WHERE name = ?1", ชื่อ)
}

// เจ้าของแพ็กเกจ (owner_user_id) — 0 ถ้าไม่มีแพ็กเกจหรือยังไม่มีเจ้าของ
ฟังก์ชัน แพ็กเกจเจ้าของ(ชื่อ) {
    ผูก แถว = ฐานข้อมูลถาม("SELECT owner_user_id FROM packages WHERE name = ?1", ชื่อ)
    ถ้า แถว.len == 0 {
        คืน 0
    }
    ผูก หัว = รับรายการ(แถว, 0)
    คืน หัว.owner_user_id
}

ฟังก์ชัน แพ็กเกจไอดี(ชื่อ) {
    ผูก แถว = ฐานข้อมูลถาม("SELECT id FROM packages WHERE name = ?1", ชื่อ)
    ถ้า แถว.len == 0 {
        คืน 0
    }
    ผูก หัว = รับรายการ(แถว, 0)
    คืน หัว.id
}

// เผยแพร่/อัปเดตแพ็กเกจโดยเจ้าของ — สร้างถ้ายังไม่มี, คืนไอดี
ฟังก์ชัน แพ็กเกจเผยแพร่(ชื่อ, คำอธิบาย, ไอดีเจ้าของ) {
    ฐานข้อมูลรัน("INSERT INTO packages (name, description, owner_user_id) VALUES (?1, ?2, ?3)
        ON CONFLICT(name) DO UPDATE SET description = excluded.description", ชื่อ, คำอธิบาย, ไอดีเจ้าของ)
    คืน แพ็กเกจไอดี(ชื่อ)
}

ฟังก์ชัน รุ่นบันทึก(ไอดีแพ็กเกจ, รุ่น, เช็คซัม) {
    ฐานข้อมูลรัน("INSERT OR IGNORE INTO versions (package_id, version, checksum) VALUES (?1, ?2, ?3)", ไอดีแพ็กเกจ, รุ่น, เช็คซัม)
}

ฟังก์ชัน รุ่นมีอยู่(ไอดีแพ็กเกจ, รุ่น) {
    ผูก แถว = ฐานข้อมูลถาม("SELECT id FROM versions WHERE package_id = ?1 AND version = ?2", ไอดีแพ็กเกจ, รุ่น)
    คืน แถว.len > 0
}

ฟังก์ชัน แพ็กเกจของผู้ใช้(ไอดีผู้ใช้) {
    คืน ฐานข้อมูลถาม("SELECT id, name, description, suspended, downloads FROM packages WHERE owner_user_id = ?1 ORDER BY name", ไอดีผู้ใช้)
}

ฟังก์ชัน ดาวน์โหลดตั้ง(ชื่อ, จำนวน) {
    ฐานข้อมูลรัน("UPDATE packages SET downloads = ?2 WHERE name = ?1", ชื่อ, จำนวน)
}

// ── รุ่น ──
ฟังก์ชัน รุ่นเพิ่ม(ไอดีแพ็กเกจ, รุ่น, เช็คซัม) {
    ฐานข้อมูลรัน("INSERT OR IGNORE INTO versions (package_id, version, checksum) VALUES (?1, ?2, ?3)", ไอดีแพ็กเกจ, รุ่น, เช็คซัม)
}

ฟังก์ชัน รุ่นเพิ่มโดยชื่อ(ชื่อ, รุ่น) {
    ฐานข้อมูลรัน("INSERT OR IGNORE INTO versions (package_id, version) SELECT id, ?2 FROM packages WHERE name = ?1", ชื่อ, รุ่น)
}

ฟังก์ชัน รุ่นของชื่อ(ชื่อ) {
    คืน ฐานข้อมูลถาม("SELECT v.version, v.yanked, v.created_at FROM versions v JOIN packages p ON p.id = v.package_id WHERE p.name = ?1 ORDER BY v.id DESC", ชื่อ)
}

← Back to index