6dcee0bc4b
- Updated the Customer entity to replace 'CompanyIDs' with 'Companies' for improved clarity and consistency. - Modified CreateCustomerForm and UpdateCustomerForm to reflect the change from 'CompanyIDs' to 'Companies', ensuring proper validation and structured responses. - Adjusted service methods to handle the new 'Companies' field, including registration and company assignment logic, enhancing the overall data model and API usability.
171 lines
6.8 KiB
Go
171 lines
6.8 KiB
Go
package customer
|
|
|
|
import "tm/pkg/response"
|
|
|
|
// CreateCustomerForm represents the form for creating a new customer
|
|
type CreateCustomerForm struct {
|
|
FullName *string `json:"full_name,omitempty" valid:"optional,length(2|100)" example:"User"`
|
|
Type string `json:"type" valid:"required,in(individual|company|government)" example:"individual"`
|
|
Role string `json:"role" valid:"required,in(admin|analyst)" example:"analyst"`
|
|
Companies []string `json:"companies,omitempty" valid:"optional"`
|
|
Username string `json:"username" valid:"required,alphanum,length(3|30)" example:"user"`
|
|
Email string `json:"email" valid:"required,email" example:"user@opplens.com"`
|
|
Password string `json:"password" valid:"required,length(8|128)" example:"User!1234"`
|
|
Phone *string `json:"phone,omitempty" valid:"optional,length(10|20)" example:"+1234567890"`
|
|
}
|
|
|
|
// UpdateCustomerForm represents the form for updating a customer
|
|
type UpdateCustomerForm struct {
|
|
FullName *string `json:"full_name,omitempty" valid:"optional,length(2|100)" example:"User"`
|
|
Type string `json:"type" valid:"required,in(individual|company|government)" example:"individual"`
|
|
Role string `json:"role" valid:"required,in(admin|analyst)" example:"analyst"`
|
|
Companies []string `json:"companies,omitempty" valid:"optional"`
|
|
Username string `json:"username" valid:"required,alphanum,length(3|30)" example:"user"`
|
|
Email string `json:"email" valid:"required,email" example:"user@opplens.com"`
|
|
Password string `json:"password" valid:"required,length(8|128)" example:"User!1234"`
|
|
Phone *string `json:"phone,omitempty" valid:"optional,length(10|20)" example:"+1234567890"`
|
|
}
|
|
|
|
// CustomerStatusForm represents the form for suspending a customer
|
|
type UpdateStatusForm struct {
|
|
Status string `json:"status" valid:"required,in(active|inactive|suspended)" example:"active"`
|
|
Reason string `json:"reason" valid:"required,length(10|500)" example:"Customer is active"`
|
|
}
|
|
|
|
// ListCustomersForm represents the form for listing customers with filters
|
|
type SearchCustomersForm struct {
|
|
Search *string `query:"q" valid:"optional"`
|
|
Type *string `query:"type" valid:"optional,in(individual|company|government)"`
|
|
Status *string `query:"status" valid:"optional,in(active|inactive|suspended)"`
|
|
CompanyID *string `query:"company_id" valid:"optional"`
|
|
}
|
|
|
|
// CompanySummary represents company summary data for customer responses
|
|
type CompanySummary struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// CustomerResponse represents the customer data sent in API responses
|
|
type CustomerResponse struct {
|
|
ID string `json:"id"`
|
|
FullName *string `json:"full_name"`
|
|
Username string `json:"username"`
|
|
Email string `json:"email"`
|
|
Status string `json:"status"`
|
|
Type string `json:"type"`
|
|
Role string `json:"role"`
|
|
Phone *string `json:"phone"`
|
|
UpdatedAt int64 `json:"updated_at"`
|
|
CreatedAt int64 `json:"created_at"`
|
|
LastLoginAt *int64 `json:"last_login_at"`
|
|
Companies []*CompanySummary `json:"companies"`
|
|
}
|
|
|
|
// ToResponse converts Customer to CustomerResponse
|
|
func (c *Customer) ToResponse(companies []*CompanySummary) *CustomerResponse {
|
|
return &CustomerResponse{
|
|
ID: c.ID.Hex(),
|
|
FullName: c.FullName,
|
|
Username: c.Username,
|
|
Email: c.Email,
|
|
Type: string(c.Type),
|
|
Status: string(c.Status),
|
|
Role: string(c.Role),
|
|
Phone: c.Phone,
|
|
UpdatedAt: c.UpdatedAt,
|
|
CreatedAt: c.CreatedAt,
|
|
LastLoginAt: c.LastLoginAt,
|
|
Companies: companies,
|
|
}
|
|
}
|
|
|
|
// CustomerListResponse represents the response for listing customers
|
|
type CustomerListResponse struct {
|
|
Customers []*CustomerResponse `json:"customers"`
|
|
Meta *response.Meta `json:"-"`
|
|
}
|
|
|
|
type LoginForm struct {
|
|
Username string `json:"username" valid:"required" example:"app"`
|
|
Password string `json:"password" valid:"required" example:"App!1234"`
|
|
DeviceToken string `json:"device_token" valid:"optional" example:"device_token"`
|
|
}
|
|
|
|
type RefreshTokenForm struct {
|
|
RefreshToken string `json:"refresh_token" valid:"required"`
|
|
}
|
|
|
|
type ChangePasswordForm struct {
|
|
OldPassword string `json:"old_password" valid:"required"`
|
|
NewPassword string `json:"new_password" valid:"required,length(8|128)"`
|
|
}
|
|
|
|
type UpdateProfileForm struct {
|
|
FullName *string `json:"full_name,omitempty" valid:"optional,length(2|100)"`
|
|
Username *string `json:"username,omitempty" valid:"optional,alphanum,length(3|30)"`
|
|
Phone *string `json:"phone,omitempty" valid:"optional,length(10|20)"`
|
|
}
|
|
|
|
type AuthResponse struct {
|
|
Customer *CustomerResponse `json:"customer"`
|
|
AccessToken string `json:"access_token"`
|
|
RefreshToken string `json:"refresh_token"`
|
|
ExpiresAt int64 `json:"expires_at"`
|
|
}
|
|
|
|
type AssignCompaniesForm struct {
|
|
Companies []string `json:"companies" valid:"required"`
|
|
}
|
|
|
|
type RemoveCompaniesForm struct {
|
|
Companies []string `json:"companies" valid:"required"`
|
|
}
|
|
|
|
// RequestResetPasswordForm represents the form for requesting password reset
|
|
type RequestResetPasswordForm struct {
|
|
Email string `json:"email" valid:"required,email" example:"app@opplens.com"`
|
|
}
|
|
|
|
// VerifyOTPForm represents the form for verifying OTP code
|
|
type VerifyOTPForm struct {
|
|
Email string `json:"email" valid:"required,email" example:"app@opplens.com"`
|
|
Code string `json:"code" valid:"required,length(6|6)" example:"123456"`
|
|
}
|
|
|
|
// ResetPasswordForm represents the form for resetting password
|
|
type ResetPasswordForm struct {
|
|
Token string `json:"token" valid:"required" example:"reset_token_here"`
|
|
NewPassword string `json:"new_password" valid:"required,length(5|128)" example:"NewPass!123"`
|
|
}
|
|
|
|
// RequestResetPasswordResponse represents the response for password reset request
|
|
type RequestResetPasswordResponse struct {
|
|
Message string `json:"message" example:"Password reset code sent to your email"`
|
|
Success bool `json:"success" example:"true"`
|
|
}
|
|
|
|
// VerifyOTPResponse represents the response for OTP verification
|
|
type VerifyOTPResponse struct {
|
|
Message string `json:"message" example:"OTP verified successfully"`
|
|
Token string `json:"token" example:"reset_token_here"`
|
|
Success bool `json:"success" example:"true"`
|
|
}
|
|
|
|
// ResetPasswordResponse represents the response for password reset
|
|
type ResetPasswordResponse struct {
|
|
Message string `json:"message" example:"Password reset successfully"`
|
|
Success bool `json:"success" example:"true"`
|
|
}
|
|
|
|
// AssignRoleForm represents the form for assigning a role to a customer
|
|
type AssignRoleForm struct {
|
|
Role string `json:"role" valid:"required,in(admin|analyst)" example:"analyst"`
|
|
}
|
|
|
|
// AssignRoleResponse represents the response for role assignment
|
|
type AssignRoleResponse struct {
|
|
Message string `json:"message" example:"Role assigned successfully"`
|
|
Success bool `json:"success" example:"true"`
|
|
}
|