create categories and subcategories in database and categories logic

This commit is contained in:
wt
2025-08-09 14:12:25 +07:00
parent d3d644d68f
commit 2c06975a43
4 changed files with 103 additions and 2 deletions
+2 -2
View File
@@ -1,13 +1,13 @@
package api
import (
"backend/internal/category"
"backend/database"
"github.com/gofiber/fiber/v2"
)
func GetAllCategories(c *fiber.Ctx) error {
categories, err := category.GetAllCategories()
categories, err := database.GetAllCategories()
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"error": err.Error(),
+93
View File
@@ -0,0 +1,93 @@
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
}
+7
View File
@@ -43,4 +43,11 @@ func InitDatabase() {
CreateUser(&allusers[i])
}
}
if os.Getenv("DEFAULT_CATEGORIES_FILE") != "" {
default_categories := GetCategoriesFromFile(os.Getenv("DEFAULT_CATEGORIES_FILE"))
for i := range default_categories {
CreateCategory(&default_categories[i])
}
}
}
+1
View File
@@ -4,4 +4,5 @@ ENABLE_TLS=true
CERT_FILE=/home/tola/certs/localhost/localhost.crt
KEY_FILE=/home/tola/certs/localhost/localhost.key
USERS_FILE=users.json
DEFAULT_CATEGORIES_FILE=default_categories.json
DATABASE=wallet.sqlite