diff --git a/src/modules/atproto/infrastructure/mappers/CollectionLinkMapper.ts b/src/modules/atproto/infrastructure/mappers/CollectionLinkMapper.ts index 5f545ed9..8bfa9f04 100644 --- a/src/modules/atproto/infrastructure/mappers/CollectionLinkMapper.ts +++ b/src/modules/atproto/infrastructure/mappers/CollectionLinkMapper.ts @@ -9,7 +9,7 @@ export class CollectionLinkMapper { link: CardLink, collectionRecord: PublishedRecordIdProps, cardRecord: PublishedRecordIdProps, - originalCardRecord: PublishedRecordIdProps, + originalCardRecord?: PublishedRecordIdProps, ): CollectionLinkRecordDTO { return { $type: 'network.cosmik.collectionLink', @@ -21,10 +21,12 @@ export class CollectionLinkMapper { uri: cardRecord.uri, cid: cardRecord.cid, }, - originalCard: { - uri: originalCardRecord.uri, - cid: originalCardRecord.cid, - }, + originalCard: originalCardRecord + ? { + uri: originalCardRecord.uri, + cid: originalCardRecord.cid, + } + : undefined, addedBy: link.addedBy.value, addedAt: link.addedAt.toISOString(), createdAt: new Date().toISOString(), diff --git a/src/modules/atproto/infrastructure/publishers/ATProtoCollectionPublisher.ts b/src/modules/atproto/infrastructure/publishers/ATProtoCollectionPublisher.ts index e1a73624..9e13de81 100644 --- a/src/modules/atproto/infrastructure/publishers/ATProtoCollectionPublisher.ts +++ b/src/modules/atproto/infrastructure/publishers/ATProtoCollectionPublisher.ts @@ -3,7 +3,10 @@ import { Collection } from 'src/modules/cards/domain/Collection'; import { Card } from 'src/modules/cards/domain/Card'; import { Result, ok, err } from 'src/shared/core/Result'; import { UseCaseError } from 'src/shared/core/UseCaseError'; -import { PublishedRecordId } from 'src/modules/cards/domain/value-objects/PublishedRecordId'; +import { + PublishedRecordId, + PublishedRecordIdProps, +} from 'src/modules/cards/domain/value-objects/PublishedRecordId'; import { CuratorId } from 'src/modules/cards/domain/value-objects/CuratorId'; import { CollectionMapper } from '../mappers/CollectionMapper'; import { CollectionLinkMapper } from '../mappers/CollectionLinkMapper'; @@ -150,8 +153,8 @@ export class ATProtoCollectionPublisher implements ICollectionPublisher { } // Get the original published record ID - if (!card.originalPublishedRecordId) { - return err(new Error('Card must have an original published record ID')); + if (!card.publishedRecordId) { + return err(new Error('Card must have a published record ID')); } // Find the card link in the collection @@ -163,11 +166,18 @@ export class ATProtoCollectionPublisher implements ICollectionPublisher { return err(new Error('Card is not linked to this collection')); } + let originalCardRecordId: PublishedRecordIdProps | undefined; + if ( + libraryMembership.publishedRecordId.uri !== card.publishedRecordId.uri + ) { + originalCardRecordId = card.publishedRecordId.getValue(); + } + const linkRecordDTO = CollectionLinkMapper.toCreateRecordDTO( cardLink, collection.publishedRecordId.getValue(), libraryMembership.publishedRecordId.getValue(), - card.originalPublishedRecordId.getValue(), + originalCardRecordId, ); const createResult = await agent.com.atproto.repo.createRecord({