(Oct 26, 2023): This demo is deprecated in favour of this rewrite with nestjs + apollo
Postgresql
/ GraphQL
/ Prisma
/ Express
/ TypeScript
/ Docker
Demo of GraphQL using personal Last.FM data
docker-compose run --rm server npx prisma init
To modify the database, first modify the prisma.schema file, then create a migration from it:
docker-compose run --rm server npm run prisma:migrate
docker-compose run --rm server npm run prisma:generate
export your LastFM list from here
COPY Scrobble(artist, album, track, datecreated)
FROM last_fm_export.csv'
DELIMITER ','
CSV HEADER;
INSERT INTO "Artist"(name)
SELECT DISTINCT Artist
FROM "Scrobble";
-- todo: Handle the NULL album names
INSERT INTO "Album"("artistId", Name)
SELECT DISTINCT "Artist".id AS ArtistId,
"Scrobble".Album AS Name
FROM "Scrobble"
JOIN "Artist" ON "Scrobble".Artist="Artist".Name;
INSERT INTO "Track"("albumId", name)
SELECT DISTINCT "Album".id, track FROM "Scrobble"
INNER JOIN "Album"
ON "Album".name = "Scrobble".album
INNER JOIN "Artist"
ON "Album"."artistId" = "Artist".id
AND "Scrobble".artist = "Artist".name;
Navigate to http://localhost:3000/graphql
Try some queries like:
{
searchTracks(searchString:"Hello"){
name,
album{
artist {
name
}
}
}
}