meti-backend/internal/transformer/user_transformer.go

74 lines
1.6 KiB
Go
Raw Normal View History

2025-08-09 15:08:26 +07:00
package transformer
import (
"eslogad-be/internal/contract"
"eslogad-be/internal/entities"
)
func CreateUserRequestToEntity(req *contract.CreateUserRequest, passwordHash string) *entities.User {
if req == nil {
return nil
}
return &entities.User{
2025-08-15 22:53:40 +07:00
Username: req.Email,
2025-08-09 15:08:26 +07:00
Name: req.Name,
Email: req.Email,
PasswordHash: passwordHash,
IsActive: true,
}
}
func UpdateUserEntity(existing *entities.User, req *contract.UpdateUserRequest) *entities.User {
if existing == nil || req == nil {
return existing
}
if req.Name != nil {
existing.Name = *req.Name
}
if req.Email != nil {
existing.Email = *req.Email
2025-08-15 22:53:40 +07:00
existing.Username = *req.Email
2025-08-09 15:08:26 +07:00
}
if req.IsActive != nil {
existing.IsActive = *req.IsActive
}
return existing
}
func EntityToContract(user *entities.User) *contract.UserResponse {
if user == nil {
return nil
}
2025-08-15 21:17:19 +07:00
2025-08-09 23:44:03 +07:00
resp := &contract.UserResponse{
2025-08-09 15:08:26 +07:00
ID: user.ID,
2025-08-15 22:53:40 +07:00
Username: user.Username,
2025-08-15 22:17:01 +07:00
Name: user.Name,
2025-08-09 15:08:26 +07:00
Email: user.Email,
IsActive: user.IsActive,
CreatedAt: user.CreatedAt,
UpdatedAt: user.UpdatedAt,
}
2025-08-09 23:44:03 +07:00
if user.Profile != nil {
resp.Profile = ProfileEntityToContract(user.Profile)
}
2025-08-15 21:17:19 +07:00
if user.Departments != nil && len(user.Departments) > 0 {
resp.DepartmentResponse = DepartmentsToContract(user.Departments)
}
2025-08-09 23:44:03 +07:00
return resp
2025-08-09 15:08:26 +07:00
}
func EntitiesToContracts(users []*entities.User) []contract.UserResponse {
if users == nil {
return nil
}
responses := make([]contract.UserResponse, len(users))
for i, u := range users {
resp := EntityToContract(u)
if resp != nil {
responses[i] = *resp
}
}
return responses
}