Files
tm_back/internal/customer/entity.go
T
n.nakhostin dfcdef60d6 Add Device Token Support for Customer and User Entities
- 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.
2025-09-20 10:11:36 +03:30

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"`
}