mirror of
https://github.com/ultrasn0w/huso.git
synced 2025-12-13 12:19:54 +01:00
GET user
This commit is contained in:
12
klotz.go
12
klotz.go
@@ -65,6 +65,18 @@ type UserData struct {
|
||||
Secret string `json:"secret"`
|
||||
}
|
||||
|
||||
type User struct {
|
||||
MalID int64 `json:"id"`
|
||||
Username string `json:"username"`
|
||||
URL string `json:"url"`
|
||||
ImageURL string `json:"imageUrl"`
|
||||
LastOnline time.Time `json:"lastOnline"`
|
||||
Gender string `json:"gender"`
|
||||
Birthday time.Time `json:"birthday"`
|
||||
Location string `json:"location"`
|
||||
Joined time.Time `json:"joined"`
|
||||
}
|
||||
|
||||
type RegisterData struct {
|
||||
Username string `json:"username"`
|
||||
MalID int64 `json:"malId"`
|
||||
|
||||
37
knecht.go
37
knecht.go
@@ -54,30 +54,35 @@ func GetUserAnimeListBytes(username, status string) ([]byte, error) {
|
||||
return GetDataMal(userApiMal + username + "/animelist?limit=1000&status=" + status)
|
||||
}
|
||||
|
||||
func GetUserData(username string) (*UserJikan, []byte, error) {
|
||||
var user UserJikan
|
||||
body, err := GetUserBytesCached(username)
|
||||
if err != nil {
|
||||
return nil, body, err
|
||||
}
|
||||
err = json.Unmarshal(body, &user)
|
||||
return &user, body, err
|
||||
}
|
||||
|
||||
func GetUserBytesCached(username string) ([]byte, error) {
|
||||
func GetUserData(username string) (*User, []byte, error) {
|
||||
var user User
|
||||
data, err := userCache.Get(username)
|
||||
if err != nil {
|
||||
data, err = GetDataJikan(username)
|
||||
err = nil
|
||||
dataJikan, err := GetDataJikan(userApiJikan + username)
|
||||
if err != nil {
|
||||
return data, err
|
||||
return nil, nil, err
|
||||
}
|
||||
if strings.Contains(string(data), "BadResponseException") {
|
||||
return data, fmt.Errorf("user not found: %s", username)
|
||||
return nil, nil, fmt.Errorf("user not found: %s", username)
|
||||
}
|
||||
var userJikan UserJikan
|
||||
err = json.Unmarshal(dataJikan, &userJikan)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
// convert to user
|
||||
user = UserConvert(&userJikan)
|
||||
data, err = json.Marshal(&user)
|
||||
if err != nil {
|
||||
return &user, data, err
|
||||
}
|
||||
userCache.Set(username, data)
|
||||
return data, err
|
||||
} else {
|
||||
err = json.Unmarshal(data, &user)
|
||||
}
|
||||
return data, err
|
||||
|
||||
return &user, data, err
|
||||
}
|
||||
|
||||
func GetSeasonDataAll() ([]Anime, []byte, error) {
|
||||
|
||||
34
nuss.go
34
nuss.go
@@ -41,7 +41,7 @@ func AddUserToAnime(username string, userId, animeId int64) (*AnimeUser, error)
|
||||
users = make([]WatchUser, 0)
|
||||
} else {
|
||||
// parse user list
|
||||
users, err = parseUserList(e.Value)
|
||||
users, err = parseWatchUserList(e.Value)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -87,7 +87,7 @@ func DeleteUserFromAnime(username string, userId, animeId int64) (*AnimeUser, er
|
||||
users = make([]WatchUser, 0)
|
||||
} else {
|
||||
// parse user list
|
||||
users, err = parseUserList(e.Value)
|
||||
users, err = parseWatchUserList(e.Value)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -129,7 +129,7 @@ func DeleteUserFromAnimes(userId int64) error {
|
||||
// iterate entries
|
||||
for _, e := range entries {
|
||||
// parse user list
|
||||
users, err := parseUserList(e.Value)
|
||||
users, err := parseWatchUserList(e.Value)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -164,6 +164,30 @@ func DeleteUserFromAnimes(userId int64) error {
|
||||
})
|
||||
}
|
||||
|
||||
func ReadRegisteredUsers() ([]UserData, error) {
|
||||
var users []UserData
|
||||
err := db.View(
|
||||
func(tx *nutsdb.Tx) error {
|
||||
entries, err := tx.GetAll(bucketUsers)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
users = make([]UserData, 0)
|
||||
// iterate entries
|
||||
for _, e := range entries {
|
||||
// parse user
|
||||
var user UserData
|
||||
err := json.Unmarshal(e.Value, &user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
users = append(users, user)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return users, err
|
||||
}
|
||||
|
||||
func ReadAnimeUsers() ([]AnimeUser, error) {
|
||||
var animes []AnimeUser
|
||||
err := db.View(
|
||||
@@ -181,7 +205,7 @@ func ReadAnimeUsers() ([]AnimeUser, error) {
|
||||
return err
|
||||
}
|
||||
// parse user list
|
||||
users, err := parseUserList(e.Value)
|
||||
users, err := parseWatchUserList(e.Value)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -235,7 +259,7 @@ func DbDelete(bucket, key string) error {
|
||||
})
|
||||
}
|
||||
|
||||
func parseUserList(data []byte) ([]WatchUser, error) {
|
||||
func parseWatchUserList(data []byte) ([]WatchUser, error) {
|
||||
var users []WatchUser
|
||||
err := json.Unmarshal(data, &users)
|
||||
return users, err
|
||||
|
||||
47
ober.go
47
ober.go
@@ -17,7 +17,7 @@ func RunWebserv() {
|
||||
r.GET("/", Headers(Start))
|
||||
r.GET("/api/season", Headers(Season))
|
||||
r.GET("/api/anime/{id}", Headers(AnimeGet))
|
||||
r.GET("/api/user/{id?}", Headers(AnimeGet))
|
||||
r.GET("/api/user/{user?}", Headers(UserGet))
|
||||
r.GET("/api/watch/{user?}", Headers(WatchGet))
|
||||
r.POST("/api/register", Headers(Register))
|
||||
r.POST("/api/watch/{user}", Headers(WatchPost))
|
||||
@@ -95,6 +95,49 @@ func AnimeGet(ctx *fasthttp.RequestCtx) {
|
||||
ctx.SetStatusCode(fasthttp.StatusOK)
|
||||
}
|
||||
|
||||
func UserGet(ctx *fasthttp.RequestCtx) {
|
||||
usrVal := ctx.UserValue("user")
|
||||
users := make([]User, 0)
|
||||
if usrVal != nil {
|
||||
// get specific user
|
||||
user, _, err := GetUserData(fmt.Sprintf("%s", usrVal))
|
||||
if err != nil {
|
||||
ctx.WriteString(err.Error())
|
||||
ctx.SetStatusCode(fasthttp.StatusNotFound)
|
||||
return
|
||||
}
|
||||
users = append(users, *user)
|
||||
} else {
|
||||
regUsers, err := ReadRegisteredUsers()
|
||||
if err != nil {
|
||||
addErrorToCtx(ctx, err)
|
||||
return
|
||||
}
|
||||
for _, u := range regUsers {
|
||||
user, _, err := GetUserData(u.Username)
|
||||
if err != nil {
|
||||
addErrorToCtx(ctx, err)
|
||||
return
|
||||
}
|
||||
users = append(users, *user)
|
||||
}
|
||||
}
|
||||
|
||||
bytes, err := json.Marshal(users)
|
||||
if err != nil {
|
||||
addErrorToCtx(ctx, err)
|
||||
return
|
||||
}
|
||||
_, err = ctx.Write(bytes)
|
||||
if err != nil {
|
||||
addErrorToCtx(ctx, err)
|
||||
return
|
||||
}
|
||||
|
||||
ctx.SetContentType("application/json; charset=utf-8")
|
||||
ctx.SetStatusCode(fasthttp.StatusOK)
|
||||
}
|
||||
|
||||
func WatchGet(ctx *fasthttp.RequestCtx) {
|
||||
usrVal := ctx.UserValue("user")
|
||||
var userId int64
|
||||
@@ -185,7 +228,7 @@ func Register(ctx *fasthttp.RequestCtx) {
|
||||
ctx.SetStatusCode(fasthttp.StatusExpectationFailed)
|
||||
return
|
||||
}
|
||||
if userData.Data.MalID != register.MalID {
|
||||
if userData.MalID != register.MalID {
|
||||
ctx.WriteString("Dich gibts nicht auf MAL")
|
||||
ctx.SetStatusCode(fasthttp.StatusExpectationFailed)
|
||||
return
|
||||
|
||||
14
schaffer.go
14
schaffer.go
@@ -91,6 +91,20 @@ func MalConvert(mal *AnimeDetailMal) Anime {
|
||||
return res
|
||||
}
|
||||
|
||||
func UserConvert(user *UserJikan) User {
|
||||
return User{
|
||||
MalID: user.Data.MalID,
|
||||
Username: user.Data.Username,
|
||||
URL: user.Data.URL,
|
||||
ImageURL: user.Data.Images.Jpg.ImageURL,
|
||||
LastOnline: user.Data.LastOnline,
|
||||
Gender: user.Data.Gender,
|
||||
Birthday: user.Data.Birthday,
|
||||
Location: user.Data.Location,
|
||||
Joined: user.Data.Joined,
|
||||
}
|
||||
}
|
||||
|
||||
func GetSeasonCache() ([]Anime, error) {
|
||||
data, err := seasoncache.Get(seasonApiJikan)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user