package handlers import ( "net/http" "strconv" "git.haelnorr.com/h/oslstats/internal/db" "github.com/pkg/errors" "github.com/uptrace/bun" ) func pageOptsFromForm(r *http.Request) (*db.PageOpts, error) { var pageNum, perPage int var order bun.Order var orderBy string var err error if pageStr := r.FormValue("page"); pageStr != "" { pageNum, err = strconv.Atoi(pageStr) if err != nil { return nil, errors.Wrap(err, "invalid page number") } } if perPageStr := r.FormValue("per_page"); perPageStr != "" { perPage, err = strconv.Atoi(perPageStr) if err != nil { return nil, errors.Wrap(err, "invalid per_page number") } } order = bun.Order(r.FormValue("order")) orderBy = r.FormValue("order_by") pageOpts := &db.PageOpts{ Page: pageNum, PerPage: perPage, Order: order, OrderBy: orderBy, } return pageOpts, nil } func pageOptsFromQuery(r *http.Request) (*db.PageOpts, error) { var pageNum, perPage int var order bun.Order var orderBy string var err error if pageStr := r.URL.Query().Get("page"); pageStr != "" { pageNum, err = strconv.Atoi(pageStr) if err != nil { return nil, errors.Wrap(err, "invalid page number") } } if perPageStr := r.URL.Query().Get("per_page"); perPageStr != "" { perPage, err = strconv.Atoi(perPageStr) if err != nil { return nil, errors.Wrap(err, "invalid per_page number") } } order = bun.Order(r.URL.Query().Get("order")) orderBy = r.URL.Query().Get("order_by") pageOpts := &db.PageOpts{ Page: pageNum, PerPage: perPage, Order: order, OrderBy: orderBy, } return pageOpts, nil }