Files
smart-customer-service/backend/internal/models/user.go

77 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package models
import (
"time"
)
// User 用户模型多租户共享表通过tenant_id区分
type User struct {
ID uint `gorm:"primaryKey" json:"id"`
TenantID uint `gorm:"not null;index" json:"tenant_id"`
Username string `gorm:"size:50;not null;index" json:"username"`
Email string `gorm:"size:100;not null;uniqueIndex:idx_email_tenant" json:"email"`
Password string `gorm:"size:255;not null" json:"-"`
Phone string `gorm:"size:20" json:"phone"`
// 个人信息
FullName string `gorm:"size:100" json:"full_name"`
Avatar string `gorm:"size:255" json:"avatar"`
Bio string `gorm:"type:text" json:"bio"`
// 角色和权限
Role string `gorm:"size:20;default:'user'" json:"role"` // super_admin, admin, agent, user (legacy)
RoleID *uint `json:"role_id,omitempty"` // 关联的角色 ID (新的 RBAC)
Roles []Role `gorm:"many2many:user_roles;" json:"roles,omitempty"` // 用户关联的角色(多对多)
Status string `gorm:"size:20;default:'active'" json:"status"` // active, inactive, banned
IsVerified bool `gorm:"default:false" json:"is_verified"`
// 最后活动
LastLoginAt *time.Time `json:"last_login_at"`
LastIP string `gorm:"size:45" json:"last_ip"`
// 配置
Preferences JSONMap `gorm:"type:jsonb" json:"preferences"`
// 时间戳
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt *time.Time `gorm:"index" json:"deleted_at,omitempty"`
// 关联
Tenant Tenant `gorm:"foreignKey:TenantID" json:"tenant,omitempty"`
}
// Agent 客服坐席模型
type Agent struct {
ID uint `gorm:"primaryKey" json:"id"`
TenantID uint `gorm:"not null;index" json:"tenant_id"`
UserID uint `gorm:"not null;uniqueIndex" json:"user_id"`
// 坐席信息
AgentID string `gorm:"size:50;not null;unique" json:"agent_id"` // 坐席工号
Department string `gorm:"size:100" json:"department"`
Title string `gorm:"size:100" json:"title"`
Skills []string `gorm:"type:jsonb" json:"skills"`
// 工作状态
Status string `gorm:"size:20;default:'offline'" json:"status"` // online, offline, busy, away
MaxChats int `gorm:"default:5" json:"max_chats"` // 最大同时聊天数
CurrentChats int `gorm:"default:0" json:"current_chats"`
// 绩效统计
TotalChats int `gorm:"default:0" json:"total_chats"`
AvgRating float64 `gorm:"default:0" json:"avg_rating"`
ResponseTimeAvg int `gorm:"default:0" json:"response_time_avg"` // 平均响应时间(秒)
// 工作时间
WorkSchedule JSONMap `gorm:"type:jsonb" json:"work_schedule"`
// 时间戳
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
// 关联
User User `gorm:"foreignKey:UserID" json:"user"`
Tenant Tenant `gorm:"foreignKey:TenantID" json:"tenant,omitempty"`
}