Files
tm_back/internal/customer/entity.go
T
n.nakhostin 6dcee0bc4b Refactor Customer Entity and Forms to Use 'Companies' Field
- 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.
2025-09-20 10:32:21 +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"`
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"`
}