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