94 lines
1.9 KiB
Go
94 lines
1.9 KiB
Go
package database
|
|
|
|
import (
|
|
"backend/model"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func CreateCategory(category *model.Category) error {
|
|
e := Db.Where(model.Category{
|
|
Title: category.Title,
|
|
}).FirstOrCreate(&category).Error
|
|
if e != nil {
|
|
return e
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func GetCategoryById(id string) (*model.Category, error) {
|
|
var category model.Category
|
|
e := Db.First(&category, "id = ?", id).Error
|
|
if e != nil {
|
|
if errors.Is(e, gorm.ErrRecordNotFound) {
|
|
return nil, fmt.Errorf("user not found")
|
|
}
|
|
return nil, e
|
|
}
|
|
return &category, nil
|
|
}
|
|
|
|
func GetCategoryByTitle(title string) (*model.Category, error) {
|
|
var category model.Category
|
|
e := Db.First(&category, "username = ?", title).Error
|
|
if e != nil {
|
|
if errors.Is(e, gorm.ErrRecordNotFound) {
|
|
return nil, fmt.Errorf("user not found")
|
|
}
|
|
return nil, e
|
|
}
|
|
return &category, nil
|
|
}
|
|
|
|
func DeleteCategory(id string) error {
|
|
var category model.Category
|
|
e := Db.First(&category, "id = ?", id).Error
|
|
if e != nil {
|
|
if errors.Is(e, gorm.ErrRecordNotFound) {
|
|
return fmt.Errorf("user not found")
|
|
}
|
|
return e
|
|
}
|
|
e = Db.Unscoped().Delete(&category).Error
|
|
if e != nil {
|
|
if errors.Is(e, gorm.ErrRecordNotFound) {
|
|
return fmt.Errorf("user not found")
|
|
}
|
|
return e
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func GetCategoriesFromFile(filename string) []model.Category {
|
|
data, e := os.ReadFile(filename)
|
|
if e != nil {
|
|
panic(e)
|
|
}
|
|
decoder := json.NewDecoder(strings.NewReader(string(data)))
|
|
var res []model.Category
|
|
decoder.Decode(&res)
|
|
return res
|
|
}
|
|
|
|
func GetAllCategories() ([]model.Category, error) {
|
|
var categories []model.Category
|
|
e := Db.Find(&categories).Error
|
|
if e != nil {
|
|
return nil, e
|
|
}
|
|
for i := range categories {
|
|
var subcategories []model.Subcategory
|
|
e := Db.Where(model.Subcategory{CategoryID: categories[i].ID}).Find(&subcategories).Error
|
|
if e != nil {
|
|
return nil, e
|
|
}
|
|
categories[i].Subcategories = subcategories
|
|
}
|
|
return categories, nil
|
|
}
|