|
@@ -37,16 +37,6 @@ export class UpdateExistingItem implements UseCaseInterface<Item> {
|
|
) {}
|
|
) {}
|
|
|
|
|
|
async execute(dto: UpdateExistingItemDTO): Promise<Result<Item>> {
|
|
async execute(dto: UpdateExistingItemDTO): Promise<Result<Item>> {
|
|
- let sessionUuid = null
|
|
|
|
- if (dto.sessionUuid) {
|
|
|
|
- const sessionUuidOrError = Uuid.create(dto.sessionUuid)
|
|
|
|
- if (sessionUuidOrError.isFailed()) {
|
|
|
|
- return Result.fail(sessionUuidOrError.getError())
|
|
|
|
- }
|
|
|
|
- sessionUuid = sessionUuidOrError.getValue()
|
|
|
|
- }
|
|
|
|
- dto.existingItem.props.updatedWithSession = sessionUuid
|
|
|
|
-
|
|
|
|
const userUuidOrError = Uuid.create(dto.performingUserUuid)
|
|
const userUuidOrError = Uuid.create(dto.performingUserUuid)
|
|
if (userUuidOrError.isFailed()) {
|
|
if (userUuidOrError.isFailed()) {
|
|
return Result.fail(userUuidOrError.getError())
|
|
return Result.fail(userUuidOrError.getError())
|
|
@@ -59,6 +49,29 @@ export class UpdateExistingItem implements UseCaseInterface<Item> {
|
|
}
|
|
}
|
|
const roleNames = roleNamesOrError.getValue()
|
|
const roleNames = roleNamesOrError.getValue()
|
|
|
|
|
|
|
|
+ let sharedVaultOperation: SharedVaultOperationOnItem | null = null
|
|
|
|
+ if (dto.itemHash.representsASharedVaultItem() || dto.existingItem.isAssociatedWithASharedVault()) {
|
|
|
|
+ const sharedVaultOperationOrError = await this.determineSharedVaultOperationOnItem.execute({
|
|
|
|
+ existingItem: dto.existingItem,
|
|
|
|
+ itemHash: dto.itemHash,
|
|
|
|
+ userUuid: userUuid.value,
|
|
|
|
+ })
|
|
|
|
+ if (sharedVaultOperationOrError.isFailed()) {
|
|
|
|
+ return Result.fail(sharedVaultOperationOrError.getError())
|
|
|
|
+ }
|
|
|
|
+ sharedVaultOperation = sharedVaultOperationOrError.getValue()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let sessionUuid = null
|
|
|
|
+ if (dto.sessionUuid) {
|
|
|
|
+ const sessionUuidOrError = Uuid.create(dto.sessionUuid)
|
|
|
|
+ if (sessionUuidOrError.isFailed()) {
|
|
|
|
+ return Result.fail(sessionUuidOrError.getError())
|
|
|
|
+ }
|
|
|
|
+ sessionUuid = sessionUuidOrError.getValue()
|
|
|
|
+ }
|
|
|
|
+ dto.existingItem.props.updatedWithSession = sessionUuid
|
|
|
|
+
|
|
if (dto.itemHash.props.content) {
|
|
if (dto.itemHash.props.content) {
|
|
dto.existingItem.props.content = dto.itemHash.props.content
|
|
dto.existingItem.props.content = dto.itemHash.props.content
|
|
}
|
|
}
|
|
@@ -128,7 +141,6 @@ export class UpdateExistingItem implements UseCaseInterface<Item> {
|
|
|
|
|
|
dto.existingItem.props.contentSize = Buffer.byteLength(JSON.stringify(dto.existingItem))
|
|
dto.existingItem.props.contentSize = Buffer.byteLength(JSON.stringify(dto.existingItem))
|
|
|
|
|
|
- let sharedVaultOperation: SharedVaultOperationOnItem | null = null
|
|
|
|
if (dto.itemHash.representsASharedVaultItem()) {
|
|
if (dto.itemHash.representsASharedVaultItem()) {
|
|
const sharedVaultAssociationOrError = SharedVaultAssociation.create({
|
|
const sharedVaultAssociationOrError = SharedVaultAssociation.create({
|
|
lastEditedBy: userUuid,
|
|
lastEditedBy: userUuid,
|
|
@@ -140,16 +152,6 @@ export class UpdateExistingItem implements UseCaseInterface<Item> {
|
|
}
|
|
}
|
|
|
|
|
|
dto.existingItem.props.sharedVaultAssociation = sharedVaultAssociationOrError.getValue()
|
|
dto.existingItem.props.sharedVaultAssociation = sharedVaultAssociationOrError.getValue()
|
|
-
|
|
|
|
- const sharedVaultOperationOrError = await this.determineSharedVaultOperationOnItem.execute({
|
|
|
|
- existingItem: dto.existingItem,
|
|
|
|
- itemHash: dto.itemHash,
|
|
|
|
- userUuid: userUuid.value,
|
|
|
|
- })
|
|
|
|
- if (sharedVaultOperationOrError.isFailed()) {
|
|
|
|
- return Result.fail(sharedVaultOperationOrError.getError())
|
|
|
|
- }
|
|
|
|
- sharedVaultOperation = sharedVaultOperationOrError.getValue()
|
|
|
|
} else {
|
|
} else {
|
|
dto.existingItem.props.sharedVaultAssociation = undefined
|
|
dto.existingItem.props.sharedVaultAssociation = undefined
|
|
}
|
|
}
|
|
@@ -209,7 +211,7 @@ export class UpdateExistingItem implements UseCaseInterface<Item> {
|
|
)
|
|
)
|
|
}
|
|
}
|
|
|
|
|
|
- const notificationsResult = await this.addNotifications(dto.existingItem.uuid, userUuid, sharedVaultOperation)
|
|
|
|
|
|
+ const notificationsResult = await this.addNotificationsAndPublishEvents(userUuid, sharedVaultOperation, dto)
|
|
if (notificationsResult.isFailed()) {
|
|
if (notificationsResult.isFailed()) {
|
|
return Result.fail(notificationsResult.getError())
|
|
return Result.fail(notificationsResult.getError())
|
|
}
|
|
}
|
|
@@ -217,10 +219,10 @@ export class UpdateExistingItem implements UseCaseInterface<Item> {
|
|
return Result.ok(dto.existingItem)
|
|
return Result.ok(dto.existingItem)
|
|
}
|
|
}
|
|
|
|
|
|
- private async addNotifications(
|
|
|
|
- itemUuid: Uuid,
|
|
|
|
|
|
+ private async addNotificationsAndPublishEvents(
|
|
userUuid: Uuid,
|
|
userUuid: Uuid,
|
|
sharedVaultOperation: SharedVaultOperationOnItem | null,
|
|
sharedVaultOperation: SharedVaultOperationOnItem | null,
|
|
|
|
+ dto: UpdateExistingItemDTO,
|
|
): Promise<Result<void>> {
|
|
): Promise<Result<void>> {
|
|
if (
|
|
if (
|
|
sharedVaultOperation &&
|
|
sharedVaultOperation &&
|
|
@@ -229,7 +231,7 @@ export class UpdateExistingItem implements UseCaseInterface<Item> {
|
|
const notificationPayloadOrError = NotificationPayload.create({
|
|
const notificationPayloadOrError = NotificationPayload.create({
|
|
sharedVaultUuid: sharedVaultOperation.props.sharedVaultUuid,
|
|
sharedVaultUuid: sharedVaultOperation.props.sharedVaultUuid,
|
|
type: NotificationType.create(NotificationType.TYPES.SharedVaultItemRemoved).getValue(),
|
|
type: NotificationType.create(NotificationType.TYPES.SharedVaultItemRemoved).getValue(),
|
|
- itemUuid: itemUuid,
|
|
|
|
|
|
+ itemUuid: dto.existingItem.uuid,
|
|
version: '1.0',
|
|
version: '1.0',
|
|
})
|
|
})
|
|
if (notificationPayloadOrError.isFailed()) {
|
|
if (notificationPayloadOrError.isFailed()) {
|
|
@@ -246,6 +248,15 @@ export class UpdateExistingItem implements UseCaseInterface<Item> {
|
|
if (result.isFailed()) {
|
|
if (result.isFailed()) {
|
|
return Result.fail(result.getError())
|
|
return Result.fail(result.getError())
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ await this.domainEventPublisher.publish(
|
|
|
|
+ this.domainEventFactory.createItemRemovedFromSharedVaultEvent({
|
|
|
|
+ sharedVaultUuid: sharedVaultOperation.props.sharedVaultUuid.value,
|
|
|
|
+ itemUuid: dto.existingItem.uuid.value,
|
|
|
|
+ userUuid: userUuid.value,
|
|
|
|
+ roleNames: dto.roleNames,
|
|
|
|
+ }),
|
|
|
|
+ )
|
|
}
|
|
}
|
|
|
|
|
|
if (sharedVaultOperation && sharedVaultOperation.props.type === SharedVaultOperationOnItem.TYPES.AddToSharedVault) {
|
|
if (sharedVaultOperation && sharedVaultOperation.props.type === SharedVaultOperationOnItem.TYPES.AddToSharedVault) {
|