Move types to api

This commit is contained in:
video-prize-ranch
2022-07-22 11:55:22 -04:00
parent da42f7cf90
commit e0efe6caca
13 changed files with 126 additions and 139 deletions

View File

@@ -7,23 +7,31 @@ import (
"sync"
"time"
"codeberg.org/video-prize-ranch/rimgo/types"
"codeberg.org/video-prize-ranch/rimgo/utils"
"github.com/patrickmn/go-cache"
"github.com/tidwall/gjson"
)
type Tag struct {
Tag string
Display string
Sort string
PostCount int64
Posts []Submission
Background string
}
var tagCache = cache.New(15*time.Minute, 15*time.Minute)
func FetchTag(tag string, sort string, page string) (types.Tag, error) {
func FetchTag(tag string, sort string, page string) (Tag, error) {
cacheData, found := tagCache.Get(tag + sort + page)
if found {
return cacheData.(types.Tag), nil
return cacheData.(Tag), nil
}
req, err := http.NewRequest("GET", "https://api.imgur.com/post/v1/posts/t/"+tag, nil)
if err != nil {
return types.Tag{}, err
return Tag{}, err
}
q := req.URL.Query()
@@ -49,29 +57,29 @@ func FetchTag(tag string, sort string, page string) (types.Tag, error) {
res, err := http.DefaultClient.Do(req)
if err != nil {
return types.Tag{}, err
return Tag{}, err
}
body, err := ioutil.ReadAll(res.Body)
if err != nil {
return types.Tag{}, err
return Tag{}, err
}
data := gjson.Parse(string(body))
wg := sync.WaitGroup{}
posts := make([]types.Submission, 0)
posts := make([]Submission, 0)
data.Get("posts").ForEach(
func(key, value gjson.Result) bool {
wg.Add(1)
go func() {
defer wg.Done()
posts = append(posts, types.Submission{
posts = append(posts, Submission{
Id: value.Get("id").String(),
Title: value.Get("title").String(),
Link: strings.ReplaceAll(value.Get("url").String(), "https://imgur.com", ""),
Cover: types.Media{
Cover: Media{
Id: value.Get("cover_id").String(),
Type: value.Get("cover.type").String(),
Url: strings.ReplaceAll(value.Get("cover.url").String(), "https://i.imgur.com", ""),
@@ -91,7 +99,7 @@ func FetchTag(tag string, sort string, page string) (types.Tag, error) {
wg.Wait()
tagData := types.Tag{
tagData := Tag{
Tag: tag,
Display: data.Get("display").String(),
Sort: sort,