create categories and subcategories in database and categories logic
This commit is contained in:
1 parent
d3d644d68f
commit
2c06975a43
4 files changed
+103
-2
No files matched your search
@@ -1,13 +1,13 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"backend/internal/category"
|
"backend/database"
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetAllCategories(c *fiber.Ctx) error {
|
func GetAllCategories(c *fiber.Ctx) error {
|
||||||
categories, err := category.GetAllCategories()
|
categories, err := database.GetAllCategories()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||||
"error": err.Error(),
|
"error": err.Error(),
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -43,4 +43,11 @@ func InitDatabase() {
|
|||||||
CreateUser(&allusers[i])
|
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])
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -4,4 +4,5 @@ ENABLE_TLS=true
|
|||||||
CERT_FILE=/home/tola/certs/localhost/localhost.crt
|
CERT_FILE=/home/tola/certs/localhost/localhost.crt
|
||||||
KEY_FILE=/home/tola/certs/localhost/localhost.key
|
KEY_FILE=/home/tola/certs/localhost/localhost.key
|
||||||
USERS_FILE=users.json
|
USERS_FILE=users.json
|
||||||
|
DEFAULT_CATEGORIES_FILE=default_categories.json
|
||||||
DATABASE=wallet.sqlite
|
DATABASE=wallet.sqlite
|
||||||
Reference in new issue
Block a user