From f1d25b895a850f3de53d4df2f2c08cf3794016d0 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Mon, 16 Mar 2026 16:40:12 +0330 Subject: [PATCH] add : toggle business activeness --- .npmrc | 1 + src/common/enums/message.enum.ts | 1 + src/modules/auth/services/auth.service.ts | 10 +++++++--- src/modules/businesses/businesses.controller.ts | 8 ++++++++ src/modules/businesses/entities/business.entity.ts | 3 +++ .../businesses/services/businesses.service.ts | 13 +++++++++++++ 6 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..ced459f --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry=https://mirror-npm.runflare.com diff --git a/src/common/enums/message.enum.ts b/src/common/enums/message.enum.ts index 1dac965..ada7321 100755 --- a/src/common/enums/message.enum.ts +++ b/src/common/enums/message.enum.ts @@ -62,6 +62,7 @@ export const enum AuthMessage { TOKEN_EXPIRED_OR_INVALID = "توکن منقضی شده یا نامعتبر است", ACCESS_DENIED = "دسترسی شما محدود شده است", USER_ACCOUNT_INACTIVE = "حساب کاربری شما غیر فعال است", + BUSINESS_ACCOUNT_INACTIVE = "حساب کاربری اصلی شما غیر فعال است", TOKEN_MISSED_OR_EXPIRED = "توکن مفقود یا منقضی شده است", OLD_PASSWORD_REQUIRED = "رمز عبور قبلی الزامی است", PASSWORD_CHANGE_FAILED = "تغییر رمز عبور با مشکل روبرد شد", diff --git a/src/modules/auth/services/auth.service.ts b/src/modules/auth/services/auth.service.ts index fa3ab64..da4ed90 100644 --- a/src/modules/auth/services/auth.service.ts +++ b/src/modules/auth/services/auth.service.ts @@ -24,7 +24,7 @@ export class AuthService { private readonly twoFactorService: TwoFactorService, private readonly mailServerService: MailServerService, private readonly em: EntityManager, - ) {} + ) { } //============================================== //============================================== @@ -33,7 +33,11 @@ export class AuthService { const user = await this.checkUserLoginCredentialWithEmail(email, password); - if (!user.isActive) throw new BadRequestException(AuthMessage.USER_ACCOUNT_INACTIVE); + if(!user.business.isActive){ + throw new BadRequestException(AuthMessage.BUSINESS_ACCOUNT_INACTIVE); + } + + if (!user.isActive) throw new BadRequestException(AuthMessage.USER_ACCOUNT_INACTIVE); if (user.is2FAEnabled) { if (!twoFactorToken) { @@ -113,7 +117,7 @@ export class AuthService { //============================================== private async checkUserLoginCredentialWithEmail(email: string, password: string) { - const user = await this.userRepository.findOne({ emailAddress: email, isActive: true }); + const user = await this.userRepository.findOne({ emailAddress: email }, { populate: ['business'] }); if (!user) throw new BadRequestException(AuthMessage.INVALID_PASSWORD); const passCompare = await this.passwordService.comparePasswords(password, user.password); diff --git a/src/modules/businesses/businesses.controller.ts b/src/modules/businesses/businesses.controller.ts index 31e0581..05bb88a 100644 --- a/src/modules/businesses/businesses.controller.ts +++ b/src/modules/businesses/businesses.controller.ts @@ -68,4 +68,12 @@ export class BusinessesController { getPaginatedList(@Query() query: FindBusinessesDto) { return this.businessesService.findBusinesses(query) } + + @Patch(":id/active/toggle") + @AuthGuards() + @SuperAdminRoute() + @ApiOperation({ summary: "Active/Deactive a businesse" }) + toggleActiveness(@Param('id') id: string) { + return this.businessesService.businessToggleActive(id) + } } diff --git a/src/modules/businesses/entities/business.entity.ts b/src/modules/businesses/entities/business.entity.ts index f875b47..a53fa17 100644 --- a/src/modules/businesses/entities/business.entity.ts +++ b/src/modules/businesses/entities/business.entity.ts @@ -31,6 +31,9 @@ export class Business extends BaseEntity { @Property({ type: "bigint", default: 10_737_418_240 }) remainingQuota!: number & Opt; + @Property({ default: true, nullable: false }) + isActive: boolean & Opt; + //========================= @OneToOne(() => Domain, (domain) => domain.business, { nullable: true, cascade: [Cascade.ALL] }) diff --git a/src/modules/businesses/services/businesses.service.ts b/src/modules/businesses/services/businesses.service.ts index fc675ae..9f309ac 100644 --- a/src/modules/businesses/services/businesses.service.ts +++ b/src/modules/businesses/services/businesses.service.ts @@ -164,7 +164,20 @@ export class BusinessesService { return this.quotaPurchaseService.purchaseQuota(business, purchaseDto); } //********************************************* */ + async findBusinesses(query: FindBusinessesDto) { return this.businessRepository.findAllPaginated(query) } + + //********************************************* */ + + async businessToggleActive(businessId: string) { + const business = await this.getBusinessById(businessId) + + business.isActive=!business.isActive + + await this.em.flush() + + return business + } }