F
fu.ling-lang.org
↓ 0 downloadsทะเบียนแพ็กเกจ fu.ling-lang.org — เขียนด้วยภาษา Ling (ไทย) ทั้งหมด
Keywords registry, packages, web, ling, thai
lingfu install fu.ling-lang.orgCode / 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", ชื่อ)
}