Add coa purchase and vendors
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/util"
|
||||
"apskel-pos-be/internal/validator"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type AccountHandler struct {
|
||||
service contract.AccountContract
|
||||
validator validator.AccountValidator
|
||||
}
|
||||
|
||||
func NewAccountHandler(service contract.AccountContract, validator validator.AccountValidator) *AccountHandler {
|
||||
return &AccountHandler{
|
||||
service: service,
|
||||
validator: validator,
|
||||
}
|
||||
}
|
||||
|
||||
func (h *AccountHandler) CreateAccount(c *gin.Context) {
|
||||
var req contract.CreateAccountRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, err := h.service.CreateAccount(c, &req)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "AccountHandler")
|
||||
}
|
||||
|
||||
func (h *AccountHandler) GetAccountByID(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid ID format"}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, err := h.service.GetAccountByID(c, id)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "AccountHandler")
|
||||
}
|
||||
|
||||
func (h *AccountHandler) UpdateAccount(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid ID format"}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
var req contract.UpdateAccountRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, err := h.service.UpdateAccount(c, id, &req)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "AccountHandler")
|
||||
}
|
||||
|
||||
func (h *AccountHandler) DeleteAccount(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid ID format"}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
err = h.service.DeleteAccount(c, id)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(gin.H{"message": "Account deleted successfully"}), "AccountHandler")
|
||||
}
|
||||
|
||||
func (h *AccountHandler) ListAccounts(c *gin.Context) {
|
||||
var req contract.ListAccountsRequest
|
||||
if err := c.ShouldBindQuery(&req); err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, total, err := h.service.ListAccounts(c, &req)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(gin.H{
|
||||
"data": response,
|
||||
"total": total,
|
||||
"page": req.Page,
|
||||
"limit": req.Limit,
|
||||
}), "AccountHandler")
|
||||
}
|
||||
|
||||
func (h *AccountHandler) GetAccountsByOrganization(c *gin.Context) {
|
||||
organizationIDStr := c.Param("organization_id")
|
||||
organizationID, err := uuid.Parse(organizationIDStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid organization ID format"}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
var outletID *uuid.UUID
|
||||
if outletIDStr := c.Query("outlet_id"); outletIDStr != "" {
|
||||
if parsedOutletID, err := uuid.Parse(outletIDStr); err == nil {
|
||||
outletID = &parsedOutletID
|
||||
}
|
||||
}
|
||||
|
||||
response, err := h.service.GetAccountsByOrganization(c, organizationID, outletID)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "AccountHandler")
|
||||
}
|
||||
|
||||
func (h *AccountHandler) GetAccountsByChartOfAccount(c *gin.Context) {
|
||||
chartOfAccountIDStr := c.Param("chart_of_account_id")
|
||||
chartOfAccountID, err := uuid.Parse(chartOfAccountIDStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid chart of account ID format"}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, err := h.service.GetAccountsByChartOfAccount(c, chartOfAccountID)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "AccountHandler")
|
||||
}
|
||||
|
||||
func (h *AccountHandler) UpdateAccountBalance(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid ID format"}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
var req contract.UpdateAccountBalanceRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
err = h.service.UpdateAccountBalance(c, id, &req)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(gin.H{"message": "Account balance updated successfully"}), "AccountHandler")
|
||||
}
|
||||
|
||||
func (h *AccountHandler) GetAccountBalance(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid ID format"}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
balance, err := h.service.GetAccountBalance(c, id)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "AccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(gin.H{"balance": balance}), "AccountHandler")
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/util"
|
||||
"apskel-pos-be/internal/validator"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type ChartOfAccountHandler struct {
|
||||
service contract.ChartOfAccountContract
|
||||
validator validator.ChartOfAccountValidator
|
||||
}
|
||||
|
||||
func NewChartOfAccountHandler(service contract.ChartOfAccountContract, validator validator.ChartOfAccountValidator) *ChartOfAccountHandler {
|
||||
return &ChartOfAccountHandler{
|
||||
service: service,
|
||||
validator: validator,
|
||||
}
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountHandler) CreateChartOfAccount(c *gin.Context) {
|
||||
var req contract.CreateChartOfAccountRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, err := h.service.CreateChartOfAccount(c, &req)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "ChartOfAccountHandler")
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountHandler) GetChartOfAccountByID(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid ID format"}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, err := h.service.GetChartOfAccountByID(c, id)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "ChartOfAccountHandler")
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountHandler) UpdateChartOfAccount(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid ID format"}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
var req contract.UpdateChartOfAccountRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, err := h.service.UpdateChartOfAccount(c, id, &req)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "ChartOfAccountHandler")
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountHandler) DeleteChartOfAccount(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid ID format"}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
err = h.service.DeleteChartOfAccount(c, id)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(gin.H{"message": "Chart of account deleted successfully"}), "ChartOfAccountHandler")
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountHandler) ListChartOfAccounts(c *gin.Context) {
|
||||
var req contract.ListChartOfAccountsRequest
|
||||
if err := c.ShouldBindQuery(&req); err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, total, err := h.service.ListChartOfAccounts(c, &req)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(gin.H{
|
||||
"data": response,
|
||||
"total": total,
|
||||
"page": req.Page,
|
||||
"limit": req.Limit,
|
||||
}), "ChartOfAccountHandler")
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountHandler) GetChartOfAccountsByOrganization(c *gin.Context) {
|
||||
organizationIDStr := c.Param("organization_id")
|
||||
organizationID, err := uuid.Parse(organizationIDStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid organization ID format"}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
var outletID *uuid.UUID
|
||||
if outletIDStr := c.Query("outlet_id"); outletIDStr != "" {
|
||||
if parsedOutletID, err := uuid.Parse(outletIDStr); err == nil {
|
||||
outletID = &parsedOutletID
|
||||
}
|
||||
}
|
||||
|
||||
response, err := h.service.GetChartOfAccountsByOrganization(c, organizationID, outletID)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "ChartOfAccountHandler")
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountHandler) GetChartOfAccountsByType(c *gin.Context) {
|
||||
organizationIDStr := c.Param("organization_id")
|
||||
organizationID, err := uuid.Parse(organizationIDStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid organization ID format"}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
typeIDStr := c.Param("type_id")
|
||||
typeID, err := uuid.Parse(typeIDStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid type ID format"}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
var outletID *uuid.UUID
|
||||
if outletIDStr := c.Query("outlet_id"); outletIDStr != "" {
|
||||
if parsedOutletID, err := uuid.Parse(outletIDStr); err == nil {
|
||||
outletID = &parsedOutletID
|
||||
}
|
||||
}
|
||||
|
||||
response, err := h.service.GetChartOfAccountsByType(c, organizationID, typeID, outletID)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "ChartOfAccountHandler")
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/util"
|
||||
"apskel-pos-be/internal/validator"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type ChartOfAccountTypeHandler struct {
|
||||
service contract.ChartOfAccountTypeContract
|
||||
validator validator.ChartOfAccountTypeValidator
|
||||
}
|
||||
|
||||
func NewChartOfAccountTypeHandler(service contract.ChartOfAccountTypeContract, validator validator.ChartOfAccountTypeValidator) *ChartOfAccountTypeHandler {
|
||||
return &ChartOfAccountTypeHandler{
|
||||
service: service,
|
||||
validator: validator,
|
||||
}
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountTypeHandler) CreateChartOfAccountType(c *gin.Context) {
|
||||
var req contract.CreateChartOfAccountTypeRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountTypeHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, err := h.service.CreateChartOfAccountType(c, &req)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountTypeHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "ChartOfAccountTypeHandler")
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountTypeHandler) GetChartOfAccountTypeByID(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid ID format"}}), "ChartOfAccountTypeHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, err := h.service.GetChartOfAccountTypeByID(c, id)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountTypeHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "ChartOfAccountTypeHandler")
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountTypeHandler) UpdateChartOfAccountType(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid ID format"}}), "ChartOfAccountTypeHandler")
|
||||
return
|
||||
}
|
||||
|
||||
var req contract.UpdateChartOfAccountTypeRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountTypeHandler")
|
||||
return
|
||||
}
|
||||
|
||||
response, err := h.service.UpdateChartOfAccountType(c, id, &req)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountTypeHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "ChartOfAccountTypeHandler")
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountTypeHandler) DeleteChartOfAccountType(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := uuid.Parse(idStr)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: "Invalid ID format"}}), "ChartOfAccountTypeHandler")
|
||||
return
|
||||
}
|
||||
|
||||
err = h.service.DeleteChartOfAccountType(c, id)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountTypeHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(gin.H{"message": "Chart of account type deleted successfully"}), "ChartOfAccountTypeHandler")
|
||||
}
|
||||
|
||||
func (h *ChartOfAccountTypeHandler) ListChartOfAccountTypes(c *gin.Context) {
|
||||
// Parse query parameters
|
||||
filters := make(map[string]interface{})
|
||||
|
||||
if isActive := c.Query("is_active"); isActive != "" {
|
||||
if isActiveBool, err := strconv.ParseBool(isActive); err == nil {
|
||||
filters["is_active"] = isActiveBool
|
||||
}
|
||||
}
|
||||
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
limit, _ := strconv.Atoi(c.DefaultQuery("limit", "10"))
|
||||
|
||||
response, total, err := h.service.ListChartOfAccountTypes(c, filters, page, limit)
|
||||
if err != nil {
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{{Cause: err.Error()}}), "ChartOfAccountTypeHandler")
|
||||
return
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(gin.H{
|
||||
"data": response,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"limit": limit,
|
||||
}), "ChartOfAccountTypeHandler")
|
||||
}
|
||||
@@ -0,0 +1,256 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/appcontext"
|
||||
"apskel-pos-be/internal/constants"
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/logger"
|
||||
"apskel-pos-be/internal/service"
|
||||
"apskel-pos-be/internal/util"
|
||||
"apskel-pos-be/internal/validator"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type IngredientUnitConverterHandler struct {
|
||||
converterService service.IngredientUnitConverterService
|
||||
converterValidator validator.IngredientUnitConverterValidator
|
||||
}
|
||||
|
||||
func NewIngredientUnitConverterHandler(
|
||||
converterService service.IngredientUnitConverterService,
|
||||
converterValidator validator.IngredientUnitConverterValidator,
|
||||
) *IngredientUnitConverterHandler {
|
||||
return &IngredientUnitConverterHandler{
|
||||
converterService: converterService,
|
||||
converterValidator: converterValidator,
|
||||
}
|
||||
}
|
||||
|
||||
func (h *IngredientUnitConverterHandler) CreateIngredientUnitConverter(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
var req contract.CreateIngredientUnitConverterRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
logger.FromContext(c.Request.Context()).WithError(err).Error("IngredientUnitConverterHandler::CreateIngredientUnitConverter -> request binding failed")
|
||||
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "IngredientUnitConverterHandler::CreateIngredientUnitConverter")
|
||||
return
|
||||
}
|
||||
|
||||
validationError, validationErrorCode := h.converterValidator.ValidateCreateIngredientUnitConverterRequest(&req)
|
||||
if validationError != nil {
|
||||
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "IngredientUnitConverterHandler::CreateIngredientUnitConverter")
|
||||
return
|
||||
}
|
||||
|
||||
converterResponse := h.converterService.CreateIngredientUnitConverter(ctx, contextInfo, &req)
|
||||
if converterResponse.HasErrors() {
|
||||
errorResp := converterResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("IngredientUnitConverterHandler::CreateIngredientUnitConverter -> Failed to create ingredient unit converter from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, converterResponse, "IngredientUnitConverterHandler::CreateIngredientUnitConverter")
|
||||
}
|
||||
|
||||
func (h *IngredientUnitConverterHandler) UpdateIngredientUnitConverter(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
converterIDStr := c.Param("id")
|
||||
converterID, err := uuid.Parse(converterIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("IngredientUnitConverterHandler::UpdateIngredientUnitConverter -> Invalid converter ID")
|
||||
validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid converter ID")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "IngredientUnitConverterHandler::UpdateIngredientUnitConverter")
|
||||
return
|
||||
}
|
||||
|
||||
var req contract.UpdateIngredientUnitConverterRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("IngredientUnitConverterHandler::UpdateIngredientUnitConverter -> request binding failed")
|
||||
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, "Invalid request body")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "IngredientUnitConverterHandler::UpdateIngredientUnitConverter")
|
||||
return
|
||||
}
|
||||
|
||||
validationError, validationErrorCode := h.converterValidator.ValidateUpdateIngredientUnitConverterRequest(&req)
|
||||
if validationError != nil {
|
||||
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "IngredientUnitConverterHandler::UpdateIngredientUnitConverter")
|
||||
return
|
||||
}
|
||||
|
||||
converterResponse := h.converterService.UpdateIngredientUnitConverter(ctx, contextInfo, converterID, &req)
|
||||
if converterResponse.HasErrors() {
|
||||
errorResp := converterResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("IngredientUnitConverterHandler::UpdateIngredientUnitConverter -> Failed to update ingredient unit converter from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, converterResponse, "IngredientUnitConverterHandler::UpdateIngredientUnitConverter")
|
||||
}
|
||||
|
||||
func (h *IngredientUnitConverterHandler) DeleteIngredientUnitConverter(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
converterIDStr := c.Param("id")
|
||||
converterID, err := uuid.Parse(converterIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("IngredientUnitConverterHandler::DeleteIngredientUnitConverter -> Invalid converter ID")
|
||||
validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid converter ID")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "IngredientUnitConverterHandler::DeleteIngredientUnitConverter")
|
||||
return
|
||||
}
|
||||
|
||||
converterResponse := h.converterService.DeleteIngredientUnitConverter(ctx, contextInfo, converterID)
|
||||
if converterResponse.HasErrors() {
|
||||
errorResp := converterResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("IngredientUnitConverterHandler::DeleteIngredientUnitConverter -> Failed to delete ingredient unit converter from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, converterResponse, "IngredientUnitConverterHandler::DeleteIngredientUnitConverter")
|
||||
}
|
||||
|
||||
func (h *IngredientUnitConverterHandler) GetIngredientUnitConverter(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
converterIDStr := c.Param("id")
|
||||
converterID, err := uuid.Parse(converterIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("IngredientUnitConverterHandler::GetIngredientUnitConverter -> Invalid converter ID")
|
||||
validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid converter ID")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "IngredientUnitConverterHandler::GetIngredientUnitConverter")
|
||||
return
|
||||
}
|
||||
|
||||
converterResponse := h.converterService.GetIngredientUnitConverter(ctx, contextInfo, converterID)
|
||||
if converterResponse.HasErrors() {
|
||||
errorResp := converterResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("IngredientUnitConverterHandler::GetIngredientUnitConverter -> Failed to get ingredient unit converter from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, converterResponse, "IngredientUnitConverterHandler::GetIngredientUnitConverter")
|
||||
}
|
||||
|
||||
func (h *IngredientUnitConverterHandler) ListIngredientUnitConverters(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
req := &contract.ListIngredientUnitConvertersRequest{
|
||||
Page: 1,
|
||||
Limit: 10,
|
||||
}
|
||||
|
||||
// Parse query parameters
|
||||
if pageStr := c.Query("page"); pageStr != "" {
|
||||
if page, err := strconv.Atoi(pageStr); err == nil {
|
||||
req.Page = page
|
||||
}
|
||||
}
|
||||
|
||||
if limitStr := c.Query("limit"); limitStr != "" {
|
||||
if limit, err := strconv.Atoi(limitStr); err == nil {
|
||||
req.Limit = limit
|
||||
}
|
||||
}
|
||||
|
||||
if search := c.Query("search"); search != "" {
|
||||
req.Search = search
|
||||
}
|
||||
|
||||
if ingredientIDStr := c.Query("ingredient_id"); ingredientIDStr != "" {
|
||||
if ingredientID, err := uuid.Parse(ingredientIDStr); err == nil {
|
||||
req.IngredientID = &ingredientID
|
||||
}
|
||||
}
|
||||
|
||||
if fromUnitIDStr := c.Query("from_unit_id"); fromUnitIDStr != "" {
|
||||
if fromUnitID, err := uuid.Parse(fromUnitIDStr); err == nil {
|
||||
req.FromUnitID = &fromUnitID
|
||||
}
|
||||
}
|
||||
|
||||
if toUnitIDStr := c.Query("to_unit_id"); toUnitIDStr != "" {
|
||||
if toUnitID, err := uuid.Parse(toUnitIDStr); err == nil {
|
||||
req.ToUnitID = &toUnitID
|
||||
}
|
||||
}
|
||||
|
||||
if isActiveStr := c.Query("is_active"); isActiveStr != "" {
|
||||
if isActive, err := strconv.ParseBool(isActiveStr); err == nil {
|
||||
req.IsActive = &isActive
|
||||
}
|
||||
}
|
||||
|
||||
validationError, validationErrorCode := h.converterValidator.ValidateListIngredientUnitConvertersRequest(req)
|
||||
if validationError != nil {
|
||||
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "IngredientUnitConverterHandler::ListIngredientUnitConverters")
|
||||
return
|
||||
}
|
||||
|
||||
converterResponse := h.converterService.ListIngredientUnitConverters(ctx, contextInfo, req)
|
||||
if converterResponse.HasErrors() {
|
||||
errorResp := converterResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("IngredientUnitConverterHandler::ListIngredientUnitConverters -> Failed to list ingredient unit converters from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, converterResponse, "IngredientUnitConverterHandler::ListIngredientUnitConverters")
|
||||
}
|
||||
|
||||
func (h *IngredientUnitConverterHandler) GetConvertersForIngredient(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
ingredientIDStr := c.Param("ingredient_id")
|
||||
ingredientID, err := uuid.Parse(ingredientIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("IngredientUnitConverterHandler::GetConvertersForIngredient -> Invalid ingredient ID")
|
||||
validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid ingredient ID")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "IngredientUnitConverterHandler::GetConvertersForIngredient")
|
||||
return
|
||||
}
|
||||
|
||||
converterResponse := h.converterService.GetConvertersForIngredient(ctx, contextInfo, ingredientID)
|
||||
if converterResponse.HasErrors() {
|
||||
errorResp := converterResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("IngredientUnitConverterHandler::GetConvertersForIngredient -> Failed to get converters for ingredient from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, converterResponse, "IngredientUnitConverterHandler::GetConvertersForIngredient")
|
||||
}
|
||||
|
||||
func (h *IngredientUnitConverterHandler) ConvertUnit(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
var req contract.ConvertUnitRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
logger.FromContext(c.Request.Context()).WithError(err).Error("IngredientUnitConverterHandler::ConvertUnit -> request binding failed")
|
||||
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "IngredientUnitConverterHandler::ConvertUnit")
|
||||
return
|
||||
}
|
||||
|
||||
validationError, validationErrorCode := h.converterValidator.ValidateConvertUnitRequest(&req)
|
||||
if validationError != nil {
|
||||
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "IngredientUnitConverterHandler::ConvertUnit")
|
||||
return
|
||||
}
|
||||
|
||||
converterResponse := h.converterService.ConvertUnit(ctx, contextInfo, &req)
|
||||
if converterResponse.HasErrors() {
|
||||
errorResp := converterResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("IngredientUnitConverterHandler::ConvertUnit -> Failed to convert unit from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, converterResponse, "IngredientUnitConverterHandler::ConvertUnit")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,267 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/appcontext"
|
||||
"apskel-pos-be/internal/util"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"apskel-pos-be/internal/constants"
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/logger"
|
||||
"apskel-pos-be/internal/service"
|
||||
"apskel-pos-be/internal/validator"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type PurchaseOrderHandler struct {
|
||||
purchaseOrderService service.PurchaseOrderService
|
||||
purchaseOrderValidator validator.PurchaseOrderValidator
|
||||
}
|
||||
|
||||
func NewPurchaseOrderHandler(
|
||||
purchaseOrderService service.PurchaseOrderService,
|
||||
purchaseOrderValidator validator.PurchaseOrderValidator,
|
||||
) *PurchaseOrderHandler {
|
||||
return &PurchaseOrderHandler{
|
||||
purchaseOrderService: purchaseOrderService,
|
||||
purchaseOrderValidator: purchaseOrderValidator,
|
||||
}
|
||||
}
|
||||
|
||||
func (h *PurchaseOrderHandler) CreatePurchaseOrder(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
var req contract.CreatePurchaseOrderRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
logger.FromContext(c.Request.Context()).WithError(err).Error("PurchaseOrderHandler::CreatePurchaseOrder -> request binding failed")
|
||||
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "PurchaseOrderHandler::CreatePurchaseOrder")
|
||||
return
|
||||
}
|
||||
|
||||
validationError, validationErrorCode := h.purchaseOrderValidator.ValidateCreatePurchaseOrderRequest(&req)
|
||||
if validationError != nil {
|
||||
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "PurchaseOrderHandler::CreatePurchaseOrder")
|
||||
return
|
||||
}
|
||||
|
||||
poResponse := h.purchaseOrderService.CreatePurchaseOrder(ctx, contextInfo, &req)
|
||||
if poResponse.HasErrors() {
|
||||
errorResp := poResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("PurchaseOrderHandler::CreatePurchaseOrder -> Failed to create purchase order from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, poResponse, "PurchaseOrderHandler::CreatePurchaseOrder")
|
||||
}
|
||||
|
||||
func (h *PurchaseOrderHandler) UpdatePurchaseOrder(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
poIDStr := c.Param("id")
|
||||
poID, err := uuid.Parse(poIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("PurchaseOrderHandler::UpdatePurchaseOrder -> Invalid purchase order ID")
|
||||
validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid purchase order ID")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "PurchaseOrderHandler::UpdatePurchaseOrder")
|
||||
return
|
||||
}
|
||||
|
||||
var req contract.UpdatePurchaseOrderRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("PurchaseOrderHandler::UpdatePurchaseOrder -> request binding failed")
|
||||
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, "Invalid request body")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "PurchaseOrderHandler::UpdatePurchaseOrder")
|
||||
return
|
||||
}
|
||||
|
||||
validationError, validationErrorCode := h.purchaseOrderValidator.ValidateUpdatePurchaseOrderRequest(&req)
|
||||
if validationError != nil {
|
||||
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "PurchaseOrderHandler::UpdatePurchaseOrder")
|
||||
return
|
||||
}
|
||||
|
||||
poResponse := h.purchaseOrderService.UpdatePurchaseOrder(ctx, contextInfo, poID, &req)
|
||||
if poResponse.HasErrors() {
|
||||
errorResp := poResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("PurchaseOrderHandler::UpdatePurchaseOrder -> Failed to update purchase order from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, poResponse, "PurchaseOrderHandler::UpdatePurchaseOrder")
|
||||
}
|
||||
|
||||
func (h *PurchaseOrderHandler) DeletePurchaseOrder(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
poIDStr := c.Param("id")
|
||||
poID, err := uuid.Parse(poIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("PurchaseOrderHandler::DeletePurchaseOrder -> Invalid purchase order ID")
|
||||
validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid purchase order ID")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "PurchaseOrderHandler::DeletePurchaseOrder")
|
||||
return
|
||||
}
|
||||
|
||||
poResponse := h.purchaseOrderService.DeletePurchaseOrder(ctx, contextInfo, poID)
|
||||
if poResponse.HasErrors() {
|
||||
errorResp := poResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("PurchaseOrderHandler::DeletePurchaseOrder -> Failed to delete purchase order from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, poResponse, "PurchaseOrderHandler::DeletePurchaseOrder")
|
||||
}
|
||||
|
||||
func (h *PurchaseOrderHandler) GetPurchaseOrder(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
poIDStr := c.Param("id")
|
||||
poID, err := uuid.Parse(poIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("PurchaseOrderHandler::GetPurchaseOrder -> Invalid purchase order ID")
|
||||
validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid purchase order ID")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "PurchaseOrderHandler::GetPurchaseOrder")
|
||||
return
|
||||
}
|
||||
|
||||
poResponse := h.purchaseOrderService.GetPurchaseOrderByID(ctx, contextInfo, poID)
|
||||
if poResponse.HasErrors() {
|
||||
errorResp := poResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("PurchaseOrderHandler::GetPurchaseOrder -> Failed to get purchase order from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, poResponse, "PurchaseOrderHandler::GetPurchaseOrder")
|
||||
}
|
||||
|
||||
func (h *PurchaseOrderHandler) ListPurchaseOrders(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
req := &contract.ListPurchaseOrdersRequest{
|
||||
Page: 1,
|
||||
Limit: 10,
|
||||
}
|
||||
|
||||
// Parse query parameters
|
||||
if pageStr := c.Query("page"); pageStr != "" {
|
||||
if page, err := strconv.Atoi(pageStr); err == nil {
|
||||
req.Page = page
|
||||
}
|
||||
}
|
||||
|
||||
if limitStr := c.Query("limit"); limitStr != "" {
|
||||
if limit, err := strconv.Atoi(limitStr); err == nil {
|
||||
req.Limit = limit
|
||||
}
|
||||
}
|
||||
|
||||
if search := c.Query("search"); search != "" {
|
||||
req.Search = search
|
||||
}
|
||||
|
||||
if status := c.Query("status"); status != "" {
|
||||
req.Status = status
|
||||
}
|
||||
|
||||
if vendorIDStr := c.Query("vendor_id"); vendorIDStr != "" {
|
||||
if vendorID, err := uuid.Parse(vendorIDStr); err == nil {
|
||||
req.VendorID = &vendorID
|
||||
}
|
||||
}
|
||||
|
||||
if startDateStr := c.Query("start_date"); startDateStr != "" {
|
||||
if startDate, err := time.Parse("2006-01-02", startDateStr); err == nil {
|
||||
req.StartDate = &startDate
|
||||
}
|
||||
}
|
||||
|
||||
if endDateStr := c.Query("end_date"); endDateStr != "" {
|
||||
if endDate, err := time.Parse("2006-01-02", endDateStr); err == nil {
|
||||
req.EndDate = &endDate
|
||||
}
|
||||
}
|
||||
|
||||
validationError, validationErrorCode := h.purchaseOrderValidator.ValidateListPurchaseOrdersRequest(req)
|
||||
if validationError != nil {
|
||||
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "PurchaseOrderHandler::ListPurchaseOrders")
|
||||
return
|
||||
}
|
||||
|
||||
poResponse := h.purchaseOrderService.ListPurchaseOrders(ctx, contextInfo, req)
|
||||
if poResponse.HasErrors() {
|
||||
errorResp := poResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("PurchaseOrderHandler::ListPurchaseOrders -> Failed to list purchase orders from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, poResponse, "PurchaseOrderHandler::ListPurchaseOrders")
|
||||
}
|
||||
|
||||
func (h *PurchaseOrderHandler) GetPurchaseOrdersByStatus(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
status := c.Param("status")
|
||||
if status == "" {
|
||||
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, "Status parameter is required")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "PurchaseOrderHandler::GetPurchaseOrdersByStatus")
|
||||
return
|
||||
}
|
||||
|
||||
poResponse := h.purchaseOrderService.GetPurchaseOrdersByStatus(ctx, contextInfo, status)
|
||||
if poResponse.HasErrors() {
|
||||
errorResp := poResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("PurchaseOrderHandler::GetPurchaseOrdersByStatus -> Failed to get purchase orders by status from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, poResponse, "PurchaseOrderHandler::GetPurchaseOrdersByStatus")
|
||||
}
|
||||
|
||||
func (h *PurchaseOrderHandler) GetOverduePurchaseOrders(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
poResponse := h.purchaseOrderService.GetOverduePurchaseOrders(ctx, contextInfo)
|
||||
if poResponse.HasErrors() {
|
||||
errorResp := poResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("PurchaseOrderHandler::GetOverduePurchaseOrders -> Failed to get overdue purchase orders from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, poResponse, "PurchaseOrderHandler::GetOverduePurchaseOrders")
|
||||
}
|
||||
|
||||
func (h *PurchaseOrderHandler) UpdatePurchaseOrderStatus(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
poIDStr := c.Param("id")
|
||||
poID, err := uuid.Parse(poIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("PurchaseOrderHandler::UpdatePurchaseOrderStatus -> Invalid purchase order ID")
|
||||
validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid purchase order ID")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "PurchaseOrderHandler::UpdatePurchaseOrderStatus")
|
||||
return
|
||||
}
|
||||
|
||||
status := c.Param("status")
|
||||
if status == "" {
|
||||
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, "Status parameter is required")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "PurchaseOrderHandler::UpdatePurchaseOrderStatus")
|
||||
return
|
||||
}
|
||||
|
||||
poResponse := h.purchaseOrderService.UpdatePurchaseOrderStatus(ctx, contextInfo, poID, status)
|
||||
if poResponse.HasErrors() {
|
||||
errorResp := poResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("PurchaseOrderHandler::UpdatePurchaseOrderStatus -> Failed to update purchase order status from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, poResponse, "PurchaseOrderHandler::UpdatePurchaseOrderStatus")
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/appcontext"
|
||||
"apskel-pos-be/internal/util"
|
||||
"strconv"
|
||||
|
||||
"apskel-pos-be/internal/constants"
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/logger"
|
||||
"apskel-pos-be/internal/service"
|
||||
"apskel-pos-be/internal/validator"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type VendorHandler struct {
|
||||
vendorService service.VendorService
|
||||
vendorValidator validator.VendorValidator
|
||||
}
|
||||
|
||||
func NewVendorHandler(
|
||||
vendorService service.VendorService,
|
||||
vendorValidator validator.VendorValidator,
|
||||
) *VendorHandler {
|
||||
return &VendorHandler{
|
||||
vendorService: vendorService,
|
||||
vendorValidator: vendorValidator,
|
||||
}
|
||||
}
|
||||
|
||||
func (h *VendorHandler) CreateVendor(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
var req contract.CreateVendorRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
logger.FromContext(c.Request.Context()).WithError(err).Error("VendorHandler::CreateVendor -> request binding failed")
|
||||
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "VendorHandler::CreateVendor")
|
||||
return
|
||||
}
|
||||
|
||||
validationError, validationErrorCode := h.vendorValidator.ValidateCreateVendorRequest(&req)
|
||||
if validationError != nil {
|
||||
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "VendorHandler::CreateVendor")
|
||||
return
|
||||
}
|
||||
|
||||
vendorResponse := h.vendorService.CreateVendor(ctx, contextInfo, &req)
|
||||
if vendorResponse.HasErrors() {
|
||||
errorResp := vendorResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("VendorHandler::CreateVendor -> Failed to create vendor from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, vendorResponse, "VendorHandler::CreateVendor")
|
||||
}
|
||||
|
||||
func (h *VendorHandler) UpdateVendor(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
vendorIDStr := c.Param("id")
|
||||
vendorID, err := uuid.Parse(vendorIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("VendorHandler::UpdateVendor -> Invalid vendor ID")
|
||||
validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid vendor ID")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "VendorHandler::UpdateVendor")
|
||||
return
|
||||
}
|
||||
|
||||
var req contract.UpdateVendorRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("VendorHandler::UpdateVendor -> request binding failed")
|
||||
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, "Invalid request body")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "VendorHandler::UpdateVendor")
|
||||
return
|
||||
}
|
||||
|
||||
validationError, validationErrorCode := h.vendorValidator.ValidateUpdateVendorRequest(&req)
|
||||
if validationError != nil {
|
||||
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "VendorHandler::UpdateVendor")
|
||||
return
|
||||
}
|
||||
|
||||
vendorResponse := h.vendorService.UpdateVendor(ctx, contextInfo, vendorID, &req)
|
||||
if vendorResponse.HasErrors() {
|
||||
errorResp := vendorResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("VendorHandler::UpdateVendor -> Failed to update vendor from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, vendorResponse, "VendorHandler::UpdateVendor")
|
||||
}
|
||||
|
||||
func (h *VendorHandler) DeleteVendor(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
vendorIDStr := c.Param("id")
|
||||
vendorID, err := uuid.Parse(vendorIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("VendorHandler::DeleteVendor -> Invalid vendor ID")
|
||||
validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid vendor ID")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "VendorHandler::DeleteVendor")
|
||||
return
|
||||
}
|
||||
|
||||
vendorResponse := h.vendorService.DeleteVendor(ctx, contextInfo, vendorID)
|
||||
if vendorResponse.HasErrors() {
|
||||
errorResp := vendorResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("VendorHandler::DeleteVendor -> Failed to delete vendor from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, vendorResponse, "VendorHandler::DeleteVendor")
|
||||
}
|
||||
|
||||
func (h *VendorHandler) GetVendor(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
vendorIDStr := c.Param("id")
|
||||
vendorID, err := uuid.Parse(vendorIDStr)
|
||||
if err != nil {
|
||||
logger.FromContext(ctx).WithError(err).Error("VendorHandler::GetVendor -> Invalid vendor ID")
|
||||
validationResponseError := contract.NewResponseError(constants.MalformedFieldErrorCode, constants.RequestEntity, "Invalid vendor ID")
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "VendorHandler::GetVendor")
|
||||
return
|
||||
}
|
||||
|
||||
vendorResponse := h.vendorService.GetVendorByID(ctx, contextInfo, vendorID)
|
||||
if vendorResponse.HasErrors() {
|
||||
errorResp := vendorResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("VendorHandler::GetVendor -> Failed to get vendor from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, vendorResponse, "VendorHandler::GetVendor")
|
||||
}
|
||||
|
||||
func (h *VendorHandler) ListVendors(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
req := &contract.ListVendorsRequest{
|
||||
Page: 1,
|
||||
Limit: 10,
|
||||
}
|
||||
|
||||
// Parse query parameters
|
||||
if pageStr := c.Query("page"); pageStr != "" {
|
||||
if page, err := strconv.Atoi(pageStr); err == nil {
|
||||
req.Page = page
|
||||
}
|
||||
}
|
||||
|
||||
if limitStr := c.Query("limit"); limitStr != "" {
|
||||
if limit, err := strconv.Atoi(limitStr); err == nil {
|
||||
req.Limit = limit
|
||||
}
|
||||
}
|
||||
|
||||
if search := c.Query("search"); search != "" {
|
||||
req.Search = search
|
||||
}
|
||||
|
||||
if isActiveStr := c.Query("is_active"); isActiveStr != "" {
|
||||
if isActive, err := strconv.ParseBool(isActiveStr); err == nil {
|
||||
req.IsActive = &isActive
|
||||
}
|
||||
}
|
||||
|
||||
validationError, validationErrorCode := h.vendorValidator.ValidateListVendorsRequest(req)
|
||||
if validationError != nil {
|
||||
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "VendorHandler::ListVendors")
|
||||
return
|
||||
}
|
||||
|
||||
vendorResponse := h.vendorService.ListVendors(ctx, contextInfo, req)
|
||||
if vendorResponse.HasErrors() {
|
||||
errorResp := vendorResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("VendorHandler::ListVendors -> Failed to list vendors from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, vendorResponse, "VendorHandler::ListVendors")
|
||||
}
|
||||
|
||||
func (h *VendorHandler) GetActiveVendors(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
contextInfo := appcontext.FromGinContext(ctx)
|
||||
|
||||
vendorResponse := h.vendorService.GetActiveVendors(ctx, contextInfo)
|
||||
if vendorResponse.HasErrors() {
|
||||
errorResp := vendorResponse.GetErrors()[0]
|
||||
logger.FromContext(ctx).WithError(errorResp).Error("VendorHandler::GetActiveVendors -> Failed to get active vendors from service")
|
||||
}
|
||||
|
||||
util.HandleResponse(c.Writer, c.Request, vendorResponse, "VendorHandler::GetActiveVendors")
|
||||
}
|
||||
Reference in New Issue
Block a user