diff options
Diffstat (limited to 'src/guff/post-model.cr')
| -rw-r--r-- | src/guff/post-model.cr | 76 | 
1 files changed, 73 insertions, 3 deletions
| diff --git a/src/guff/post-model.cr b/src/guff/post-model.cr index 40e92fb..9200ccb 100644 --- a/src/guff/post-model.cr +++ b/src/guff/post-model.cr @@ -43,8 +43,15 @@ module Guff           LIMIT :limit OFFSET :offset        ", +      update_post: " +        UPDATE posts +           SET %{sets} +         WHERE site_id = :site_id +           AND post_id = :post_id +      ", +        add_post: " -        INSERT INTO posts(site_id, slug, name, raw_body, body)  +        INSERT INTO posts(site_id, slug, name, raw_body, body)               VALUES (:site_id, :slug, :name, :raw_body, :body)        ", @@ -273,6 +280,67 @@ module Guff        post_id      end +    def update_post( +      site_id = nil           : Int?, +      post_id = nil           : Int?, +      slug = nil              : String?, +      name = nil              : String?, +      body = nil              : String?, +      tags = nil              : Array(String)?, +      posted = nil            : Bool? +    ) +      raise "null post_id" if post_id.nil? + +      sets = [] of String +      args = { +        "site_id": (site_id || @models.site.get_default).to_s, +        "post_id": post_id.to_s, +      } + +      if slug +        sets << "slug = :slug" +        args["slug"] = slug +      end + +      if name +        sets << "name = :name" +        args["name"] = name +      end + +      if body +        sets << "body = :body, raw_body = :body" +        args["body"] = body +      end + +      unless posted.nil? +        val = posted ? "CURRENT_TIMESTAMP" : "NULL" +        sets << "posted_at = %s" % [val] +      end + +      if sets.size > 0 || tags +        transaction do +          if sets.size > 0 +            # update post +            query(:update_post, args, { +              "sets": sets.join(','), +            }) +          end + +          # TODO: post history + +          if tags +            # update tags +            set_tags( +              site_id:          site_id, +              post_id:          post_id, +              tags:             tags, +              use_transaction:  false, +            ) +          end +        end +      end +    end +      def remove_posts(        site_id = nil : Int?,        post_ids = [] of Int : Array(Int) @@ -292,7 +360,7 @@ module Guff      def set_tags(        site_id = nil           : Int?,        post_id = nil           : Int?, -      tags = [] of String     : Array(String), +      tags = [] of String     : Array(String)?,        use_transaction = true  : Bool      )        if use_transaction @@ -309,8 +377,10 @@ module Guff      private def raw_set_tags(        site_id = nil       : Int?,        post_id = nil       : Int?, -      tags = [] of String : Array(String), +      tags = [] of String : Array(String)?,      ) +      return unless post_id && tags +        # build sql args        args = {          "site_id": (site_id || @models.site.get_default).to_s, | 
