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.
99 lines
2.9 KiB
Go
99 lines
2.9 KiB
Go
package customer
|
|
|
|
import (
|
|
"tm/pkg/mongo"
|
|
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
|
)
|
|
|
|
// CustomerStatus represents customer account status
|
|
type CustomerStatus string
|
|
|
|
const (
|
|
CustomerStatusActive CustomerStatus = "active"
|
|
CustomerStatusInactive CustomerStatus = "inactive"
|
|
CustomerStatusSuspended CustomerStatus = "suspended"
|
|
)
|
|
|
|
// CustomerType represents the type of customer
|
|
type CustomerType string
|
|
|
|
const (
|
|
CustomerTypeIndividual CustomerType = "individual"
|
|
CustomerTypeCompany CustomerType = "company"
|
|
CustomerTypeGovernment CustomerType = "government"
|
|
)
|
|
|
|
// CustomerRole represents the role of customer
|
|
type CustomerRole string
|
|
|
|
const (
|
|
CustomerRoleAdmin CustomerRole = "admin"
|
|
CustomerRoleAnalyst CustomerRole = "analyst"
|
|
)
|
|
|
|
// Customer represents a customer in the tender management system
|
|
// A customer can have an associated company for login purposes
|
|
type Customer struct {
|
|
mongo.Model `bson:",inline"`
|
|
FullName *string `bson:"full_name"`
|
|
Username string `bson:"username"`
|
|
Email string `bson:"email"`
|
|
Password string `bson:"password"`
|
|
Status CustomerStatus `bson:"status"`
|
|
Type CustomerType `bson:"type"`
|
|
Role CustomerRole `bson:"role"`
|
|
Phone *string `bson:"phone"`
|
|
Companies []string `bson:"companies"`
|
|
DeviceToken []string `bson:"device_token"`
|
|
LastLoginAt *int64 `bson:"last_login_at"`
|
|
UpdatedAt int64 `bson:"updated_at"`
|
|
CreatedAt int64 `bson:"created_at"`
|
|
}
|
|
|
|
// SetID sets the customer ID (implements IDSetter interface)
|
|
func (c *Customer) SetID(id string) {
|
|
c.ID, _ = bson.ObjectIDFromHex(id)
|
|
}
|
|
|
|
// GetID returns the customer ID (implements IDGetter interface)
|
|
func (c *Customer) GetID() string {
|
|
return c.ID.Hex()
|
|
}
|
|
|
|
// SetCreatedAt sets the created timestamp (implements Timestamp interface)
|
|
func (c *Customer) SetCreatedAt(timestamp int64) {
|
|
c.CreatedAt = timestamp
|
|
}
|
|
|
|
// SetUpdatedAt sets the updated timestamp (implements Timestamp interface)
|
|
func (c *Customer) SetUpdatedAt(timestamp int64) {
|
|
c.UpdatedAt = timestamp
|
|
}
|
|
|
|
// GetCreatedAt returns the created timestamp (implements Timestamp interface)
|
|
func (c *Customer) GetCreatedAt() int64 {
|
|
return c.CreatedAt
|
|
}
|
|
|
|
// GetUpdatedAt returns the updated timestamp (implements Timestamp interface)
|
|
func (c *Customer) GetUpdatedAt() int64 {
|
|
return c.UpdatedAt
|
|
}
|
|
|
|
// OTP represents a one-time password for password reset
|
|
type OTP struct {
|
|
Code string `bson:"code" json:"code"`
|
|
Email string `bson:"email" json:"email"`
|
|
ExpiresAt int64 `bson:"expires_at" json:"expires_at"`
|
|
CreatedAt int64 `bson:"created_at" json:"created_at"`
|
|
}
|
|
|
|
// ResetToken represents a temporary reset token for password reset
|
|
type ResetToken struct {
|
|
Token string `bson:"token" json:"token"`
|
|
Email string `bson:"email" json:"email"`
|
|
ExpiresAt int64 `bson:"expires_at" json:"expires_at"`
|
|
CreatedAt int64 `bson:"created_at" json:"created_at"`
|
|
}
|