From 630f25df95218ef3762708933230036c5445e503 Mon Sep 17 00:00:00 2001 From: mlogclub Date: Wed, 29 Apr 2026 19:03:58 +0800 Subject: [PATCH] feat: add batch schedule dto and repository methods --- internal/pkg/dto/request/agent_request.go | 10 +++++++++ internal/pkg/dto/response/agent_response.go | 22 +++++++++++++++++++ .../agent_team_schedule_repository.go | 20 +++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/internal/pkg/dto/request/agent_request.go b/internal/pkg/dto/request/agent_request.go index 1985187..75d8b05 100644 --- a/internal/pkg/dto/request/agent_request.go +++ b/internal/pkg/dto/request/agent_request.go @@ -67,3 +67,13 @@ type AgentTeamScheduleCalendarRequest struct { EndAt string `json:"endAt"` TeamID int64 `json:"teamId"` } + +type AgentTeamScheduleBatchRequest struct { + TeamIDs []int64 `json:"teamIds"` + StartDate string `json:"startDate"` + EndDate string `json:"endDate"` + Weekdays []int `json:"weekdays"` + StartTime string `json:"startTime"` + EndTime string `json:"endTime"` + Remark string `json:"remark"` +} diff --git a/internal/pkg/dto/response/agent_response.go b/internal/pkg/dto/response/agent_response.go index eec44c4..8bc1b55 100644 --- a/internal/pkg/dto/response/agent_response.go +++ b/internal/pkg/dto/response/agent_response.go @@ -41,3 +41,25 @@ type AgentTeamScheduleResponse struct { EndAt string `json:"endAt"` Remark string `json:"remark"` } + +type AgentTeamScheduleBatchPreviewResponse struct { + Total int `json:"total"` + Conflict bool `json:"conflict"` + Items []AgentTeamScheduleBatchPreviewItem `json:"items"` +} + +type AgentTeamScheduleBatchPreviewItem struct { + TeamID int64 `json:"teamId"` + TeamName string `json:"teamName"` + Date string `json:"date"` + Weekday int `json:"weekday"` + StartAt string `json:"startAt"` + EndAt string `json:"endAt"` + Remark string `json:"remark"` + Conflict bool `json:"conflict"` + ConflictReason string `json:"conflictReason"` +} + +type AgentTeamScheduleBatchGenerateResponse struct { + Created int `json:"created"` +} diff --git a/internal/repositories/agent_team_schedule_repository.go b/internal/repositories/agent_team_schedule_repository.go index f201d20..19e79b3 100644 --- a/internal/repositories/agent_team_schedule_repository.go +++ b/internal/repositories/agent_team_schedule_repository.go @@ -49,6 +49,26 @@ func (r *agentTeamScheduleRepository) FindByTimeRange(db *gorm.DB, startAt, endA return } +func (r *agentTeamScheduleRepository) FindOverlappingByTeamIDsAndTimeRange(db *gorm.DB, teamIDs []int64, startAt, endAt time.Time) (list []models.AgentTeamSchedule) { + if len(teamIDs) == 0 { + return + } + db.Model(&models.AgentTeamSchedule{}). + Where("team_id IN ? AND start_at < ? AND end_at > ?", teamIDs, endAt, startAt). + Order("team_id ASC"). + Order("start_at ASC"). + Order("id ASC"). + Find(&list) + return +} + +func (r *agentTeamScheduleRepository) CreateBatch(db *gorm.DB, list []models.AgentTeamSchedule) error { + if len(list) == 0 { + return nil + } + return db.Create(&list).Error +} + func (r *agentTeamScheduleRepository) FindOne(db *gorm.DB, cnd *sqls.Cnd) *models.AgentTeamSchedule { ret := &models.AgentTeamSchedule{} if err := cnd.FindOne(db, &ret); err != nil {