CopyRevisions.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { Result, RoleNameCollection, UseCaseInterface, Uuid } from '@standardnotes/domain-core'
  2. import { Revision } from '../../Revision/Revision'
  3. import { CopyRevisionsDTO } from './CopyRevisionsDTO'
  4. import { RevisionRepositoryResolverInterface } from '../../Revision/RevisionRepositoryResolverInterface'
  5. export class CopyRevisions implements UseCaseInterface<string> {
  6. constructor(private revisionRepositoryResolver: RevisionRepositoryResolverInterface) {}
  7. async execute(dto: CopyRevisionsDTO): Promise<Result<string>> {
  8. const orignalItemUuidOrError = Uuid.create(dto.originalItemUuid)
  9. if (orignalItemUuidOrError.isFailed()) {
  10. return Result.fail<string>(`Could not copy revisions: ${orignalItemUuidOrError.getError()}`)
  11. }
  12. const originalItemUuid = orignalItemUuidOrError.getValue()
  13. const newItemUuidOrError = Uuid.create(dto.newItemUuid)
  14. if (newItemUuidOrError.isFailed()) {
  15. return Result.fail<string>(`Could not copy revisions: ${newItemUuidOrError.getError()}`)
  16. }
  17. const newItemUuid = newItemUuidOrError.getValue()
  18. const roleNamesOrError = RoleNameCollection.create(dto.roleNames)
  19. if (roleNamesOrError.isFailed()) {
  20. return Result.fail(roleNamesOrError.getError())
  21. }
  22. const roleNames = roleNamesOrError.getValue()
  23. const revisionRepository = this.revisionRepositoryResolver.resolve(roleNames)
  24. const revisions = await revisionRepository.findByItemUuid(originalItemUuid)
  25. for (const existingRevision of revisions) {
  26. const revisionCopyOrError = Revision.create({
  27. ...existingRevision.props,
  28. itemUuid: newItemUuid,
  29. })
  30. if (revisionCopyOrError.isFailed()) {
  31. return Result.fail<string>(`Could not create revision copy: ${revisionCopyOrError.getError()}`)
  32. }
  33. const revisionCopy = revisionCopyOrError.getValue()
  34. await revisionRepository.insert(revisionCopy)
  35. }
  36. return Result.ok<string>('Revisions copied')
  37. }
  38. }