From ba2dda744893ea6b4723ee310b92c3c350986c7d Mon Sep 17 00:00:00 2001 From: Andres Pinto Date: Thu, 12 Sep 2024 19:32:32 -0400 Subject: [PATCH] feat: removed functions --- src/modules/file/file.repository.ts | 56 ++-------------- src/modules/file/file.usecase.ts | 65 ++----------------- .../dto/files-existence-in-folder.dto.spec.ts | 2 +- .../dto/files-existence-in-folder.dto.ts | 2 +- src/modules/folder/folder.controller.spec.ts | 6 +- src/modules/folder/folder.controller.ts | 4 +- 6 files changed, 15 insertions(+), 120 deletions(-) diff --git a/src/modules/file/file.repository.ts b/src/modules/file/file.repository.ts index ea1163ac..5846d594 100644 --- a/src/modules/file/file.repository.ts +++ b/src/modules/file/file.repository.ts @@ -43,8 +43,8 @@ export interface FileRepository { where: Partial>, nameFilter: Pick, ): Promise; - findFileByFolderUuid( - folderUuid: Folder['uuid'], + findFilesInFolderByName( + folderId: Folder['uuid'], searchBy: { plainName: File['plainName']; type?: File['type'] }[], ): Promise; findByNameAndFolderUuid( @@ -73,16 +73,6 @@ export interface FileRepository { userId: FileAttributes['userId'], update: Partial, ): Promise; - findFilesWithPagination( - folderUuid: Folder['uuid'], - limit: number, - page: number, - ): Promise<{ - files: File[]; - totalPages: number; - currentPage: number; - nextPage: number | null; - }>; getFilesWhoseFolderIdDoesNotExist(userId: File['userId']): Promise; getFilesCountWhere(where: Partial): Promise; updateFilesStatusToTrashed( @@ -546,12 +536,12 @@ export class SequelizeFileRepository implements FileRepository { return file ? this.toDomain(file) : null; } - async findFileByFolderUuid( - folderUuid: Folder['uuid'], + async findFilesInFolderByName( + folderId: Folder['uuid'], searchFilter: { plainName: File['plainName']; type?: File['type'] }[], ): Promise { const where: WhereOptions = { - folderUuid, + folderUuid: folderId, status: FileStatus.EXISTS, }; @@ -569,42 +559,6 @@ export class SequelizeFileRepository implements FileRepository { return files.map(this.toDomain.bind(this)); } - async findFilesWithPagination( - folderUuid: Folder['uuid'], - limit: number, - page: number, - ): Promise<{ - files: File[]; - totalPages: number; - currentPage: number; - nextPage: number | null; - }> { - const offset = (page - 1) * limit; - - const result = await this.fileModel.findAndCountAll({ - where: { - folderUuid, - status: FileStatus.EXISTS, - }, - limit, - offset, - order: [['id', 'ASC']], - }); - - const { count, rows } = result; - - const totalPages = Math.ceil(count / limit); - - const nextPage = page < totalPages ? page + 1 : null; - - return { - files: rows.map(this.toDomain.bind(this)), - totalPages, - currentPage: page, - nextPage, - }; - } - async updateByFieldIdAndUserId( fileId: FileAttributes['fileId'], userId: FileAttributes['userId'], diff --git a/src/modules/file/file.usecase.ts b/src/modules/file/file.usecase.ts index 1b880c03..305fd4d8 100644 --- a/src/modules/file/file.usecase.ts +++ b/src/modules/file/file.usecase.ts @@ -148,67 +148,10 @@ export class FileUseCases { folder: Folder, searchFilter: { plainName: File['plainName']; type?: File['type'] }[], ): Promise { - return this.fileRepository.findFileByFolderUuid(folder.uuid, searchFilter); - } - - async findFilesWithPagination( - folderUuid: Folder['uuid'], - limit: number, - page: number, - ) { - return this.fileRepository.findFilesWithPagination(folderUuid, limit, page); - } - - async checkMultipleFilesExistence( - folderUuid: Folder['uuid'], - dtoFiles: { plainName: string; type?: string }[], - ): Promise { - const limit = 1000; - let page = 1; - const allExistentFiles: File[] = []; - let nextPage: number | null = null; - - let remainingFiles = [...dtoFiles]; - - do { - const { files, nextPage: newNextPage } = - await this.findFilesWithPagination(folderUuid, limit, page); - - const matchingFiles = files.filter((file) => - remainingFiles.some( - (dtoFile) => - file.plainName === dtoFile.plainName && - (!dtoFile.type || file.type === dtoFile.type), - ), - ); - - allExistentFiles.push(...matchingFiles); - - remainingFiles = remainingFiles.filter( - (dtoFile) => - !matchingFiles.some( - (file) => - file.plainName === dtoFile.plainName && - (!dtoFile.type || file.type === dtoFile.type), - ), - ); - - if (remainingFiles.length === 0) { - break; - } - - nextPage = newNextPage; - page++; - } while (nextPage); - - return allExistentFiles; - } - - async getFilesInFolder( - folder: Folder, - searchFilter: { plainName: File['plainName']; type?: File['type'] }[], - ): Promise { - return this.fileRepository.findFileByFolderUuid(folder.uuid, searchFilter); + return this.fileRepository.findFilesInFolderByName( + folder.uuid, + searchFilter, + ); } async updateFileMetaData( diff --git a/src/modules/folder/dto/files-existence-in-folder.dto.spec.ts b/src/modules/folder/dto/files-existence-in-folder.dto.spec.ts index dc1143bf..89956b99 100644 --- a/src/modules/folder/dto/files-existence-in-folder.dto.spec.ts +++ b/src/modules/folder/dto/files-existence-in-folder.dto.spec.ts @@ -26,7 +26,7 @@ describe('CheckFileExistenceInFolderDto', () => { }); it('When files array exceeds max size, then it should fail', async () => { - const files = Array.from({ length: 1991 }, (_, i) => ({ + const files = Array.from({ length: 201 }, (_, i) => ({ plainName: `file${i + 1}`, type: 'txt', })); diff --git a/src/modules/folder/dto/files-existence-in-folder.dto.ts b/src/modules/folder/dto/files-existence-in-folder.dto.ts index 4dff8ebd..0001d989 100644 --- a/src/modules/folder/dto/files-existence-in-folder.dto.ts +++ b/src/modules/folder/dto/files-existence-in-folder.dto.ts @@ -35,7 +35,7 @@ export class CheckFileExistenceInFolderDto { description: 'Array of files with names and types', }) @ArrayMinSize(1) - @ArrayMaxSize(1000) + @ArrayMaxSize(200) @ValidateNested() @Type(() => FilesNameAndType) files: FilesNameAndType[]; diff --git a/src/modules/folder/folder.controller.spec.ts b/src/modules/folder/folder.controller.spec.ts index 9c6b463e..da7d9257 100644 --- a/src/modules/folder/folder.controller.spec.ts +++ b/src/modules/folder/folder.controller.spec.ts @@ -431,7 +431,7 @@ describe('FolderController', () => { .spyOn(folderUseCases, 'getFolderByUuidAndUser') .mockResolvedValue(parentFolder); jest - .spyOn(fileUseCases, 'checkMultipleFilesExistence') + .spyOn(fileUseCases, 'searchFilesInFolder') .mockResolvedValue(mockFiles); const result = await folderController.checkFilesExistenceInFolder( @@ -449,9 +449,7 @@ describe('FolderController', () => { jest .spyOn(folderUseCases, 'getFolderByUuidAndUser') .mockResolvedValue(parentFolder); - jest - .spyOn(fileUseCases, 'checkMultipleFilesExistence') - .mockResolvedValue([]); + jest.spyOn(fileUseCases, 'searchFilesInFolder').mockResolvedValue([]); const result = await folderController.checkFilesExistenceInFolder( user, diff --git a/src/modules/folder/folder.controller.ts b/src/modules/folder/folder.controller.ts index 16979077..abbf506f 100644 --- a/src/modules/folder/folder.controller.ts +++ b/src/modules/folder/folder.controller.ts @@ -410,8 +410,8 @@ export class FolderController { throw new InvalidParentFolderException('Parent folder not valid!'); } - const files = await this.fileUseCases.checkMultipleFilesExistence( - parentFolder.uuid, + const files = await this.fileUseCases.searchFilesInFolder( + parentFolder, query.files, );