111 lines
3.3 KiB
Go
111 lines
3.3 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"
|
|
)
|
|
|
|
// KeywordsStatus represents the status of keyword processing
|
|
type KeywordsStatus string
|
|
|
|
const (
|
|
KeywordsStatusPending KeywordsStatus = "pending"
|
|
KeywordsStatusInProgress KeywordsStatus = "in_progress"
|
|
KeywordsStatusReady KeywordsStatus = "ready"
|
|
KeywordsStatusFailed KeywordsStatus = "failed"
|
|
)
|
|
|
|
// 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"`
|
|
Keywords []string `bson:"keywords,omitempty"`
|
|
KeywordsStatus KeywordsStatus `bson:"keywords_status,omitempty"`
|
|
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"`
|
|
}
|