✨ Better categories
This commit is contained in:
@ -1,29 +1,66 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"code.smartsheep.studio/hydrogen/interactive/pkg/database"
|
||||
"code.smartsheep.studio/hydrogen/interactive/pkg/models"
|
||||
"errors"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func GetCategory(alias, name string) (models.Category, error) {
|
||||
func ListCategory() ([]models.Category, error) {
|
||||
var categories []models.Category
|
||||
|
||||
err := database.C.Find(&categories).Error
|
||||
|
||||
return categories, err
|
||||
}
|
||||
|
||||
func GetCategory(alias string) (models.Category, error) {
|
||||
var category models.Category
|
||||
if err := database.C.Where(models.Category{Alias: alias}).First(&category).Error; err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
category = models.Category{
|
||||
Alias: alias,
|
||||
Name: name,
|
||||
}
|
||||
err := database.C.Save(&category).Error
|
||||
return category, err
|
||||
}
|
||||
return category, err
|
||||
}
|
||||
return category, nil
|
||||
}
|
||||
|
||||
func GetTag(alias, name string) (models.Tag, error) {
|
||||
func GetCategoryWithID(id uint) (models.Category, error) {
|
||||
var category models.Category
|
||||
if err := database.C.Where(models.Category{
|
||||
BaseModel: models.BaseModel{ID: id},
|
||||
}).First(&category).Error; err != nil {
|
||||
return category, err
|
||||
}
|
||||
return category, nil
|
||||
}
|
||||
|
||||
func NewCategory(alias, name, description string) (models.Category, error) {
|
||||
category := models.Category{
|
||||
Alias: alias,
|
||||
Name: name,
|
||||
Description: description,
|
||||
}
|
||||
|
||||
err := database.C.Save(&category).Error
|
||||
|
||||
return category, err
|
||||
}
|
||||
|
||||
func EditCategory(category models.Category, alias, name, description string) (models.Category, error) {
|
||||
category.Alias = alias
|
||||
category.Name = name
|
||||
category.Description = description
|
||||
|
||||
err := database.C.Save(&category).Error
|
||||
|
||||
return category, err
|
||||
}
|
||||
|
||||
func DeleteCategory(category models.Category) error {
|
||||
return database.C.Delete(category).Error
|
||||
}
|
||||
|
||||
func GetTagOrCreate(alias, name string) (models.Tag, error) {
|
||||
var tag models.Tag
|
||||
if err := database.C.Where(models.Category{Alias: alias}).First(&tag).Error; err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
|
@ -3,9 +3,10 @@ package services
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/rs/zerolog/log"
|
||||
"time"
|
||||
|
||||
"code.smartsheep.studio/hydrogen/interactive/pkg/database"
|
||||
"code.smartsheep.studio/hydrogen/interactive/pkg/models"
|
||||
@ -141,13 +142,13 @@ func NewPost(
|
||||
var err error
|
||||
var post models.Post
|
||||
for idx, category := range categories {
|
||||
categories[idx], err = GetCategory(category.Alias, category.Name)
|
||||
categories[idx], err = GetCategory(category.Alias)
|
||||
if err != nil {
|
||||
return post, err
|
||||
}
|
||||
}
|
||||
for idx, tag := range tags {
|
||||
tags[idx], err = GetTag(tag.Alias, tag.Name)
|
||||
tags[idx], err = GetTagOrCreate(tag.Alias, tag.Name)
|
||||
if err != nil {
|
||||
return post, err
|
||||
}
|
||||
@ -248,13 +249,13 @@ func EditPost(
|
||||
) (models.Post, error) {
|
||||
var err error
|
||||
for idx, category := range categories {
|
||||
categories[idx], err = GetCategory(category.Alias, category.Name)
|
||||
categories[idx], err = GetCategory(category.Alias)
|
||||
if err != nil {
|
||||
return post, err
|
||||
}
|
||||
}
|
||||
for idx, tag := range tags {
|
||||
tags[idx], err = GetTag(tag.Alias, tag.Name)
|
||||
tags[idx], err = GetTagOrCreate(tag.Alias, tag.Name)
|
||||
if err != nil {
|
||||
return post, err
|
||||
}
|
||||
|
Reference in New Issue
Block a user