diff --git a/server/src/graphQL/resolvers.ts b/server/src/graphQL/resolvers.ts index cfe5c00..3a68a47 100644 --- a/server/src/graphQL/resolvers.ts +++ b/server/src/graphQL/resolvers.ts @@ -5,13 +5,15 @@ export const resolvers = { albums: async (_: unknown, args: { search?: string; genre?: string; decade?: number; first?: number }) => { let sql = ` SELECT - id, - title, - artist, - release_year AS "releaseYear", - genre, - cover_url AS "coverUrl" - FROM albums + a.id, + a.title, + a.artist, + a.release_year AS "releaseYear", + g.name AS genre, + a.cover_url AS "coverUrl" + FROM albums a + LEFT JOIN album_genres ag ON ag.album_id = a.id + LEFT JOIN genres g ON g.id = ag.genre_id WHERE 1=1 `; const queryParams: (string | number)[] = []; @@ -19,26 +21,26 @@ export const resolvers = { if (args.search) { queryParams.push(`%${args.search}%`); - sql += ` AND (LOWER(title) LIKE LOWER($${queryParams.length}) OR LOWER(artist) LIKE LOWER($${queryParams.length}))`; + sql += ` AND (LOWER(a.title) LIKE LOWER($${queryParams.length}) OR LOWER(a.artist) LIKE LOWER($${queryParams.length}))`; } if (args.genre) { queryParams.push(args.genre); - sql += ` AND LOWER(genre) = LOWER($${queryParams.length})`; + sql += ` AND LOWER(g.name) = LOWER($${queryParams.length})`; } if (args.decade) { queryParams.push(args.decade); - sql += ` AND release_year >= $${queryParams.length} AND release_year < $${queryParams.length} + 10`; + sql += ` AND a.release_year >= $${queryParams.length} AND a.release_year < $${queryParams.length} + 10`; } const limit = args.first || 10; queryParams.push(limit + 1); - sql += ` ORDER BY title ASC LIMIT $${queryParams.length}`; + sql += ` ORDER BY a.title ASC LIMIT $${queryParams.length}`; const { rows } = await pool.query(sql, queryParams); @@ -57,14 +59,16 @@ export const resolvers = { album: async (_: unknown, args: { id: string }) => { const albumSql = ` SELECT - id, - title, - artist, - release_year AS "releaseYear", - genre, - cover_url AS "coverUrl" - FROM albums - WHERE id = $1 + a.id, + a.title, + a.artist, + a.release_year AS "releaseYear", + g.name AS genre, + a.cover_path AS "coverUrl" + FROM albums a + LEFT JOIN album_genres ag ON ag.album_id = a.id + LEFT JOIN genres g ON g.id = ag.genre_id + WHERE a.id = $1 `; const { rows: albumRows } = await pool.query(albumSql, [args.id]); @@ -79,7 +83,7 @@ export const resolvers = { SELECT id, title, - duration + duration_ms AS "duration" FROM tracks WHERE album_id = $1 ORDER BY track_number ASC