Mercurial Hosting > linkmystyle
view src/lib/Link.luan @ 3:b016e4b7c8da default tip
add read_me
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 12 Jul 2025 12:51:36 -0600 |
parents | 8f4df159f06b |
children |
line wrap: on
line source
local Luan = require "luan:Luan.luan" local error = Luan.error local ipairs = Luan.ipairs or error() local stringify = Luan.stringify or error() local Number = require "luan:Number.luan" local long = Number.long or error() local float = Number.float or error() local Db = require "site:/lib/Db.luan" local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "Link" local Link = {} local function from_doc(doc) doc.type == "link" or error "wrong type" return Link.new { id = doc.id url = doc.url title = doc.title owner_id = doc.link_owner_id user_id = doc.link_user_id order = doc.link_order } end local function to_doc(link) return { type = "link" id = link.id url = link.url or error() title = link.title or error() link_owner_id = long(link.owner_id) link_user_id = long(link.user_id) link_order = float(link.order) } end function Link.new(link) function link.save() local doc = to_doc(link) Db.save(doc) link.id = doc.id end function link.reload() return Link.get_by_id(link.id) or error(link.id) end function link.delete() Db.run_in_transaction( function() Db.delete("id:"..link.id) end ) end function link.move_after(prev) local links = Link.get_owner_links(link.owner_id) if prev == nil then link.order = links[1].order - 1 else link.owner_id==prev.owner_id or error() for i, x in ipairs(links) do if prev.id == x.id then if i == #links then link.order = prev.order + 1 else local next = links[i+1] link.order = (prev.order + next.order) / 2 end return end end error() end end return link end function Link.get_by_id(id) local doc = Db.get_document("id:"..id) return doc and from_doc(doc) end local function from_docs(docs) local links = {} for _, doc in ipairs(docs) do local link = from_doc(doc) links[#links+1] = link end return links end function Link.get_owner_links(owner_id) local docs = Db.search("link_owner_id:"..owner_id,1,1000,{sort="link_order"}) return from_docs(docs) end return Link