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

fix: improve user update logic in refreshProfile to check for changes before updating

+19 -11
+19 -11
apps/api/src/xrpc/app/rocksky/actor/getProfile.ts
··· 268 268 .execute(); 269 269 profile.user = users[0]; 270 270 } else { 271 - // Update existing user in background 272 - profile.ctx.db 273 - .update(tables.users) 274 - .set({ 275 - handle, 276 - avatar: `https://cdn.bsky.app/img/avatar/plain/${profile.did}/${_.get(profile, "profileRecord.value.avatar.ref", "").toString()}@jpeg`, 277 - displayName: _.get(profile, "profileRecord.value.displayName"), 278 - updatedAt: new Date(), 279 - }) 280 - .where(eq(tables.users.id, profile.user.id)) 281 - .execute(); 271 + // Update existing user in background if handle or avatar or displayName changed 272 + if ( 273 + profile.user.handle !== handle || 274 + profile.user.avatar !== 275 + `https://cdn.bsky.app/img/avatar/plain/${profile.did}/${_.get(profile, "profileRecord.value.avatar.ref", "").toString()}@jpeg` || 276 + profile.user.displayName !== 277 + _.get(profile, "profileRecord.value.displayName") 278 + ) { 279 + profile.ctx.db 280 + .update(tables.users) 281 + .set({ 282 + handle, 283 + avatar: `https://cdn.bsky.app/img/avatar/plain/${profile.did}/${_.get(profile, "profileRecord.value.avatar.ref", "").toString()}@jpeg`, 284 + displayName: _.get(profile, "profileRecord.value.displayName"), 285 + updatedAt: new Date(), 286 + }) 287 + .where(eq(tables.users.id, profile.user.id)) 288 + .execute(); 289 + } 282 290 } 283 291 284 292 return [