Skip to content

Commit a486ee0

Browse files
committed
chore: add examples of using query parameters
Part of #23
1 parent c898441 commit a486ee0

File tree

6 files changed

+105
-0
lines changed

6 files changed

+105
-0
lines changed

examples/go/chi/mysql/routes.go

+25
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,31 @@ func registerRoutes(r chi.Router, db *sqlx.DB) {
110110
w.WriteHeader(http.StatusNoContent)
111111
})
112112

113+
r.Get("/v1/categories/search", func(w http.ResponseWriter, r *http.Request) {
114+
stmt, err := db.PrepareNamed("SELECT id , name , name_ru , slug , hidden FROM categories WHERE hidden = :hidden")
115+
if err != nil {
116+
fmt.Fprintf(os.Stderr, "PrepareNamed failed: %v\n", err)
117+
internalServerError(w)
118+
return
119+
}
120+
121+
result := []CategoryDto{}
122+
args := map[string]interface{}{
123+
"hidden": r.URL.Query().Get("hidden"),
124+
}
125+
err = stmt.Select(&result, args)
126+
switch err {
127+
case sql.ErrNoRows:
128+
w.WriteHeader(http.StatusNotFound)
129+
case nil:
130+
w.Header().Set("Content-Type", "application/json")
131+
json.NewEncoder(w).Encode(&result)
132+
default:
133+
fmt.Fprintf(os.Stderr, "Select failed: %v\n", err)
134+
internalServerError(w)
135+
}
136+
})
137+
113138
r.Get("/v1/categories/{categoryId}", func(w http.ResponseWriter, r *http.Request) {
114139
stmt, err := db.PrepareNamed("SELECT id , name , name_ru , slug , hidden FROM categories WHERE id = :categoryId")
115140
if err != nil {

examples/js/express/mysql/endpoints.yaml

+18
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,24 @@
7777
hidden:
7878
type: boolean
7979

80+
- path: /v1/categories/search
81+
get_list:
82+
query: >-
83+
SELECT id
84+
, name
85+
, name_ru
86+
, slug
87+
, hidden
88+
FROM categories
89+
WHERE hidden = :q.hidden
90+
dto:
91+
name: CategoryDto
92+
fields:
93+
id:
94+
type: integer
95+
hidden:
96+
type: boolean
97+
8098
- path: /v1/categories/:categoryId
8199
get:
82100
query: >-

examples/js/express/mysql/routes.js

+13
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,19 @@ const register = (app, pool) => {
5858
)
5959
})
6060

61+
app.get('/v1/categories/search', (req, res, next) => {
62+
pool.query(
63+
'SELECT id , name , name_ru , slug , hidden FROM categories WHERE hidden = :hidden',
64+
{ "hidden": req.query.hidden },
65+
(err, rows, fields) => {
66+
if (err) {
67+
return next(err)
68+
}
69+
res.json(rows)
70+
}
71+
)
72+
})
73+
6174
app.get('/v1/categories/:categoryId', (req, res, next) => {
6275
pool.query(
6376
'SELECT id , name , name_ru , slug , hidden FROM categories WHERE id = :categoryId',

examples/python/fastapi/postgres/routes.py

+22
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,28 @@ def post_v1_categories(body: CreateCategoryDto, conn=Depends(db_connection)):
133133
conn.close()
134134

135135

136+
@router.get('/v1/categories/search')
137+
def get_list_v1_categories_search(hidden, conn=Depends(db_connection)):
138+
try:
139+
with conn:
140+
with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as cur:
141+
cur.execute(
142+
"""
143+
SELECT id
144+
, name
145+
, name_ru
146+
, slug
147+
, hidden
148+
FROM categories
149+
WHERE hidden = %(hidden)s
150+
""", {
151+
"hidden": hidden
152+
})
153+
return cur.fetchall()
154+
finally:
155+
conn.close()
156+
157+
136158
@router.get('/v1/categories/{categoryId}')
137159
def get_v1_categories_category_id(categoryId, conn=Depends(db_connection)):
138160
try:

examples/ts/express/mysql/routes.ts

+13
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,19 @@ const register = (app: Express, pool: Pool) => {
6161
)
6262
})
6363

64+
app.get('/v1/categories/search', (req: Request, res: Response, next: NextFunction) => {
65+
pool.query(
66+
'SELECT id , name , name_ru , slug , hidden FROM categories WHERE hidden = :hidden',
67+
{ "hidden": req.query.hidden },
68+
(err, rows, fields) => {
69+
if (err) {
70+
return next(err)
71+
}
72+
res.json(rows)
73+
}
74+
)
75+
})
76+
6477
app.get('/v1/categories/:categoryId', (req: Request, res: Response, next: NextFunction) => {
6578
pool.query(
6679
'SELECT id , name , name_ru , slug , hidden FROM categories WHERE id = :categoryId',

tests/crud.hurl

+14
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ jsonpath "$[0].name_ru" == null
4949
jsonpath "$[0].slug" == "sport"
5050
jsonpath "$[0].hidden" == true
5151

52+
GET {{ SERVER_URL }} /v1/categories/search?hidden=true
53+
HTTP 200
54+
[Asserts]
55+
jsonpath "$" count == 1
56+
jsonpath "$[0].name" == "Sport"
57+
jsonpath "$[0].hidden" == true
58+
5259

5360
# PUT should update an object
5461
PUT {{ SERVER_URL }}/v1/categories/1
@@ -71,6 +78,13 @@ jsonpath "$.name_ru" == "Фауна"
7178
jsonpath "$.slug" == "fauna"
7279
jsonpath "$.hidden" == false
7380

81+
GET {{ SERVER_URL }} /v1/categories/search?hidden=false
82+
HTTP 200
83+
[Asserts]
84+
jsonpath "$" count == 1
85+
jsonpath "$[0].name" == "Fauna"
86+
jsonpath "$[0].hidden" == false
87+
7488

7589
# DELETE should remove an object
7690
DELETE {{ SERVER_URL }}/v1/categories/1

0 commit comments

Comments
 (0)