diff options
Diffstat (limited to 'database/posts.go')
| -rw-r--r-- | database/posts.go | 33 |
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 +} |
