Files
apskel-pos-backend/internal/transformer/expense_transformer.go
T

133 lines
3.8 KiB
Go
Raw Normal View History

2026-05-25 14:59:40 +07:00
package transformer
import (
"apskel-pos-be/internal/contract"
"apskel-pos-be/internal/models"
)
func CreateExpenseRequestToModel(req *contract.CreateExpenseRequest) *models.CreateExpenseRequest {
2026-05-25 16:19:36 +07:00
items := make([]models.CreateExpenseItemRequest, len(req.Items))
for i, item := range req.Items {
items[i] = CreateExpenseItemRequestToModel(&item)
}
2026-05-25 14:59:40 +07:00
return &models.CreateExpenseRequest{
2026-05-26 15:25:47 +07:00
ExpenseName: req.ExpenseName,
2026-05-25 16:19:36 +07:00
Receiver: req.Receiver,
TransactionDate: req.TransactionDate,
CodeNumber: req.CodeNumber,
OutletID: req.OutletID,
Description: req.Description,
Tax: req.Tax,
Total: req.Total,
Items: items,
}
}
func CreateExpenseItemRequestToModel(req *contract.CreateExpenseItemRequest) models.CreateExpenseItemRequest {
return models.CreateExpenseItemRequest{
2026-05-25 14:59:40 +07:00
ChartOfAccountID: req.ChartOfAccountID,
Description: req.Description,
2026-05-25 16:19:36 +07:00
Amount: req.Amount,
2026-05-25 14:59:40 +07:00
}
}
func UpdateExpenseRequestToModel(req *contract.UpdateExpenseRequest) *models.UpdateExpenseRequest {
2026-05-25 16:19:36 +07:00
modelReq := &models.UpdateExpenseRequest{
2026-05-26 15:25:47 +07:00
ExpenseName: req.ExpenseName,
2026-05-25 16:19:36 +07:00
Receiver: req.Receiver,
TransactionDate: req.TransactionDate,
CodeNumber: req.CodeNumber,
OutletID: req.OutletID,
Description: req.Description,
Tax: req.Tax,
Total: req.Total,
Reserved1: req.Reserved1,
}
if req.Items != nil {
items := make([]models.UpdateExpenseItemRequest, len(req.Items))
for i, item := range req.Items {
items[i] = UpdateExpenseItemRequestToModel(&item)
}
modelReq.Items = items
}
return modelReq
}
func UpdateExpenseItemRequestToModel(req *contract.UpdateExpenseItemRequest) models.UpdateExpenseItemRequest {
return models.UpdateExpenseItemRequest{
2026-05-25 14:59:40 +07:00
ChartOfAccountID: req.ChartOfAccountID,
Description: req.Description,
2026-05-25 16:19:36 +07:00
Amount: req.Amount,
2026-05-25 14:59:40 +07:00
}
}
func ListExpenseRequestToModel(req *contract.ListExpenseRequest) *models.ListExpenseRequest {
return &models.ListExpenseRequest{
2026-05-28 11:52:16 +07:00
Page: req.Page,
Limit: req.Limit,
Search: req.Search,
OutletID: req.OutletID,
StartDate: req.StartDate,
EndDate: req.EndDate,
2026-05-25 14:59:40 +07:00
}
}
func ExpenseModelResponseToResponse(expense *models.ExpenseResponse) *contract.ExpenseResponse {
2026-05-25 16:19:36 +07:00
if expense == nil {
return nil
}
items := make([]contract.ExpenseItemResponse, len(expense.Items))
for i, item := range expense.Items {
items[i] = ExpenseItemModelResponseToResponse(&item)
}
2026-05-25 14:59:40 +07:00
return &contract.ExpenseResponse{
2026-05-25 16:19:36 +07:00
ID: expense.ID,
OrganizationID: expense.OrganizationID,
OutletID: expense.OutletID,
2026-05-26 15:25:47 +07:00
ExpenseName: expense.ExpenseName,
2026-05-25 16:19:36 +07:00
Receiver: expense.Receiver,
TransactionDate: expense.TransactionDate,
CodeNumber: expense.CodeNumber,
Description: expense.Description,
Tax: expense.Tax,
Total: expense.Total,
Reserved1: expense.Reserved1,
CreatedAt: expense.CreatedAt,
UpdatedAt: expense.UpdatedAt,
Items: items,
}
}
func ExpenseItemModelResponseToResponse(item *models.ExpenseItemResponse) contract.ExpenseItemResponse {
return contract.ExpenseItemResponse{
ID: item.ID,
ExpenseID: item.ExpenseID,
ChartOfAccountID: item.ChartOfAccountID,
ChartOfAccountName: item.ChartOfAccountName,
Description: item.Description,
Amount: item.Amount,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
2026-05-25 14:59:40 +07:00
}
}
func ExpenseModelResponsesToResponses(expenses []*models.ExpenseResponse) []contract.ExpenseResponse {
if expenses == nil {
return nil
}
responses := make([]contract.ExpenseResponse, len(expenses))
for i, expense := range expenses {
response := ExpenseModelResponseToResponse(expense)
if response != nil {
responses[i] = *response
}
}
return responses
}