Fix relationships endpoint

This commit is contained in:
Jesse Wierzbinski 2023-09-22 16:46:52 -10:00
parent 50ab0155a5
commit 41e70d00e8
2 changed files with 17 additions and 8 deletions

View file

@ -486,16 +486,12 @@ describe("POST /api/v1/accounts/:id/note", () => {
describe("GET /api/v1/accounts/relationships", () => { describe("GET /api/v1/accounts/relationships", () => {
test("should return an array of APIRelationship objects for the authenticated user's relationships", async () => { test("should return an array of APIRelationship objects for the authenticated user's relationships", async () => {
const response = await fetch( const response = await fetch(
`${config.http.base_url}/api/v1/accounts/relationships`, `${config.http.base_url}/api/v1/accounts/relationships?id[]=${user2.id}`,
{ {
method: "POST", method: "GET",
headers: { headers: {
Authorization: `Bearer ${token.access_token}`, Authorization: `Bearer ${token.access_token}`,
"Content-Type": "application/json",
}, },
body: JSON.stringify({
"id[]": [user2.id],
}),
} }
); );

View file

@ -8,6 +8,15 @@
export async function parseRequest<T>(request: Request): Promise<Partial<T>> { export async function parseRequest<T>(request: Request): Promise<Partial<T>> {
const query = new URL(request.url).searchParams; const query = new URL(request.url).searchParams;
// Parse SearchParams arrays into JSON arrays
const arrayKeys = [...query.keys()].filter(key => key.endsWith("[]"));
for (const key of arrayKeys) {
const value = query.getAll(key);
query.delete(key);
query.append(key, JSON.stringify(value));
}
// if request contains a JSON body // if request contains a JSON body
if (request.headers.get("Content-Type")?.includes("application/json")) { if (request.headers.get("Content-Type")?.includes("application/json")) {
return (await request.json()) as T; return (await request.json()) as T;
@ -42,10 +51,14 @@ export async function parseRequest<T>(request: Request): Promise<Partial<T>> {
} }
if ([...query.entries()].length > 0) { if ([...query.entries()].length > 0) {
const data: Record<string, string> = {}; const data: Record<string, string | string[]> = {};
for (const [key, value] of query.entries()) { for (const [key, value] of query.entries()) {
data[key] = value.toString(); try {
data[key] = JSON.parse(value) as string[];
} catch {
data[key] = value.toString();
}
} }
return data as T; return data as T;