package controller import ( "strconv" "github.com/QuantumNous/new-api/common" "github.com/QuantumNous/new-api/constant" "github.com/QuantumNous/new-api/dto" "github.com/QuantumNous/new-api/model" "github.com/QuantumNous/new-api/relay" "github.com/QuantumNous/new-api/service" "github.com/QuantumNous/new-api/types" "github.com/gin-gonic/gin" ) // UpdateTaskBulk 薄入口,实际轮询逻辑在 service 层 func UpdateTaskBulk() { service.TaskPollingLoop() } func GetAllTask(c *gin.Context) { pageInfo := common.GetPageQuery(c) startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64) endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64) // 解析其他查询参数 queryParams := model.SyncTaskQueryParams{ Platform: constant.TaskPlatform(c.Query("platform")), TaskID: c.Query("task_id"), Status: c.Query("status"), Action: c.Query("action"), StartTimestamp: startTimestamp, EndTimestamp: endTimestamp, ChannelID: c.Query("channel_id"), } items := model.TaskGetAllTasks(pageInfo.GetStartIdx(), pageInfo.GetPageSize(), queryParams) total := model.TaskCountAllTasks(queryParams) pageInfo.SetTotal(int(total)) pageInfo.SetItems(tasksToDto(items, true)) common.ApiSuccess(c, pageInfo) } func GetUserTask(c *gin.Context) { pageInfo := common.GetPageQuery(c) userId := c.GetInt("id") startTimestamp, _ := strconv.ParseInt(c.Query("start_timestamp"), 10, 64) endTimestamp, _ := strconv.ParseInt(c.Query("end_timestamp"), 10, 64) queryParams := model.SyncTaskQueryParams{ Platform: constant.TaskPlatform(c.Query("platform")), TaskID: c.Query("task_id"), Status: c.Query("status"), Action: c.Query("action"), StartTimestamp: startTimestamp, EndTimestamp: endTimestamp, } items := model.TaskGetAllUserTask(userId, pageInfo.GetStartIdx(), pageInfo.GetPageSize(), queryParams) total := model.TaskCountAllUserTask(userId, queryParams) pageInfo.SetTotal(int(total)) pageInfo.SetItems(tasksToDto(items, false)) common.ApiSuccess(c, pageInfo) } func tasksToDto(tasks []*model.Task, fillUser bool) []*dto.TaskDto { var userIdMap map[int]*model.UserBase if fillUser { userIdMap = make(map[int]*model.UserBase) userIds := types.NewSet[int]() for _, task := range tasks { userIds.Add(task.UserId) } for _, userId := range userIds.Items() { cacheUser, err := model.GetUserCache(userId) if err == nil { userIdMap[userId] = cacheUser } } } result := make([]*dto.TaskDto, len(tasks)) for i, task := range tasks { if fillUser { if user, ok := userIdMap[task.UserId]; ok { task.Username = user.Username } } result[i] = relay.TaskModel2Dto(task) } return result }