dfcdef60d6
- Introduced a new DeviceToken field in both Customer and User entities to store device tokens for authentication and notifications. - Updated LoginForm structures for both Customer and User to include an optional DeviceToken field, allowing clients to send device tokens during login. - Enhanced the Login methods in the customer and user services to append the device token to the respective entities if it does not already exist, improving user session management and notification capabilities. - Ensured proper validation and structured responses for the new DeviceToken field in the forms, maintaining compliance with best practices for API design.
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"`
|
|
CompanyIDs []string `bson:"company_ids"`
|
|
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"`
|
|
}
|