You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
1.5 KiB

package Database
import (
"git.tovijaeschke.xyz/tovi/SuddenImpactRecords/Models"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
func GetPosts(page, pageSize int) ([]Models.Post, error) {
var (
posts []Models.Post
err error
)
if page == 0 {
page = 1
}
switch {
case pageSize > 100:
pageSize = 100
case pageSize <= 0:
pageSize = 10
}
err = DB.Offset(page).
Limit(pageSize).
Find(&posts).
Error
return posts, err
}
func GetFrontPagePosts() ([]Models.Post, error) {
var (
posts []Models.Post
err error
)
err = DB.Where("front_page = ?", true).
Order("order asc").
Find(&posts).
Error
return posts, err
}
func GetPostById(id string) (Models.Post, error) {
var (
postData Models.Post
err error
)
err = DB.Preload(clause.Associations).
First(&postData, "id = ?", id).
Error
return postData, err
}
func CreatePost(postData *Models.Post) error {
return DB.Session(&gorm.Session{FullSaveAssociations: true}).
Create(postData).
Error
}
func UpdatePost(id string, postData *Models.Post) (Models.Post, error) {
var (
err error
)
DB.Model(postData).
Where("id = ?", id).
Association("PostLinks").
Replace(postData.PostLinks)
err = DB.Model(&Models.Post{}).
Select("*").
Omit("id", "created_at", "updated_at", "deleted_at").
Where("id = ?", id).
Updates(postData).
Error
if err != nil {
return Models.Post{}, err
}
return GetPostById(id)
}
func DeletePost(postData *Models.Post) error {
return DB.Session(&gorm.Session{FullSaveAssociations: true}).
Delete(postData).
Error
}