diff options
author | Runxi Yu <me@runxiyu.org> | 2025-02-13 09:43:22 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-02-13 09:43:22 +0800 |
commit | 91ed68b30f58e016ddcbb6f14c3395322115d464 (patch) | |
tree | 9493ec7e9d958356a267abe8664a8e0a417f3d6c | |
parent | http_*.go: Use http.Error (diff) | |
download | forge-91ed68b30f58e016ddcbb6f14c3395322115d464.tar.gz forge-91ed68b30f58e016ddcbb6f14c3395322115d464.tar.zst forge-91ed68b30f58e016ddcbb6f14c3395322115d464.zip |
database.go: query_list[T any]
-rw-r--r-- | database.go | 29 | ||||
-rw-r--r-- | http_handle_group_index.go | 23 |
2 files changed, 32 insertions, 20 deletions
diff --git a/database.go b/database.go new file mode 100644 index 0000000..cf4f4ba --- /dev/null +++ b/database.go @@ -0,0 +1,29 @@ +package main + +import ( + "context" +) + +func query_list[T any](ctx context.Context, query string, args ...any) ([]T, error) { + rows, err := database.Query(ctx, query, args...) + if err != nil { + return nil, err + } + defer rows.Close() + + var result []T + for rows.Next() { + var item T + if err := rows.Scan(&item); err != nil { + return nil, err + } + result = append(result, item) + } + + if err := rows.Err(); err != nil { + return nil, err + } + + return result, nil +} + diff --git a/http_handle_group_index.go b/http_handle_group_index.go index c034853..834c0da 100644 --- a/http_handle_group_index.go +++ b/http_handle_group_index.go @@ -7,28 +7,11 @@ import ( func handle_group_repos(w http.ResponseWriter, r *http.Request, params map[string]any) { group_name := params["group_name"] - var names []string - rows, err := database.Query(r.Context(), "SELECT r.name FROM repos r JOIN groups g ON r.group_id = g.id WHERE g.name = $1;", group_name) + names, err := query_list[string](r.Context(), "SELECT r.name FROM repos r JOIN groups g ON r.group_id = g.id WHERE g.name = $1;", group_name) if err != nil { - http.Error(w, "Error getting groups:: "+err.Error(), http.StatusInternalServerError) - return - } - defer rows.Close() - - for rows.Next() { - var name string - if err := rows.Scan(&name); err != nil { - http.Error(w, "Error scanning row:: "+err.Error(), http.StatusInternalServerError) - return - } - names = append(names, name) + http.Error(w, "Error getting groups:: "+err.Error(), http.StatusInternalServerError) + return } - - if err := rows.Err(); err != nil { - http.Error(w, "Error iterating over rows:: "+err.Error(), http.StatusInternalServerError) - return - } - params["repos"] = names err = templates.ExecuteTemplate(w, "group_repos", params) |