diff options
-rw-r--r-- | src/guff/api-methods.cr | 12 | ||||
-rw-r--r-- | src/guff/database-updater.cr | 2 | ||||
-rw-r--r-- | src/guff/models.cr | 11 | ||||
-rw-r--r-- | src/guff/post-model.cr | 11 | ||||
-rw-r--r-- | src/guff/site-model.cr | 25 |
5 files changed, 45 insertions, 16 deletions
diff --git a/src/guff/api-methods.cr b/src/guff/api-methods.cr index 598f050..859e7ce 100644 --- a/src/guff/api-methods.cr +++ b/src/guff/api-methods.cr @@ -27,7 +27,7 @@ module Guff text: "Comma-separated list of tags (union)", type: :tag_list, required: false, - default: "1", + default: "", }, "sort": { @@ -263,7 +263,7 @@ module Guff slug: /^[a-z0-9\.-]+$/, int: /^\d+$/, int_list: /^\d+(?:,\d+)*$/, - tag_list: /^[a-z0-9_\/ -]+(?:,[a-z0-9_\/ -]+)*$/, + tag_list: /^(?:[a-z0-9_\/ -]+(?:,[a-z0-9_\/ -]+)*|)$/, sort: /^[a-z0-9_]+,(?:asc|desc)$/, # FIXME: lock this down more @@ -317,15 +317,17 @@ module Guff # post methods # ################ + NO_TAGS = [] of Array(String) + private def do_post_get_posts( context : HTTP::Server::Context, args : Hash(String, String) ) @models.post.get_posts( - site_id: get_site_id(context.request.headers["host"]?), + site_id: @models.site.to_site(context.request.headers["host"]?), q: args["q"]? || "", - page: args["page"]? ? args["page"].to_i : 1, - tags: args["tags"]? ? [args["tags"].split(/,/)] : [] of Array(String), + tags: (args.has_key?("tags") && args["tags"].size > 0) ? [args["tags"].split(',')] : NO_TAGS, + page: args.has_key?("page") ? args["page"].to_i : 1, ).to_json end diff --git a/src/guff/database-updater.cr b/src/guff/database-updater.cr index daf77fd..d472c50 100644 --- a/src/guff/database-updater.cr +++ b/src/guff/database-updater.cr @@ -46,6 +46,8 @@ module Guff is_default BOOLEAN NOT NULL DEFAULT false ) }, %{ + INSERT INTO sites(name, is_default) VALUES ('Default', 1) + }, %{ CREATE TABLE posts ( -- unique id post_id INTEGER PRIMARY KEY, diff --git a/src/guff/models.cr b/src/guff/models.cr index 24cc9f8..0e09752 100644 --- a/src/guff/models.cr +++ b/src/guff/models.cr @@ -1,10 +1,11 @@ require "./database" require "./database-updater" +require "./site-model" private macro define_model_getters(hash) {% for name, klass in hash %} - def {{ name.id }} - @cache[{{ name }}] ||= {{ klass.id }}.new(self) + def {{ name.id }} : {{ klass.id }} + (@cache[{{ name }}] ||= {{ klass.id }}.new(self)) as {{ klass.id }} end {% end %} end @@ -31,11 +32,7 @@ module Guff define_model_getters({ post: PostModel, tag: TagModel, + site: SiteModel, }) - - def default_site_id - # TODO - 0 - end end end diff --git a/src/guff/post-model.cr b/src/guff/post-model.cr index 4e2bf63..4a3f406 100644 --- a/src/guff/post-model.cr +++ b/src/guff/post-model.cr @@ -65,19 +65,21 @@ module Guff } def get_posts( - site_id = nil : Int32?, + site_id = nil : Int?, q = "" : String, tags = [] of Array(String) : Array(Array(String)), - page = 1 : Int32, - limit = 20 : Int32, + page = 1 : Int, + limit = 20 : Int, sort = "posted_at" : String, dir = "desc" : String, ) # build sql args sql_args = { - "site_id": "0" # (site_id || @models.default_site_id).to_s, + "site_id": (site_id || @models.site.get_default).to_s, } of String => String + p tags + # build tmpl args tmpl_args = { # TODO @@ -112,6 +114,7 @@ module Guff end private def get_tags_filter(tag_sets : Array(Array(String))) + p tag_sets (tag_sets.size > 0) ? template(:tags, { "sql": tag_sets.map { |tags| template(:tags, { diff --git a/src/guff/site-model.cr b/src/guff/site-model.cr new file mode 100644 index 0000000..ecde831 --- /dev/null +++ b/src/guff/site-model.cr @@ -0,0 +1,25 @@ +module Guff + class SiteModel < Model + SQL = TemplateCache.new({ + get_default: " + SELECT site_id + FROM sites + WHERE is_default + LIMIT 1 + ", + }) + + def initialize(models : Models) + super(models, SQL) + end + + def get_default + one(:get_default, nil, {} of String => String) + end + + def to_site(host : String?) + # TODO + get_default + end + end +end |