feat: add new route to check user access to the service or not

This commit is contained in:
mahyargdz
2025-08-23 09:21:11 +03:30
parent 1d76138ead
commit 2bb6859afc
6 changed files with 71 additions and 8 deletions
@@ -18,6 +18,7 @@ import { AddSubscriptionsToServiceDto } from "../DTO/create-subscription.dto";
import { SearchUserSubsQueryDto } from "../DTO/search-user-subs-query.dto";
import { ServiceSubsQueryDto } from "../DTO/service-subs-query.dto";
import { SubscribeServiceDto } from "../DTO/subscribe-service.dto";
import { SubscriptionAccessDto } from "../DTO/subscription-access-dto";
import { UpdateSubscriptionPlanDto } from "../DTO/update-subscription.dto";
import { SubscriptionPlan } from "../entities/subscription.entity";
import { UserSubscription } from "../entities/user-subscription.entity";
@@ -360,6 +361,19 @@ export class SubscriptionsService {
plan: { service: true },
staff: true,
},
order: { endDate: "DESC" },
select: {
id: true,
businessName: true,
businessPhone: true,
description: true,
slug: true,
status: true,
endDate: true,
startDate: true,
plan: { id: true, name: true, duration: true, service: { id: true, name: true, slug: true, title: true } },
staff: { id: true, firstName: true, lastName: true, email: true, phone: true },
},
});
if (!userSubscriptions.length) throw new ForbiddenException(SubscriptionMessage.USER_DOES_NOT_HAVE_ACCESS);
@@ -368,15 +382,28 @@ export class SubscriptionsService {
}
//************************************ */
async checkUserAccessToService(userId: string, serviceId: string) {
async checkUserAccessToService(serviceId: string, accessDto: SubscriptionAccessDto) {
const userSubscriptions = await this.userSubscriptionsRepository.findOne({
where: { user: { id: userId }, plan: { service: { id: serviceId } }, status: SubscriptionStatus.ACTIVE },
where: [
{
id: accessDto.danakSubscriptionId,
user: { id: accessDto.userId },
plan: { service: { id: serviceId } },
status: SubscriptionStatus.ACTIVE,
},
{
id: accessDto.danakSubscriptionId,
staff: { id: accessDto.userId },
plan: { service: { id: serviceId } },
status: SubscriptionStatus.ACTIVE,
},
],
relations: {
plan: { service: true },
staff: true,
},
});
return userSubscriptions ? true : false;
return { hasAccess: !!userSubscriptions && userSubscriptions.status === SubscriptionStatus.ACTIVE };
}
//************************************ */