From c10fd4cb0b19ed609dfead1c514f14d800cbad42 Mon Sep 17 00:00:00 2001 From: Luftalian Date: Sun, 13 Aug 2023 14:02:39 +0900 Subject: [PATCH 1/4] fix webhook bug --- infra/db/event.go | 12 ++++++++++++ usecase/production/event.go | 24 +++++++++++++++++------- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/infra/db/event.go b/infra/db/event.go index fdb8d20b..d5830c73 100644 --- a/infra/db/event.go +++ b/infra/db/event.go @@ -57,6 +57,11 @@ func (repo *GormRepository) UpsertEventSchedule(eventID, userID uuid.UUID, sched return defaultErrorHandling(err) } +func (repo *GormRepository) DeleteEventSchedule(eventID uuid.UUID, userID uuid.UUID) error { + err := deleteEventSchedule(repo.db, eventID, userID) + return defaultErrorHandling(err) +} + func (repo *GormRepository) GetEvent(eventID uuid.UUID) (*Event, error) { es, err := getEvent(eventFullPreload(repo.db), eventID) return es, defaultErrorHandling(err) @@ -140,6 +145,13 @@ func upsertEventSchedule(tx *gorm.DB, eventID, userID uuid.UUID, schedule domain }).Create(&eventAttendee).Error } +func deleteEventSchedule(tx *gorm.DB, eventID uuid.UUID, userID uuid.UUID) error { + if eventID == uuid.Nil { + return NewValueError(gorm.ErrRecordNotFound, "eventID") + } + return tx.Where("event_id = ? AND user_id = ?", eventID, userID).Delete(&EventAttendee{}).Error +} + func getEvent(db *gorm.DB, eventID uuid.UUID) (*Event, error) { event := Event{} err := db.Take(&event, eventID).Error diff --git a/usecase/production/event.go b/usecase/production/event.go index 2952d823..7591379f 100644 --- a/usecase/production/event.go +++ b/usecase/production/event.go @@ -5,6 +5,7 @@ import ( "github.com/traPtitech/knoQ/domain" "github.com/traPtitech/knoQ/domain/filter" "github.com/traPtitech/knoQ/infra/db" + "golang.org/x/exp/slices" ) func (repo *Repository) CreateEvent(params domain.WriteEventParams, info *domain.ConInfo) (*domain.Event, error) { @@ -49,22 +50,31 @@ func (repo *Repository) UpdateEvent(eventID uuid.UUID, params domain.WriteEventP WriteEventParams: params, CreatedBy: info.ReqUserID, } + event, err := repo.GormRepo.UpdateEvent(eventID, p) if err != nil { return nil, defaultErrorHandling(err) } + + attendeesMap := make(map[uuid.UUID]domain.ScheduleStatus) + for _, attendee := range currentEvent.Attendees { + attendeesMap[attendee.UserID] = attendee.Schedule + } + for _, groupMember := range group.Members { - exist := false - for _, currentAttendee := range currentEvent.Attendees { - if currentAttendee.UserID == groupMember.ID { - exist = true - } - } - if !exist { + _, ok := attendeesMap[groupMember.ID] + if !ok { _ = repo.GormRepo.UpsertEventSchedule(event.ID, groupMember.ID, domain.Pending) } + } + for attendeeUserId, schedule := range attendeesMap { + ok := slices.ContainsFunc(group.Members, func(m domain.User) bool { return m.ID == attendeeUserId }) + if !ok && (!event.AllowTogether || schedule == domain.Pending) { + _ = repo.GormRepo.DeleteEventSchedule(event.ID, attendeeUserId) + } } + return repo.GetEvent(event.ID, info) } From 3078036cdf48a655f8f6ab2fa12583075adbedc1 Mon Sep 17 00:00:00 2001 From: Luftalian Date: Mon, 28 Aug 2023 21:59:31 +0900 Subject: [PATCH 2/4] make codes better --- usecase/production/event.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/usecase/production/event.go b/usecase/production/event.go index 7591379f..ce6bcad7 100644 --- a/usecase/production/event.go +++ b/usecase/production/event.go @@ -61,15 +61,27 @@ func (repo *Repository) UpdateEvent(eventID uuid.UUID, params domain.WriteEventP attendeesMap[attendee.UserID] = attendee.Schedule } + count := 0 for _, groupMember := range group.Members { - _, ok := attendeesMap[groupMember.ID] - if !ok { + if _, ok := attendeesMap[groupMember.ID]; !ok { + // 新しく主催者メンバーになった人をPendingにする _ = repo.GormRepo.UpsertEventSchedule(event.ID, groupMember.ID, domain.Pending) + count++ } } + // 変更前の主催者メンバー全員が変更後の主催者メンバーであるとき + // (変更前主催者メンバーの数) = (変更後主催者メンバーの数) - (変更後主催者メンバーの中で新規主催者メンバーの数) + if len(attendeesMap) == (len(group.Members) - count) { + return repo.GetEvent(event.ID, info) + } + for attendeeUserId, schedule := range attendeesMap { - ok := slices.ContainsFunc(group.Members, func(m domain.User) bool { return m.ID == attendeeUserId }) + ok := slices.ContainsFunc(group.Members, func(m domain.User) bool { + return m.ID == attendeeUserId + }) + // グループ外参加不可で主催者メンバーから外れた人を削除 + // グループ外参加可で主催者メンバーから外れた人でPendingだった人を削除 if !ok && (!event.AllowTogether || schedule == domain.Pending) { _ = repo.GormRepo.DeleteEventSchedule(event.ID, attendeeUserId) } From fd96667e5fbd6e09e721394458a90711d5afe32f Mon Sep 17 00:00:00 2001 From: Luftalian Date: Mon, 4 Sep 2023 17:56:19 +0900 Subject: [PATCH 3/4] change comments --- usecase/production/event.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/usecase/production/event.go b/usecase/production/event.go index ce6bcad7..ef56c71c 100644 --- a/usecase/production/event.go +++ b/usecase/production/event.go @@ -64,14 +64,14 @@ func (repo *Repository) UpdateEvent(eventID uuid.UUID, params domain.WriteEventP count := 0 for _, groupMember := range group.Members { if _, ok := attendeesMap[groupMember.ID]; !ok { - // 新しく主催者メンバーになった人をPendingにする + // 新しくグループメンバーになった人をPendingにする _ = repo.GormRepo.UpsertEventSchedule(event.ID, groupMember.ID, domain.Pending) count++ } } - // 変更前の主催者メンバー全員が変更後の主催者メンバーであるとき - // (変更前主催者メンバーの数) = (変更後主催者メンバーの数) - (変更後主催者メンバーの中で新規主催者メンバーの数) + // 変更前のグループメンバー全員が変更後のグループメンバーであるとき + // (変更前グループメンバーの数) = (変更後グループメンバーの数) - (変更後グループメンバーの中で新規グループメンバーの数) if len(attendeesMap) == (len(group.Members) - count) { return repo.GetEvent(event.ID, info) } @@ -80,8 +80,8 @@ func (repo *Repository) UpdateEvent(eventID uuid.UUID, params domain.WriteEventP ok := slices.ContainsFunc(group.Members, func(m domain.User) bool { return m.ID == attendeeUserId }) - // グループ外参加不可で主催者メンバーから外れた人を削除 - // グループ外参加可で主催者メンバーから外れた人でPendingだった人を削除 + // グループ外参加不可でグループメンバーから外れた人を削除 + // グループ外参加可でグループメンバーから外れた人でPendingだった人を削除 if !ok && (!event.AllowTogether || schedule == domain.Pending) { _ = repo.GormRepo.DeleteEventSchedule(event.ID, attendeeUserId) } From 6a752b04074098d368f30345532740395b8a286a Mon Sep 17 00:00:00 2001 From: Luftalian Date: Mon, 4 Sep 2023 18:37:56 +0900 Subject: [PATCH 4/4] =?UTF-8?q?group=E3=81=8C=E5=A4=89=E6=9B=B4=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E3=81=A8=E3=81=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- usecase/production/event.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/usecase/production/event.go b/usecase/production/event.go index ef56c71c..309282a3 100644 --- a/usecase/production/event.go +++ b/usecase/production/event.go @@ -56,6 +56,11 @@ func (repo *Repository) UpdateEvent(eventID uuid.UUID, params domain.WriteEventP return nil, defaultErrorHandling(err) } + // groupが変更されていないとき + if currentEvent.Group.ID == params.GroupID { + return repo.GetEvent(event.ID, info) + } + attendeesMap := make(map[uuid.UUID]domain.ScheduleStatus) for _, attendee := range currentEvent.Attendees { attendeesMap[attendee.UserID] = attendee.Schedule