98 lines
2.5 KiB
Go
98 lines
2.5 KiB
Go
|
package api
|
||
|
|
||
|
import (
|
||
|
"database/sql"
|
||
|
"net/http"
|
||
|
|
||
|
db "git.nochill.in/nochill/naice_pos/db/sqlc"
|
||
|
"git.nochill.in/nochill/naice_pos/token"
|
||
|
"github.com/gin-gonic/gin"
|
||
|
"github.com/google/uuid"
|
||
|
)
|
||
|
|
||
|
type createProductCategoryRequest struct {
|
||
|
MerchantID uuid.UUID `json:"merchant_id" binding:"required"`
|
||
|
Name string `json:"name" binding:"required"`
|
||
|
}
|
||
|
|
||
|
func (server *Server) createProductCategory(ctx *gin.Context) {
|
||
|
var req createProductCategoryRequest
|
||
|
|
||
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||
|
ctx.JSON(http.StatusBadRequest, errorResponse(err))
|
||
|
return
|
||
|
}
|
||
|
|
||
|
authPayload := ctx.MustGet(authorizationPayloadKey).(*token.Payload)
|
||
|
arg := db.CreateProductCategoryParams{
|
||
|
MerchantID: authPayload.MerchantID,
|
||
|
Name: req.Name,
|
||
|
}
|
||
|
|
||
|
ProductCategory, err := server.store.CreateProductCategory(ctx, arg)
|
||
|
if err != nil {
|
||
|
ctx.JSON(http.StatusInternalServerError, errorResponse(err))
|
||
|
return
|
||
|
}
|
||
|
|
||
|
ctx.JSON(http.StatusOK, ProductCategory)
|
||
|
}
|
||
|
|
||
|
type listProductCategoriesRequest struct {
|
||
|
PageID int32 `form:"page_id" binding:"required,min=1"`
|
||
|
PageSize int32 `form:"page_size" binding:"required,min=5"`
|
||
|
}
|
||
|
|
||
|
func (server *Server) listProductCategories(ctx *gin.Context) {
|
||
|
var req listProductCategoriesRequest
|
||
|
if err := ctx.ShouldBindQuery(&req); err != nil {
|
||
|
ctx.JSON(http.StatusBadRequest, errorResponse(err))
|
||
|
return
|
||
|
}
|
||
|
|
||
|
authPayload := ctx.MustGet(authorizationPayloadKey).(*token.Payload)
|
||
|
arg := db.ListProductCategoriesByMerchantIDParams{
|
||
|
MerchantID: authPayload.MerchantID,
|
||
|
Limit: req.PageSize,
|
||
|
Offset: (req.PageID - 1) * req.PageSize,
|
||
|
}
|
||
|
|
||
|
ProductCategories, err := server.store.ListProductCategoriesByMerchantID(ctx, arg)
|
||
|
if err != nil {
|
||
|
ctx.JSON(http.StatusInternalServerError, errorResponse(err))
|
||
|
return
|
||
|
}
|
||
|
|
||
|
ctx.JSON(http.StatusOK, ProductCategories)
|
||
|
}
|
||
|
|
||
|
type updateProductCategoryRequest struct {
|
||
|
ProductCategoryID uuid.UUID `json:"ProductCategory_id" binding:"required"`
|
||
|
Name string `json:"name" binding:"required"`
|
||
|
}
|
||
|
|
||
|
func (server *Server) updateProductCategory(ctx *gin.Context) {
|
||
|
var req updateProductCategoryRequest
|
||
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||
|
ctx.JSON(http.StatusBadRequest, errorResponse(err))
|
||
|
return
|
||
|
}
|
||
|
|
||
|
arg := db.UpdateProductCategoryParams{
|
||
|
ID: req.ProductCategoryID,
|
||
|
Name: req.Name,
|
||
|
}
|
||
|
|
||
|
ProductCategory, err := server.store.UpdateProductCategory(ctx, arg)
|
||
|
if err != nil {
|
||
|
if err == sql.ErrNoRows {
|
||
|
ctx.JSON(http.StatusNotFound, errorResponse(err))
|
||
|
return
|
||
|
}
|
||
|
ctx.JSON(http.StatusInternalServerError, errorResponse(err))
|
||
|
return
|
||
|
}
|
||
|
|
||
|
ctx.JSON(http.StatusOK, ProductCategory)
|
||
|
}
|