2025-09-28 01:53:09 +00:00
|
|
|
package request
|
|
|
|
|
|
|
|
|
|
import (
|
2025-09-30 13:34:56 +00:00
|
|
|
"netidhub-saas-be/app/database/entity/users"
|
|
|
|
|
"netidhub-saas-be/utils/paginator"
|
2025-09-28 01:53:09 +00:00
|
|
|
"strconv"
|
|
|
|
|
"time"
|
2025-10-01 22:23:26 +00:00
|
|
|
|
|
|
|
|
"github.com/google/uuid"
|
2025-09-28 01:53:09 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type UsersGeneric interface {
|
|
|
|
|
ToEntity()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UsersQueryRequest struct {
|
|
|
|
|
Username *string `json:"username"`
|
|
|
|
|
Email *string `json:"email"`
|
|
|
|
|
Fullname *string `json:"fullname"`
|
|
|
|
|
PhoneNumber *string `json:"phoneNumber"`
|
|
|
|
|
WorkType *string `json:"workType"`
|
|
|
|
|
GenderType *string `json:"genderType"`
|
|
|
|
|
IdentityType *string `json:"identityType"`
|
|
|
|
|
IdentityGroup *string `json:"identityGroup"`
|
|
|
|
|
IdentityGroupNumber *string `json:"identityGroupNumber"`
|
|
|
|
|
IdentityNumber *string `json:"identityNumber"`
|
|
|
|
|
UserRoleId *int `json:"userRoleId"`
|
|
|
|
|
StatusId *int `json:"statusId"`
|
|
|
|
|
Pagination *paginator.Pagination `json:"pagination"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UsersCreateRequest struct {
|
2025-10-01 22:23:26 +00:00
|
|
|
Username string `json:"username" validate:"required,lowercase"`
|
|
|
|
|
Email string `json:"email" validate:"required,email"`
|
|
|
|
|
Fullname string `json:"fullname" validate:"required"`
|
|
|
|
|
UserLevelId uint `json:"userLevelId" validate:"required"`
|
|
|
|
|
UserRoleId uint `json:"userRoleId" validate:"required"`
|
|
|
|
|
Password string `json:"password" validate:"required"`
|
|
|
|
|
PhoneNumber *string `json:"phoneNumber"`
|
|
|
|
|
Address *string `json:"address"`
|
|
|
|
|
WorkType *string `json:"workType"`
|
|
|
|
|
GenderType *string `json:"genderType"`
|
|
|
|
|
IdentityType *string `json:"identityType"`
|
|
|
|
|
IdentityGroup *string `json:"identityGroup"`
|
|
|
|
|
IdentityGroupNumber *string `json:"identityGroupNumber"`
|
|
|
|
|
IdentityNumber *string `json:"identityNumber"`
|
|
|
|
|
DateOfBirth *string `json:"dateOfBirth"`
|
|
|
|
|
LastEducation *string `json:"lastEducation"`
|
|
|
|
|
ClientId *uuid.UUID `json:"clientId"`
|
2025-09-28 01:53:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (req UsersCreateRequest) ToEntity() *users.Users {
|
|
|
|
|
return &users.Users{
|
|
|
|
|
Username: req.Username,
|
|
|
|
|
Email: req.Email,
|
|
|
|
|
Fullname: req.Fullname,
|
|
|
|
|
Address: req.Address,
|
|
|
|
|
PhoneNumber: req.PhoneNumber,
|
|
|
|
|
WorkType: req.WorkType,
|
|
|
|
|
GenderType: req.GenderType,
|
|
|
|
|
IdentityType: req.IdentityType,
|
|
|
|
|
IdentityGroup: req.IdentityGroup,
|
|
|
|
|
IdentityGroupNumber: req.IdentityGroupNumber,
|
|
|
|
|
IdentityNumber: req.IdentityNumber,
|
|
|
|
|
DateOfBirth: req.DateOfBirth,
|
|
|
|
|
LastEducation: req.LastEducation,
|
|
|
|
|
UserRoleId: req.UserRoleId,
|
|
|
|
|
UserLevelId: req.UserLevelId,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UsersUpdateRequest struct {
|
|
|
|
|
Username string `json:"username" validate:"required,lowercase"`
|
|
|
|
|
Email string `json:"email" validate:"required,email"`
|
|
|
|
|
Fullname string `json:"fullname" validate:"required"`
|
2026-02-09 07:15:34 +00:00
|
|
|
UserLevelId *uint `json:"userLevelId"`
|
|
|
|
|
UserRoleId *uint `json:"userRoleId"`
|
2025-09-28 01:53:09 +00:00
|
|
|
PhoneNumber *string `json:"phoneNumber"`
|
|
|
|
|
Address *string `json:"address"`
|
|
|
|
|
WorkType *string `json:"workType"`
|
|
|
|
|
GenderType *string `json:"genderType"`
|
|
|
|
|
IdentityType *string `json:"identityType"`
|
|
|
|
|
IdentityGroup *string `json:"identityGroup"`
|
|
|
|
|
IdentityGroupNumber *string `json:"identityGroupNumber"`
|
|
|
|
|
IdentityNumber *string `json:"identityNumber"`
|
|
|
|
|
DateOfBirth *string `json:"dateOfBirth"`
|
|
|
|
|
LastEducation *string `json:"lastEducation"`
|
|
|
|
|
StatusId *int `json:"statusId"`
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-09 07:15:34 +00:00
|
|
|
// type UsersUpdateRequest struct {
|
|
|
|
|
// Username string `json:"username" validate:"required,lowercase"`
|
|
|
|
|
// Email string `json:"email" validate:"required,email"`
|
|
|
|
|
// Fullname string `json:"fullname" validate:"required"`
|
|
|
|
|
// UserLevelId uint `json:"userLevelId" validate:"required"`
|
|
|
|
|
// UserRoleId uint `json:"userRoleId" validate:"required"`
|
|
|
|
|
// PhoneNumber *string `json:"phoneNumber"`
|
|
|
|
|
// Address *string `json:"address"`
|
|
|
|
|
// WorkType *string `json:"workType"`
|
|
|
|
|
// GenderType *string `json:"genderType"`
|
|
|
|
|
// IdentityType *string `json:"identityType"`
|
|
|
|
|
// IdentityGroup *string `json:"identityGroup"`
|
|
|
|
|
// IdentityGroupNumber *string `json:"identityGroupNumber"`
|
|
|
|
|
// IdentityNumber *string `json:"identityNumber"`
|
|
|
|
|
// DateOfBirth *string `json:"dateOfBirth"`
|
|
|
|
|
// LastEducation *string `json:"lastEducation"`
|
|
|
|
|
// StatusId *int `json:"statusId"`
|
|
|
|
|
// }
|
|
|
|
|
|
2025-09-28 01:53:09 +00:00
|
|
|
func (req UsersUpdateRequest) ToEntity() *users.Users {
|
2026-02-09 07:15:34 +00:00
|
|
|
entity := &users.Users{
|
2025-09-28 01:53:09 +00:00
|
|
|
Username: req.Username,
|
|
|
|
|
Email: req.Email,
|
|
|
|
|
Fullname: req.Fullname,
|
|
|
|
|
Address: req.Address,
|
|
|
|
|
PhoneNumber: req.PhoneNumber,
|
|
|
|
|
WorkType: req.WorkType,
|
|
|
|
|
GenderType: req.GenderType,
|
|
|
|
|
IdentityType: req.IdentityType,
|
|
|
|
|
IdentityGroup: req.IdentityGroup,
|
|
|
|
|
IdentityGroupNumber: req.IdentityGroupNumber,
|
|
|
|
|
IdentityNumber: req.IdentityNumber,
|
|
|
|
|
DateOfBirth: req.DateOfBirth,
|
|
|
|
|
LastEducation: req.LastEducation,
|
|
|
|
|
StatusId: req.StatusId,
|
|
|
|
|
UpdatedAt: time.Now(),
|
|
|
|
|
}
|
2026-02-09 07:15:34 +00:00
|
|
|
|
|
|
|
|
// ⬇️ HANYA SET JIKA DIKIRIM
|
|
|
|
|
if req.UserLevelId != nil {
|
|
|
|
|
entity.UserLevelId = *req.UserLevelId
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if req.UserRoleId != nil {
|
|
|
|
|
entity.UserRoleId = *req.UserRoleId
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return entity
|
2025-09-28 01:53:09 +00:00
|
|
|
}
|
|
|
|
|
|
2026-02-09 07:15:34 +00:00
|
|
|
// func (req UsersUpdateRequest) ToEntity() *users.Users {
|
|
|
|
|
// return &users.Users{
|
|
|
|
|
// Username: req.Username,
|
|
|
|
|
// Email: req.Email,
|
|
|
|
|
// Fullname: req.Fullname,
|
|
|
|
|
// Address: req.Address,
|
|
|
|
|
// PhoneNumber: req.PhoneNumber,
|
|
|
|
|
// WorkType: req.WorkType,
|
|
|
|
|
// GenderType: req.GenderType,
|
|
|
|
|
// IdentityType: req.IdentityType,
|
|
|
|
|
// IdentityGroup: req.IdentityGroup,
|
|
|
|
|
// IdentityGroupNumber: req.IdentityGroupNumber,
|
|
|
|
|
// IdentityNumber: req.IdentityNumber,
|
|
|
|
|
// DateOfBirth: req.DateOfBirth,
|
|
|
|
|
// LastEducation: req.LastEducation,
|
|
|
|
|
// UserRoleId: req.UserRoleId,
|
|
|
|
|
// StatusId: req.StatusId,
|
|
|
|
|
// UserLevelId: req.UserLevelId,
|
|
|
|
|
// UpdatedAt: time.Now(),
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
2025-09-28 01:53:09 +00:00
|
|
|
type UserLogin struct {
|
|
|
|
|
Username *string `json:"username"`
|
|
|
|
|
Password *string `json:"password"`
|
|
|
|
|
RefreshToken *string `json:"refreshToken"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UserForgotPassword struct {
|
|
|
|
|
Username string `json:"username"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UserSavePassword struct {
|
|
|
|
|
Password string `json:"password"`
|
|
|
|
|
ConfirmPassword string `json:"confirmPassword"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UserResetPassword struct {
|
|
|
|
|
CodeRequest string `json:"codeRequest"`
|
|
|
|
|
UserId string `json:"userId"`
|
|
|
|
|
Password string `json:"password"`
|
|
|
|
|
ConfirmPassword string `json:"confirmPassword"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UserEmailValidationRequest struct {
|
|
|
|
|
Username *string `json:"username"`
|
|
|
|
|
Password *string `json:"password"`
|
|
|
|
|
OldEmail *string `json:"oldEmail"`
|
|
|
|
|
NewEmail *string `json:"newEmail"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UserOtpRequest struct {
|
|
|
|
|
Email string `json:"email" validate:"required,email"`
|
|
|
|
|
Name *string `json:"name"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UserOtpValidation struct {
|
|
|
|
|
Email *string `json:"email"`
|
|
|
|
|
Username *string `json:"username"`
|
|
|
|
|
OtpCode string `json:"otpCode"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UsersQueryRequestContext struct {
|
|
|
|
|
Username string `json:"username"`
|
|
|
|
|
Email string `json:"email"`
|
|
|
|
|
Fullname string `json:"fullname"`
|
|
|
|
|
PhoneNumber string `json:"phoneNumber"`
|
|
|
|
|
WorkType string `json:"workType"`
|
|
|
|
|
GenderType string `json:"genderType"`
|
|
|
|
|
IdentityType string `json:"identityType"`
|
|
|
|
|
IdentityGroup string `json:"identityGroup"`
|
|
|
|
|
IdentityGroupNumber string `json:"identityGroupNumber"`
|
|
|
|
|
IdentityNumber string `json:"identityNumber"`
|
|
|
|
|
UserRoleId string `json:"userRoleId"`
|
|
|
|
|
StatusId string `json:"statusId"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (req UsersQueryRequestContext) ToParamRequest() UsersQueryRequest {
|
|
|
|
|
var request UsersQueryRequest
|
|
|
|
|
|
|
|
|
|
if username := req.Username; username != "" {
|
|
|
|
|
request.Username = &username
|
|
|
|
|
}
|
|
|
|
|
if email := req.Email; email != "" {
|
|
|
|
|
request.Email = &email
|
|
|
|
|
}
|
|
|
|
|
if fullname := req.Fullname; fullname != "" {
|
|
|
|
|
request.Fullname = &fullname
|
|
|
|
|
}
|
|
|
|
|
if phoneNumber := req.PhoneNumber; phoneNumber != "" {
|
|
|
|
|
request.PhoneNumber = &phoneNumber
|
|
|
|
|
}
|
|
|
|
|
if workType := req.WorkType; workType != "" {
|
|
|
|
|
request.WorkType = &workType
|
|
|
|
|
}
|
|
|
|
|
if genderType := req.GenderType; genderType != "" {
|
|
|
|
|
request.GenderType = &genderType
|
|
|
|
|
}
|
|
|
|
|
if identityType := req.IdentityType; identityType != "" {
|
|
|
|
|
request.IdentityType = &identityType
|
|
|
|
|
}
|
|
|
|
|
if identityGroup := req.IdentityGroup; identityGroup != "" {
|
|
|
|
|
request.IdentityGroup = &identityGroup
|
|
|
|
|
}
|
|
|
|
|
if identityGroupNumber := req.IdentityGroupNumber; identityGroupNumber != "" {
|
|
|
|
|
request.IdentityGroupNumber = &identityGroupNumber
|
|
|
|
|
}
|
|
|
|
|
if identityNumber := req.IdentityNumber; identityNumber != "" {
|
|
|
|
|
request.IdentityNumber = &identityNumber
|
|
|
|
|
}
|
|
|
|
|
if userRoleIdStr := req.UserRoleId; userRoleIdStr != "" {
|
|
|
|
|
userRoleId, err := strconv.Atoi(userRoleIdStr)
|
|
|
|
|
if err == nil {
|
|
|
|
|
request.UserRoleId = &userRoleId
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if statusIdStr := req.StatusId; statusIdStr != "" {
|
|
|
|
|
statusId, err := strconv.Atoi(statusIdStr)
|
|
|
|
|
if err == nil {
|
|
|
|
|
request.StatusId = &statusId
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return request
|
|
|
|
|
}
|