aboutsummaryrefslogtreecommitdiff
path: root/database/posts.go
diff options
context:
space:
mode:
Diffstat (limited to 'database/posts.go')
-rw-r--r--database/posts.go33
1 files changed, 30 insertions, 3 deletions
diff --git a/database/posts.go b/database/posts.go
index dd2a74e..1aeaecd 100644
--- a/database/posts.go
+++ b/database/posts.go
@@ -1,11 +1,38 @@
package database
-import "imageboard/models"
+import (
+ "imageboard/config"
+ "imageboard/models"
+)
-func GetPosts(limit int) ([]models.Image, error) {
+func GetPosts(limit int, ratings []config.Rating, tags []string) ([]models.Image, error) {
var posts []models.Image
- if err := DB.Preload("Sizes").Preload("Uploader").Preload("Tags").Limit(limit).Find(&posts).Error; err != nil {
+ query := DB.Preload("Sizes").Preload("Uploader").Limit(limit).Order("created_at DESC")
+
+ if len(ratings) > 0 {
+ query = query.Where("rating IN ?", ratings)
+ }
+
+ if len(tags) > 0 {
+ query = query.Joins("JOIN image_tags ON images.id = image_tags.image_id").
+ Joins("JOIN tags ON image_tags.tag_id = tags.id").
+ Where("tags.name IN ?", tags).
+ Group("images.id").
+ Preload("Tags")
+ } else {
+ query = query.Preload("Tags")
+ }
+
+ if err := query.Find(&posts).Error; err != nil {
return nil, err
}
return posts, nil
}
+
+func GetPostByID(postID uint) (*models.Image, error) {
+ var post models.Image
+ if err := DB.Preload("Sizes").Preload("Uploader").Preload("Tags").First(&post, postID).Error; err != nil {
+ return nil, err
+ }
+ return &post, nil
+}