From 93c5ad49d3c565ca57761c3506b2c55749fb45d1 Mon Sep 17 00:00:00 2001 From: mahyargdz Date: Wed, 26 Feb 2025 15:25:18 +0330 Subject: [PATCH] fix: the email vaerification logic error --- .env.example | 0 .eslintignore | 0 .eslintrc.js | 0 .github/workflows/deploy.yaml | 0 .gitignore | 0 .husky/commit-msg | 2 +- .husky/pre-commit | 2 +- .prettierrc | 0 Dockerfile | 0 README.md | 0 backup_file.dump | Bin 0 -> 275906 bytes commitlint.config.ts | 0 database/connection.ts | 0 database/data/json/ostan.json | 0 database/data/json/shahr.json | 0 ...421-AddBusinessFieldsToUserSubscription.ts | 73 ++++++++++++++++ database/migrations/test.ts | 0 database/seeder.runner.ts | 0 database/seeders/admin.seeder.ts | 0 database/seeders/iran-city.seeder.ts | 0 database/seeders/notif-setting.seeder.ts | 0 database/seeders/payment-gateway.seeder.ts | 0 database/seeders/role.seeder.ts | 0 docker-compose.yaml | 0 nest-cli.json | 0 package.json | 16 ++-- pnpm-lock.yaml | 0 src/app.module.ts | 0 src/common/DTO/pagination.dto.ts | 0 src/common/DTO/param.dto.ts | 0 src/common/constants/index.ts | 0 src/common/decorators/admin.decorator.ts | 0 src/common/decorators/auth-guard.decorator.ts | 0 .../decorators/inject-queue.decorator.ts | 0 src/common/decorators/pagination.decorator.ts | 0 src/common/decorators/permission.decorator.ts | 0 src/common/decorators/roles.decorator.ts | 0 src/common/decorators/user.decorator.ts | 0 src/common/entities/base.entity.ts | 0 src/common/enums/message.enum.ts | 8 +- src/common/interfaces/IPagination.ts | 0 src/common/queues/worker.processor.ts | 0 .../transformers/decimal.transformer.ts | 0 src/configs/bullmq.config.ts | 0 src/configs/cache.config.ts | 0 src/configs/http.config.ts | 0 src/configs/jwt.config.ts | 0 src/configs/mailer.config.ts | 0 src/configs/rateLimit.config.ts | 0 src/configs/s3.config.ts | 0 src/configs/sms.config.ts | 0 src/configs/swagger.config.ts | 0 src/configs/typeorm.config.ts | 0 src/configs/zarinpal.config.ts | 0 src/core/exceptions/http.exceptions.ts | 0 .../interceptors/pagination.interceptor.ts | 0 src/core/interceptors/response.interceptor.ts | 0 src/core/middlewares/logger.middleware.ts | 0 src/main.ts | 0 .../address/DTO/cities-search-query.dto.ts | 0 .../address/DTO/provinces-search-query.dto.ts | 0 src/modules/address/address.controller.ts | 0 src/modules/address/address.module.ts | 0 .../address/entities/address.entity.ts | 0 src/modules/address/entities/city.entity.ts | 0 .../address/entities/province.entity.ts | 0 .../address/providers/address.service.ts | 0 .../repositories/address.repository.ts | 0 .../address/repositories/city.repository.ts | 0 .../repositories/province.repository.ts | 0 src/modules/ads/DTO/ads-search-query.dto.ts | 0 src/modules/ads/DTO/create-ads.dto.ts | 0 src/modules/ads/DTO/update-ads.dto.ts | 0 src/modules/ads/ads.controller.ts | 0 src/modules/ads/ads.module.ts | 0 src/modules/ads/entities/ads.entity.ts | 0 src/modules/ads/enums/ads-location.enum.ts | 0 src/modules/ads/providers/ads.service.ts | 0 .../ads/repositories/ads.repository.ts | 0 .../DTO/create-announcement.dto.ts | 0 .../DTO/search-announcement-query.dto.ts | 0 .../announcements/announcement.controller.ts | 0 .../announcements/announcement.module.ts | 0 .../entities/announcement.entity.ts | 0 .../entities/user-announcement.entity.ts | 0 .../providers/announcement.service.ts | 0 .../repositories/announcement.repository.ts | 0 .../user-announcement.repository.ts | 0 ...password.dto.ts => change-password.dto.ts} | 2 +- src/modules/auth/DTO/complete-register.dto.ts | 0 src/modules/auth/DTO/loginPassword.dto.ts | 0 src/modules/auth/DTO/request-otp.dto.ts | 0 src/modules/auth/DTO/verify-otp.dto.ts | 0 src/modules/auth/auth.controller.ts | 7 +- src/modules/auth/auth.module.ts | 0 src/modules/auth/guards/admin.guard.ts | 0 src/modules/auth/guards/auth.guard.ts | 0 src/modules/auth/guards/permission.guard.ts | 0 src/modules/auth/guards/role.guard.ts | 0 src/modules/auth/interfaces/IToken-payload.ts | 0 src/modules/auth/providers/auth.service.ts | 4 +- src/modules/auth/providers/tokens.service.ts | 0 src/modules/auth/strategies/jwt.strategy.ts | 0 .../contact-us/DTO/create-contact-us.dto.ts | 0 .../DTO/search-contact-us-query.dto.ts | 0 .../contact-us/contact-us.controller.ts | 0 src/modules/contact-us/contact-us.module.ts | 0 .../contact-us/entities/contact-us.entity.ts | 0 .../providers/contact-us.service.ts | 0 .../repositories/contact-us.repository.ts | 0 .../criticisms/DTO/create-criticism.dto.ts | 0 .../DTO/search-criticism-query.dto.ts | 0 .../criticisms/criticisms.controller.ts | 0 src/modules/criticisms/criticisms.module.ts | 0 .../entities/criticism-file.entity.ts | 0 .../criticisms/entities/criticism.entity.ts | 0 .../providers/criticisms.service.ts | 0 .../criticisms-file.repository.ts | 0 .../repositories/criticisms.repository.ts | 0 .../danak-services/DTO/add-review.dto.ts | 0 .../DTO/category-search-query.dto.ts | 0 .../danak-services/DTO/create-category.dto.ts | 0 .../danak-services/DTO/create-service.dto.ts | 0 .../DTO/danak-services-search-query.dto.ts | 0 .../danak-services.controller.ts | 0 .../danak-services/danak-services.module.ts | 0 .../entities/danak-service-category.entity.ts | 0 .../entities/danak-service-image.entity.ts | 0 .../entities/danak-service-review.entity.ts | 0 .../entities/danak-service.entity.ts | 0 .../enums/review-status.enum.ts | 0 .../enums/service-status.enum.ts | 0 .../enums/services-language.enum.ts | 0 .../providers/danak-services.service.ts | 0 .../danak-services-category.repository.ts | 0 .../danak-services-image.repository.ts | 0 .../danak-services-review.repository.ts | 0 .../repositories/danak-services.repository.ts | 0 .../dashboards/dashboard.controller.ts | 0 src/modules/dashboards/dashboard.module.ts | 0 .../dashboards/providers/dashboard.service.ts | 0 .../discounts/DTO/create-discount.dto.ts | 0 .../DTO/discount-search-query.dto.ts | 0 src/modules/discounts/discounts.controller.ts | 0 src/modules/discounts/discounts.module.ts | 0 .../discounts/entities/discount.entity.ts | 0 .../entities/usage-discount.entity.ts | 0 .../discounts/enums/discount-type.enum.ts | 0 .../discounts/providers/discounts.service.ts | 0 .../repositories/discount.repository.ts | 0 .../repositories/usage-discount.repository.ts | 0 .../DTO/apply-discount-invoice.dto.ts | 0 .../invoices/DTO/create-invoice.dto.ts | 0 .../invoices/DTO/invoices-search-query.dto.ts | 0 .../invoices/entities/invoice-item.entity.ts | 0 .../invoices/entities/invoice.entity.ts | 0 .../invoices/enums/invoice-status.enum.ts | 0 src/modules/invoices/invoices.controller.ts | 0 src/modules/invoices/invoices.module.ts | 0 .../invoices/providers/invoices.service.ts | 0 .../repositories/invoice-items.repository.ts | 0 .../repositories/invoices.repository.ts | 0 .../DTO/create-learning-category.dto.ts | 0 .../learnings/DTO/create-learning.dto.ts | 0 .../entities/learning-category.entity.ts | 0 .../entities/learning-progress.entity.ts | 0 .../learnings/entities/learning.entity.ts | 0 src/modules/learnings/learning.controller.ts | 0 src/modules/learnings/learning.module.ts | 0 .../learnings/providers/learning.service.ts | 0 .../learning-category.repository.ts | 0 .../learning-progress.repository.ts | 0 .../repositories/learning.repository.ts | 0 .../DTO/create-notification.dto.ts | 0 .../DTO/search-notification-query.dto.ts | 0 .../entities/notification.entity.ts | 0 .../enums/notification-type.enum.ts | 0 .../notifications/notifications.controller.ts | 0 .../notifications/notifications.module.ts | 0 .../providers/notifications.service.ts | 0 .../repositories/notifications.repository.ts | 0 .../payments/DTO/create-bankaccount.dto.ts | 0 .../payments/DTO/deposit-wallet.dto.ts | 0 .../DTO/payment-transaction-query.dto.ts | 0 .../DTO/search-transaction-query.dto.ts | 0 .../payments/DTO/update-bankaccount.dto.ts | 0 .../DTO/update-deposit-request-status.dto.ts | 0 .../payments/DTO/verify-payment.dto.ts | 0 src/modules/payments/constants/index.ts | 0 .../payments/entities/bank-account.entity.ts | 0 .../entities/deposit-request.entity.ts | 0 .../entities/payment-gateway.entity.ts | 0 .../payments/entities/payment.entity.ts | 0 .../enums/deposit-request-status.enum.ts | 0 src/modules/payments/enums/gateway.enum.ts | 0 .../payments/enums/payment-status.enum.ts | 0 .../payments/enums/payment-type.enum.ts | 0 .../payments/factories/payment.factory.ts | 0 .../payments/gateways/zarinpal.gateway.ts | 0 src/modules/payments/interfaces/IPayment.ts | 0 src/modules/payments/payments.controller.ts | 0 src/modules/payments/payments.module.ts | 0 .../payments/providers/payments.service.ts | 3 +- .../payments/queue/payment.processor.ts | 0 .../repositories/bank-accounts.repository.ts | 0 .../deposit-requests.repository.ts | 0 .../payment-gateway.repository.ts | 0 .../repositories/payments.repository.ts | 0 src/modules/payments/types/gateway.type.ts | 0 .../payments/types/payment-status.type.ts | 0 .../settings/DTO/update-settings.dto.ts | 0 .../settings/entities/notif-setting.entity.ts | 0 .../settings/entities/user-setting.entity.ts | 0 .../settings/enums/notif-settings.enum.ts | 0 src/modules/settings/enums/user-settings.ts | 0 .../providers/notif-settings.service.ts | 0 .../providers/user-settings.service.ts | 0 .../repositories/notif-settings.repository.ts | 0 .../repositories/user-settings.repository.ts | 0 src/modules/settings/settings.controller.ts | 0 src/modules/settings/settings.module.ts | 0 .../DTO/create-subscription.dto.ts | 0 .../DTO/search-user-subs-query.dto.ts | 0 .../subscriptions/DTO/service-id.param.dto.ts | 0 .../DTO/service-subs-query.dto.ts | 0 .../DTO/subscribe-service.dto.ts | 19 +++- .../DTO/update-subscription.dto.ts | 0 .../entities/subscription.entity.ts | 0 .../entities/user-subscription.entity.ts | 9 ++ .../enums/subscription-status.enum.ts | 0 .../providers/subscriptions.service.ts | 0 .../repositories/subscriptions.repository.ts | 0 .../user-subscriptions.repository.ts | 0 .../subscriptions/subscriptions.controller.ts | 0 .../subscriptions/subscriptions.module.ts | 0 .../tickets/DTO/create-ticket-category.dto.ts | 0 .../tickets/DTO/create-ticket-message.dto.ts | 0 src/modules/tickets/DTO/create-ticket.dto.ts | 0 .../tickets/DTO/search-ticket-category.dto.ts | 0 .../tickets/DTO/search-ticket-query.dto.ts | 0 .../tickets/DTO/update-ticket-category.dto.ts | 0 .../entities/ticket-category.entity.ts | 0 .../entities/ticket-message-attachment.ts | 0 .../tickets/entities/ticket-message.entity.ts | 0 src/modules/tickets/entities/ticket.entity.ts | 0 .../tickets/enums/ticket-priority.enum.ts | 0 .../tickets/enums/ticket-status.enum.ts | 0 .../tickets/providers/tickets.service.ts | 0 .../ticket-message-attachment.repository.ts | 0 .../tickets-category.repository.ts | 0 .../tickets-message.repository.ts | 0 .../repositories/tickets.repository.ts | 0 src/modules/tickets/tickets.controller.ts | 0 src/modules/tickets/tickets.module.ts | 0 src/modules/uploader/DTO/upload-file.dto.ts | 0 src/modules/uploader/uploader.controller.ts | 0 src/modules/uploader/uploader.module.ts | 0 src/modules/uploader/uploader.service.ts | 0 ...pdate-email.dto.ts => change-email.dto.ts} | 2 +- src/modules/users/DTO/check-validity.dto.ts | 0 src/modules/users/DTO/create-admin.dto.ts | 0 .../users/DTO/create-legal-user.dto.ts | 0 src/modules/users/DTO/create-real-user.dto.ts | 0 src/modules/users/DTO/create-role.dto.ts | 0 src/modules/users/DTO/create-user.dto.ts | 0 .../users/DTO/search-admins-query.dto.ts | 0 src/modules/users/DTO/search-customers.dto.ts | 0 src/modules/users/DTO/search-roles.dto.ts | 0 src/modules/users/DTO/update-profile.dto.ts | 0 src/modules/users/DTO/user-group.dto.ts | 0 .../users/DTO/verify-email-query.dto.ts | 15 ++-- .../users/entities/legal-user.entity.ts | 0 .../users/entities/permission.entity.ts | 0 .../users/entities/real-user.entity.ts | 0 src/modules/users/entities/role.entity.ts | 0 .../users/entities/user-financial.entity.ts | 0 .../users/entities/user-group.entity.ts | 0 src/modules/users/entities/user.entity.ts | 0 .../users/enums/financial-type.enum.ts | 0 src/modules/users/enums/gender-type.enum.ts | 0 src/modules/users/enums/permission.enum.ts | 0 src/modules/users/enums/role.enum.ts | 0 src/modules/users/enums/validity-type.enum.ts | 0 src/modules/users/interfaces/IEmail-verify.ts | 5 ++ src/modules/users/providers/users.service.ts | 82 ++++++++++-------- .../repositories/legal-user.repository.ts | 0 .../repositories/permissions.repository.ts | 0 .../repositories/real-user.repository.ts | 0 .../users/repositories/roles.repository.ts | 0 .../repositories/user-group.repository.ts | 0 .../users/repositories/users.repository.ts | 0 src/modules/users/users.controller.ts | 18 ++-- src/modules/users/users.module.ts | 0 src/modules/utils/constants.ts | 0 src/modules/utils/interfaces/IFile.ts | 0 src/modules/utils/interfaces/IOtpKey.ts | 0 src/modules/utils/interfaces/ISms.ts | 0 src/modules/utils/providers/cache.service.ts | 0 .../utils/providers/checkRole.utils.ts | 0 src/modules/utils/providers/email.service.ts | 0 src/modules/utils/providers/otp.service.ts | 0 .../utils/providers/pagination.utils.ts | 0 .../utils/providers/password.service.ts | 0 src/modules/utils/providers/s3.service.ts | 0 src/modules/utils/providers/sms.service.ts | 0 src/modules/utils/utils.module.ts | 0 src/modules/wallets/constant/index.ts | 0 .../wallets/entities/transaction.entity.ts | 0 src/modules/wallets/entities/wallet.entity.ts | 0 .../wallets/enums/transaction-type.enum.ts | 0 .../wallets/providers/wallets.service.ts | 0 .../wallet-transactions.repository.ts | 0 .../repositories/wallets.repository.ts | 0 src/modules/wallets/wallets.controller.ts | 0 src/modules/wallets/wallets.module.ts | 0 src/templates/email-verify.hbs | 40 +++++---- test/app.e2e-spec.ts | 0 test/jest-e2e.json | 0 tsconfig.build.json | 0 tsconfig.json | 0 320 files changed, 215 insertions(+), 92 deletions(-) mode change 100644 => 100755 .env.example mode change 100644 => 100755 .eslintignore mode change 100644 => 100755 .eslintrc.js mode change 100644 => 100755 .github/workflows/deploy.yaml mode change 100644 => 100755 .gitignore mode change 100644 => 100755 .husky/commit-msg mode change 100644 => 100755 .prettierrc mode change 100644 => 100755 Dockerfile mode change 100644 => 100755 README.md create mode 100644 backup_file.dump mode change 100644 => 100755 commitlint.config.ts mode change 100644 => 100755 database/connection.ts mode change 100644 => 100755 database/data/json/ostan.json mode change 100644 => 100755 database/data/json/shahr.json create mode 100644 database/migrations/1740574122421-AddBusinessFieldsToUserSubscription.ts delete mode 100644 database/migrations/test.ts mode change 100644 => 100755 database/seeder.runner.ts mode change 100644 => 100755 database/seeders/admin.seeder.ts mode change 100644 => 100755 database/seeders/iran-city.seeder.ts mode change 100644 => 100755 database/seeders/notif-setting.seeder.ts mode change 100644 => 100755 database/seeders/payment-gateway.seeder.ts mode change 100644 => 100755 database/seeders/role.seeder.ts mode change 100644 => 100755 docker-compose.yaml mode change 100644 => 100755 nest-cli.json mode change 100644 => 100755 package.json mode change 100644 => 100755 pnpm-lock.yaml mode change 100644 => 100755 src/app.module.ts mode change 100644 => 100755 src/common/DTO/pagination.dto.ts mode change 100644 => 100755 src/common/DTO/param.dto.ts mode change 100644 => 100755 src/common/constants/index.ts mode change 100644 => 100755 src/common/decorators/admin.decorator.ts mode change 100644 => 100755 src/common/decorators/auth-guard.decorator.ts mode change 100644 => 100755 src/common/decorators/inject-queue.decorator.ts mode change 100644 => 100755 src/common/decorators/pagination.decorator.ts mode change 100644 => 100755 src/common/decorators/permission.decorator.ts mode change 100644 => 100755 src/common/decorators/roles.decorator.ts mode change 100644 => 100755 src/common/decorators/user.decorator.ts mode change 100644 => 100755 src/common/entities/base.entity.ts mode change 100644 => 100755 src/common/enums/message.enum.ts mode change 100644 => 100755 src/common/interfaces/IPagination.ts mode change 100644 => 100755 src/common/queues/worker.processor.ts mode change 100644 => 100755 src/common/transformers/decimal.transformer.ts mode change 100644 => 100755 src/configs/bullmq.config.ts mode change 100644 => 100755 src/configs/cache.config.ts mode change 100644 => 100755 src/configs/http.config.ts mode change 100644 => 100755 src/configs/jwt.config.ts mode change 100644 => 100755 src/configs/mailer.config.ts mode change 100644 => 100755 src/configs/rateLimit.config.ts mode change 100644 => 100755 src/configs/s3.config.ts mode change 100644 => 100755 src/configs/sms.config.ts mode change 100644 => 100755 src/configs/swagger.config.ts mode change 100644 => 100755 src/configs/typeorm.config.ts mode change 100644 => 100755 src/configs/zarinpal.config.ts mode change 100644 => 100755 src/core/exceptions/http.exceptions.ts mode change 100644 => 100755 src/core/interceptors/pagination.interceptor.ts mode change 100644 => 100755 src/core/interceptors/response.interceptor.ts mode change 100644 => 100755 src/core/middlewares/logger.middleware.ts mode change 100644 => 100755 src/main.ts mode change 100644 => 100755 src/modules/address/DTO/cities-search-query.dto.ts mode change 100644 => 100755 src/modules/address/DTO/provinces-search-query.dto.ts mode change 100644 => 100755 src/modules/address/address.controller.ts mode change 100644 => 100755 src/modules/address/address.module.ts mode change 100644 => 100755 src/modules/address/entities/address.entity.ts mode change 100644 => 100755 src/modules/address/entities/city.entity.ts mode change 100644 => 100755 src/modules/address/entities/province.entity.ts mode change 100644 => 100755 src/modules/address/providers/address.service.ts mode change 100644 => 100755 src/modules/address/repositories/address.repository.ts mode change 100644 => 100755 src/modules/address/repositories/city.repository.ts mode change 100644 => 100755 src/modules/address/repositories/province.repository.ts mode change 100644 => 100755 src/modules/ads/DTO/ads-search-query.dto.ts mode change 100644 => 100755 src/modules/ads/DTO/create-ads.dto.ts mode change 100644 => 100755 src/modules/ads/DTO/update-ads.dto.ts mode change 100644 => 100755 src/modules/ads/ads.controller.ts mode change 100644 => 100755 src/modules/ads/ads.module.ts mode change 100644 => 100755 src/modules/ads/entities/ads.entity.ts mode change 100644 => 100755 src/modules/ads/enums/ads-location.enum.ts mode change 100644 => 100755 src/modules/ads/providers/ads.service.ts mode change 100644 => 100755 src/modules/ads/repositories/ads.repository.ts mode change 100644 => 100755 src/modules/announcements/DTO/create-announcement.dto.ts mode change 100644 => 100755 src/modules/announcements/DTO/search-announcement-query.dto.ts mode change 100644 => 100755 src/modules/announcements/announcement.controller.ts mode change 100644 => 100755 src/modules/announcements/announcement.module.ts mode change 100644 => 100755 src/modules/announcements/entities/announcement.entity.ts mode change 100644 => 100755 src/modules/announcements/entities/user-announcement.entity.ts mode change 100644 => 100755 src/modules/announcements/providers/announcement.service.ts mode change 100644 => 100755 src/modules/announcements/repositories/announcement.repository.ts mode change 100644 => 100755 src/modules/announcements/repositories/user-announcement.repository.ts rename src/modules/auth/DTO/{update-password.dto.ts => change-password.dto.ts} (96%) mode change 100644 => 100755 mode change 100644 => 100755 src/modules/auth/DTO/complete-register.dto.ts mode change 100644 => 100755 src/modules/auth/DTO/loginPassword.dto.ts mode change 100644 => 100755 src/modules/auth/DTO/request-otp.dto.ts mode change 100644 => 100755 src/modules/auth/DTO/verify-otp.dto.ts mode change 100644 => 100755 src/modules/auth/auth.controller.ts mode change 100644 => 100755 src/modules/auth/auth.module.ts mode change 100644 => 100755 src/modules/auth/guards/admin.guard.ts mode change 100644 => 100755 src/modules/auth/guards/auth.guard.ts mode change 100644 => 100755 src/modules/auth/guards/permission.guard.ts mode change 100644 => 100755 src/modules/auth/guards/role.guard.ts mode change 100644 => 100755 src/modules/auth/interfaces/IToken-payload.ts mode change 100644 => 100755 src/modules/auth/providers/auth.service.ts mode change 100644 => 100755 src/modules/auth/providers/tokens.service.ts mode change 100644 => 100755 src/modules/auth/strategies/jwt.strategy.ts mode change 100644 => 100755 src/modules/contact-us/DTO/create-contact-us.dto.ts mode change 100644 => 100755 src/modules/contact-us/DTO/search-contact-us-query.dto.ts mode change 100644 => 100755 src/modules/contact-us/contact-us.controller.ts mode change 100644 => 100755 src/modules/contact-us/contact-us.module.ts mode change 100644 => 100755 src/modules/contact-us/entities/contact-us.entity.ts mode change 100644 => 100755 src/modules/contact-us/providers/contact-us.service.ts mode change 100644 => 100755 src/modules/contact-us/repositories/contact-us.repository.ts mode change 100644 => 100755 src/modules/criticisms/DTO/create-criticism.dto.ts mode change 100644 => 100755 src/modules/criticisms/DTO/search-criticism-query.dto.ts mode change 100644 => 100755 src/modules/criticisms/criticisms.controller.ts mode change 100644 => 100755 src/modules/criticisms/criticisms.module.ts mode change 100644 => 100755 src/modules/criticisms/entities/criticism-file.entity.ts mode change 100644 => 100755 src/modules/criticisms/entities/criticism.entity.ts mode change 100644 => 100755 src/modules/criticisms/providers/criticisms.service.ts mode change 100644 => 100755 src/modules/criticisms/repositories/criticisms-file.repository.ts mode change 100644 => 100755 src/modules/criticisms/repositories/criticisms.repository.ts mode change 100644 => 100755 src/modules/danak-services/DTO/add-review.dto.ts mode change 100644 => 100755 src/modules/danak-services/DTO/category-search-query.dto.ts mode change 100644 => 100755 src/modules/danak-services/DTO/create-category.dto.ts mode change 100644 => 100755 src/modules/danak-services/DTO/create-service.dto.ts mode change 100644 => 100755 src/modules/danak-services/DTO/danak-services-search-query.dto.ts mode change 100644 => 100755 src/modules/danak-services/danak-services.controller.ts mode change 100644 => 100755 src/modules/danak-services/danak-services.module.ts mode change 100644 => 100755 src/modules/danak-services/entities/danak-service-category.entity.ts mode change 100644 => 100755 src/modules/danak-services/entities/danak-service-image.entity.ts mode change 100644 => 100755 src/modules/danak-services/entities/danak-service-review.entity.ts mode change 100644 => 100755 src/modules/danak-services/entities/danak-service.entity.ts mode change 100644 => 100755 src/modules/danak-services/enums/review-status.enum.ts mode change 100644 => 100755 src/modules/danak-services/enums/service-status.enum.ts mode change 100644 => 100755 src/modules/danak-services/enums/services-language.enum.ts mode change 100644 => 100755 src/modules/danak-services/providers/danak-services.service.ts mode change 100644 => 100755 src/modules/danak-services/repositories/danak-services-category.repository.ts mode change 100644 => 100755 src/modules/danak-services/repositories/danak-services-image.repository.ts mode change 100644 => 100755 src/modules/danak-services/repositories/danak-services-review.repository.ts mode change 100644 => 100755 src/modules/danak-services/repositories/danak-services.repository.ts mode change 100644 => 100755 src/modules/dashboards/dashboard.controller.ts mode change 100644 => 100755 src/modules/dashboards/dashboard.module.ts mode change 100644 => 100755 src/modules/dashboards/providers/dashboard.service.ts mode change 100644 => 100755 src/modules/discounts/DTO/create-discount.dto.ts mode change 100644 => 100755 src/modules/discounts/DTO/discount-search-query.dto.ts mode change 100644 => 100755 src/modules/discounts/discounts.controller.ts mode change 100644 => 100755 src/modules/discounts/discounts.module.ts mode change 100644 => 100755 src/modules/discounts/entities/discount.entity.ts mode change 100644 => 100755 src/modules/discounts/entities/usage-discount.entity.ts mode change 100644 => 100755 src/modules/discounts/enums/discount-type.enum.ts mode change 100644 => 100755 src/modules/discounts/providers/discounts.service.ts mode change 100644 => 100755 src/modules/discounts/repositories/discount.repository.ts mode change 100644 => 100755 src/modules/discounts/repositories/usage-discount.repository.ts mode change 100644 => 100755 src/modules/invoices/DTO/apply-discount-invoice.dto.ts mode change 100644 => 100755 src/modules/invoices/DTO/create-invoice.dto.ts mode change 100644 => 100755 src/modules/invoices/DTO/invoices-search-query.dto.ts mode change 100644 => 100755 src/modules/invoices/entities/invoice-item.entity.ts mode change 100644 => 100755 src/modules/invoices/entities/invoice.entity.ts mode change 100644 => 100755 src/modules/invoices/enums/invoice-status.enum.ts mode change 100644 => 100755 src/modules/invoices/invoices.controller.ts mode change 100644 => 100755 src/modules/invoices/invoices.module.ts mode change 100644 => 100755 src/modules/invoices/providers/invoices.service.ts mode change 100644 => 100755 src/modules/invoices/repositories/invoice-items.repository.ts mode change 100644 => 100755 src/modules/invoices/repositories/invoices.repository.ts mode change 100644 => 100755 src/modules/learnings/DTO/create-learning-category.dto.ts mode change 100644 => 100755 src/modules/learnings/DTO/create-learning.dto.ts mode change 100644 => 100755 src/modules/learnings/entities/learning-category.entity.ts mode change 100644 => 100755 src/modules/learnings/entities/learning-progress.entity.ts mode change 100644 => 100755 src/modules/learnings/entities/learning.entity.ts mode change 100644 => 100755 src/modules/learnings/learning.controller.ts mode change 100644 => 100755 src/modules/learnings/learning.module.ts mode change 100644 => 100755 src/modules/learnings/providers/learning.service.ts mode change 100644 => 100755 src/modules/learnings/repositories/learning-category.repository.ts mode change 100644 => 100755 src/modules/learnings/repositories/learning-progress.repository.ts mode change 100644 => 100755 src/modules/learnings/repositories/learning.repository.ts mode change 100644 => 100755 src/modules/notifications/DTO/create-notification.dto.ts mode change 100644 => 100755 src/modules/notifications/DTO/search-notification-query.dto.ts mode change 100644 => 100755 src/modules/notifications/entities/notification.entity.ts mode change 100644 => 100755 src/modules/notifications/enums/notification-type.enum.ts mode change 100644 => 100755 src/modules/notifications/notifications.controller.ts mode change 100644 => 100755 src/modules/notifications/notifications.module.ts mode change 100644 => 100755 src/modules/notifications/providers/notifications.service.ts mode change 100644 => 100755 src/modules/notifications/repositories/notifications.repository.ts mode change 100644 => 100755 src/modules/payments/DTO/create-bankaccount.dto.ts mode change 100644 => 100755 src/modules/payments/DTO/deposit-wallet.dto.ts mode change 100644 => 100755 src/modules/payments/DTO/payment-transaction-query.dto.ts mode change 100644 => 100755 src/modules/payments/DTO/search-transaction-query.dto.ts mode change 100644 => 100755 src/modules/payments/DTO/update-bankaccount.dto.ts mode change 100644 => 100755 src/modules/payments/DTO/update-deposit-request-status.dto.ts mode change 100644 => 100755 src/modules/payments/DTO/verify-payment.dto.ts mode change 100644 => 100755 src/modules/payments/constants/index.ts mode change 100644 => 100755 src/modules/payments/entities/bank-account.entity.ts mode change 100644 => 100755 src/modules/payments/entities/deposit-request.entity.ts mode change 100644 => 100755 src/modules/payments/entities/payment-gateway.entity.ts mode change 100644 => 100755 src/modules/payments/entities/payment.entity.ts mode change 100644 => 100755 src/modules/payments/enums/deposit-request-status.enum.ts mode change 100644 => 100755 src/modules/payments/enums/gateway.enum.ts mode change 100644 => 100755 src/modules/payments/enums/payment-status.enum.ts mode change 100644 => 100755 src/modules/payments/enums/payment-type.enum.ts mode change 100644 => 100755 src/modules/payments/factories/payment.factory.ts mode change 100644 => 100755 src/modules/payments/gateways/zarinpal.gateway.ts mode change 100644 => 100755 src/modules/payments/interfaces/IPayment.ts mode change 100644 => 100755 src/modules/payments/payments.controller.ts mode change 100644 => 100755 src/modules/payments/payments.module.ts mode change 100644 => 100755 src/modules/payments/providers/payments.service.ts mode change 100644 => 100755 src/modules/payments/queue/payment.processor.ts mode change 100644 => 100755 src/modules/payments/repositories/bank-accounts.repository.ts mode change 100644 => 100755 src/modules/payments/repositories/deposit-requests.repository.ts mode change 100644 => 100755 src/modules/payments/repositories/payment-gateway.repository.ts mode change 100644 => 100755 src/modules/payments/repositories/payments.repository.ts mode change 100644 => 100755 src/modules/payments/types/gateway.type.ts mode change 100644 => 100755 src/modules/payments/types/payment-status.type.ts mode change 100644 => 100755 src/modules/settings/DTO/update-settings.dto.ts mode change 100644 => 100755 src/modules/settings/entities/notif-setting.entity.ts mode change 100644 => 100755 src/modules/settings/entities/user-setting.entity.ts mode change 100644 => 100755 src/modules/settings/enums/notif-settings.enum.ts mode change 100644 => 100755 src/modules/settings/enums/user-settings.ts mode change 100644 => 100755 src/modules/settings/providers/notif-settings.service.ts mode change 100644 => 100755 src/modules/settings/providers/user-settings.service.ts mode change 100644 => 100755 src/modules/settings/repositories/notif-settings.repository.ts mode change 100644 => 100755 src/modules/settings/repositories/user-settings.repository.ts mode change 100644 => 100755 src/modules/settings/settings.controller.ts mode change 100644 => 100755 src/modules/settings/settings.module.ts mode change 100644 => 100755 src/modules/subscriptions/DTO/create-subscription.dto.ts mode change 100644 => 100755 src/modules/subscriptions/DTO/search-user-subs-query.dto.ts mode change 100644 => 100755 src/modules/subscriptions/DTO/service-id.param.dto.ts mode change 100644 => 100755 src/modules/subscriptions/DTO/service-subs-query.dto.ts mode change 100644 => 100755 src/modules/subscriptions/DTO/subscribe-service.dto.ts mode change 100644 => 100755 src/modules/subscriptions/DTO/update-subscription.dto.ts mode change 100644 => 100755 src/modules/subscriptions/entities/subscription.entity.ts mode change 100644 => 100755 src/modules/subscriptions/entities/user-subscription.entity.ts mode change 100644 => 100755 src/modules/subscriptions/enums/subscription-status.enum.ts mode change 100644 => 100755 src/modules/subscriptions/providers/subscriptions.service.ts mode change 100644 => 100755 src/modules/subscriptions/repositories/subscriptions.repository.ts mode change 100644 => 100755 src/modules/subscriptions/repositories/user-subscriptions.repository.ts mode change 100644 => 100755 src/modules/subscriptions/subscriptions.controller.ts mode change 100644 => 100755 src/modules/subscriptions/subscriptions.module.ts mode change 100644 => 100755 src/modules/tickets/DTO/create-ticket-category.dto.ts mode change 100644 => 100755 src/modules/tickets/DTO/create-ticket-message.dto.ts mode change 100644 => 100755 src/modules/tickets/DTO/create-ticket.dto.ts mode change 100644 => 100755 src/modules/tickets/DTO/search-ticket-category.dto.ts mode change 100644 => 100755 src/modules/tickets/DTO/search-ticket-query.dto.ts mode change 100644 => 100755 src/modules/tickets/DTO/update-ticket-category.dto.ts mode change 100644 => 100755 src/modules/tickets/entities/ticket-category.entity.ts mode change 100644 => 100755 src/modules/tickets/entities/ticket-message-attachment.ts mode change 100644 => 100755 src/modules/tickets/entities/ticket-message.entity.ts mode change 100644 => 100755 src/modules/tickets/entities/ticket.entity.ts mode change 100644 => 100755 src/modules/tickets/enums/ticket-priority.enum.ts mode change 100644 => 100755 src/modules/tickets/enums/ticket-status.enum.ts mode change 100644 => 100755 src/modules/tickets/providers/tickets.service.ts mode change 100644 => 100755 src/modules/tickets/repositories/ticket-message-attachment.repository.ts mode change 100644 => 100755 src/modules/tickets/repositories/tickets-category.repository.ts mode change 100644 => 100755 src/modules/tickets/repositories/tickets-message.repository.ts mode change 100644 => 100755 src/modules/tickets/repositories/tickets.repository.ts mode change 100644 => 100755 src/modules/tickets/tickets.controller.ts mode change 100644 => 100755 src/modules/tickets/tickets.module.ts mode change 100644 => 100755 src/modules/uploader/DTO/upload-file.dto.ts mode change 100644 => 100755 src/modules/uploader/uploader.controller.ts mode change 100644 => 100755 src/modules/uploader/uploader.module.ts mode change 100644 => 100755 src/modules/uploader/uploader.service.ts rename src/modules/users/DTO/{update-email.dto.ts => change-email.dto.ts} (92%) mode change 100644 => 100755 mode change 100644 => 100755 src/modules/users/DTO/check-validity.dto.ts mode change 100644 => 100755 src/modules/users/DTO/create-admin.dto.ts mode change 100644 => 100755 src/modules/users/DTO/create-legal-user.dto.ts mode change 100644 => 100755 src/modules/users/DTO/create-real-user.dto.ts mode change 100644 => 100755 src/modules/users/DTO/create-role.dto.ts mode change 100644 => 100755 src/modules/users/DTO/create-user.dto.ts mode change 100644 => 100755 src/modules/users/DTO/search-admins-query.dto.ts mode change 100644 => 100755 src/modules/users/DTO/search-customers.dto.ts mode change 100644 => 100755 src/modules/users/DTO/search-roles.dto.ts mode change 100644 => 100755 src/modules/users/DTO/update-profile.dto.ts mode change 100644 => 100755 src/modules/users/DTO/user-group.dto.ts mode change 100644 => 100755 src/modules/users/DTO/verify-email-query.dto.ts mode change 100644 => 100755 src/modules/users/entities/legal-user.entity.ts mode change 100644 => 100755 src/modules/users/entities/permission.entity.ts mode change 100644 => 100755 src/modules/users/entities/real-user.entity.ts mode change 100644 => 100755 src/modules/users/entities/role.entity.ts mode change 100644 => 100755 src/modules/users/entities/user-financial.entity.ts mode change 100644 => 100755 src/modules/users/entities/user-group.entity.ts mode change 100644 => 100755 src/modules/users/entities/user.entity.ts mode change 100644 => 100755 src/modules/users/enums/financial-type.enum.ts mode change 100644 => 100755 src/modules/users/enums/gender-type.enum.ts mode change 100644 => 100755 src/modules/users/enums/permission.enum.ts mode change 100644 => 100755 src/modules/users/enums/role.enum.ts mode change 100644 => 100755 src/modules/users/enums/validity-type.enum.ts create mode 100755 src/modules/users/interfaces/IEmail-verify.ts mode change 100644 => 100755 src/modules/users/providers/users.service.ts mode change 100644 => 100755 src/modules/users/repositories/legal-user.repository.ts mode change 100644 => 100755 src/modules/users/repositories/permissions.repository.ts mode change 100644 => 100755 src/modules/users/repositories/real-user.repository.ts mode change 100644 => 100755 src/modules/users/repositories/roles.repository.ts mode change 100644 => 100755 src/modules/users/repositories/user-group.repository.ts mode change 100644 => 100755 src/modules/users/repositories/users.repository.ts mode change 100644 => 100755 src/modules/users/users.controller.ts mode change 100644 => 100755 src/modules/users/users.module.ts mode change 100644 => 100755 src/modules/utils/constants.ts mode change 100644 => 100755 src/modules/utils/interfaces/IFile.ts mode change 100644 => 100755 src/modules/utils/interfaces/IOtpKey.ts mode change 100644 => 100755 src/modules/utils/interfaces/ISms.ts mode change 100644 => 100755 src/modules/utils/providers/cache.service.ts mode change 100644 => 100755 src/modules/utils/providers/checkRole.utils.ts mode change 100644 => 100755 src/modules/utils/providers/email.service.ts mode change 100644 => 100755 src/modules/utils/providers/otp.service.ts mode change 100644 => 100755 src/modules/utils/providers/pagination.utils.ts mode change 100644 => 100755 src/modules/utils/providers/password.service.ts mode change 100644 => 100755 src/modules/utils/providers/s3.service.ts mode change 100644 => 100755 src/modules/utils/providers/sms.service.ts mode change 100644 => 100755 src/modules/utils/utils.module.ts mode change 100644 => 100755 src/modules/wallets/constant/index.ts mode change 100644 => 100755 src/modules/wallets/entities/transaction.entity.ts mode change 100644 => 100755 src/modules/wallets/entities/wallet.entity.ts mode change 100644 => 100755 src/modules/wallets/enums/transaction-type.enum.ts mode change 100644 => 100755 src/modules/wallets/providers/wallets.service.ts mode change 100644 => 100755 src/modules/wallets/repositories/wallet-transactions.repository.ts mode change 100644 => 100755 src/modules/wallets/repositories/wallets.repository.ts mode change 100644 => 100755 src/modules/wallets/wallets.controller.ts mode change 100644 => 100755 src/modules/wallets/wallets.module.ts mode change 100644 => 100755 src/templates/email-verify.hbs mode change 100644 => 100755 test/app.e2e-spec.ts mode change 100644 => 100755 test/jest-e2e.json mode change 100644 => 100755 tsconfig.build.json mode change 100644 => 100755 tsconfig.json 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 0000000000000000000000000000000000000000..3ab482a579b4fa49b00151620f5452e1ec7f3e1e GIT binary patch literal 275906 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

tB}s=)z4RcBtBQLXV_Z`# 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 literal 0 HcmV?d00001 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