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 }