package request import ( "furtuna-be/internal/common/mycontext" "furtuna-be/internal/constants/role" "furtuna-be/internal/entity" "github.com/go-playground/validator/v10" ) type User struct { Name string `json:"name" validate:"required"` Email string `json:"email" validate:"required"` Password string `json:"password" validate:"required"` PartnerID *int64 `json:"partner_id"` SiteID *int64 `json:"site_id"` RoleID role.Role `json:"role_id" validate:"required"` NIK string `json:"nik"` UserType string `json:"user_type"` PhoneNumber string `json:"phone_number"` } func (e *User) Validate() error { validate := validator.New() if err := validate.Struct(e); err != nil { return err } return nil } func (u *User) ToEntity() *entity.User { return &entity.User{ Name: u.Name, Email: u.Email, Password: u.Password, RoleID: role.Role(u.RoleID), PartnerID: u.PartnerID, SiteID: u.SiteID, } } type UserParam struct { Search string `form:"search" json:"search" example:"admin,branch1"` Name string `form:"name" json:"name" example:"Admin 1"` RoleID int64 `form:"role_id" json:"role_id" example:"1"` PartnerID int64 `form:"partner_id" json:"partner_id" example:"1"` SiteID int64 `form:"site_id" json:"site_id" example:"1"` Limit int `form:"limit,default=10" json:"limit" example:"10"` Offset int `form:"offset,default=0" json:"offset" example:"0"` } func (p *UserParam) ToEntity(ctx mycontext.Context) entity.UserSearch { partnerID := p.PartnerID siteID := p.SiteID if !ctx.IsAdmin() { partnerID = *ctx.GetPartnerID() } if ctx.GetSiteID() != nil { siteID = *ctx.GetSiteID() } return entity.UserSearch{ Search: p.Search, Name: p.Name, RoleID: p.RoleID, PartnerID: partnerID, SiteID: siteID, Limit: p.Limit, Offset: p.Offset, } } type UserRegister struct { Name string `json:"name" validate:"required"` Email string `json:"email" validate:"required"` PhoneNumber string `json:"phone_number" validate:"required"` Password string `json:"password" validate:"required"` } func (e *UserRegister) Validate() error { validate := validator.New() if err := validate.Struct(e); err != nil { return err } return nil } func (u *UserRegister) ToEntity() *entity.User { return &entity.User{ Name: u.Name, Email: u.Email, PhoneNumber: u.PhoneNumber, Password: u.Password, RoleID: role.Customer, UserType: "CUSTOMER", } }