From d9ab365ae4872979b6fc4e79edfac01952fc9b3c Mon Sep 17 00:00:00 2001 From: daru Date: Sat, 28 May 2022 14:28:58 +0200 Subject: [PATCH] Clear user appointments on unregister --- nuss.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ ober.go | 10 ++++++++-- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/nuss.go b/nuss.go index 556d668..1116a29 100644 --- a/nuss.go +++ b/nuss.go @@ -256,6 +256,52 @@ func DeleteUserFromAppointment(username string, animeId int64, meeting time.Time return &appoint, err } +func DeleteUserFromAppointmens(username string) error { + return db.Update( + func(tx *nutsdb.Tx) error { + entries, err := tx.GetAll(bucketAppoint) + if err != nil { + return err + } + // iterate entries + for _, e := range entries { + // parse user list + users, err := parseAppointmentUserList(e.Value) + if err != nil { + return err + } + // check if user already part + for i, u := range users { + if u == username { + // delete user from list + users[i] = users[len(users)-1] + users = users[:len(users)-1] + // check if appointment needs recycling + if len(users) == 0 { + err = tx.Delete(bucketAppoint, e.Key) + if err != nil { + return err + } + } else { + newData, err := json.Marshal(users) + if err != nil { + return err + } + err = tx.Put(bucketAppoint, e.Key, newData, nutsdb.Persistent) + if err != nil { + return err + } + } + + break + } + } + } + return nil + + }) +} + func DeleteAnime(tx *nutsdb.Tx, keyBytes []byte) error { // clear appointments appoints, err := tx.GetAll(bucketAppoint) diff --git a/ober.go b/ober.go index ca5156a..10b8c3e 100644 --- a/ober.go +++ b/ober.go @@ -484,8 +484,14 @@ func UnRegister(ctx *fasthttp.RequestCtx) { err = DeleteUserFromAnimes(register.MalID) if err != nil { if err != nutsdb.ErrBucketEmpty { - ctx.WriteString(err.Error()) - ctx.SetStatusCode(fasthttp.StatusNotFound) + addErrorToCtx(ctx, err) + return + } + } + err = DeleteUserFromAppointmens(register.Username) + if err != nil { + if err != nutsdb.ErrBucketEmpty { + addErrorToCtx(ctx, err) return } }