Init
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package builders
|
||||
|
||||
import (
|
||||
"cs-agent/internal/models"
|
||||
"cs-agent/internal/pkg/dto/response"
|
||||
"cs-agent/internal/pkg/utils"
|
||||
"cs-agent/internal/services"
|
||||
)
|
||||
|
||||
func BuildAgentProfileList(items []models.AgentProfile) []response.AgentProfileResponse {
|
||||
if len(items) == 0 {
|
||||
return []response.AgentProfileResponse{}
|
||||
}
|
||||
|
||||
userIDs := make([]int64, 0, len(items))
|
||||
teamIDs := make([]int64, 0, len(items))
|
||||
for _, item := range items {
|
||||
if item.UserID > 0 {
|
||||
userIDs = append(userIDs, item.UserID)
|
||||
}
|
||||
if item.TeamID > 0 {
|
||||
teamIDs = append(teamIDs, item.TeamID)
|
||||
}
|
||||
}
|
||||
|
||||
users := services.UserService.FindByIds(userIDs)
|
||||
teams := services.AgentTeamService.FindByIds(teamIDs)
|
||||
|
||||
userMap := make(map[int64]*models.User, len(users))
|
||||
for i := range users {
|
||||
userMap[users[i].ID] = &users[i]
|
||||
}
|
||||
|
||||
teamMap := make(map[int64]*models.AgentTeam, len(teams))
|
||||
for i := range teams {
|
||||
teamMap[teams[i].ID] = &teams[i]
|
||||
}
|
||||
|
||||
results := make([]response.AgentProfileResponse, 0, len(items))
|
||||
for _, item := range items {
|
||||
if result := doBuildAgentProfileResponse(&item, userMap[item.UserID], teamMap[item.TeamID]); result != nil {
|
||||
results = append(results, *result)
|
||||
}
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
func BuildAgentProfileResponse(item *models.AgentProfile) *response.AgentProfileResponse {
|
||||
user := services.UserService.Get(item.UserID)
|
||||
team := services.AgentTeamService.Get(item.TeamID)
|
||||
return doBuildAgentProfileResponse(item, user, team)
|
||||
}
|
||||
|
||||
func doBuildAgentProfileResponse(item *models.AgentProfile, user *models.User, team *models.AgentTeam) *response.AgentProfileResponse {
|
||||
if item == nil {
|
||||
return nil
|
||||
}
|
||||
ret := &response.AgentProfileResponse{
|
||||
ID: item.ID,
|
||||
UserID: item.UserID,
|
||||
TeamID: item.TeamID,
|
||||
AgentCode: item.AgentCode,
|
||||
DisplayName: item.DisplayName,
|
||||
Avatar: item.Avatar,
|
||||
ServiceStatus: item.ServiceStatus,
|
||||
MaxConcurrentCount: item.MaxConcurrentCount,
|
||||
PriorityLevel: item.PriorityLevel,
|
||||
AutoAssignEnabled: item.AutoAssignEnabled,
|
||||
ReceiveOfflineMessage: item.ReceiveOfflineMessage,
|
||||
LastOnlineAt: utils.FormatTimePtr(item.LastOnlineAt),
|
||||
LastStatusAt: utils.FormatTimePtr(item.LastStatusAt),
|
||||
Remark: item.Remark,
|
||||
}
|
||||
if user != nil {
|
||||
ret.Username = user.Username
|
||||
ret.Nickname = user.Nickname
|
||||
}
|
||||
if team != nil {
|
||||
ret.TeamName = team.Name
|
||||
}
|
||||
return ret
|
||||
}
|
||||
Reference in New Issue
Block a user