diff --git a/knecht.go b/knecht.go index 6d200b2..b32c1d2 100644 --- a/knecht.go +++ b/knecht.go @@ -17,6 +17,7 @@ func GetAnimeDetailData(animeId int64) (*Anime, []byte, error) { key := strconv.FormatInt(animeId, 10) data, err := animeCache.Get(key) if err != nil { + err = nil dataMal, err := GetDataMal(animeApiMal + key + "?fields=id,title,main_picture,alternative_titles,start_date,end_date,synopsis,mean,rank,popularity,num_list_users,num_scoring_users,nsfw,media_type,status,genres,my_list_status,num_episodes,start_season,broadcast,source,average_episode_duration,rating,studios") if err != nil { return nil, nil, err diff --git a/ober.go b/ober.go index 72e18fe..d258b2d 100644 --- a/ober.go +++ b/ober.go @@ -16,6 +16,7 @@ func RunWebserv() { r := router.New() r.GET("/", Start) r.GET("/api/season", Season) + r.GET("/api/anime/{id}", AnimeGet) r.GET("/api/watch/{user?}", WatchGet) r.POST("/api/register", Register) r.POST("/api/watch/{user}", WatchPost) @@ -51,6 +52,44 @@ func Season(ctx *fasthttp.RequestCtx) { } } +func AnimeGet(ctx *fasthttp.RequestCtx) { + idVal := ctx.UserValue("id") + if idVal == nil { + ctx.SetStatusCode(fasthttp.StatusBadRequest) + return + } + // check user exists + malId, err := strconv.ParseInt(fmt.Sprintf("%s", idVal), 10, 64) + if err != nil { + ctx.WriteString(err.Error()) + ctx.SetStatusCode(fasthttp.StatusBadRequest) + return + } + // search season first + anime, err := SearchSeason(malId) + var bytes []byte + if err != nil { + _, bytes, err = GetAnimeDetailData(malId) + if err != nil { + addErrorToCtx(ctx, err) + return + } + } else { + bytes, err = json.Marshal(&anime) + 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