diff options
author | Max Magorsch <arzano@gentoo.org> | 2020-04-28 03:21:42 +0200 |
---|---|---|
committer | Max Magorsch <arzano@gentoo.org> | 2020-04-28 03:21:42 +0200 |
commit | 618177a10b8694247e7c583131d0c2312f45f999 (patch) | |
tree | 1cf80a2924c51297c1622fccc89b1e216b667ad3 /pkg | |
parent | Clean up the json for the categories (diff) | |
download | soko-618177a10b8694247e7c583131d0c2312f45f999.tar.gz soko-618177a10b8694247e7c583131d0c2312f45f999.tar.bz2 soko-618177a10b8694247e7c583131d0c2312f45f999.zip |
Add the resolv.json page
Signed-off-by: Max Magorsch <arzano@gentoo.org>
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/app/handler/packages/resolve.go | 71 | ||||
-rw-r--r-- | pkg/app/serve.go | 1 |
2 files changed, 72 insertions, 0 deletions
diff --git a/pkg/app/handler/packages/resolve.go b/pkg/app/handler/packages/resolve.go new file mode 100644 index 0000000..0b8a214 --- /dev/null +++ b/pkg/app/handler/packages/resolve.go @@ -0,0 +1,71 @@ +package packages + +import ( + "encoding/json" + "github.com/go-pg/pg" + "github.com/go-pg/pg/v9/orm" + "net/http" + "soko/pkg/database" + "soko/pkg/models" +) + +// Show renders a template to show a given package +func Resolve(w http.ResponseWriter, r *http.Request) { + + atom := getParam(r, "atom") + gpackage := new(models.Package) + err := database.DBCon.Model(gpackage). + Where("atom LIKE ?", "%"+atom). + Relation("Versions"). + Relation("Versions.Masks"). + Relation("Commits", func(q *orm.Query) (*orm.Query, error) { + return q.Order("preceding_commits DESC").Limit(1), nil + }). + Limit(1). + Select() + + if err != nil && err != pg.ErrNoRows { + http.Error(w, http.StatusText(http.StatusInternalServerError), + http.StatusInternalServerError) + return + } + + sortVersionsDesc(gpackage.Versions) + + versions := getJSONVersions(gpackage) + maintainers := getJSONMaintainers(gpackage) + useflags := getJSONUseflag(gpackage) + + jsonPackage := Package{ + Atom: gpackage.Atom, + Description: gpackage.Versions[0].Description, + Href: "https://packages.gentoo.org/packages/" + gpackage.Atom, + Versions: versions, + Herds: []string{}, + Maintainers: maintainers, + Use: useflags, + UpdatedAt: gpackage.Commits[0].CommitterDate, + } + + b, err := json.Marshal(jsonPackage) + + if err != nil { + http.Error(w, http.StatusText(http.StatusInternalServerError), + http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + w.Write(b) +} + + +func getParam(r *http.Request, q string) string { + keys, ok := r.URL.Query()[q] + + if !ok || len(keys[0]) < 1 { + return "" + } + + return keys[0] +} diff --git a/pkg/app/serve.go b/pkg/app/serve.go index cd48a8e..4eb50d3 100644 --- a/pkg/app/serve.go +++ b/pkg/app/serve.go @@ -42,6 +42,7 @@ func Serve() { setRoute("/packages/search", packages.Search) setRoute("/packages/suggest.json", packages.Suggest) + setRoute("/packages/resolve.json", packages.Resolve) setRoute("/packages/added", packages.Added) setRoute("/packages/updated", packages.Updated) setRoute("/packages/stable", packages.Stabilized) |