/express-graphql-demo

Demo of Express + Prisma + GraphQL + PostgreSQL TypeScript + Docker with Last.FM data

Primary LanguageTypeScript

GraphQL Demo with Last.FM Data

(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

Initial db setup

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

Import From Last.FM

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
        }
      }
    }
  }