From d0ff9840f0dc0b78c625fde8010042de80400779 Mon Sep 17 00:00:00 2001 From: daru Date: Sat, 16 Apr 2022 02:03:57 +0200 Subject: [PATCH] UnRegister --- nuss.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- ober.go | 44 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 89 insertions(+), 3 deletions(-) diff --git a/nuss.go b/nuss.go index 693f9d2..10bafac 100644 --- a/nuss.go +++ b/nuss.go @@ -91,7 +91,6 @@ func DeleteUserFromAnime(username string, userId, animeId int64) (*Anime, error) if err != nil { return err } - } // check if user already part for i, u := range users { @@ -120,6 +119,51 @@ func DeleteUserFromAnime(username string, userId, animeId int64) (*Anime, error) return &anime, err } +func DeleteUserFromAnimes(userId int64) error { + return db.Update( + func(tx *nutsdb.Tx) error { + entries, err := tx.GetAll(bucketAnime) + if err != nil { + return err + } + // iterate entries + for _, e := range entries { + // parse user list + users, err := parseUserList(e.Value) + if err != nil { + return err + } + // check if user is part + for i, u := range users { + if u.MalID == userId { + // delete user from list + users[i] = users[len(users)-1] + users = users[:len(users)-1] + // check if anime needs recycling + if len(users) == 0 { + err = tx.Delete(bucketAnime, e.Key) + if err != nil { + return err + } + } else { + newData, err := json.Marshal(users) + if err != nil { + return err + } + err = tx.Put(bucketAnime, e.Key, newData, nutsdb.Persistent) + if err != nil { + return err + } + } + + break + } + } + } + return nil + }) +} + func ReadAnimes() ([]Anime, error) { var animes []Anime err := db.View( @@ -183,7 +227,7 @@ func DbRead(bucket, key string) ([]byte, error) { return val, err } -func DbDelete(bucket, key string, val []byte) error { +func DbDelete(bucket, key string) error { return db.Update( func(tx *nutsdb.Tx) error { keyBytes := []byte(key) diff --git a/ober.go b/ober.go index 742f3a9..8eddd8e 100644 --- a/ober.go +++ b/ober.go @@ -19,6 +19,7 @@ func RunWebserv() { r.GET("/api/watch/{user?}", WatchGet) r.POST("/api/register", Register) r.POST("/api/watch/{user}", WatchPost) + r.DELETE("/api/register", UnRegister) r.DELETE("/api/watch/{user}", WatchDelete) log.Fatal(fasthttp.ListenAndServe(":"+strconv.Itoa(*webServerPort), r.Handler)) } @@ -120,7 +121,6 @@ func Register(ctx *fasthttp.RequestCtx) { ctx.SetStatusCode(fasthttp.StatusBadRequest) return } - calcSauce := Sauce(register.MalID, register.Username) if calcSauce != strings.ToLower(register.Sauce) { ctx.WriteString("Möge die Sauce mit dir sein") @@ -166,6 +166,48 @@ func WatchPost(ctx *fasthttp.RequestCtx) { processUpdateReq(ctx, true) } +func UnRegister(ctx *fasthttp.RequestCtx) { + if string(ctx.Request.Header.ContentType()) != "application/json" { + ctx.SetStatusCode(fasthttp.StatusBadRequest) + return + } + body := ctx.PostBody() + var register RegisterData + err := json.Unmarshal(body, ®ister) + if err != nil { + ctx.WriteString(err.Error()) + ctx.SetStatusCode(fasthttp.StatusBadRequest) + return + } + if register.MalID == 0 || register.Username == "" || register.Secret == "" || register.Sauce == "" { + ctx.WriteString("Sprich JSON du Hurensohn") + ctx.SetStatusCode(fasthttp.StatusBadRequest) + return + } + calcSauce := Sauce(register.MalID, register.Username) + if calcSauce != strings.ToLower(register.Sauce) { + ctx.WriteString("Möge die Sauce mit dir sein") + ctx.SetStatusCode(fasthttp.StatusBadRequest) + return + } + // DELETE + err = DeleteUserFromAnimes(register.MalID) + if err != nil { + ctx.WriteString(err.Error()) + ctx.SetStatusCode(fasthttp.StatusNotFound) + return + } + err = DbDelete(bucketUsers, register.Username) + if err != nil { + ctx.WriteString(err.Error()) + ctx.SetStatusCode(fasthttp.StatusNotFound) + return + } + + ctx.SetBody(body) + ctx.SetStatusCode(fasthttp.StatusOK) +} + func WatchDelete(ctx *fasthttp.RequestCtx) { processUpdateReq(ctx, false) }