diff --git a/api/src/controllers/staff.ts b/api/src/controllers/staff.ts index e1b1e7a8..56c1fa85 100644 --- a/api/src/controllers/staff.ts +++ b/api/src/controllers/staff.ts @@ -102,7 +102,7 @@ async function getStaffRoles({ ...(query ? [sql`word_similarity(${query}::text, ${staff.name})`] : sortToSql(sort)), - shows.pk, + staff.pk, ) .limit(limit); } @@ -232,6 +232,7 @@ export const staffH = new Elysia({ tags: ["staff"] }) }) .from(roles) .innerJoin(shows, eq(roles.showPk, shows.pk)) + .innerJoin(transQ, eq(shows.pk, transQ.pk)) .where( and( eq(roles.staffPk, member.pk), @@ -359,7 +360,7 @@ export const staffH = new Elysia({ tags: ["staff"] }) after, query, sort, - filter: and(eq(shows.pk, roles.showPk), filter), + filter: and(eq(roles.showPk, movie.pk), filter), }); return createPage(items, { url, sort, limit }); }, @@ -426,7 +427,7 @@ export const staffH = new Elysia({ tags: ["staff"] }) after, query, sort, - filter: and(eq(shows.pk, roles.showPk), filter), + filter: and(eq(roles.showPk, serie.pk), filter), }); return createPage(items, { url, sort, limit }); }, diff --git a/api/src/controllers/studios.ts b/api/src/controllers/studios.ts index 84af5a77..ea9bac91 100644 --- a/api/src/controllers/studios.ts +++ b/api/src/controllers/studios.ts @@ -73,7 +73,7 @@ export async function getStudios({ after?: string; limit: number; query?: string; - sort?: Sort, + sort?: Sort; filter?: SQL; languages: string[]; fallbackLanguage?: boolean; diff --git a/api/tests/helpers/staff-helper.ts b/api/tests/helpers/staff-helper.ts index 255b4c60..4c790de1 100644 --- a/api/tests/helpers/staff-helper.ts +++ b/api/tests/helpers/staff-helper.ts @@ -39,3 +39,39 @@ export const getStaffRoles = async ( const body = await resp.json(); return [resp, body] as const; }; + +export const getSerieStaff = async ( + serie: string, + opts: { + filter?: string; + limit?: number; + after?: string; + sort?: string | string[]; + }, +) => { + const resp = await app.handle( + new Request(buildUrl(`series/${serie}/staff`, opts), { + method: "GET", + }), + ); + const body = await resp.json(); + return [resp, body] as const; +}; + +export const getMovieStaff = async ( + movie: string, + opts: { + filter?: string; + limit?: number; + after?: string; + sort?: string | string[]; + }, +) => { + const resp = await app.handle( + new Request(buildUrl(`movies/${movie}/staff`, opts), { + method: "GET", + }), + ); + const body = await resp.json(); + return [resp, body] as const; +}; diff --git a/api/tests/series/get-staff.test.ts b/api/tests/series/get-staff.test.ts index 0e0a87c6..63786d62 100644 --- a/api/tests/series/get-staff.test.ts +++ b/api/tests/series/get-staff.test.ts @@ -1,5 +1,10 @@ import { beforeAll, describe, expect, it } from "bun:test"; -import { createSerie, getStaff, getStaffRoles } from "tests/helpers"; +import { + createSerie, + getSerieStaff, + getStaff, + getStaffRoles, +} from "tests/helpers"; import { expectStatus } from "tests/utils"; import { madeInAbyss } from "~/models/examples"; @@ -25,4 +30,25 @@ describe("Get a staff member", () => { expect(body.slug).toBe(member.slug); expect(body.latinName).toBe(member.latinName); }); + it("Get staff's roles", async () => { + const role = madeInAbyss.staff[0]; + const [resp, body] = await getStaffRoles(role.staff.slug, {}); + + expectStatus(resp, body).toBe(200); + expect(body.items).toBeArrayOfSize(1); + expect(body.items[0].kind).toBe(role.kind); + expect(body.items[0].character.name).toBe(role.character.name); + expect(body.items[0].show.slug).toBe(madeInAbyss.slug); + }); + it("Get series's staff", async () => { + const role = madeInAbyss.staff[0]; + const [resp, body] = await getSerieStaff(madeInAbyss.slug, {}); + + expectStatus(resp, body).toBe(200); + expect(body.items).toBeArrayOfSize(1); + expect(body.items[0].kind).toBe(role.kind); + expect(body.items[0].character.name).toBe(role.character.name); + expect(body.items[0].staff.slug).toBe(role.staff.slug); + expect(body.items[0].staff.name).toBe(role.staff.name); + }); });