From 649d237f9e3f9efbb0af08f5af82b776a3d81654 Mon Sep 17 00:00:00 2001 From: Runxi Yu <me@runxiyu.org> Date: Thu, 6 Mar 2025 20:29:39 +0800 Subject: group/index: Add group description --- http_handle_group_index.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'http_handle_group_index.go') diff --git a/http_handle_group_index.go b/http_handle_group_index.go index 429532c..e3f94fd 100644 --- a/http_handle_group_index.go +++ b/http_handle_group_index.go @@ -16,9 +16,50 @@ func handle_group_index(w http.ResponseWriter, r *http.Request, params map[strin var repos []name_desc_t var subgroups []name_desc_t var err error + var group_description string group_path = params["group_path"].([]string) + // The group itself + err = database.QueryRow(r.Context(), ` + WITH RECURSIVE group_path_cte AS ( + SELECT + id, + parent_group, + name, + 1 AS depth + FROM groups + WHERE name = ($1::text[])[1] + AND parent_group IS NULL + + UNION ALL + + SELECT + g.id, + g.parent_group, + g.name, + group_path_cte.depth + 1 + FROM groups g + JOIN group_path_cte ON g.parent_group = group_path_cte.id + WHERE g.name = ($1::text[])[group_path_cte.depth + 1] + AND group_path_cte.depth + 1 <= cardinality($1::text[]) + ) + SELECT COALESCE(g.description, '') + FROM group_path_cte c + JOIN groups g ON g.id = c.id + WHERE c.depth = cardinality($1::text[]) + `, + pgtype.FlatArray[string](group_path), + ).Scan(&group_description) + + if err == pgx.ErrNoRows { + http.Error(w, "Group not found", http.StatusNotFound) + return + } else if err != nil { + http.Error(w, "Error getting group: "+err.Error(), http.StatusInternalServerError) + return + } + // Repos var rows pgx.Rows rows, err = database.Query(r.Context(), ` @@ -122,6 +163,7 @@ func handle_group_index(w http.ResponseWriter, r *http.Request, params map[strin params["repos"] = repos params["subgroups"] = subgroups + params["description"] = group_description fmt.Println(group_path) -- cgit v1.2.3