From 24bd4ee82b36dfeb0461ddd45675669ccdf3af50 Mon Sep 17 00:00:00 2001 From: Gbuntu Date: Thu, 9 Nov 2023 10:16:35 +0330 Subject: [PATCH] more automation for new children --- package.json | 1 + src/features/children/children.controller.ts | 114 +++++++++++++++++- src/features/download/download.controller.ts | 16 +-- src/features/download/download.service.ts | 24 +++- .../midjourney/midjourney.controller.ts | 4 +- src/features/ngo/ngo.service.ts | 7 ++ src/features/wallet/wallet.service.ts | 2 - src/resources/names.xlsx | Bin 0 -> 76702 bytes src/storage/avatarStorage.ts | 19 +-- src/utils/file.ts | 7 +- src/utils/helpers.ts | 4 + 11 files changed, 169 insertions(+), 29 deletions(-) create mode 100644 src/resources/names.xlsx diff --git a/package.json b/package.json index abc8b4712..0a529cfde 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "pg": "^8.8.0", "pino-http": "^8.2.0", "portable-fetch": "^3.0.0", + "read-excel-file": "^5.7.1", "reflect-metadata": "0.1.13", "rimraf": "^5.0.5", "rxjs": "^7.8.1", diff --git a/src/features/children/children.controller.ts b/src/features/children/children.controller.ts index df5d1ff52..f1852a160 100644 --- a/src/features/children/children.controller.ts +++ b/src/features/children/children.controller.ts @@ -50,8 +50,14 @@ import { NgoEntity } from 'src/entities/ngo.entity'; import { SyncService } from '../sync/sync.service'; import { LocationEntity } from 'src/entities/location.entity'; import { NgoParams } from 'src/types/parameters/NgoParammeters'; -import { formatDate, truncateString } from 'src/utils/helpers'; +import { + captilizeFirstLetter as capitalizeFirstLetter, + truncateString, +} from 'src/utils/helpers'; import axios from 'axios'; +import { AllUserEntity } from 'src/entities/user.entity'; +import { checkIfFileOrDirectoryExists, moveFile } from 'src/utils/file'; +import fs from 'fs'; @ApiTags('Children') @ApiSecurity('flask-access-token') @@ -308,6 +314,50 @@ export class ChildrenController { if (!files) { throw new ServerError('No files were uploaded!'); } + // for local purposes - organized folders and files + const newChildFolder = `../../Docs/children${ + SexEnum.MALE ? '/boys/' : '/girls/' + }organized/${capitalizeFirstLetter(body.sayNameEn)}-${body.sayNameFa}`; + + const originalAwakeGirl = `../../Docs/children/girls/${ + files.awakeFile[0].filename.split('-s-')[0] + }.png`; + const originalAwakeBoy = `../../Docs/children/boys/${ + files.awakeFile[0].filename.split('-s-')[0] + }.png`; + const originalSleptGirl = `../../Docs/children/girls/${ + files.sleptFile[0].filename.split('-s-')[0] + }.png`; + const originalSleptBoy = `../../Docs/children/boys/${ + files.sleptFile[0].filename.split('-s-')[0] + }.png`; + + const newAwakeName = `awake-${body.sayNameEn.toLowerCase()}.png`; + const newSleepName = `sleep-${body.sayNameEn.toLowerCase()}.png`; + + console.log(originalAwakeBoy); + + if ( + checkIfFileOrDirectoryExists(originalAwakeGirl) || + checkIfFileOrDirectoryExists(originalAwakeBoy) + ) { + if (!checkIfFileOrDirectoryExists(newChildFolder)) { + fs.mkdirSync(newChildFolder); + } + if (Number(body.sex) === SexEnum.MALE) { + moveFile(originalAwakeBoy, `${newChildFolder}/${newAwakeName}`); + moveFile(originalSleptBoy, `${newChildFolder}/${newSleepName}`); + } + if (Number(body.sex) === SexEnum.FEMALE) { + moveFile(originalSleptGirl, `${newChildFolder}/${newAwakeName}`); + moveFile( + originalSleptGirl, + `${newChildFolder}/sleep-${body.sayNameFa}.png`, + ); + } + } else { + throw new ServerError('could not find the file'); + } return await this.childrenService.createPreRegisterChild( files.awakeFile[0].filename, @@ -393,11 +443,48 @@ export class ChildrenController { console.log('\x1b[36m%s\x1b[0m', 'Created a Location ...'); } const ngo = await this.ngoService.getNgoById(Number(body.ngoId)); - const sw = await this.userService.getContributorByFlaskId( + + let nestSocialWorker: AllUserEntity; + let swNgo: NgoEntity; + + nestSocialWorker = await this.userService.getContributorByFlaskId( Number(body.swId), PanelContributors.SOCIAL_WORKER, ); + if (!nestSocialWorker) { + const flaskSocialWorker = await this.userService.getFlaskSocialWorker( + body.swId, + ); + + const swDetails = { + typeId: flaskSocialWorker.type_id, + firstName: flaskSocialWorker.firstName, + lastName: flaskSocialWorker.lastName, + avatarUrl: flaskSocialWorker.avatar_url, + flaskUserId: flaskSocialWorker.id, + birthDate: + flaskSocialWorker.birth_date && + new Date(flaskSocialWorker.birth_date), + panelRole: PanelContributors.SOCIAL_WORKER, + userName: flaskSocialWorker.userName, + }; + + swNgo = await this.syncService.syncContributorNgo(flaskSocialWorker); + console.log('\x1b[36m%s\x1b[0m', 'Creating a Social Worker ...\n'); + nestSocialWorker = await this.userService.createContributor( + swDetails, + swNgo, + ); + console.log('\x1b[36m%s\x1b[0m', 'Created a Social Worker ...\n'); + } + + const contributor = nestSocialWorker.contributions.find( + (c) => c.flaskUserId === Number(body.swId), + ); + if (!nestSocialWorker || !ngo || !contributor) { + throw new ServerError('This social worker has not contributed yet'); + } return await this.childrenService.updatePreRegisterChild( candidate.id, { @@ -423,7 +510,7 @@ export class ChildrenController { }, location, ngo, - sw.contributions.find((c) => c.flaskUserId === body.swId), + contributor, ); } catch (e) { throw new ServerError(e); @@ -448,12 +535,11 @@ export class ChildrenController { throw new ForbiddenException(403, 'You Are not the Super admin'); } let ngoIds: number[]; - if ( panelFlaskTypeId === FlaskUserTypesEnum.ADMIN || panelFlaskTypeId === FlaskUserTypesEnum.SUPER_ADMIN ) { - ngoIds = (await this.ngoService.getFlaskNgos()).map((n) => n.id); + ngoIds = (await this.ngoService.getAllFlaskNgos()).map((n) => n.id); if (Number(status) === PreRegisterStatusEnum.NOT_REGISTERED) { return await this.childrenService.getChildrenPreRegisterNotRegistered( { @@ -549,6 +635,23 @@ export class ChildrenController { }; } + @Get(`generate/say/names`) + @ApiOperation({ description: 'Get all children from db' }) + async generateNames(@Req() req: Request) { + const panelFlaskUserId = req.headers['panelFlaskUserId']; + const panelFlaskTypeId = req.headers['panelFlaskTypeId']; + if ( + !isAuthenticated(panelFlaskUserId, panelFlaskTypeId) && + !( + panelFlaskTypeId === FlaskUserTypesEnum.SUPER_ADMIN || + panelFlaskTypeId === FlaskUserTypesEnum.ADMIN + ) + ) { + throw new ForbiddenException(403, 'You Are not the Super admin'); + } + return await this.downloadService.excelStream('src/resources/names.xlsx'); + } + @UseInterceptors(ChildrenInterceptor) @Post(`flask/all`) @ApiOperation({ description: 'Get all flask children from db' }) @@ -847,7 +950,6 @@ export class ChildrenController { ); console.log('\x1b[36m%s\x1b[0m`, `Created a Social Worker ...\n'); } - console.log(child.id_ngo); if (!nestSocialWorker) { throw new ServerError('we need the sw'); diff --git a/src/features/download/download.controller.ts b/src/features/download/download.controller.ts index 0081567a7..c81f79516 100644 --- a/src/features/download/download.controller.ts +++ b/src/features/download/download.controller.ts @@ -4,6 +4,7 @@ import { ForbiddenException, Get, Param, + Query, Req, Res, StreamableFile, @@ -43,15 +44,15 @@ export class DownloadController { ) { throw new ForbiddenException(403, 'You Are not the Super admin'); } - const file = await this.downloadService.imageBuffer(path); + const file = await this.downloadService.imageReadBuffer(path); response.contentType('image/png'); response.send(file); } - @Get('stream/:path') + @Get('stream') async stream( @Req() req: Request, - @Param('path') path: string, + @Query('path') path: string, @Res() response: Response, ) { const panelFlaskUserId = req.headers['panelFlaskUserId']; @@ -66,8 +67,8 @@ export class DownloadController { file.pipe(response); } - @Get('streamable/:path') - async streamable(@Param('path') path: string, @Req() req: Request) { + @Get('streamable') + async streamable(@Query('path') path: string, @Req() req: Request) { const panelFlaskUserId = req.headers['panelFlaskUserId']; const panelFlaskTypeId = req.headers['panelFlaskTypeId']; if ( @@ -77,9 +78,10 @@ export class DownloadController { throw new ForbiddenException(403, 'You Are not the Super admin'); } const file = await this.downloadService.fileStream(path); - // or - // const file = this.downloadService.fileBuffer(); return new StreamableFile(file); // 👈 supports Buffer and Stream + // or + // const file = this.downloadService.fileBuffer(path); + // return file } @Get('streamable2/:flaskNeedId') diff --git a/src/features/download/download.service.ts b/src/features/download/download.service.ts index 67768845b..888d464b6 100644 --- a/src/features/download/download.service.ts +++ b/src/features/download/download.service.ts @@ -5,20 +5,40 @@ import { join } from 'path'; import { createWriteStream } from 'fs'; import axios from 'axios'; import { Readable } from 'stream'; -import { createFile } from 'src/utils/file'; import { prepareUrl } from 'src/utils/helpers'; import { ServerError } from 'src/filters/server-exception.filter'; import mime from 'mime'; import fs from 'fs'; import { WalletExceptionFilter } from 'src/filters/wallet-exception.filter'; import { File } from '@web-std/file'; +import readXlsxFile from 'read-excel-file/node'; @Injectable() export class DownloadService { private readonly logger = new Logger(DownloadService.name); constructor(private httpService: HttpService) {} - async imageBuffer(fileName: string) { + // Excel + async excelReadBuffer(path: string) { + // `rows` is an array of rows + // each row being an array of cells. + return readXlsxFile(path); + } + + async excelStream(path: string) { + // `rows` is an array of rows + // each row being an array of cells. + return readXlsxFile(fs.createReadStream(path)); + } + + async excelFileBuffer(path: string) { + // `rows` is an array of rows + // each row being an array of cells. + return readXlsxFile(Buffer.from(fs.readFileSync(path))); + } + + // image and files + async imageReadBuffer(fileName: string) { return readFileSync(join(process.cwd(), fileName)); } diff --git a/src/features/midjourney/midjourney.controller.ts b/src/features/midjourney/midjourney.controller.ts index afb631e59..aeef68d84 100644 --- a/src/features/midjourney/midjourney.controller.ts +++ b/src/features/midjourney/midjourney.controller.ts @@ -139,7 +139,7 @@ export class MidjourneyController { return { totalReady: needsWithSignatures.meta.totalItems, total: count, - list, + list, }; } @@ -165,7 +165,7 @@ export class MidjourneyController { throw new ForbiddenException(403, 'You Are not the Super admin'); } const theImage = await this.midjourneyService.getImage(flaskNeedId); - const file = await this.downloadService.imageBuffer(theImage.fileName); + const file = await this.downloadService.imageReadBuffer(theImage.fileName); response.contentType('image/png'); response.send(file); } diff --git a/src/features/ngo/ngo.service.ts b/src/features/ngo/ngo.service.ts index 12b31efff..b2a1eb818 100644 --- a/src/features/ngo/ngo.service.ts +++ b/src/features/ngo/ngo.service.ts @@ -163,6 +163,13 @@ export class NgoService { .getMany(); } + getAllFlaskNgos(): Promise { + return this.ngoFlaskRepository + .createQueryBuilder('ngo') + .cache(10000) + .getMany(); + } + getFlaskNgo(flaskNgoId: number): Promise { return this.ngoFlaskRepository.findOne({ where: { id: flaskNgoId }, diff --git a/src/features/wallet/wallet.service.ts b/src/features/wallet/wallet.service.ts index 394f782f5..3b40e9d4b 100644 --- a/src/features/wallet/wallet.service.ts +++ b/src/features/wallet/wallet.service.ts @@ -188,8 +188,6 @@ export class WalletService { }; let role: string; const allRoles = []; -console.log(need); -console.log(flaskUserId); // could have multiple roles e.g. [Auditor, SocialWorker] if (needRoles.socialWorker === flaskUserId) { diff --git a/src/resources/names.xlsx b/src/resources/names.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a405f7a4f510888fefdda3da2d11aa4153889df3 GIT binary patch literal 76702 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

7Pn%nTR*M`< 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 { - const fileName: string = path.parse(file.originalname).name.replace(/\s/g, '') + uuid() // unique id - const extension: string = path.parse(file.originalname).ext - return cb(null, `${fileName}${extension}`) - } - }) -} \ No newline at end of file + storage: diskStorage({ + destination: './uploads/children/avatars', + filename: (req, file, cb) => { + const fileName: string = + path.parse(file.originalname).name.replace(/\s/g, '') + '-s-' + uuid(); // unique id + const extension: string = path.parse(file.originalname).ext; + return cb(null, `${fileName}${extension}`); + }, + }), +}; diff --git a/src/utils/file.ts b/src/utils/file.ts index 9cc324ead..3f024ff0e 100644 --- a/src/utils/file.ts +++ b/src/utils/file.ts @@ -42,11 +42,12 @@ export const getFile = async ( export const createFile = async ( path: string, fileName: string, - data: string, + data: string | NodeJS.ArrayBufferView, ): Promise => { if (!checkIfFileOrDirectoryExists(path)) { fs.mkdirSync(path); } + console.log(`${path}/${fileName}`); const writeFile = promisify(fs.writeFile); return await writeFile(`${path}/${fileName}`, data, 'utf8'); @@ -64,3 +65,7 @@ export const deleteFile = async (path: string): Promise => { return await unlink(path); }; + +export const moveFile = async (oldPath: string, newPath: string) => { + fs.rename(oldPath, newPath, () => console.log('Moved a file...')); +}; diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 111390ee0..fb108eec0 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -899,3 +899,7 @@ export function shuffleArray(array: any[]) { return array; } + +export function captilizeFirstLetter(word: string) { + return word.charAt(0).toUpperCase() + word.slice(1); +}