2bbf42b741
Remove Agent Desk users, roles, login sessions, tokens, and local permission persistence. Expose the backend as an embeddable ai-agent module with host-provided subject lookup and operation authorization callbacks, and complete the frontend/backend repository split.
83 lines
2.5 KiB
Go
83 lines
2.5 KiB
Go
package builders
|
|
|
|
import (
|
|
"code.tczkiot.com/wlw/ai-agent/internal/models"
|
|
"code.tczkiot.com/wlw/ai-agent/internal/pkg/dto/response"
|
|
"code.tczkiot.com/wlw/ai-agent/internal/pkg/utils"
|
|
"code.tczkiot.com/wlw/ai-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]*services.ExternalUser, 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 *services.ExternalUser, 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
|
|
}
|