-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
イベントの主催の変更後にも以前の主催に#services/knoQで通知が飛ぶ #404
Comments
knoQ/usecase/production/event.go Lines 56 to 67 in cb9fc32
Lines 218 to 225 in cb9fc32
上のような状況になっているため、このIssueが起きているようです。 |
変更案としては、
が考えられそうです。 |
調査ありがとうございます! 個人的には2がよさそうなんですが、新グループに含まれないかつ予定を記入してないことを条件にすると足りそうなきがします |
新グループに含まれないかつ予定を記入してないことメンバーのみ削除するということですか? |
グループ外からの参加ができないイベントの場合は、新グループに含まれないメンバーは問答無用で削除でいいですか? |
この仕様忘れてました、これでOKです
グループ外からもOKな場合はこれでお願いします:pray:
|
グループ外NGのときorグループ外NGに変更するときはUIからwarning出るようにしたいかも |
変更方針前の主催チームのメンバーが後の主催チームのメンバーでもあった場合、出席状況はそのまま追加する
現状前の主催チームのメンバーが後の主催チームのメンバーでもあった場合、出席状況はそのまま追加する 現状の問題の原因WebhookではPendingのメンバー全てにメンションするため、出席状況を書いていなかった前の主催チームのメンバーには必ずメンションが飛ぶ |
for _, groupMember := range group.Members {
exist := false
+ schedule := domain.Pending
for _, currentAttendee := range currentEvent.Attendees {
if currentAttendee.UserID == groupMember.ID {
exist = true
}
+ schedule = currentAttendee.Schedule
}
- if !exist {
- _ = repo.GormRepo.UpsertEventSchedule(event.ID, groupMember.ID, domain.Pending)
+ if !exist && schedule == domain.Pending {
+ _ = repo.GormRepo.DeleteMemberOfGroup(eventID, groupMember.ID)
}
} |
出席または欠席にしていたらそのまま残す |
DeleteMemberOfGroupは別のメソッドなので別途作る必要がある |
attendeeMap := make(map[uuid.UUID]domain.ScheduleStatus)
for _, attendee := range currentEvent.Attendees {
attendeeMap[attendee.UserID] = attendee.Schedule
}
for _, groupMember := range group.Members {
_, ok := attendeeMap[groupMember.ID]
if !ok {
_ = repo.GormRepo.UpsertEventSchedule(event.ID, groupMember.ID, domain.Pending)
}
}
for aid, schedule := range attendeeMap {
ok := slices.ContainsFunc(group.Members, func(m domain.User) bool { return m.ID == aid })
if !ok && schedule == domain.Pending {
_ = repo.GormRepo.DeleteEventSchedule(event.ID, aid)
}
} |
attendeeMap := make(map[uuid.UUID]domain.ScheduleStatus)
for _, attendee := range currentEvent.Attendees {
attendeeMap[attendee.UserID] = attendee.Schedule
}
for _, groupMember := range group.Members {
_, ok := attendeeMap[groupMember.ID]
if !ok {
_ = repo.GormRepo.UpsertEventSchedule(event.ID, groupMember.ID, domain.Pending)
}
}
for aid, schedule := range attendeeMap {
ok := slices.ContainsFunc(group.Members, func(m domain.User) bool { return m.ID == aid })
if !ok && (!event.AllowTogether || schedule == domain.Pending) {
_ = repo.GormRepo.DeleteEventSchedule(event.ID, aid)
}
} |
8個ぐらい試してみないといけないパターンがあると思っているんですが、ローカル環境でどうやって管理者外の場合とかを試せばいいかわからないです。 |
手で直接確かめるのは2人必要なのでなかなか難しそうですね |
テストのためにproductionパッケージのRepository構造体を用意するところで |
https://github.com/DATA-DOG/go-sqlmock を使ってモックを書くか https://github.com/ory/dockertest とかで一時的にテスト用のDBを立てると良いと思います |
テストは書くのが難しそうなのでテスト作成は保留となった |
https://q.trap.jp/messages/9b602aa3-d266-4f09-bba6-c4c226b4bc06
The text was updated successfully, but these errors were encountered: