198 lines
6.9 KiB
Go
198 lines
6.9 KiB
Go
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")
|
|
}
|