3e4831c2e7
- Updated README.md to include comprehensive Swagger documentation details, highlighting new features and endpoint categories. - Introduced a new router structure to streamline route registration for admin and public endpoints, enhancing maintainability. - Updated health check endpoint documentation to reflect comprehensive server status information. - Enhanced customer and company management routes with improved descriptions and examples in Swagger. - Refactored customer and user handlers to remove obsolete route registrations, aligning with the new router structure. - Improved response handling in customer and user services to utilize string IDs consistently. - Updated validation rules and forms for customer management to support multiple company assignments. - Enhanced logging practices across services to ensure better traceability and error handling.
77 lines
2.5 KiB
Go
77 lines
2.5 KiB
Go
package user
|
|
|
|
import (
|
|
"tm/pkg/mongo"
|
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
)
|
|
|
|
// UserRole represents user roles in the system
|
|
type UserRole string
|
|
|
|
const (
|
|
UserRoleAdmin UserRole = "admin"
|
|
UserRoleManager UserRole = "manager"
|
|
UserRoleOperator UserRole = "operator"
|
|
UserRoleViewer UserRole = "viewer"
|
|
)
|
|
|
|
// UserStatus represents user account status
|
|
type UserStatus string
|
|
|
|
const (
|
|
UserStatusActive UserStatus = "active"
|
|
UserStatusInactive UserStatus = "inactive"
|
|
UserStatusSuspended UserStatus = "suspended"
|
|
)
|
|
|
|
// User represents a system user (admin/manager/operator)
|
|
type User struct {
|
|
mongo.Model `bson:",inline"`
|
|
FullName string `bson:"full_name" json:"full_name"`
|
|
Username string `bson:"username" json:"username"`
|
|
Email string `bson:"email" json:"email"`
|
|
Password string `bson:"password" json:"-"` // Never serialize password
|
|
Role UserRole `bson:"role" json:"role"`
|
|
Status UserStatus `bson:"status" json:"status"`
|
|
CompanyID *string `bson:"company_id,omitempty" json:"company_id,omitempty"`
|
|
Department *string `bson:"department,omitempty" json:"department,omitempty"`
|
|
Position *string `bson:"position,omitempty" json:"position,omitempty"`
|
|
Phone *string `bson:"phone,omitempty" json:"phone,omitempty"`
|
|
ProfileImage *string `bson:"profile_image,omitempty" json:"profile_image,omitempty"`
|
|
IsVerified bool `bson:"is_verified" json:"is_verified"`
|
|
LastLoginAt *int64 `bson:"last_login_at,omitempty" json:"last_login_at,omitempty"` // Unix timestamp
|
|
CreatedBy *string `bson:"created_by,omitempty" json:"created_by,omitempty"`
|
|
UpdatedBy *string `bson:"updated_by,omitempty" json:"updated_by,omitempty"`
|
|
}
|
|
|
|
// SetID sets the user ID (implements IDSetter interface)
|
|
func (u *User) SetID(id string) {
|
|
u.ID, _ = primitive.ObjectIDFromHex(id)
|
|
}
|
|
|
|
// GetID returns the user ID (implements IDGetter interface)
|
|
func (u *User) GetID() string {
|
|
return u.ID.Hex()
|
|
}
|
|
|
|
// SetCreatedAt sets the created timestamp (implements Timestampable interface)
|
|
func (u *User) SetCreatedAt(timestamp int64) {
|
|
u.CreatedAt = timestamp
|
|
}
|
|
|
|
// SetUpdatedAt sets the updated timestamp (implements Timestampable interface)
|
|
func (u *User) SetUpdatedAt(timestamp int64) {
|
|
u.UpdatedAt = timestamp
|
|
}
|
|
|
|
// GetCreatedAt returns the created timestamp (implements Timestampable interface)
|
|
func (u *User) GetCreatedAt() int64 {
|
|
return u.CreatedAt
|
|
}
|
|
|
|
// GetUpdatedAt returns the updated timestamp (implements Timestampable interface)
|
|
func (u *User) GetUpdatedAt() int64 {
|
|
return u.UpdatedAt
|
|
}
|