create and get categories with database for user
Build and Test / build-and-test-backend (push) Successful in 31s
Build and Test / build-and-test-frontend (push) Successful in 34s

This commit is contained in:
wt committed 2025-08-09 17:32:18 +07:00
1 parent 2c06975a43
commit 90e5863adc
12 files changed
+189 -79

No files matched your search

+40
View File
@@ -0,0 +1,40 @@
package api
import (
"backend/database"
"backend/model"
"fmt"
"github.com/gofiber/fiber/v2"
"github.com/golang-jwt/jwt/v5"
)
func CreateCategory(c *fiber.Ctx) error {
user := c.Locals("user").(*jwt.Token)
claims := user.Claims.(jwt.MapClaims)
userid := claims["id"].(string)
requestdata := new(model.Category)
fmt.Println(string(c.Body()))
if err := c.BodyParser(requestdata); err != nil {
return c.Status(
fiber.StatusBadRequest,
).JSON(
fiber.Map{
"error": "Cannot parse request body",
},
)
}
fmt.Println(requestdata)
requestdata.UserID = userid
err := database.CreateCategory(requestdata)
if err != nil {
return c.Status(
fiber.StatusInternalServerError,
).JSON(
fiber.Map{
"error": err,
},
)
}
return c.Status(fiber.StatusOK).JSON(fiber.Map{"status": "ok"})
}
+5 -1
View File
@@ -4,10 +4,14 @@ import (
"backend/database"
"github.com/gofiber/fiber/v2"
"github.com/golang-jwt/jwt/v5"
)
func GetAllCategories(c *fiber.Ctx) error {
categories, err := database.GetAllCategories()
user := c.Locals("user").(*jwt.Token)
claims := user.Claims.(jwt.MapClaims)
userid := claims["id"].(string)
categories, err := database.GetAllCategories(userid)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"error": err.Error(),
+5 -3
View File
@@ -13,7 +13,9 @@ import (
func CreateCategory(category *model.Category) error {
e := Db.Where(model.Category{
Title: category.Title,
Title: category.Title,
UserID: category.UserID,
Type: category.Type,
}).FirstOrCreate(&category).Error
if e != nil {
return e
@@ -75,9 +77,9 @@ func GetCategoriesFromFile(filename string) []model.Category {
return res
}
func GetAllCategories() ([]model.Category, error) {
func GetAllCategories(userid string) ([]model.Category, error) {
var categories []model.Category
e := Db.Find(&categories).Error
e := Db.Where(model.Category{UserID: userid}).Find(&categories).Error
if e != nil {
return nil, e
}
+10 -7
View File
@@ -41,13 +41,16 @@ func InitDatabase() {
allusers := GetUsersFromFile(os.Getenv("USERS_FILE"))
for i := range allusers {
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])
if os.Getenv("DEFAULT_CATEGORIES_FILE") != "" {
default_categories := GetCategoriesFromFile(os.Getenv("DEFAULT_CATEGORIES_FILE"))
for j := range default_categories {
default_categories[j].UserID = allusers[i].ID
for k := range default_categories[j].Subcategories {
default_categories[j].Subcategories[k].UserID = allusers[i].ID
}
CreateCategory(&default_categories[j])
}
}
}
}
}
+29 -29
View File
@@ -1,36 +1,36 @@
package internaljwt
import (
"backend/model"
// import (
// "backend/model"
"github.com/gofiber/fiber/v2"
)
// "github.com/gofiber/fiber/v2"
// )
func JwtFromBody(c *fiber.Ctx) error {
req := new(model.TokenRequest)
if err := c.BodyParser(req); err != nil {
return c.Status(
fiber.StatusBadRequest,
).JSON(
fiber.Map{
"error": "Cannot parse request body",
},
)
}
// func JwtFromBody(c *fiber.Ctx) error {
// req := new(model.TokenRequest)
// if err := c.BodyParser(req); err != nil {
// return c.Status(
// fiber.StatusBadRequest,
// ).JSON(
// fiber.Map{
// "error": "Cannot parse request body",
// },
// )
// }
if req.Token == "" {
return c.Status(
fiber.StatusBadRequest,
).JSON(
fiber.Map{
"error": "Token not found in request body",
},
)
}
// if req.Token == "" {
// return c.Status(
// fiber.StatusBadRequest,
// ).JSON(
// fiber.Map{
// "error": "Token not found in request body",
// },
// )
// }
c.Request().Header.Set(
"Authorization", "Bearer "+req.Token,
)
// c.Request().Header.Set(
// "Authorization", "Bearer "+req.Token,
// )
return c.Next()
}
// return c.Next()
// }
+1 -1
View File
@@ -4,7 +4,7 @@ type Category struct {
BaseModel
Icon string `json:"icon"`
Title string `json:"title"`
Subcategories []Subcategory `json:"subcategories" gorm:"foreignKey:CategoryID"`
Subcategories []Subcategory `json:"subcategories,omitempty" gorm:"foreignKey:CategoryID"`
Type string `json:"type"`
UserID string
}
+25 -25
View File
@@ -3,7 +3,6 @@ package server
import (
"backend/api"
"backend/database"
"backend/internal/internaljwt"
"backend/utils"
"os"
@@ -25,33 +24,33 @@ func Configure(app *fiber.App) {
apiGroup := app.Group("/api")
apiGroup.Post("/token", api.Login)
app.Use(internaljwt.JwtFromBody, jwtware.New(jwtware.Config{
app.Use(jwtware.New(jwtware.Config{
SigningKey: jwtware.SigningKey{
Key: []byte(os.Getenv("JWT_SECRET_KEY")),
},
ErrorHandler: func(c *fiber.Ctx, err error) error {
if err.Error() == "Missing or malformed JWT" {
return c.Status(
fiber.StatusBadRequest,
).JSON(
fiber.Map{
"status": "error",
"message": "Missing or malformed JWT",
"data": nil,
},
)
}
return c.Status(
fiber.StatusUnauthorized,
).JSON(
fiber.Map{
"status": "error",
"message": "Invalid or expired JWT",
"data": nil,
"error": err.Error(),
},
)
},
// ErrorHandler: func(c *fiber.Ctx, err error) error {
// if err.Error() == "Missing or malformed JWT" {
// return c.Status(
// fiber.StatusBadRequest,
// ).JSON(
// fiber.Map{
// "status": "error",
// "message": "Missing or malformed JWT",
// "data": nil,
// },
// )
// }
// return c.Status(
// fiber.StatusUnauthorized,
// ).JSON(
// fiber.Map{
// "status": "error",
// "message": "Invalid or expired JWT",
// "data": nil,
// "error": err.Error(),
// },
// )
// },
}))
usersGroup := apiGroup.Group("/users")
@@ -63,4 +62,5 @@ func Configure(app *fiber.App) {
categoryGroup := apiGroup.Group("/category")
categoryGroup.Get("/", api.GetAllCategories)
categoryGroup.Post("/", api.CreateCategory)
}