UnRegister

This commit is contained in:
daru
2022-04-16 02:03:57 +02:00
parent 940fc5008d
commit d0ff9840f0
2 changed files with 89 additions and 3 deletions

48
nuss.go
View File

@@ -91,7 +91,6 @@ func DeleteUserFromAnime(username string, userId, animeId int64) (*Anime, error)
if err != nil { if err != nil {
return err return err
} }
} }
// check if user already part // check if user already part
for i, u := range users { for i, u := range users {
@@ -120,6 +119,51 @@ func DeleteUserFromAnime(username string, userId, animeId int64) (*Anime, error)
return &anime, err 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) { func ReadAnimes() ([]Anime, error) {
var animes []Anime var animes []Anime
err := db.View( err := db.View(
@@ -183,7 +227,7 @@ func DbRead(bucket, key string) ([]byte, error) {
return val, err return val, err
} }
func DbDelete(bucket, key string, val []byte) error { func DbDelete(bucket, key string) error {
return db.Update( return db.Update(
func(tx *nutsdb.Tx) error { func(tx *nutsdb.Tx) error {
keyBytes := []byte(key) keyBytes := []byte(key)

44
ober.go
View File

@@ -19,6 +19,7 @@ func RunWebserv() {
r.GET("/api/watch/{user?}", WatchGet) r.GET("/api/watch/{user?}", WatchGet)
r.POST("/api/register", Register) r.POST("/api/register", Register)
r.POST("/api/watch/{user}", WatchPost) r.POST("/api/watch/{user}", WatchPost)
r.DELETE("/api/register", UnRegister)
r.DELETE("/api/watch/{user}", WatchDelete) r.DELETE("/api/watch/{user}", WatchDelete)
log.Fatal(fasthttp.ListenAndServe(":"+strconv.Itoa(*webServerPort), r.Handler)) log.Fatal(fasthttp.ListenAndServe(":"+strconv.Itoa(*webServerPort), r.Handler))
} }
@@ -120,7 +121,6 @@ func Register(ctx *fasthttp.RequestCtx) {
ctx.SetStatusCode(fasthttp.StatusBadRequest) ctx.SetStatusCode(fasthttp.StatusBadRequest)
return return
} }
calcSauce := Sauce(register.MalID, register.Username) calcSauce := Sauce(register.MalID, register.Username)
if calcSauce != strings.ToLower(register.Sauce) { if calcSauce != strings.ToLower(register.Sauce) {
ctx.WriteString("Möge die Sauce mit dir sein") ctx.WriteString("Möge die Sauce mit dir sein")
@@ -166,6 +166,48 @@ func WatchPost(ctx *fasthttp.RequestCtx) {
processUpdateReq(ctx, true) 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, &register)
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) { func WatchDelete(ctx *fasthttp.RequestCtx) {
processUpdateReq(ctx, false) processUpdateReq(ctx, false)
} }