diff --git a/.env.example b/.env.example old mode 100644 new mode 100755 diff --git a/.eslintignore b/.eslintignore old mode 100644 new mode 100755 diff --git a/.eslintrc.js b/.eslintrc.js old mode 100644 new mode 100755 diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.husky/commit-msg b/.husky/commit-msg old mode 100644 new mode 100755 index 36158d9..70bd3dd --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1 +1 @@ -npx --no-install commitlint --edit "$1" \ No newline at end of file +npx --no-install commitlint --edit "$1" diff --git a/.husky/pre-commit b/.husky/pre-commit index d0a7784..2312dc5 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +1 @@ -npx lint-staged \ No newline at end of file +npx lint-staged diff --git a/.prettierrc b/.prettierrc old mode 100644 new mode 100755 diff --git a/Dockerfile b/Dockerfile old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/backup_file.dump b/backup_file.dump new file mode 100644 index 0000000..3ab482a Binary files /dev/null and b/backup_file.dump differ diff --git a/commitlint.config.ts b/commitlint.config.ts old mode 100644 new mode 100755 diff --git a/database/connection.ts b/database/connection.ts old mode 100644 new mode 100755 diff --git a/database/data/json/ostan.json b/database/data/json/ostan.json old mode 100644 new mode 100755 diff --git a/database/data/json/shahr.json b/database/data/json/shahr.json old mode 100644 new mode 100755 diff --git a/database/migrations/1740574122421-AddBusinessFieldsToUserSubscription.ts b/database/migrations/1740574122421-AddBusinessFieldsToUserSubscription.ts new file mode 100644 index 0000000..1ce35a6 --- /dev/null +++ b/database/migrations/1740574122421-AddBusinessFieldsToUserSubscription.ts @@ -0,0 +1,73 @@ +import { MigrationInterface, QueryRunner, TableColumn } from "typeorm"; + +export class AddBusinessFieldsToUserSubscription1740574122421 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.addColumns("user_subscription", [ + new TableColumn({ + name: "businessName", + type: "varchar", + length: "250", + isNullable: true, + default: "'Unknown Business'", + }), + new TableColumn({ + name: "businessPhone", + type: "varchar", + length: "50", + isNullable: true, + default: "''", + }), + new TableColumn({ + name: "description", + type: "text", + // length: "250", + isNullable: true, + default: "''", + }), + ]); + + await queryRunner.query( + `UPDATE "user_subscription" SET "businessName" = 'Unknown Business', "businessPhone" = '', "description" = '' WHERE "businessName" IS NULL`, + ); + + await queryRunner.changeColumn( + "user_subscription", + "businessName", + new TableColumn({ + name: "businessName", + type: "varchar", + length: "250", + isNullable: false, + }), + ); + + await queryRunner.changeColumn( + "user_subscription", + "businessPhone", + new TableColumn({ + name: "businessPhone", + type: "varchar", + length: "50", + isNullable: false, + }), + ); + + await queryRunner.changeColumn( + "user_subscription", + "description", + new TableColumn({ + name: "description", + type: "text", + isNullable: false, + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropColumns("user_subscription", [ + new TableColumn({ name: "businessName", type: "varchar" }), + new TableColumn({ name: "businessPhone", type: "varchar" }), + new TableColumn({ name: "description", type: "text" }), + ]); + } +} diff --git a/database/migrations/test.ts b/database/migrations/test.ts deleted file mode 100644 index e69de29..0000000 diff --git a/database/seeder.runner.ts b/database/seeder.runner.ts old mode 100644 new mode 100755 diff --git a/database/seeders/admin.seeder.ts b/database/seeders/admin.seeder.ts old mode 100644 new mode 100755 diff --git a/database/seeders/iran-city.seeder.ts b/database/seeders/iran-city.seeder.ts old mode 100644 new mode 100755 diff --git a/database/seeders/notif-setting.seeder.ts b/database/seeders/notif-setting.seeder.ts old mode 100644 new mode 100755 diff --git a/database/seeders/payment-gateway.seeder.ts b/database/seeders/payment-gateway.seeder.ts old mode 100644 new mode 100755 diff --git a/database/seeders/role.seeder.ts b/database/seeders/role.seeder.ts old mode 100644 new mode 100755 diff --git a/docker-compose.yaml b/docker-compose.yaml old mode 100644 new mode 100755 diff --git a/nest-cli.json b/nest-cli.json old mode 100644 new mode 100755 diff --git a/package.json b/package.json old mode 100644 new mode 100755 index a182ad1..f4b22e1 --- a/package.json +++ b/package.json @@ -113,14 +113,14 @@ "**/*.(t|j)s" ], "coverageDirectory": "../coverage", - "testEnvironment": "node", - "lint-staged": { - "**/*.ts": [ - "pnpm format", - "pnpm lint:fix", - "git add ." - ] - } + "testEnvironment": "node" + }, + "lint-staged": { + "**/*.ts": [ + "pnpm format", + "pnpm lint:fix", + "git add ." + ] }, "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml old mode 100644 new mode 100755 diff --git a/src/app.module.ts b/src/app.module.ts old mode 100644 new mode 100755 diff --git a/src/common/DTO/pagination.dto.ts b/src/common/DTO/pagination.dto.ts old mode 100644 new mode 100755 diff --git a/src/common/DTO/param.dto.ts b/src/common/DTO/param.dto.ts old mode 100644 new mode 100755 diff --git a/src/common/constants/index.ts b/src/common/constants/index.ts old mode 100644 new mode 100755 diff --git a/src/common/decorators/admin.decorator.ts b/src/common/decorators/admin.decorator.ts old mode 100644 new mode 100755 diff --git a/src/common/decorators/auth-guard.decorator.ts b/src/common/decorators/auth-guard.decorator.ts old mode 100644 new mode 100755 diff --git a/src/common/decorators/inject-queue.decorator.ts b/src/common/decorators/inject-queue.decorator.ts old mode 100644 new mode 100755 diff --git a/src/common/decorators/pagination.decorator.ts b/src/common/decorators/pagination.decorator.ts old mode 100644 new mode 100755 diff --git a/src/common/decorators/permission.decorator.ts b/src/common/decorators/permission.decorator.ts old mode 100644 new mode 100755 diff --git a/src/common/decorators/roles.decorator.ts b/src/common/decorators/roles.decorator.ts old mode 100644 new mode 100755 diff --git a/src/common/decorators/user.decorator.ts b/src/common/decorators/user.decorator.ts old mode 100644 new mode 100755 diff --git a/src/common/entities/base.entity.ts b/src/common/entities/base.entity.ts old mode 100644 new mode 100755 diff --git a/src/common/enums/message.enum.ts b/src/common/enums/message.enum.ts old mode 100644 new mode 100755 index e982997..f8f53e8 --- a/src/common/enums/message.enum.ts +++ b/src/common/enums/message.enum.ts @@ -73,8 +73,7 @@ export const enum UserMessage { PROFILE_PIC_REQUIRED = "عکس پروفایل نمی‌تواند خالی باشد", VERIFY_EMAIL_LINK_SENT = "لینک تایید ایمیل به ایمیل شما ارسال شد", EMAIL_VERIFIED = "ایمیل شما تایید شد", - INVALID_EMAIL_TOKEN = "توکن ایمیل نامعتبر است", - EXPIRED_EMAIL_TOKEN = "توکن ایمیل منقضی شده است", + INVALID_EMAIL_TOKEN = "توکن ایمیل نامعتبر است یا منقضی شده است", PHONE_EXIST = "شماره تلفن قبلا ثبت شده است", ADDRESS_REQUIRED = "آدرس نمی‌تواند خالی باشد", ADDRESS_SHOULD_BE_STRING = "آدرس باید یک رشته باشد", @@ -340,6 +339,11 @@ export const enum SubscriptionMessage { SUBS_REQUIRED = "اشتراک مورد نیاز است", SUBS_SHOULD_BE_ARRAY = "اشتراک باید یک آرایه باشد", USER_SUBS_NOT_FOUND = "اشتراک کاربر یافت نشد", + BUSINESS_NAME_REQUIRED = "BUSINESS_NAME_REQUIRED", + BUSINESS_NAME_LENGTH = "BUSINESS_NAME_LENGTH", + BUSINESS_PHONE_INVALID = "BUSINESS_PHONE_INVALID", + DESCRIPTION_LENGTH = "DESCRIPTION_LENGTH", + BUSINESS_NAME_STRING = "BUSINESS_NAME_STRING", } export const enum InvoiceMessage { diff --git a/src/common/interfaces/IPagination.ts b/src/common/interfaces/IPagination.ts old mode 100644 new mode 100755 diff --git a/src/common/queues/worker.processor.ts b/src/common/queues/worker.processor.ts old mode 100644 new mode 100755 diff --git a/src/common/transformers/decimal.transformer.ts b/src/common/transformers/decimal.transformer.ts old mode 100644 new mode 100755 diff --git a/src/configs/bullmq.config.ts b/src/configs/bullmq.config.ts old mode 100644 new mode 100755 diff --git a/src/configs/cache.config.ts b/src/configs/cache.config.ts old mode 100644 new mode 100755 diff --git a/src/configs/http.config.ts b/src/configs/http.config.ts old mode 100644 new mode 100755 diff --git a/src/configs/jwt.config.ts b/src/configs/jwt.config.ts old mode 100644 new mode 100755 diff --git a/src/configs/mailer.config.ts b/src/configs/mailer.config.ts old mode 100644 new mode 100755 diff --git a/src/configs/rateLimit.config.ts b/src/configs/rateLimit.config.ts old mode 100644 new mode 100755 diff --git a/src/configs/s3.config.ts b/src/configs/s3.config.ts old mode 100644 new mode 100755 diff --git a/src/configs/sms.config.ts b/src/configs/sms.config.ts old mode 100644 new mode 100755 diff --git a/src/configs/swagger.config.ts b/src/configs/swagger.config.ts old mode 100644 new mode 100755 diff --git a/src/configs/typeorm.config.ts b/src/configs/typeorm.config.ts old mode 100644 new mode 100755 diff --git a/src/configs/zarinpal.config.ts b/src/configs/zarinpal.config.ts old mode 100644 new mode 100755 diff --git a/src/core/exceptions/http.exceptions.ts b/src/core/exceptions/http.exceptions.ts old mode 100644 new mode 100755 diff --git a/src/core/interceptors/pagination.interceptor.ts b/src/core/interceptors/pagination.interceptor.ts old mode 100644 new mode 100755 diff --git a/src/core/interceptors/response.interceptor.ts b/src/core/interceptors/response.interceptor.ts old mode 100644 new mode 100755 diff --git a/src/core/middlewares/logger.middleware.ts b/src/core/middlewares/logger.middleware.ts old mode 100644 new mode 100755 diff --git a/src/main.ts b/src/main.ts old mode 100644 new mode 100755 diff --git a/src/modules/address/DTO/cities-search-query.dto.ts b/src/modules/address/DTO/cities-search-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/address/DTO/provinces-search-query.dto.ts b/src/modules/address/DTO/provinces-search-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/address/address.controller.ts b/src/modules/address/address.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/address/address.module.ts b/src/modules/address/address.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/address/entities/address.entity.ts b/src/modules/address/entities/address.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/address/entities/city.entity.ts b/src/modules/address/entities/city.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/address/entities/province.entity.ts b/src/modules/address/entities/province.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/address/providers/address.service.ts b/src/modules/address/providers/address.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/address/repositories/address.repository.ts b/src/modules/address/repositories/address.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/address/repositories/city.repository.ts b/src/modules/address/repositories/city.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/address/repositories/province.repository.ts b/src/modules/address/repositories/province.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/ads/DTO/ads-search-query.dto.ts b/src/modules/ads/DTO/ads-search-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/ads/DTO/create-ads.dto.ts b/src/modules/ads/DTO/create-ads.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/ads/DTO/update-ads.dto.ts b/src/modules/ads/DTO/update-ads.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/ads/ads.controller.ts b/src/modules/ads/ads.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/ads/ads.module.ts b/src/modules/ads/ads.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/ads/entities/ads.entity.ts b/src/modules/ads/entities/ads.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/ads/enums/ads-location.enum.ts b/src/modules/ads/enums/ads-location.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/ads/providers/ads.service.ts b/src/modules/ads/providers/ads.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/ads/repositories/ads.repository.ts b/src/modules/ads/repositories/ads.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/announcements/DTO/create-announcement.dto.ts b/src/modules/announcements/DTO/create-announcement.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/announcements/DTO/search-announcement-query.dto.ts b/src/modules/announcements/DTO/search-announcement-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/announcements/announcement.controller.ts b/src/modules/announcements/announcement.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/announcements/announcement.module.ts b/src/modules/announcements/announcement.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/announcements/entities/announcement.entity.ts b/src/modules/announcements/entities/announcement.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/announcements/entities/user-announcement.entity.ts b/src/modules/announcements/entities/user-announcement.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/announcements/providers/announcement.service.ts b/src/modules/announcements/providers/announcement.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/announcements/repositories/announcement.repository.ts b/src/modules/announcements/repositories/announcement.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/announcements/repositories/user-announcement.repository.ts b/src/modules/announcements/repositories/user-announcement.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/DTO/update-password.dto.ts b/src/modules/auth/DTO/change-password.dto.ts old mode 100644 new mode 100755 similarity index 96% rename from src/modules/auth/DTO/update-password.dto.ts rename to src/modules/auth/DTO/change-password.dto.ts index 7322e1c..80cd153 --- a/src/modules/auth/DTO/update-password.dto.ts +++ b/src/modules/auth/DTO/change-password.dto.ts @@ -3,7 +3,7 @@ import { IsNotEmpty, IsString, MinLength } from "class-validator"; import { AuthMessage } from "../../../common/enums/message.enum"; -export class UpdatePasswordDto { +export class ChangePasswordDto { @IsNotEmpty({ message: AuthMessage.PASSWORD_NOT_EMPTY }) @IsString({ message: AuthMessage.PASSWORD_FORMAT_INVALID }) @ApiProperty({ description: "old password", example: "12S345SS678" }) diff --git a/src/modules/auth/DTO/complete-register.dto.ts b/src/modules/auth/DTO/complete-register.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/DTO/loginPassword.dto.ts b/src/modules/auth/DTO/loginPassword.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/DTO/request-otp.dto.ts b/src/modules/auth/DTO/request-otp.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/DTO/verify-otp.dto.ts b/src/modules/auth/DTO/verify-otp.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts old mode 100644 new mode 100755 index b8767af..2061f05 --- a/src/modules/auth/auth.controller.ts +++ b/src/modules/auth/auth.controller.ts @@ -2,16 +2,15 @@ import { Body, Controller, HttpCode, HttpStatus, Patch, Post, UseGuards } from " import { ApiOperation, ApiTags } from "@nestjs/swagger"; import { Throttle, ThrottlerGuard } from "@nestjs/throttler"; +import { ChangePasswordDto } from "./DTO/change-password.dto"; import { CompleteRegistrationDto } from "./DTO/complete-register.dto"; import { CheckUserExistDto, LoginPasswordDTO } from "./DTO/loginPassword.dto"; import { RequestOtpDto } from "./DTO/request-otp.dto"; -import { UpdatePasswordDto } from "./DTO/update-password.dto"; import { VerifyOtpDto } from "./DTO/verify-otp.dto"; import { AuthService } from "./providers/auth.service"; import { AUTH_THROTTLE_LIMIT, AUTH_THROTTLE_TTL } from "../../common/constants"; import { AuthGuards } from "../../common/decorators/auth-guard.decorator"; import { UserDec } from "../../common/decorators/user.decorator"; -import { User } from "../users/entities/user.entity"; @ApiTags("Auth") @Controller("auth") @@ -80,8 +79,8 @@ export class AuthController { @ApiOperation({ summary: "Update user password" }) @HttpCode(HttpStatus.OK) @Patch("change-password") - updatePassword(@UserDec() user: User, @Body() updatePasswordDto: UpdatePasswordDto) { - return this.authService.updatePassword(user.id, updatePasswordDto); + changePassword(@UserDec("id") userId: string, @Body() changePasswordDto: ChangePasswordDto) { + return this.authService.changePassword(userId, changePasswordDto); } //***************************** */ diff --git a/src/modules/auth/auth.module.ts b/src/modules/auth/auth.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/guards/admin.guard.ts b/src/modules/auth/guards/admin.guard.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/guards/auth.guard.ts b/src/modules/auth/guards/auth.guard.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/guards/permission.guard.ts b/src/modules/auth/guards/permission.guard.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/guards/role.guard.ts b/src/modules/auth/guards/role.guard.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/interfaces/IToken-payload.ts b/src/modules/auth/interfaces/IToken-payload.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/providers/auth.service.ts b/src/modules/auth/providers/auth.service.ts old mode 100644 new mode 100755 index b9e9149..9d51229 --- a/src/modules/auth/providers/auth.service.ts +++ b/src/modules/auth/providers/auth.service.ts @@ -10,10 +10,10 @@ import { UsersService } from "../../users/providers/users.service"; import { OTPService } from "../../utils/providers/otp.service"; import { PasswordService } from "../../utils/providers/password.service"; import { SmsService } from "../../utils/providers/sms.service"; +import { ChangePasswordDto } from "../DTO/change-password.dto"; import { CompleteRegistrationDto } from "../DTO/complete-register.dto"; import { CheckUserExistDto, LoginPasswordDTO } from "../DTO/loginPassword.dto"; import { RequestOtpDto } from "../DTO/request-otp.dto"; -import { UpdatePasswordDto } from "../DTO/update-password.dto"; import { VerifyOtpDto } from "../DTO/verify-otp.dto"; @Injectable() @@ -204,7 +204,7 @@ export class AuthService { } //****************** */ - async updatePassword(userId: string, updateDto: UpdatePasswordDto) { + async changePassword(userId: string, updateDto: ChangePasswordDto) { const { user } = await this.usersService.findOneById(userId); const passCompare = await this.passwordService.comparePassword(updateDto.password, user.password); diff --git a/src/modules/auth/providers/tokens.service.ts b/src/modules/auth/providers/tokens.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/auth/strategies/jwt.strategy.ts b/src/modules/auth/strategies/jwt.strategy.ts old mode 100644 new mode 100755 diff --git a/src/modules/contact-us/DTO/create-contact-us.dto.ts b/src/modules/contact-us/DTO/create-contact-us.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/contact-us/DTO/search-contact-us-query.dto.ts b/src/modules/contact-us/DTO/search-contact-us-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/contact-us/contact-us.controller.ts b/src/modules/contact-us/contact-us.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/contact-us/contact-us.module.ts b/src/modules/contact-us/contact-us.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/contact-us/entities/contact-us.entity.ts b/src/modules/contact-us/entities/contact-us.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/contact-us/providers/contact-us.service.ts b/src/modules/contact-us/providers/contact-us.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/contact-us/repositories/contact-us.repository.ts b/src/modules/contact-us/repositories/contact-us.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/criticisms/DTO/create-criticism.dto.ts b/src/modules/criticisms/DTO/create-criticism.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/criticisms/DTO/search-criticism-query.dto.ts b/src/modules/criticisms/DTO/search-criticism-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/criticisms/criticisms.controller.ts b/src/modules/criticisms/criticisms.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/criticisms/criticisms.module.ts b/src/modules/criticisms/criticisms.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/criticisms/entities/criticism-file.entity.ts b/src/modules/criticisms/entities/criticism-file.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/criticisms/entities/criticism.entity.ts b/src/modules/criticisms/entities/criticism.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/criticisms/providers/criticisms.service.ts b/src/modules/criticisms/providers/criticisms.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/criticisms/repositories/criticisms-file.repository.ts b/src/modules/criticisms/repositories/criticisms-file.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/criticisms/repositories/criticisms.repository.ts b/src/modules/criticisms/repositories/criticisms.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/DTO/add-review.dto.ts b/src/modules/danak-services/DTO/add-review.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/DTO/category-search-query.dto.ts b/src/modules/danak-services/DTO/category-search-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/DTO/create-category.dto.ts b/src/modules/danak-services/DTO/create-category.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/DTO/create-service.dto.ts b/src/modules/danak-services/DTO/create-service.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/DTO/danak-services-search-query.dto.ts b/src/modules/danak-services/DTO/danak-services-search-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/danak-services.controller.ts b/src/modules/danak-services/danak-services.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/danak-services.module.ts b/src/modules/danak-services/danak-services.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/entities/danak-service-category.entity.ts b/src/modules/danak-services/entities/danak-service-category.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/entities/danak-service-image.entity.ts b/src/modules/danak-services/entities/danak-service-image.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/entities/danak-service-review.entity.ts b/src/modules/danak-services/entities/danak-service-review.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/entities/danak-service.entity.ts b/src/modules/danak-services/entities/danak-service.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/enums/review-status.enum.ts b/src/modules/danak-services/enums/review-status.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/enums/service-status.enum.ts b/src/modules/danak-services/enums/service-status.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/enums/services-language.enum.ts b/src/modules/danak-services/enums/services-language.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/providers/danak-services.service.ts b/src/modules/danak-services/providers/danak-services.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/repositories/danak-services-category.repository.ts b/src/modules/danak-services/repositories/danak-services-category.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/repositories/danak-services-image.repository.ts b/src/modules/danak-services/repositories/danak-services-image.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/repositories/danak-services-review.repository.ts b/src/modules/danak-services/repositories/danak-services-review.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/danak-services/repositories/danak-services.repository.ts b/src/modules/danak-services/repositories/danak-services.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/dashboards/dashboard.controller.ts b/src/modules/dashboards/dashboard.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/dashboards/dashboard.module.ts b/src/modules/dashboards/dashboard.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/dashboards/providers/dashboard.service.ts b/src/modules/dashboards/providers/dashboard.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/discounts/DTO/create-discount.dto.ts b/src/modules/discounts/DTO/create-discount.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/discounts/DTO/discount-search-query.dto.ts b/src/modules/discounts/DTO/discount-search-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/discounts/discounts.controller.ts b/src/modules/discounts/discounts.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/discounts/discounts.module.ts b/src/modules/discounts/discounts.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/discounts/entities/discount.entity.ts b/src/modules/discounts/entities/discount.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/discounts/entities/usage-discount.entity.ts b/src/modules/discounts/entities/usage-discount.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/discounts/enums/discount-type.enum.ts b/src/modules/discounts/enums/discount-type.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/discounts/providers/discounts.service.ts b/src/modules/discounts/providers/discounts.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/discounts/repositories/discount.repository.ts b/src/modules/discounts/repositories/discount.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/discounts/repositories/usage-discount.repository.ts b/src/modules/discounts/repositories/usage-discount.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/invoices/DTO/apply-discount-invoice.dto.ts b/src/modules/invoices/DTO/apply-discount-invoice.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/invoices/DTO/create-invoice.dto.ts b/src/modules/invoices/DTO/create-invoice.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/invoices/DTO/invoices-search-query.dto.ts b/src/modules/invoices/DTO/invoices-search-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/invoices/entities/invoice-item.entity.ts b/src/modules/invoices/entities/invoice-item.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/invoices/entities/invoice.entity.ts b/src/modules/invoices/entities/invoice.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/invoices/enums/invoice-status.enum.ts b/src/modules/invoices/enums/invoice-status.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/invoices/invoices.controller.ts b/src/modules/invoices/invoices.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/invoices/invoices.module.ts b/src/modules/invoices/invoices.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/invoices/providers/invoices.service.ts b/src/modules/invoices/providers/invoices.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/invoices/repositories/invoice-items.repository.ts b/src/modules/invoices/repositories/invoice-items.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/invoices/repositories/invoices.repository.ts b/src/modules/invoices/repositories/invoices.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/learnings/DTO/create-learning-category.dto.ts b/src/modules/learnings/DTO/create-learning-category.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/learnings/DTO/create-learning.dto.ts b/src/modules/learnings/DTO/create-learning.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/learnings/entities/learning-category.entity.ts b/src/modules/learnings/entities/learning-category.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/learnings/entities/learning-progress.entity.ts b/src/modules/learnings/entities/learning-progress.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/learnings/entities/learning.entity.ts b/src/modules/learnings/entities/learning.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/learnings/learning.controller.ts b/src/modules/learnings/learning.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/learnings/learning.module.ts b/src/modules/learnings/learning.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/learnings/providers/learning.service.ts b/src/modules/learnings/providers/learning.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/learnings/repositories/learning-category.repository.ts b/src/modules/learnings/repositories/learning-category.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/learnings/repositories/learning-progress.repository.ts b/src/modules/learnings/repositories/learning-progress.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/learnings/repositories/learning.repository.ts b/src/modules/learnings/repositories/learning.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/notifications/DTO/create-notification.dto.ts b/src/modules/notifications/DTO/create-notification.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/notifications/DTO/search-notification-query.dto.ts b/src/modules/notifications/DTO/search-notification-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/notifications/entities/notification.entity.ts b/src/modules/notifications/entities/notification.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/notifications/enums/notification-type.enum.ts b/src/modules/notifications/enums/notification-type.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/notifications/notifications.controller.ts b/src/modules/notifications/notifications.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/notifications/notifications.module.ts b/src/modules/notifications/notifications.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/notifications/providers/notifications.service.ts b/src/modules/notifications/providers/notifications.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/notifications/repositories/notifications.repository.ts b/src/modules/notifications/repositories/notifications.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/DTO/create-bankaccount.dto.ts b/src/modules/payments/DTO/create-bankaccount.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/DTO/deposit-wallet.dto.ts b/src/modules/payments/DTO/deposit-wallet.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/DTO/payment-transaction-query.dto.ts b/src/modules/payments/DTO/payment-transaction-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/DTO/search-transaction-query.dto.ts b/src/modules/payments/DTO/search-transaction-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/DTO/update-bankaccount.dto.ts b/src/modules/payments/DTO/update-bankaccount.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/DTO/update-deposit-request-status.dto.ts b/src/modules/payments/DTO/update-deposit-request-status.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/DTO/verify-payment.dto.ts b/src/modules/payments/DTO/verify-payment.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/constants/index.ts b/src/modules/payments/constants/index.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/entities/bank-account.entity.ts b/src/modules/payments/entities/bank-account.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/entities/deposit-request.entity.ts b/src/modules/payments/entities/deposit-request.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/entities/payment-gateway.entity.ts b/src/modules/payments/entities/payment-gateway.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/entities/payment.entity.ts b/src/modules/payments/entities/payment.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/enums/deposit-request-status.enum.ts b/src/modules/payments/enums/deposit-request-status.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/enums/gateway.enum.ts b/src/modules/payments/enums/gateway.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/enums/payment-status.enum.ts b/src/modules/payments/enums/payment-status.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/enums/payment-type.enum.ts b/src/modules/payments/enums/payment-type.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/factories/payment.factory.ts b/src/modules/payments/factories/payment.factory.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/gateways/zarinpal.gateway.ts b/src/modules/payments/gateways/zarinpal.gateway.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/interfaces/IPayment.ts b/src/modules/payments/interfaces/IPayment.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/payments.controller.ts b/src/modules/payments/payments.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/payments.module.ts b/src/modules/payments/payments.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/providers/payments.service.ts b/src/modules/payments/providers/payments.service.ts old mode 100644 new mode 100755 index 445e675..affeb53 --- a/src/modules/payments/providers/payments.service.ts +++ b/src/modules/payments/providers/payments.service.ts @@ -129,7 +129,7 @@ export class PaymentsService { //*********************************** */ async verifyPayment(gateway: GatewayType, queryDto: VerifyQueryDto, rep: FastifyReply) { const frontUrl = new URL(this.configService.getOrThrow("SITE_URL")); - frontUrl.pathname = "/transactions"; + frontUrl.pathname = "/payment"; const queryRunner = this.dataSource.createQueryRunner(); await queryRunner.connect(); @@ -180,7 +180,6 @@ export class PaymentsService { frontUrl.searchParams.append("amount", payment.amount.toString()); } - console.log(frontUrl.toString()); return rep.status(HttpStatus.FOUND).redirect(frontUrl.toString()); } catch (error) { await queryRunner.rollbackTransaction(); diff --git a/src/modules/payments/queue/payment.processor.ts b/src/modules/payments/queue/payment.processor.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/repositories/bank-accounts.repository.ts b/src/modules/payments/repositories/bank-accounts.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/repositories/deposit-requests.repository.ts b/src/modules/payments/repositories/deposit-requests.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/repositories/payment-gateway.repository.ts b/src/modules/payments/repositories/payment-gateway.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/repositories/payments.repository.ts b/src/modules/payments/repositories/payments.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/types/gateway.type.ts b/src/modules/payments/types/gateway.type.ts old mode 100644 new mode 100755 diff --git a/src/modules/payments/types/payment-status.type.ts b/src/modules/payments/types/payment-status.type.ts old mode 100644 new mode 100755 diff --git a/src/modules/settings/DTO/update-settings.dto.ts b/src/modules/settings/DTO/update-settings.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/settings/entities/notif-setting.entity.ts b/src/modules/settings/entities/notif-setting.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/settings/entities/user-setting.entity.ts b/src/modules/settings/entities/user-setting.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/settings/enums/notif-settings.enum.ts b/src/modules/settings/enums/notif-settings.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/settings/enums/user-settings.ts b/src/modules/settings/enums/user-settings.ts old mode 100644 new mode 100755 diff --git a/src/modules/settings/providers/notif-settings.service.ts b/src/modules/settings/providers/notif-settings.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/settings/providers/user-settings.service.ts b/src/modules/settings/providers/user-settings.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/settings/repositories/notif-settings.repository.ts b/src/modules/settings/repositories/notif-settings.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/settings/repositories/user-settings.repository.ts b/src/modules/settings/repositories/user-settings.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/settings/settings.controller.ts b/src/modules/settings/settings.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/settings/settings.module.ts b/src/modules/settings/settings.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/DTO/create-subscription.dto.ts b/src/modules/subscriptions/DTO/create-subscription.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/DTO/search-user-subs-query.dto.ts b/src/modules/subscriptions/DTO/search-user-subs-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/DTO/service-id.param.dto.ts b/src/modules/subscriptions/DTO/service-id.param.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/DTO/service-subs-query.dto.ts b/src/modules/subscriptions/DTO/service-subs-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/DTO/subscribe-service.dto.ts b/src/modules/subscriptions/DTO/subscribe-service.dto.ts old mode 100644 new mode 100755 index 9b8da12..0816a9b --- a/src/modules/subscriptions/DTO/subscribe-service.dto.ts +++ b/src/modules/subscriptions/DTO/subscribe-service.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from "@nestjs/swagger"; -import { IsNotEmpty, IsUUID } from "class-validator"; +import { IsNotEmpty, IsPhoneNumber, IsString, IsUUID, Length } from "class-validator"; import { SubscriptionMessage } from "../../../common/enums/message.enum"; @@ -8,4 +8,21 @@ export class SubscribeServiceDto { @IsUUID(4, { message: SubscriptionMessage.PLAN_ID_SHOULD_BE_UUID }) @ApiProperty({ description: "The plan id to subscribe to", example: "f7b3b3b3-7b3b-4b3b-8b3b-3b3b3b3b3b3b" }) planId: string; + + @IsNotEmpty({ message: SubscriptionMessage.BUSINESS_NAME_REQUIRED }) + @IsString({ message: SubscriptionMessage.BUSINESS_NAME_STRING }) + @Length(4, 250, { message: SubscriptionMessage.BUSINESS_NAME_LENGTH }) + @ApiProperty({ description: "Name of business", example: "Test 1" }) + businessName: string; + + @IsNotEmpty() + @IsPhoneNumber("IR", { message: SubscriptionMessage.BUSINESS_PHONE_INVALID }) + @ApiProperty({ description: "Phone number of the business", example: "+98 234 567 8901", required: false }) + businessPhone: string; + + @IsNotEmpty() + @IsString() + @Length(5, 500, { message: SubscriptionMessage.DESCRIPTION_LENGTH }) + @ApiProperty({ description: "A short description of the business or service", example: "We offer the best subscription plans." }) + description: string; } diff --git a/src/modules/subscriptions/DTO/update-subscription.dto.ts b/src/modules/subscriptions/DTO/update-subscription.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/entities/subscription.entity.ts b/src/modules/subscriptions/entities/subscription.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/entities/user-subscription.entity.ts b/src/modules/subscriptions/entities/user-subscription.entity.ts old mode 100644 new mode 100755 index 9e17103..0aac77a --- a/src/modules/subscriptions/entities/user-subscription.entity.ts +++ b/src/modules/subscriptions/entities/user-subscription.entity.ts @@ -19,6 +19,15 @@ export class UserSubscription extends BaseEntity { @Column({ type: "timestamp", nullable: false }) endDate: Date; + @Column({ type: "varchar", length: 250, nullable: false }) + businessName: string; + + @Column({ type: "varchar", length: 50, nullable: false }) + businessPhone: string; + + @Column({ type: "text", nullable: false }) + description: string; + @Column({ type: "enum", enum: SubscriptionStatus, default: SubscriptionStatus.PENDING }) status: SubscriptionStatus; diff --git a/src/modules/subscriptions/enums/subscription-status.enum.ts b/src/modules/subscriptions/enums/subscription-status.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/providers/subscriptions.service.ts b/src/modules/subscriptions/providers/subscriptions.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/repositories/subscriptions.repository.ts b/src/modules/subscriptions/repositories/subscriptions.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/repositories/user-subscriptions.repository.ts b/src/modules/subscriptions/repositories/user-subscriptions.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/subscriptions.controller.ts b/src/modules/subscriptions/subscriptions.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/subscriptions/subscriptions.module.ts b/src/modules/subscriptions/subscriptions.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/DTO/create-ticket-category.dto.ts b/src/modules/tickets/DTO/create-ticket-category.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/DTO/create-ticket-message.dto.ts b/src/modules/tickets/DTO/create-ticket-message.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/DTO/create-ticket.dto.ts b/src/modules/tickets/DTO/create-ticket.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/DTO/search-ticket-category.dto.ts b/src/modules/tickets/DTO/search-ticket-category.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/DTO/search-ticket-query.dto.ts b/src/modules/tickets/DTO/search-ticket-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/DTO/update-ticket-category.dto.ts b/src/modules/tickets/DTO/update-ticket-category.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/entities/ticket-category.entity.ts b/src/modules/tickets/entities/ticket-category.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/entities/ticket-message-attachment.ts b/src/modules/tickets/entities/ticket-message-attachment.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/entities/ticket-message.entity.ts b/src/modules/tickets/entities/ticket-message.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/entities/ticket.entity.ts b/src/modules/tickets/entities/ticket.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/enums/ticket-priority.enum.ts b/src/modules/tickets/enums/ticket-priority.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/enums/ticket-status.enum.ts b/src/modules/tickets/enums/ticket-status.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/providers/tickets.service.ts b/src/modules/tickets/providers/tickets.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/repositories/ticket-message-attachment.repository.ts b/src/modules/tickets/repositories/ticket-message-attachment.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/repositories/tickets-category.repository.ts b/src/modules/tickets/repositories/tickets-category.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/repositories/tickets-message.repository.ts b/src/modules/tickets/repositories/tickets-message.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/repositories/tickets.repository.ts b/src/modules/tickets/repositories/tickets.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/tickets.controller.ts b/src/modules/tickets/tickets.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/tickets/tickets.module.ts b/src/modules/tickets/tickets.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/uploader/DTO/upload-file.dto.ts b/src/modules/uploader/DTO/upload-file.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/uploader/uploader.controller.ts b/src/modules/uploader/uploader.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/uploader/uploader.module.ts b/src/modules/uploader/uploader.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/uploader/uploader.service.ts b/src/modules/uploader/uploader.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/update-email.dto.ts b/src/modules/users/DTO/change-email.dto.ts old mode 100644 new mode 100755 similarity index 92% rename from src/modules/users/DTO/update-email.dto.ts rename to src/modules/users/DTO/change-email.dto.ts index bec949c..ff78aed --- a/src/modules/users/DTO/update-email.dto.ts +++ b/src/modules/users/DTO/change-email.dto.ts @@ -3,7 +3,7 @@ import { IsEmail, IsNotEmpty } from "class-validator"; import { AuthMessage } from "../../../common/enums/message.enum"; -export class UpdateEmailDto { +export class ChangeEmailDto { @IsNotEmpty({ message: AuthMessage.EMAIL_NOT_EMPTY }) @IsEmail({}, { message: AuthMessage.INVALID_EMAIL_FORMAT }) @ApiProperty({ description: "Email", example: "ma@gmail.com" }) diff --git a/src/modules/users/DTO/check-validity.dto.ts b/src/modules/users/DTO/check-validity.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/create-admin.dto.ts b/src/modules/users/DTO/create-admin.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/create-legal-user.dto.ts b/src/modules/users/DTO/create-legal-user.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/create-real-user.dto.ts b/src/modules/users/DTO/create-real-user.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/create-role.dto.ts b/src/modules/users/DTO/create-role.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/create-user.dto.ts b/src/modules/users/DTO/create-user.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/search-admins-query.dto.ts b/src/modules/users/DTO/search-admins-query.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/search-customers.dto.ts b/src/modules/users/DTO/search-customers.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/search-roles.dto.ts b/src/modules/users/DTO/search-roles.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/update-profile.dto.ts b/src/modules/users/DTO/update-profile.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/user-group.dto.ts b/src/modules/users/DTO/user-group.dto.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/DTO/verify-email-query.dto.ts b/src/modules/users/DTO/verify-email-query.dto.ts old mode 100644 new mode 100755 index 6913302..a0d4ff6 --- a/src/modules/users/DTO/verify-email-query.dto.ts +++ b/src/modules/users/DTO/verify-email-query.dto.ts @@ -1,7 +1,7 @@ import { ApiProperty } from "@nestjs/swagger"; -import { IsNotEmpty, IsString, IsUUID } from "class-validator"; +import { IsEmail, IsNotEmpty, IsString } from "class-validator"; -import { AuthMessage, UserMessage } from "../../../common/enums/message.enum"; +import { AuthMessage } from "../../../common/enums/message.enum"; export class EmailVerifyQueryDto { @IsNotEmpty({ message: AuthMessage.TOKEN_NOT_EMPTY }) @@ -9,11 +9,8 @@ export class EmailVerifyQueryDto { @ApiProperty({ description: "Token", example: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" }) token: string; - @IsNotEmpty({ message: UserMessage.USER_ID_SHOULD_BE_A_UUID }) - @IsUUID(4, { message: UserMessage.USER_ID_SHOULD_BE_A_UUID }) - @ApiProperty({ description: "User id", example: "f7b1b3b1-4b7b-4b7b-4b7b-4b7b4b7b4b7b" }) - userId: string; - - @IsNotEmpty({ message: AuthMessage.TIMESTAMP_NOT_EMPTY }) - ts: string; + @IsNotEmpty({ message: AuthMessage.EMAIL_NOT_EMPTY }) + @IsEmail(undefined, { message: AuthMessage.INVALID_EMAIL_FORMAT }) + @ApiProperty({ description: "email of user", default: "admin-dsc@gmail.com" }) + email: string; } diff --git a/src/modules/users/entities/legal-user.entity.ts b/src/modules/users/entities/legal-user.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/entities/permission.entity.ts b/src/modules/users/entities/permission.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/entities/real-user.entity.ts b/src/modules/users/entities/real-user.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/entities/role.entity.ts b/src/modules/users/entities/role.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/entities/user-financial.entity.ts b/src/modules/users/entities/user-financial.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/entities/user-group.entity.ts b/src/modules/users/entities/user-group.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/entities/user.entity.ts b/src/modules/users/entities/user.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/enums/financial-type.enum.ts b/src/modules/users/enums/financial-type.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/enums/gender-type.enum.ts b/src/modules/users/enums/gender-type.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/enums/permission.enum.ts b/src/modules/users/enums/permission.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/enums/role.enum.ts b/src/modules/users/enums/role.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/enums/validity-type.enum.ts b/src/modules/users/enums/validity-type.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/interfaces/IEmail-verify.ts b/src/modules/users/interfaces/IEmail-verify.ts new file mode 100755 index 0000000..d5f3003 --- /dev/null +++ b/src/modules/users/interfaces/IEmail-verify.ts @@ -0,0 +1,5 @@ +export interface IEmailVerify { + hash: string; + email: string; + nonce: string; +} diff --git a/src/modules/users/providers/users.service.ts b/src/modules/users/providers/users.service.ts old mode 100644 new mode 100755 index 6095c5f..e87012a --- a/src/modules/users/providers/users.service.ts +++ b/src/modules/users/providers/users.service.ts @@ -1,4 +1,4 @@ -import { createHmac } from "node:crypto"; +import { createHmac, randomBytes } from "node:crypto"; import { BadRequestException, HttpStatus, Injectable, Logger } from "@nestjs/common"; import { ConfigService } from "@nestjs/config"; @@ -20,12 +20,14 @@ import { CompleteRegistrationDto } from "../../auth/DTO/complete-register.dto"; import { RequestOtpDto } from "../../auth/DTO/request-otp.dto"; import { VerifyOtpDto } from "../../auth/DTO/verify-otp.dto"; import { UserSettingsService } from "../../settings/providers/user-settings.service"; +import { CacheService } from "../../utils/providers/cache.service"; import { EmailService } from "../../utils/providers/email.service"; import { OTPService } from "../../utils/providers/otp.service"; import { PaginationUtils } from "../../utils/providers/pagination.utils"; import { PasswordService } from "../../utils/providers/password.service"; import { SmsService } from "../../utils/providers/sms.service"; import { WalletsService } from "../../wallets/providers/wallets.service"; +import { ChangeEmailDto } from "../DTO/change-email.dto"; import { CheckValidityDTO } from "../DTO/check-validity.dto"; import { CreateAdminDto } from "../DTO/create-admin.dto"; import { CreateLegalUserDto } from "../DTO/create-legal-user.dto"; @@ -35,7 +37,6 @@ import { CreateCustomerDto } from "../DTO/create-user.dto"; import { SearchAdminQueryDto } from "../DTO/search-admins-query.dto"; import { SearchCustomersDto } from "../DTO/search-customers.dto"; import { SearchRolesQueryDto } from "../DTO/search-roles.dto"; -import { UpdateEmailDto } from "../DTO/update-email.dto"; import { UpdateProfileDto } from "../DTO/update-profile.dto"; import { CreateUserGroupDto } from "../DTO/user-group.dto"; import { EmailVerifyQueryDto } from "../DTO/verify-email-query.dto"; @@ -68,6 +69,7 @@ export class UsersService { private readonly configService: ConfigService, private readonly otpService: OTPService, private readonly smsService: SmsService, + private readonly cacheService: CacheService, ) {} /************************************************************ */ @@ -138,18 +140,23 @@ export class UsersService { } /************************************************************ */ - async updateEmail(userId: string, updateDto: UpdateEmailDto) { - const { email } = updateDto; + async changeEmail(userId: string, changeDto: ChangeEmailDto) { + const { email } = changeDto; const user = await this.userRepository.findOneBy({ id: userId }); if (!user) throw new BadRequestException(UserMessage.USER_NOT_FOUND); - // + const existEmail = await this.userRepository.findOneBy({ email, id: Not(userId) }); if (existEmail) throw new BadRequestException(UserMessage.EMAIL_EXIST); - // - const emailLink = await this.createEmailHashLink(user.id); + + const emailLink = await this.createEmailHashLink(email); + await this.emailService.sendVerificationEmail(email, emailLink, `${user.firstName} ${user.lastName}`); - await this.userRepository.save({ ...user, email }); + if (user.email !== email) { + user.email = email; + user.emailVerified = false; + } + await this.userRepository.save(user); return { message: UserMessage.VERIFY_EMAIL_LINK_SENT, @@ -157,37 +164,40 @@ export class UsersService { }; } /************************************************************ */ - //TODO:fix this later - async verifyEmail(queryDto: EmailVerifyQueryDto, rep: FastifyReply) { - const frontUrl = this.configService.getOrThrow("FRONT_URL"); - const { token, userId, ts } = queryDto; - const user = await this.userRepository.findOneBy({ id: userId }); - if (!user) throw new BadRequestException(UserMessage.USER_NOT_FOUND); + async verifyEmail(queryDto: EmailVerifyQueryDto, rep: FastifyReply) { + const frontUrl = this.configService.getOrThrow("SITE_URL"); + + const { token, email } = queryDto; + + const user = await this.userRepository.findOneBy({ email, emailVerified: true }); + if (user) throw new BadRequestException(UserMessage.EMAIL_EXIST); + + const cachedData = await this.cacheService.get(`EMAIL_VERIFY:${email}`); + if (!cachedData) throw new BadRequestException(UserMessage.INVALID_EMAIL_TOKEN); + + const { hash, nonce } = JSON.parse(cachedData as string); const secret = this.configService.getOrThrow("EMAIL_SECRET"); - // Check if timestamp is within allowed time window (e.g., 24 hours) - const timestamp = parseInt(ts, 10); - if (Date.now() - timestamp > 24 * 60 * 60 * 1000) { - throw new BadRequestException(UserMessage.EXPIRED_EMAIL_TOKEN); - } + if (hash !== token) throw new BadRequestException(UserMessage.INVALID_EMAIL_TOKEN); - const payload = `${user.id}:${timestamp}`; - const expectedHash = createHmac("sha256", secret).update(payload).digest("hex"); + const expectedHash = createHmac("sha256", secret).update(`${email}:${nonce}`).digest("hex"); + if (expectedHash !== hash) throw new BadRequestException(UserMessage.INVALID_EMAIL_TOKEN); - if (expectedHash !== token) throw new BadRequestException(UserMessage.INVALID_EMAIL_TOKEN); + const userToUpdate = await this.userRepository.findOneBy({ email }); + if (!userToUpdate) throw new BadRequestException(UserMessage.USER_NOT_FOUND); - user.emailVerified = true; - await this.userRepository.save(user); + userToUpdate.emailVerified = true; + await this.userRepository.save(userToUpdate); - // return { message: UserMessage.EMAIL_VERIFIED }; - return rep.status(HttpStatus.FOUND).redirect(frontUrl); + await this.cacheService.del(`EMAIL_VERIFY:${email}`); + + return rep.status(HttpStatus.FOUND).redirect(`${frontUrl}/profile`); } - /************************************************************ */ - async updatePhone(userId: string, requestOtpDto: RequestOtpDto) { + async changePhone(userId: string, requestOtpDto: RequestOtpDto) { const { phone } = requestOtpDto; const user = await this.userRepository.findOneBy({ id: userId }); if (!user) throw new BadRequestException(UserMessage.USER_NOT_FOUND); @@ -570,6 +580,7 @@ export class UsersService { paginate: true, }; } + /************************************************************ */ async createRealUserData(createDto: CreateRealUserDto, userId: string) { const userExist = await this.userRepository.findOneBy({ @@ -655,17 +666,16 @@ export class UsersService { /************************************************************ */ - private async createEmailHashLink(userId: string) { + private async createEmailHashLink(email: string) { const secret = this.configService.getOrThrow("EMAIL_SECRET"); - const timestamp = Date.now(); - const payload = `${userId}:${timestamp}`; + const nonce = randomBytes(16).toString("hex"); + const hash = createHmac("sha256", secret).update(`${email}:${nonce}`).digest("hex"); - const hash = createHmac("sha256", secret).update(payload).digest("hex"); - - const url = new URL(`${this.configService.getOrThrow("SITE_URL")}/users/verify-email`); + const url = new URL(`${this.configService.getOrThrow("API_URL")}/users/verify-email`); url.searchParams.append("token", hash); - url.searchParams.append("userId", userId); - url.searchParams.append("ts", timestamp.toString()); + url.searchParams.append("email", email); + + await this.cacheService.set(`EMAIL_VERIFY:${email}`, JSON.stringify({ hash, email, nonce }), 5 * 60 * 1000); return url.toString(); } diff --git a/src/modules/users/repositories/legal-user.repository.ts b/src/modules/users/repositories/legal-user.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/repositories/permissions.repository.ts b/src/modules/users/repositories/permissions.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/repositories/real-user.repository.ts b/src/modules/users/repositories/real-user.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/repositories/roles.repository.ts b/src/modules/users/repositories/roles.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/repositories/user-group.repository.ts b/src/modules/users/repositories/user-group.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/repositories/users.repository.ts b/src/modules/users/repositories/users.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/users/users.controller.ts b/src/modules/users/users.controller.ts old mode 100644 new mode 100755 index 892c6f1..454c372 --- a/src/modules/users/users.controller.ts +++ b/src/modules/users/users.controller.ts @@ -2,6 +2,7 @@ import { Body, Controller, Get, HttpCode, HttpStatus, Param, Patch, Post, Query, import { ApiOperation, ApiTags } from "@nestjs/swagger"; import { FastifyReply } from "fastify"; +import { ChangeEmailDto } from "./DTO/change-email.dto"; import { CheckValidityDTO } from "./DTO/check-validity.dto"; import { CreateAdminDto } from "./DTO/create-admin.dto"; import { CreateLegalUserDto } from "./DTO/create-legal-user.dto"; @@ -11,7 +12,6 @@ import { CreateCustomerDto } from "./DTO/create-user.dto"; import { SearchAdminQueryDto } from "./DTO/search-admins-query.dto"; import { SearchCustomersDto } from "./DTO/search-customers.dto"; import { SearchRolesQueryDto } from "./DTO/search-roles.dto"; -import { UpdateEmailDto } from "./DTO/update-email.dto"; import { UpdateProfileDto } from "./DTO/update-profile.dto"; import { CreateUserGroupDto } from "./DTO/user-group.dto"; import { EmailVerifyQueryDto } from "./DTO/verify-email-query.dto"; @@ -59,10 +59,10 @@ export class UsersController { /************************************************************ */ @AuthGuards() - @ApiOperation({ summary: "Update user email" }) - @Patch("update-email") - updateEmail(@Body() updateEmailDto: UpdateEmailDto, @UserDec("id") userId: string) { - return this.usersService.updateEmail(userId, updateEmailDto); + @ApiOperation({ summary: "change user email" }) + @Patch("change-email") + changeEmail(@Body() changeEmailDto: ChangeEmailDto, @UserDec("id") userId: string) { + return this.usersService.changeEmail(userId, changeEmailDto); } /************************************************************ */ @@ -76,10 +76,10 @@ export class UsersController { /************************************************************ */ @AuthGuards() - @ApiOperation({ summary: "Update user phone" }) - @Patch("update-phone") - updatePhone(@Body() updateDto: RequestOtpDto, @UserDec("id") userId: string) { - return this.usersService.updatePhone(userId, updateDto); + @ApiOperation({ summary: "change user phone" }) + @Patch("change-phone") + changePhone(@Body() changeDto: RequestOtpDto, @UserDec("id") userId: string) { + return this.usersService.changePhone(userId, changeDto); } /************************************************************ */ diff --git a/src/modules/users/users.module.ts b/src/modules/users/users.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/constants.ts b/src/modules/utils/constants.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/interfaces/IFile.ts b/src/modules/utils/interfaces/IFile.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/interfaces/IOtpKey.ts b/src/modules/utils/interfaces/IOtpKey.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/interfaces/ISms.ts b/src/modules/utils/interfaces/ISms.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/providers/cache.service.ts b/src/modules/utils/providers/cache.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/providers/checkRole.utils.ts b/src/modules/utils/providers/checkRole.utils.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/providers/email.service.ts b/src/modules/utils/providers/email.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/providers/otp.service.ts b/src/modules/utils/providers/otp.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/providers/pagination.utils.ts b/src/modules/utils/providers/pagination.utils.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/providers/password.service.ts b/src/modules/utils/providers/password.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/providers/s3.service.ts b/src/modules/utils/providers/s3.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/providers/sms.service.ts b/src/modules/utils/providers/sms.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/utils/utils.module.ts b/src/modules/utils/utils.module.ts old mode 100644 new mode 100755 diff --git a/src/modules/wallets/constant/index.ts b/src/modules/wallets/constant/index.ts old mode 100644 new mode 100755 diff --git a/src/modules/wallets/entities/transaction.entity.ts b/src/modules/wallets/entities/transaction.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/wallets/entities/wallet.entity.ts b/src/modules/wallets/entities/wallet.entity.ts old mode 100644 new mode 100755 diff --git a/src/modules/wallets/enums/transaction-type.enum.ts b/src/modules/wallets/enums/transaction-type.enum.ts old mode 100644 new mode 100755 diff --git a/src/modules/wallets/providers/wallets.service.ts b/src/modules/wallets/providers/wallets.service.ts old mode 100644 new mode 100755 diff --git a/src/modules/wallets/repositories/wallet-transactions.repository.ts b/src/modules/wallets/repositories/wallet-transactions.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/wallets/repositories/wallets.repository.ts b/src/modules/wallets/repositories/wallets.repository.ts old mode 100644 new mode 100755 diff --git a/src/modules/wallets/wallets.controller.ts b/src/modules/wallets/wallets.controller.ts old mode 100644 new mode 100755 diff --git a/src/modules/wallets/wallets.module.ts b/src/modules/wallets/wallets.module.ts old mode 100644 new mode 100755 diff --git a/src/templates/email-verify.hbs b/src/templates/email-verify.hbs old mode 100644 new mode 100755 index 1abf874..2ea356a --- a/src/templates/email-verify.hbs +++ b/src/templates/email-verify.hbs @@ -1,37 +1,47 @@ - + + {{title}}
+ - -

سلام {{fullName}},

+

سلام {{fullName}} عزیز,

به DanakCorp خوش آمدید! لطفاً برای تأیید ایمیل خود روی دکمه زیر کلیک کنید:

- تأیید ایمیل +

اگر دکمه بالا کار نمی‌کند، می‌توانید از لینک زیر استفاده کنید:

-

{{link}}

+

+ {{link}} +

-

اگر شما این درخواست را ارسال نکرده‌اید، لطفاً این ایمیل را نادیده بگیرید.

+

+ اگر شما این درخواست را ارسال نکرده‌اید، لطفاً این ایمیل را نادیده بگیرید. +

diff --git a/test/app.e2e-spec.ts b/test/app.e2e-spec.ts old mode 100644 new mode 100755 diff --git a/test/jest-e2e.json b/test/jest-e2e.json old mode 100644 new mode 100755 diff --git a/tsconfig.build.json b/tsconfig.build.json old mode 100644 new mode 100755 diff --git a/tsconfig.json b/tsconfig.json old mode 100644 new mode 100755