A decentralized music tracking and discovery platform built on AT Protocol 🎵

fix: prevent duplicate scrobbles by checking existing entries before scrobbling

+19
+19
apps/api/src/nowplaying/nowplaying.service.ts
··· 367 367 agent: Agent, 368 368 userDid: string 369 369 ): Promise<void> { 370 + // check if scrobble already exists (user did + timestamp) 371 + if (track.timestamp) { 372 + const existingScrobble = await ctx.client.db.scrobbles 373 + .filter({ 374 + "user_id.did": userDid, 375 + timestamp: track.timestamp, 376 + }) 377 + .getFirst(); 378 + 379 + if (existingScrobble) { 380 + console.log( 381 + `Scrobble already exists for ${chalk.cyan(track.title)} at ${chalk.cyan( 382 + dayjs.unix(track.timestamp).format("YYYY-MM-DD HH:mm:ss") 383 + )}` 384 + ); 385 + return; 386 + } 387 + } 388 + 370 389 let existingTrack = await ctx.client.db.tracks 371 390 .filter( 372 391 "sha256",