aboutsummaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
authorMax Magorsch <arzano@gentoo.org>2020-04-28 03:21:42 +0200
committerMax Magorsch <arzano@gentoo.org>2020-04-28 03:21:42 +0200
commit618177a10b8694247e7c583131d0c2312f45f999 (patch)
tree1cf80a2924c51297c1622fccc89b1e216b667ad3 /pkg
parentClean up the json for the categories (diff)
downloadsoko-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.go71
-rw-r--r--pkg/app/serve.go1
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)