diff --git a/huso.go b/huso.go index 5f9a582..e9a930b 100644 --- a/huso.go +++ b/huso.go @@ -25,6 +25,9 @@ const ( malApiStatusC = "completed" malApiStatusH = "on_hold" malApiStatusD = "dropped" + bucketUsers = "users" + bucketAnime = "anime" + bucketmedia = "media" ) var ( diff --git a/klotz.go b/klotz.go index 7122866..c863225 100644 --- a/klotz.go +++ b/klotz.go @@ -2,6 +2,11 @@ package main import "time" +type UserData struct { + Username string `json:"username"` + MalId int `json:"malId"` +} + type RegisterData struct { Username string `json:"username"` MalId int `json:"malId"` diff --git a/knecht.go b/knecht.go index 20d3bde..5532c07 100644 --- a/knecht.go +++ b/knecht.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "strconv" + "strings" "time" "github.com/gookit/color" @@ -43,6 +44,9 @@ func GetUserBytesCached(username string) ([]byte, error) { if err != nil { return data, err } + if strings.Contains(string(data), "BadResponseException") { + return data, fmt.Errorf("user not found: %s", username) + } cache.Set(key, data) return data, err } diff --git a/nuss.go b/nuss.go index e9ecb06..ef32870 100644 --- a/nuss.go +++ b/nuss.go @@ -1,9 +1,34 @@ package main import ( + "encoding/json" + "errors" + "github.com/xujiajun/nutsdb" ) +func ReadUser(username string) (*UserData, error) { + data, err := DbRead(bucketUsers, username) + if err != nil { + return nil, err + } + var user UserData + err = json.Unmarshal(data, &user) + return &user, err +} + +func SaveUser(user *UserData) error { + data, err := json.Marshal(user) + if err != nil { + return err + } + if user.Username == "" { + return errors.New("user empty") + } + err = DbSave(bucketUsers, user.Username, data) + return err +} + func DbClean() error { err := db.Update( func(tx *nutsdb.Tx) error { @@ -16,7 +41,7 @@ func DbSave(bucket, key string, val []byte) error { err := db.Update( func(tx *nutsdb.Tx) error { keyBytes := []byte(key) - return tx.Put(bucket, keyBytes, val, 0) + return tx.Put(bucket, keyBytes, val, nutsdb.Persistent) }) return err } @@ -25,12 +50,12 @@ func DbRead(bucket, key string) ([]byte, error) { var val []byte err := db.View( func(tx *nutsdb.Tx) error { - key := []byte("name1") - e, err := tx.Get(bucket, key) + keyBytes := []byte(key) + e, err := tx.Get(bucket, keyBytes) if err != nil { return err } - val = make([]byte, e.Size()) + val = make([]byte, len(e.Value)) copy(val, e.Value) return err }) diff --git a/ober.go b/ober.go index 52e253f..81a1ea3 100644 --- a/ober.go +++ b/ober.go @@ -86,7 +86,36 @@ func Register(ctx *fasthttp.RequestCtx) { ctx.SetStatusCode(fasthttp.StatusBadRequest) return } - // TODO REGISTER + // check user exists + _, err = ReadUser(register.Username) + if err == nil { + ctx.WriteString("Nicht drängeln") + ctx.SetStatusCode(fasthttp.StatusConflict) + return + } + // check user legit + userData, _, err := GetUserData(register.Username) + if err != nil { + ctx.WriteString(err.Error()) + ctx.SetStatusCode(fasthttp.StatusExpectationFailed) + return + } + if userData.Data.MalID != register.MalId { + ctx.WriteString("Dich gibts net auf MAL") + ctx.SetStatusCode(fasthttp.StatusExpectationFailed) + return + } + // REGISTER + user := UserData{ + Username: register.Username, + MalId: register.MalId, + } + err = SaveUser(&user) + if err != nil { + addErrorToCtx(ctx, err) + return + } + ctx.SetBody(body) ctx.SetStatusCode(fasthttp.StatusOK) }