view blog/src/lib/Post.luan @ 596:6bb0c83116e9

add blog sample app
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 15 Sep 2015 21:30:33 -0600
parents
children 50540f0813e2
line wrap: on
line source

local Luan = require "luan:Luan"
local error = Luan.error
local ipairs = Luan.ipairs or error()
local assert_string = Luan.assert_string or error()
local Time = require "luan:Time"
local now = Time.now or error()
local Db = require "site:/lib/Db"


local M = {}

local function from_doc(doc)
	return M.new {
		id = doc.id;
		subject = doc.subject;
		content = doc.content;
		date = doc.date;
	}
end

function M.new(this)
	assert_string(this.subject)
	assert_string(this.content)
	this.date = this.date or now()

	function this.save()
		local doc = {
			type = "post";
			id = this.id;
			subject = this.subject;
			content = this.content;
			date = this.date;
		}
		Db.save(doc)
		this.id = doc.id
	end

	return this
end

function M.get_by_id(id)
	local doc = Db.get_document("id:"..id)
	return doc and from_doc(doc)
end

function M.get_all()
	local docs = Db.search("type:post",1,1000,"id desc")
	local posts = {}
	for _, doc in ipairs(docs) do
		posts[#posts+1] = from_doc(doc)
	end
	return posts
end

return M