feat: add GetLinesByRequestId method to InventoryRequestController and service for retrieving request lines
Deploy Application / deploy (push) Successful in 31s
Details
Deploy Application / deploy (push) Successful in 31s
Details
This commit is contained in:
parent
cf380fc711
commit
3dd7e60827
|
|
@ -19,6 +19,7 @@ type InventoryRequestController 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)
|
||||||
|
GetLinesByRequestId(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)
|
||||||
|
|
@ -29,6 +30,19 @@ type inventoryRequestController struct {
|
||||||
db *gorm.DB
|
db *gorm.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetLinesByRequestId implements InventoryRequestController.
|
||||||
|
func (c *inventoryRequestController) GetLinesByRequestId(ctx *gin.Context) {
|
||||||
|
id := ctx.Param("id")
|
||||||
|
lines, err := c.requestService.GetLinesByRequestId(ctx, id)
|
||||||
|
if err != nil {
|
||||||
|
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_INVENTORY_REQUEST_LINE, err.Error(), nil)
|
||||||
|
ctx.JSON(http.StatusInternalServerError, res)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
res := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_GET_INVENTORY_REQUEST_LINE, lines)
|
||||||
|
ctx.JSON(http.StatusOK, res)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *inventoryRequestController) DeleteLine(ctx *gin.Context) {
|
func (c *inventoryRequestController) DeleteLine(ctx *gin.Context) {
|
||||||
id := ctx.Param("id")
|
id := ctx.Param("id")
|
||||||
if err := c.requestService.DeleteLine(ctx, id); err != nil {
|
if err := c.requestService.DeleteLine(ctx, id); err != nil {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,11 @@
|
||||||
package dto
|
package dto
|
||||||
|
|
||||||
import pkgdto "github.com/Caknoooo/go-gin-clean-starter/pkg/dto"
|
import (
|
||||||
|
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
||||||
|
pkgdto "github.com/Caknoooo/go-gin-clean-starter/pkg/dto"
|
||||||
|
"github.com/Caknoooo/go-gin-clean-starter/pkg/utils"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MESSAGE_FAILED_CREATE_INVENTORY_REQUEST = "failed create inventory request"
|
MESSAGE_FAILED_CREATE_INVENTORY_REQUEST = "failed create inventory request"
|
||||||
|
|
@ -18,6 +23,8 @@ const (
|
||||||
MESSAGE_SUCCESS_DELETE_INVENTORY_REQUEST = "success delete inventory request"
|
MESSAGE_SUCCESS_DELETE_INVENTORY_REQUEST = "success delete inventory request"
|
||||||
MESSAGE_SUCCESS_DELETE_INVENTORY_REQUEST_LINE = "success delete inventory request line"
|
MESSAGE_SUCCESS_DELETE_INVENTORY_REQUEST_LINE = "success delete inventory request 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_REQUEST_LINE = "failed get inventory request line"
|
||||||
|
MESSAGE_SUCCESS_GET_INVENTORY_REQUEST_LINE = "success get inventory request line"
|
||||||
)
|
)
|
||||||
|
|
||||||
type InventoryRequestCreateRequest struct {
|
type InventoryRequestCreateRequest struct {
|
||||||
|
|
@ -55,9 +62,9 @@ type InventoryRequestResponse struct {
|
||||||
Note string `json:"note"`
|
Note string `json:"note"`
|
||||||
Status string `json:"status"`
|
Status string `json:"status"`
|
||||||
Client pkgdto.IdNameResponse `json:"client"`
|
Client pkgdto.IdNameResponse `json:"client"`
|
||||||
RequestLines []InventoryRequestLineResponse `json:"request_lines"`
|
// RequestLines []InventoryRequestLineResponse `json:"request_lines"`
|
||||||
LineCount int `json:"line_count"`
|
// LineCount int `json:"line_count"`
|
||||||
Assignment AssignmentResponse `json:"assignment,omitempty"`
|
Assignment *AssignmentResponse `json:"assignment"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type AssignmentResponse struct {
|
type AssignmentResponse struct {
|
||||||
|
|
@ -93,3 +100,99 @@ type InventoryRequestLineUpdateRequest struct {
|
||||||
Quantity *float64 `json:"quantity"`
|
Quantity *float64 `json:"quantity"`
|
||||||
ProductID *string `json:"product_id"`
|
ProductID *string `json:"product_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ToAssignmentResponse(e entities.TAssignmentEntity) AssignmentResponse {
|
||||||
|
users := make([]AssignmentUserResponse, 0)
|
||||||
|
for _, user := range e.AssignmentUsers {
|
||||||
|
userResp := AssignmentUserResponse{
|
||||||
|
ID: user.ID.String(),
|
||||||
|
TaskType: user.TaskType,
|
||||||
|
User: pkgdto.IdNameResponse{ID: user.User.ID.String(), Name: user.User.Name},
|
||||||
|
Role: pkgdto.IdNameResponse{ID: user.Role.ID.String(), Name: user.Role.Name},
|
||||||
|
}
|
||||||
|
users = append(users, userResp)
|
||||||
|
}
|
||||||
|
return AssignmentResponse{
|
||||||
|
ID: e.ID.String(),
|
||||||
|
DocumentType: e.DocumentType,
|
||||||
|
DocumentID: e.DocumentID.String(),
|
||||||
|
AssignmentUsers: users,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ToInventoryRequestResponse(e entities.TInventoryRequestEntity) InventoryRequestResponse {
|
||||||
|
client := pkgdto.IdNameResponse{}
|
||||||
|
if e.Client.ID != uuid.Nil {
|
||||||
|
client = pkgdto.IdNameResponse{
|
||||||
|
ID: e.Client.ID.String(),
|
||||||
|
Name: e.Client.Name,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// lines := make([]InventoryRequestLineResponse, 0)
|
||||||
|
// for _, line := range e.RequestLines {
|
||||||
|
// product := InventoryRequestLineProductResponse{}
|
||||||
|
// if line.Product.ID != uuid.Nil {
|
||||||
|
// product = InventoryRequestLineProductResponse{
|
||||||
|
// ID: line.Product.ID.String(),
|
||||||
|
// Name: line.Product.Name,
|
||||||
|
// RefNumber: line.Product.RefNumber,
|
||||||
|
// Uom: pkgdto.IdNameResponse{
|
||||||
|
// ID: line.Product.Uom.ID.String(),
|
||||||
|
// Name: line.Product.Uom.Name,
|
||||||
|
// },
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// lines = append(lines, InventoryRequestLineResponse{
|
||||||
|
// ID: line.ID.String(),
|
||||||
|
// Quantity: line.Quantity,
|
||||||
|
// // CurrentStock: line.Product.CurrentStock,
|
||||||
|
// Product: product,
|
||||||
|
// ClientID: line.ClientID.String(),
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
var assignment *AssignmentResponse
|
||||||
|
if e.Assignment.ID != uuid.Nil {
|
||||||
|
ass := ToAssignmentResponse(e.Assignment)
|
||||||
|
assignment = &ass
|
||||||
|
} else {
|
||||||
|
assignment = nil
|
||||||
|
}
|
||||||
|
return InventoryRequestResponse{
|
||||||
|
ID: e.ID.String(),
|
||||||
|
ReferenceNumber: e.ReferenceNumber,
|
||||||
|
DocumentNumber: e.DocumentNumber,
|
||||||
|
DueDate: utils.DateTimeToString(e.DueDate),
|
||||||
|
RequestType: e.RequestType,
|
||||||
|
Note: e.Note,
|
||||||
|
Status: e.Status,
|
||||||
|
Client: client,
|
||||||
|
// LineCount: len(lines),
|
||||||
|
// RequestLines: lines,
|
||||||
|
Assignment: assignment,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ToInventoryRequestLineResponses(linesEntity []entities.TInventoryRequestLineEntity) []InventoryRequestLineResponse {
|
||||||
|
lines := make([]InventoryRequestLineResponse, 0)
|
||||||
|
for _, line := range linesEntity {
|
||||||
|
product := InventoryRequestLineProductResponse{}
|
||||||
|
if line.Product.ID != uuid.Nil {
|
||||||
|
product = InventoryRequestLineProductResponse{
|
||||||
|
ID: line.Product.ID.String(),
|
||||||
|
Name: line.Product.Name,
|
||||||
|
RefNumber: line.Product.RefNumber,
|
||||||
|
Uom: pkgdto.IdNameResponse{
|
||||||
|
ID: line.Product.Uom.ID.String(),
|
||||||
|
Name: line.Product.Uom.Name,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lines = append(lines, InventoryRequestLineResponse{
|
||||||
|
ID: line.ID.String(),
|
||||||
|
Quantity: line.Quantity,
|
||||||
|
Product: product,
|
||||||
|
ClientID: line.ClientID.String(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return lines
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,8 @@ func (r *inventoryRequestRepository) GetById(ctx context.Context, tx *gorm.DB, i
|
||||||
var request entities.TInventoryRequestEntity
|
var request entities.TInventoryRequestEntity
|
||||||
if err := tx.WithContext(ctx).
|
if err := tx.WithContext(ctx).
|
||||||
Preload("Client").
|
Preload("Client").
|
||||||
Preload("RequestLines").
|
// Preload("RequestLines").
|
||||||
Preload("RequestLines.Product").
|
// Preload("RequestLines.Product").
|
||||||
First(&request, "id = ?", id).Error; err != nil {
|
First(&request, "id = ?", id).Error; err != nil {
|
||||||
return request, err
|
return request, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ func RegisterRoutes(server *gin.Engine, injector *do.Injector) {
|
||||||
requestRoutes.PUT(":id", middlewares.Authenticate(jwtService), requestController.Update)
|
requestRoutes.PUT(":id", middlewares.Authenticate(jwtService), requestController.Update)
|
||||||
requestRoutes.DELETE(":id", middlewares.Authenticate(jwtService), requestController.Delete)
|
requestRoutes.DELETE(":id", middlewares.Authenticate(jwtService), requestController.Delete)
|
||||||
requestRoutes.GET("", middlewares.Authenticate(jwtService), requestController.GetAll)
|
requestRoutes.GET("", middlewares.Authenticate(jwtService), requestController.GetAll)
|
||||||
|
requestRoutes.GET(":id/lines", middlewares.Authenticate(jwtService), requestController.GetLinesByRequestId)
|
||||||
requestRoutes.POST(":id/lines", middlewares.Authenticate(jwtService), requestController.CreateLine)
|
requestRoutes.POST(":id/lines", middlewares.Authenticate(jwtService), requestController.CreateLine)
|
||||||
requestRoutes.PUT("lines/:id", middlewares.Authenticate(jwtService), requestController.UpdateLine)
|
requestRoutes.PUT("lines/:id", middlewares.Authenticate(jwtService), requestController.UpdateLine)
|
||||||
requestRoutes.DELETE("lines/:id", middlewares.Authenticate(jwtService), requestController.DeleteLine)
|
requestRoutes.DELETE("lines/:id", middlewares.Authenticate(jwtService), requestController.DeleteLine)
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ type InventoryRequestService interface {
|
||||||
GetAll(ctx context.Context, filter query.InventoryRequestFilter) ([]dtodomain.InventoryRequestResponse, int64, error)
|
GetAll(ctx context.Context, filter query.InventoryRequestFilter) ([]dtodomain.InventoryRequestResponse, int64, error)
|
||||||
Update(ctx context.Context, req dtodomain.InventoryRequestUpdateRequest, id string) (dtodomain.InventoryRequestResponse, error)
|
Update(ctx context.Context, req dtodomain.InventoryRequestUpdateRequest, id string) (dtodomain.InventoryRequestResponse, error)
|
||||||
Delete(ctx context.Context, id string) error
|
Delete(ctx context.Context, id string) error
|
||||||
|
GetLinesByRequestId(ctx context.Context, requestId string) ([]dtodomain.InventoryRequestLineResponse, error)
|
||||||
CreateLine(ctx context.Context, requestId string, req dtodomain.InventoryRequestLineCreateRequest) (dtodomain.InventoryRequestLineResponse, error)
|
CreateLine(ctx context.Context, requestId string, req dtodomain.InventoryRequestLineCreateRequest) (dtodomain.InventoryRequestLineResponse, error)
|
||||||
UpdateLine(ctx context.Context, lineId string, req dtodomain.InventoryRequestLineUpdateRequest) (dtodomain.InventoryRequestLineResponse, error)
|
UpdateLine(ctx context.Context, lineId string, req dtodomain.InventoryRequestLineUpdateRequest) (dtodomain.InventoryRequestLineResponse, error)
|
||||||
DeleteLine(ctx context.Context, lineId string) error
|
DeleteLine(ctx context.Context, lineId string) error
|
||||||
|
|
@ -30,6 +31,15 @@ type inventoryRequestService struct {
|
||||||
requestLineRepo repository.InventoryRequestLineRepository
|
requestLineRepo repository.InventoryRequestLineRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetLinesByRequestId implements InventoryRequestService.
|
||||||
|
func (s *inventoryRequestService) GetLinesByRequestId(ctx context.Context, requestId string) ([]dtodomain.InventoryRequestLineResponse, error) {
|
||||||
|
lines, err := s.requestLineRepo.GetAllByRequestId(ctx, requestId)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return dtodomain.ToInventoryRequestLineResponses(lines), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *inventoryRequestService) DeleteLine(ctx context.Context, lineId string) error {
|
func (s *inventoryRequestService) DeleteLine(ctx context.Context, lineId string) error {
|
||||||
return s.requestLineRepo.Delete(ctx, nil, lineId)
|
return s.requestLineRepo.Delete(ctx, nil, lineId)
|
||||||
}
|
}
|
||||||
|
|
@ -77,74 +87,6 @@ func (s *inventoryRequestService) UpdateLine(ctx context.Context, lineId string,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func toAssignmentResponse(e entities.TAssignmentEntity) dtodomain.AssignmentResponse {
|
|
||||||
users := make([]dtodomain.AssignmentUserResponse, 0)
|
|
||||||
for _, user := range e.AssignmentUsers {
|
|
||||||
userResp := dtodomain.AssignmentUserResponse{
|
|
||||||
ID: user.ID.String(),
|
|
||||||
TaskType: user.TaskType,
|
|
||||||
User: pkgdto.IdNameResponse{ID: user.User.ID.String(), Name: user.User.Name},
|
|
||||||
Role: pkgdto.IdNameResponse{ID: user.Role.ID.String(), Name: user.Role.Name},
|
|
||||||
}
|
|
||||||
users = append(users, userResp)
|
|
||||||
}
|
|
||||||
return dtodomain.AssignmentResponse{
|
|
||||||
ID: e.ID.String(),
|
|
||||||
DocumentType: e.DocumentType,
|
|
||||||
DocumentID: e.DocumentID.String(),
|
|
||||||
AssignmentUsers: users,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func toInventoryRequestResponse(e entities.TInventoryRequestEntity) dtodomain.InventoryRequestResponse {
|
|
||||||
client := pkgdto.IdNameResponse{}
|
|
||||||
if e.Client.ID != uuid.Nil {
|
|
||||||
client = pkgdto.IdNameResponse{
|
|
||||||
ID: e.Client.ID.String(),
|
|
||||||
Name: e.Client.Name,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lines := make([]dtodomain.InventoryRequestLineResponse, 0)
|
|
||||||
for _, line := range e.RequestLines {
|
|
||||||
product := dtodomain.InventoryRequestLineProductResponse{}
|
|
||||||
if line.Product.ID != uuid.Nil {
|
|
||||||
product = dtodomain.InventoryRequestLineProductResponse{
|
|
||||||
ID: line.Product.ID.String(),
|
|
||||||
Name: line.Product.Name,
|
|
||||||
RefNumber: line.Product.RefNumber,
|
|
||||||
Uom: pkgdto.IdNameResponse{
|
|
||||||
ID: line.Product.Uom.ID.String(),
|
|
||||||
Name: line.Product.Uom.Name,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lines = append(lines, dtodomain.InventoryRequestLineResponse{
|
|
||||||
ID: line.ID.String(),
|
|
||||||
Quantity: line.Quantity,
|
|
||||||
// CurrentStock: line.Product.CurrentStock,
|
|
||||||
Product: product,
|
|
||||||
ClientID: line.ClientID.String(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
assignment := dtodomain.AssignmentResponse{}
|
|
||||||
if e.Assignment.ID != uuid.Nil {
|
|
||||||
assignment = toAssignmentResponse(e.Assignment)
|
|
||||||
}
|
|
||||||
return dtodomain.InventoryRequestResponse{
|
|
||||||
ID: e.ID.String(),
|
|
||||||
ReferenceNumber: e.ReferenceNumber,
|
|
||||||
DocumentNumber: e.DocumentNumber,
|
|
||||||
DueDate: utils.DateTimeToString(e.DueDate),
|
|
||||||
RequestType: e.RequestType,
|
|
||||||
Note: e.Note,
|
|
||||||
Status: e.Status,
|
|
||||||
Client: client,
|
|
||||||
LineCount: len(lines),
|
|
||||||
RequestLines: lines,
|
|
||||||
Assignment: assignment,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *inventoryRequestService) Create(ctx context.Context, req dtodomain.InventoryRequestCreateRequest) (dtodomain.InventoryRequestResponse, error) {
|
func (s *inventoryRequestService) Create(ctx context.Context, req dtodomain.InventoryRequestCreateRequest) (dtodomain.InventoryRequestResponse, error) {
|
||||||
tx := s.db.Begin()
|
tx := s.db.Begin()
|
||||||
defer func() {
|
defer func() {
|
||||||
|
|
@ -212,7 +154,7 @@ func (s *inventoryRequestService) Create(ctx context.Context, req dtodomain.Inve
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return dtodomain.InventoryRequestResponse{}, err
|
return dtodomain.InventoryRequestResponse{}, err
|
||||||
}
|
}
|
||||||
return toInventoryRequestResponse(result), nil
|
return dtodomain.ToInventoryRequestResponse(result), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *inventoryRequestService) GetById(ctx context.Context, id string) (dtodomain.InventoryRequestResponse, error) {
|
func (s *inventoryRequestService) GetById(ctx context.Context, id string) (dtodomain.InventoryRequestResponse, error) {
|
||||||
|
|
@ -220,7 +162,7 @@ func (s *inventoryRequestService) GetById(ctx context.Context, id string) (dtodo
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return dtodomain.InventoryRequestResponse{}, err
|
return dtodomain.InventoryRequestResponse{}, err
|
||||||
}
|
}
|
||||||
return toInventoryRequestResponse(request), nil
|
return dtodomain.ToInventoryRequestResponse(request), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *inventoryRequestService) GetAll(ctx context.Context, filter query.InventoryRequestFilter) ([]dtodomain.InventoryRequestResponse, int64, error) {
|
func (s *inventoryRequestService) GetAll(ctx context.Context, filter query.InventoryRequestFilter) ([]dtodomain.InventoryRequestResponse, int64, error) {
|
||||||
|
|
@ -230,7 +172,7 @@ func (s *inventoryRequestService) GetAll(ctx context.Context, filter query.Inven
|
||||||
}
|
}
|
||||||
var responses []dtodomain.InventoryRequestResponse
|
var responses []dtodomain.InventoryRequestResponse
|
||||||
for _, e := range requests {
|
for _, e := range requests {
|
||||||
responses = append(responses, toInventoryRequestResponse(e))
|
responses = append(responses, dtodomain.ToInventoryRequestResponse(e))
|
||||||
}
|
}
|
||||||
if responses == nil {
|
if responses == nil {
|
||||||
responses = make([]dtodomain.InventoryRequestResponse, 0)
|
responses = make([]dtodomain.InventoryRequestResponse, 0)
|
||||||
|
|
@ -268,7 +210,7 @@ func (s *inventoryRequestService) Update(ctx context.Context, req dtodomain.Inve
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return dtodomain.InventoryRequestResponse{}, err
|
return dtodomain.InventoryRequestResponse{}, err
|
||||||
}
|
}
|
||||||
return toInventoryRequestResponse(result), nil
|
return dtodomain.ToInventoryRequestResponse(result), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *inventoryRequestService) Delete(ctx context.Context, id string) error {
|
func (s *inventoryRequestService) Delete(ctx context.Context, id string) error {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue