Mercurial Hosting > lang
diff src/lib/Course.luan @ 23:0c17c233c45a
start courses
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 30 Jul 2025 23:29:33 -0600 |
parents | |
children | 87fe70201aa8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib/Course.luan Wed Jul 30 23:29:33 2025 -0600 @@ -0,0 +1,68 @@ +local Luan = require "luan:Luan.luan" +local error = Luan.error +local ipairs = Luan.ipairs or error() +local Number = require "luan:Number.luan" +local long = Number.long or error() +local Db = require "site:/lib/Db.luan" +local languages = require "site:/lib/languages.luan" + + +local Course = {} + +local function from_doc(doc) + doc.type == "course" or error "wrong type" + return Course.new { + id = doc.id + user_id = doc.course_user_id + language = doc.course_language + name = doc.name + ai_system_prompt = doc.ai_system_prompt + } +end + +local function to_doc(course) + return { + type = "course" + id = course.id + course_user_id = long(course.user_id) + course_language = course.language or error() + name = course.name or error() + ai_system_prompt = course.ai_system_prompt or error() + } +end + +function Course.new(course) + + function course.save() + local doc = to_doc(chat) + Db.save(doc) + chat.id = doc.id + end + + function course.language_name() + return languages[course.language].name + end + + return course +end + +local function search(query,sort,rows) + rows = rows or 1000000 + local courses = {} + local docs = Db.search(query,1,rows,{sort=sort}) + for _, doc in ipairs(docs) do + courses[#courses+1] = from_doc(doc) + end + return courses +end + +function Course.get_for_language(language) + return search("course_language:"..language) +end + +function Course.get_by_id(id) + local doc = Db.get_document("id:"..id) + return doc and doc.type=="course" and from_doc(doc) or nil +end + +return Course