feat: add GetLinesByReturnId method to InventoryReturnController and service for retrieving return lines
Deploy Application / deploy (push) Successful in 30s Details

This commit is contained in:
Habib Fatkhul Rohman 2025-11-28 15:27:16 +07:00
parent 3dd7e60827
commit b9c987a04b
4 changed files with 45 additions and 13 deletions

View File

@ -17,6 +17,7 @@ type InventoryReturnController interface {
Delete(ctx *gin.Context) Delete(ctx *gin.Context)
GetById(ctx *gin.Context) GetById(ctx *gin.Context)
GetAll(ctx *gin.Context) GetAll(ctx *gin.Context)
GetLinesByReturnId(ctx *gin.Context)
CreateLine(ctx *gin.Context) CreateLine(ctx *gin.Context)
UpdateLine(ctx *gin.Context) UpdateLine(ctx *gin.Context)
DeleteLine(ctx *gin.Context) DeleteLine(ctx *gin.Context)
@ -26,6 +27,18 @@ type inventoryReturnController struct {
returnService service.InventoryReturnService returnService service.InventoryReturnService
} }
func (c *inventoryReturnController) GetLinesByReturnId(ctx *gin.Context) {
returnId := ctx.Param("id")
lines, err := c.returnService.GetLinesByReturnId(ctx, returnId)
if err != nil {
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_INVENTORY_RETURN_LINE, err.Error(), nil)
ctx.JSON(http.StatusInternalServerError, res)
return
}
res := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_INVENTORY_RETURN_LINE, lines)
ctx.JSON(http.StatusOK, res)
}
// DeleteLine implements InventoryReturnController. // DeleteLine implements InventoryReturnController.
func (c *inventoryReturnController) DeleteLine(ctx *gin.Context) { func (c *inventoryReturnController) DeleteLine(ctx *gin.Context) {
id := ctx.Param("id") id := ctx.Param("id")

View File

@ -23,6 +23,8 @@ const (
MESSAGE_SUCCESS_DELETE_INVENTORY_RETURN = "success delete inventory return" MESSAGE_SUCCESS_DELETE_INVENTORY_RETURN = "success delete inventory return"
MESSAGE_SUCCESS_DELETE_INVENTORY_RETURN_LINE = "success delete inventory return line" MESSAGE_SUCCESS_DELETE_INVENTORY_RETURN_LINE = "success delete inventory return line"
MESSAGE_FAILED_GET_DATA_FROM_BODY = "failed get data from body" MESSAGE_FAILED_GET_DATA_FROM_BODY = "failed get data from body"
MESSAGE_FAILED_GET_INVENTORY_RETURN_LINE = "failed get inventory return line"
MESSAGE_SUCCESS_GET_INVENTORY_RETURN_LINE = "success get inventory return line"
) )
type InventoryReturnCreateRequest struct { type InventoryReturnCreateRequest struct {
@ -68,7 +70,6 @@ type InventoryReturnResponse struct {
Status string `json:"status"` Status string `json:"status"`
InvIssue InvReturnInvIssue `json:"inv_issue"` InvIssue InvReturnInvIssue `json:"inv_issue"`
Client pkgdto.IdNameResponse `json:"client"` Client pkgdto.IdNameResponse `json:"client"`
ReturnLines []InventoryReturnLineResponse `json:"return_lines,omitempty"`
} }
type InvReturnInvIssue struct { type InvReturnInvIssue struct {
@ -97,10 +98,10 @@ type InvReturnProduct struct {
// Helper untuk mapping entity ke response // Helper untuk mapping entity ke response
func ToInventoryReturnResponse(entity entities.TInventoryReturnEntity) InventoryReturnResponse { func ToInventoryReturnResponse(entity entities.TInventoryReturnEntity) InventoryReturnResponse {
lines := make([]InventoryReturnLineResponse, 0, len(entity.ReturnLines)) // lines := make([]InventoryReturnLineResponse, 0, len(entity.ReturnLines))
for _, line := range entity.ReturnLines { // for _, line := range entity.ReturnLines {
lines = append(lines, ToInventoryReturnLineResponse(line)) // lines = append(lines, ToInventoryReturnLineResponse(line))
} // }
client := pkgdto.IdNameResponse{} client := pkgdto.IdNameResponse{}
if entity.Client.ID != uuid.Nil { if entity.Client.ID != uuid.Nil {
@ -135,7 +136,6 @@ func ToInventoryReturnResponse(entity entities.TInventoryReturnEntity) Inventory
Status: entity.Status, Status: entity.Status,
InvIssue: invIssue, InvIssue: invIssue,
Client: client, Client: client,
ReturnLines: lines,
} }
} }
@ -175,3 +175,11 @@ func ToInventoryReturnLineResponse(line entities.TInventoryReturnLineEntity) Inv
Client: client, Client: client,
} }
} }
func ToInventoryReturnLineResponses(linesEntity []entities.TInventoryReturnLineEntity) []InventoryReturnLineResponse {
lines := make([]InventoryReturnLineResponse, 0, len(linesEntity))
for _, line := range linesEntity {
lines = append(lines, ToInventoryReturnLineResponse(line))
}
return lines
}

View File

@ -20,6 +20,7 @@ func RegisterRoutes(server *gin.Engine, injector *do.Injector) {
returnRoutes.PUT(":id", middlewares.Authenticate(jwtService), returnController.Update) returnRoutes.PUT(":id", middlewares.Authenticate(jwtService), returnController.Update)
returnRoutes.DELETE(":id", middlewares.Authenticate(jwtService), returnController.Delete) returnRoutes.DELETE(":id", middlewares.Authenticate(jwtService), returnController.Delete)
returnRoutes.GET("", middlewares.Authenticate(jwtService), returnController.GetAll) returnRoutes.GET("", middlewares.Authenticate(jwtService), returnController.GetAll)
returnRoutes.GET(":id/lines", middlewares.Authenticate(jwtService), returnController.GetLinesByReturnId)
returnRoutes.POST(":id/lines", middlewares.Authenticate(jwtService), returnController.CreateLine) returnRoutes.POST(":id/lines", middlewares.Authenticate(jwtService), returnController.CreateLine)
returnRoutes.PUT("lines/:id", middlewares.Authenticate(jwtService), returnController.UpdateLine) returnRoutes.PUT("lines/:id", middlewares.Authenticate(jwtService), returnController.UpdateLine)
returnRoutes.DELETE("lines/:id", middlewares.Authenticate(jwtService), returnController.DeleteLine) returnRoutes.DELETE("lines/:id", middlewares.Authenticate(jwtService), returnController.DeleteLine)

View File

@ -19,6 +19,7 @@ type InventoryReturnService interface {
Create(ctx context.Context, req dtodomain.InventoryReturnCreateRequest) (dtodomain.InventoryReturnResponse, error) Create(ctx context.Context, req dtodomain.InventoryReturnCreateRequest) (dtodomain.InventoryReturnResponse, error)
GetById(ctx context.Context, id string) (dtodomain.InventoryReturnResponse, error) GetById(ctx context.Context, id string) (dtodomain.InventoryReturnResponse, error)
GetAll(ctx context.Context, filter query.InventoryReturnFilter) ([]dtodomain.InventoryReturnResponse, int64, error) GetAll(ctx context.Context, filter query.InventoryReturnFilter) ([]dtodomain.InventoryReturnResponse, int64, error)
GetLinesByReturnId(ctx context.Context, returnId string) ([]dtodomain.InventoryReturnLineResponse, error)
Update(ctx context.Context, req dtodomain.InventoryReturnUpdateRequest, id string) (dtodomain.InventoryReturnResponse, error) Update(ctx context.Context, req dtodomain.InventoryReturnUpdateRequest, id string) (dtodomain.InventoryReturnResponse, error)
Delete(ctx context.Context, id string) error Delete(ctx context.Context, id string) error
CreateLine(ctx context.Context, returnId string, req dtodomain.InventoryReturnLineCreateRequest) (dtodomain.InventoryReturnLineResponse, error) CreateLine(ctx context.Context, returnId string, req dtodomain.InventoryReturnLineCreateRequest) (dtodomain.InventoryReturnLineResponse, error)
@ -34,6 +35,15 @@ type inventoryReturnService struct {
productRepo productrepository.ProductRepository productRepo productrepository.ProductRepository
} }
// GetLinesByReturnId implements InventoryReturnService.
func (s *inventoryReturnService) GetLinesByReturnId(ctx context.Context, returnId string) ([]dtodomain.InventoryReturnLineResponse, error) {
lines, err := s.returnLineRepo.GetAllByReturnId(ctx, returnId)
if err != nil {
return nil, err
}
return dtodomain.ToInventoryReturnLineResponses(lines), nil
}
// DeleteLine implements InventoryReturnService. // DeleteLine implements InventoryReturnService.
func (s *inventoryReturnService) DeleteLine(ctx context.Context, lineId string) error { func (s *inventoryReturnService) DeleteLine(ctx context.Context, lineId string) error {
return s.returnLineRepo.Delete(ctx, nil, lineId) return s.returnLineRepo.Delete(ctx, nil, lineId)