Skip to content
This repository was archived by the owner on Oct 19, 2024. It is now read-only.

Commit 90452ea

Browse files
Add API routes to request multiple of an item (#70)
* Change header name * Add default bio value * Remove default * Make name null * Run prepare * Add new API Routes for requesting multiple of an item * Run formatter * Simplify get mods query * Run prepare * Refactor to use one query for most routes, change version create route to have mod_id in data * More fixes
1 parent aa4264b commit 90452ea

File tree

12 files changed

+584
-39
lines changed

12 files changed

+584
-39
lines changed

sqlx-data.json

Lines changed: 256 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,26 @@
8181
]
8282
}
8383
},
84+
"1220d15a56dbf823eaa452fbafa17442ab0568bc81a31fa38e16e3df3278e5f9": {
85+
"query": "SELECT EXISTS(SELECT 1 FROM users WHERE id = $1)",
86+
"describe": {
87+
"columns": [
88+
{
89+
"ordinal": 0,
90+
"name": "exists",
91+
"type_info": "Bool"
92+
}
93+
],
94+
"parameters": {
95+
"Left": [
96+
"Int8"
97+
]
98+
},
99+
"nullable": [
100+
null
101+
]
102+
}
103+
},
84104
"1524c0462be70077736ac70fcd037fbf75651456b692e2ce40fa2e3fc8123984": {
85105
"query": "\n SELECT hashes.algorithm, hashes.hash FROM hashes\n WHERE hashes.file_id = $1\n ",
86106
"describe": {
@@ -123,6 +143,74 @@
123143
"nullable": []
124144
}
125145
},
146+
"17e6d30c3693e9bd9f772f3dc4e2eafe75fdeecfdcf2746eac641f77ced6b8a8": {
147+
"query": "\n SELECT u.id, u.github_id, u.name, u.email,\n u.avatar_url, u.username, u.bio,\n u.created, u.role FROM users u\n WHERE u.id IN (SELECT * FROM UNNEST($1::bigint[]))\n ",
148+
"describe": {
149+
"columns": [
150+
{
151+
"ordinal": 0,
152+
"name": "id",
153+
"type_info": "Int8"
154+
},
155+
{
156+
"ordinal": 1,
157+
"name": "github_id",
158+
"type_info": "Int8"
159+
},
160+
{
161+
"ordinal": 2,
162+
"name": "name",
163+
"type_info": "Varchar"
164+
},
165+
{
166+
"ordinal": 3,
167+
"name": "email",
168+
"type_info": "Varchar"
169+
},
170+
{
171+
"ordinal": 4,
172+
"name": "avatar_url",
173+
"type_info": "Varchar"
174+
},
175+
{
176+
"ordinal": 5,
177+
"name": "username",
178+
"type_info": "Varchar"
179+
},
180+
{
181+
"ordinal": 6,
182+
"name": "bio",
183+
"type_info": "Varchar"
184+
},
185+
{
186+
"ordinal": 7,
187+
"name": "created",
188+
"type_info": "Timestamptz"
189+
},
190+
{
191+
"ordinal": 8,
192+
"name": "role",
193+
"type_info": "Varchar"
194+
}
195+
],
196+
"parameters": {
197+
"Left": [
198+
"Int8Array"
199+
]
200+
},
201+
"nullable": [
202+
false,
203+
true,
204+
true,
205+
true,
206+
true,
207+
false,
208+
true,
209+
false,
210+
false
211+
]
212+
}
213+
},
126214
"1b74bdb59773ffd2a78a56e4d920bb83c322e180e6174c741d4bb722c353de43": {
127215
"query": "\n INSERT INTO loaders (loader)\n VALUES ($1)\n RETURNING id\n ",
128216
"describe": {
@@ -203,6 +291,86 @@
203291
]
204292
}
205293
},
294+
"268efd8c8145bbb2bc70bd5ae0a5e6f90c5917ffd18575afcdeaf78b4f895d1e": {
295+
"query": "\n SELECT id, title, description, downloads,\n icon_url, body_url, published,\n issues_url, source_url, wiki_url,\n team_id\n FROM mods\n WHERE id IN (SELECT * FROM UNNEST($1::bigint[]))\n ",
296+
"describe": {
297+
"columns": [
298+
{
299+
"ordinal": 0,
300+
"name": "id",
301+
"type_info": "Int8"
302+
},
303+
{
304+
"ordinal": 1,
305+
"name": "title",
306+
"type_info": "Varchar"
307+
},
308+
{
309+
"ordinal": 2,
310+
"name": "description",
311+
"type_info": "Varchar"
312+
},
313+
{
314+
"ordinal": 3,
315+
"name": "downloads",
316+
"type_info": "Int4"
317+
},
318+
{
319+
"ordinal": 4,
320+
"name": "icon_url",
321+
"type_info": "Varchar"
322+
},
323+
{
324+
"ordinal": 5,
325+
"name": "body_url",
326+
"type_info": "Varchar"
327+
},
328+
{
329+
"ordinal": 6,
330+
"name": "published",
331+
"type_info": "Timestamptz"
332+
},
333+
{
334+
"ordinal": 7,
335+
"name": "issues_url",
336+
"type_info": "Varchar"
337+
},
338+
{
339+
"ordinal": 8,
340+
"name": "source_url",
341+
"type_info": "Varchar"
342+
},
343+
{
344+
"ordinal": 9,
345+
"name": "wiki_url",
346+
"type_info": "Varchar"
347+
},
348+
{
349+
"ordinal": 10,
350+
"name": "team_id",
351+
"type_info": "Int8"
352+
}
353+
],
354+
"parameters": {
355+
"Left": [
356+
"Int8Array"
357+
]
358+
},
359+
"nullable": [
360+
false,
361+
false,
362+
false,
363+
false,
364+
true,
365+
false,
366+
false,
367+
true,
368+
true,
369+
true,
370+
false
371+
]
372+
}
373+
},
206374
"275939f581a82197b45b0d56248926063f09ef86754498a720c5568cdb1f5ae0": {
207375
"query": "SELECT user_id FROM team_members WHERE team_id=$1",
208376
"describe": {
@@ -1183,6 +1351,74 @@
11831351
"nullable": []
11841352
}
11851353
},
1354+
"d98f0713c6bd3463f851644c88a2cf91601a499494ef1e2ad92a49d6798f5b2f": {
1355+
"query": "\n SELECT v.id, v.mod_id, v.author_id, v.name, v.version_number,\n v.changelog_url, v.date_published, v.downloads,\n v.release_channel\n FROM versions v\n WHERE v.id IN (SELECT * FROM UNNEST($1::bigint[]))\n ",
1356+
"describe": {
1357+
"columns": [
1358+
{
1359+
"ordinal": 0,
1360+
"name": "id",
1361+
"type_info": "Int8"
1362+
},
1363+
{
1364+
"ordinal": 1,
1365+
"name": "mod_id",
1366+
"type_info": "Int8"
1367+
},
1368+
{
1369+
"ordinal": 2,
1370+
"name": "author_id",
1371+
"type_info": "Int8"
1372+
},
1373+
{
1374+
"ordinal": 3,
1375+
"name": "name",
1376+
"type_info": "Varchar"
1377+
},
1378+
{
1379+
"ordinal": 4,
1380+
"name": "version_number",
1381+
"type_info": "Varchar"
1382+
},
1383+
{
1384+
"ordinal": 5,
1385+
"name": "changelog_url",
1386+
"type_info": "Varchar"
1387+
},
1388+
{
1389+
"ordinal": 6,
1390+
"name": "date_published",
1391+
"type_info": "Timestamptz"
1392+
},
1393+
{
1394+
"ordinal": 7,
1395+
"name": "downloads",
1396+
"type_info": "Int4"
1397+
},
1398+
{
1399+
"ordinal": 8,
1400+
"name": "release_channel",
1401+
"type_info": "Int4"
1402+
}
1403+
],
1404+
"parameters": {
1405+
"Left": [
1406+
"Int8Array"
1407+
]
1408+
},
1409+
"nullable": [
1410+
false,
1411+
false,
1412+
false,
1413+
false,
1414+
false,
1415+
true,
1416+
false,
1417+
false,
1418+
false
1419+
]
1420+
}
1421+
},
11861422
"deb81673526789bca38d39e64303f61d2a63febfdfb68136e58517af9f7792bc": {
11871423
"query": "\n SELECT category FROM mods_categories\n INNER JOIN categories ON joining_category_id = id\n WHERE joining_mod_id = $1\n ",
11881424
"describe": {
@@ -1537,5 +1773,25 @@
15371773
null
15381774
]
15391775
}
1776+
},
1777+
"fdb2a6ea649bb23c69af5c756d6137e216603708ffccd4e9162fb1c9765a56aa": {
1778+
"query": "\n SELECT m.id FROM mods m\n INNER JOIN team_members tm ON tm.team_id = m.team_id\n WHERE tm.user_id = $1\n ",
1779+
"describe": {
1780+
"columns": [
1781+
{
1782+
"ordinal": 0,
1783+
"name": "id",
1784+
"type_info": "Int8"
1785+
}
1786+
],
1787+
"parameters": {
1788+
"Left": [
1789+
"Int8"
1790+
]
1791+
},
1792+
"nullable": [
1793+
false
1794+
]
1795+
}
15401796
}
15411797
}

src/database/models/mod_item.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,46 @@ impl Mod {
143143
}
144144
}
145145

146+
pub async fn get_many<'a, E>(mod_ids: Vec<ModId>, exec: E) -> Result<Vec<Mod>, sqlx::Error>
147+
where
148+
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
149+
{
150+
use futures::stream::TryStreamExt;
151+
152+
let mod_ids_parsed: Vec<i64> = mod_ids.into_iter().map(|x| x.0).collect();
153+
let mods = sqlx::query!(
154+
"
155+
SELECT id, title, description, downloads,
156+
icon_url, body_url, published,
157+
issues_url, source_url, wiki_url,
158+
team_id
159+
FROM mods
160+
WHERE id IN (SELECT * FROM UNNEST($1::bigint[]))
161+
",
162+
&mod_ids_parsed
163+
)
164+
.fetch_many(exec)
165+
.try_filter_map(|e| async {
166+
Ok(e.right().map(|m| Mod {
167+
id: ModId(m.id),
168+
team_id: TeamId(m.team_id),
169+
title: m.title,
170+
description: m.description,
171+
downloads: m.downloads,
172+
body_url: m.body_url,
173+
icon_url: m.icon_url,
174+
published: m.published,
175+
issues_url: m.issues_url,
176+
source_url: m.source_url,
177+
wiki_url: m.wiki_url,
178+
}))
179+
})
180+
.try_collect::<Vec<Mod>>()
181+
.await?;
182+
183+
Ok(mods)
184+
}
185+
146186
pub async fn remove_full<'a, 'b, E>(
147187
id: ModId,
148188
exec: E,

0 commit comments

Comments
 (0)