@@ -2,7 +2,6 @@ package coderd
2
2
3
3
import (
4
4
"net/http"
5
- "strconv"
6
5
7
6
"github.com/google/uuid"
8
7
@@ -13,53 +12,20 @@ import (
13
12
// parsePagination extracts pagination query params from the http request.
14
13
// If an error is encountered, the error is written to w and ok is set to false.
15
14
func parsePagination (w http.ResponseWriter , r * http.Request ) (p codersdk.Pagination , ok bool ) {
16
- var (
17
- afterID = uuid .Nil
18
- limit = - 1 // Default to no limit and return all results.
19
- offset = 0
20
- )
21
-
22
- var err error
23
- if s := r .URL .Query ().Get ("after_id" ); s != "" {
24
- afterID , err = uuid .Parse (r .URL .Query ().Get ("after_id" ))
25
- if err != nil {
26
- httpapi .Write (w , http .StatusBadRequest , httpapi.Response {
27
- Message : "Query param 'after_id' must be a valid UUID." ,
28
- Validations : []httpapi.Error {
29
- {Field : "after_id" , Detail : err .Error ()},
30
- },
31
- })
32
- return p , false
33
- }
34
- }
35
- if s := r .URL .Query ().Get ("limit" ); s != "" {
36
- limit , err = strconv .Atoi (s )
37
- if err != nil {
38
- httpapi .Write (w , http .StatusBadRequest , httpapi.Response {
39
- Message : "Query param 'limit' must be a valid integer." ,
40
- Validations : []httpapi.Error {
41
- {Field : "limit" , Detail : err .Error ()},
42
- },
43
- })
44
- return p , false
45
- }
15
+ parser := httpapi .NewQueryParamParser ()
16
+ params := codersdk.Pagination {
17
+ AfterID : parser .ParseUUID (r , uuid .Nil , "after_id" ),
18
+ // Limit default to "-1" which returns all results
19
+ Limit : parser .ParseInteger (r , - 1 , "limit" ),
20
+ Offset : parser .ParseInteger (r , 0 , "offset" ),
46
21
}
47
- if s := r .URL .Query ().Get ("offset" ); s != "" {
48
- offset , err = strconv .Atoi (s )
49
- if err != nil {
50
- httpapi .Write (w , http .StatusBadRequest , httpapi.Response {
51
- Message : "Query param 'offset' must be a valid integer." ,
52
- Validations : []httpapi.Error {
53
- {Field : "offset" , Detail : err .Error ()},
54
- },
55
- })
56
- return p , false
57
- }
22
+ if len (parser .ValidationErrors ()) > 0 {
23
+ httpapi .Write (w , http .StatusBadRequest , httpapi.Response {
24
+ Message : "Query parameters have invalid values." ,
25
+ Validations : parser .ValidationErrors (),
26
+ })
27
+ return params , false
58
28
}
59
29
60
- return codersdk.Pagination {
61
- AfterID : afterID ,
62
- Limit : limit ,
63
- Offset : offset ,
64
- }, true
30
+ return params , true
65
31
}
0 commit comments