Something went wrong. Try again.
A decentralized music tracking and discovery platform built on AT Protocol 🎵 rocksky.app
spotify atproto lastfm musicbrainz scrobbling listenbrainz
Something went wrong. Try again.
1.5 kB · 51 lines
TypeScript
at feat/pgpull
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152import chalk from "chalk";import type { Context } from "context";import { eq } from "drizzle-orm";import _ from "lodash";import { StringCodec } from "nats";import tables from "schema";
export function onNewTrack(ctx: Context) { const sc = StringCodec(); const sub = ctx.nc.subscribe("rocksky.track"); (async () => { for await (const m of sub) { const payload: { track: { xata_id: string }; artist_album: { artist_id: { xata_id: string }; album_id: { xata_id: string }; }; } = JSON.parse(sc.decode(m.data));
const [tracks, artists, albums] = await Promise.all([ ctx.db .select() .from(tables.tracks) .where(eq(tables.tracks.id, payload.track.xata_id)) .execute(), ctx.db .select() .from(tables.artists) .where(eq(tables.artists.id, payload.artist_album.artist_id.xata_id)) .execute(), ctx.db .select() .from(tables.albums) .where(eq(tables.albums.id, payload.artist_album.album_id.xata_id)) .execute(), ]);
console.log(`New track: ${chalk.cyan(_.get(tracks, "0.title"))}`);
await Promise.all([ ctx.meilisearch.post(`indexes/albums/documents?primaryKey=id`, albums), ctx.meilisearch.post( `indexes/artists/documents?primaryKey=id`, artists, ), ctx.meilisearch.post(`indexes/tracks/documents?primaryKey=id`, tracks), ]); } })();}