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 {