update: add new route to get service with slug

This commit is contained in:
mahyargdz
2025-05-04 16:58:47 +03:30
parent d35ba6c331
commit acd005b6cd
5 changed files with 96 additions and 3 deletions
@@ -135,6 +135,52 @@ export class DanakServicesRepository extends Repository<DanakService> {
return serviceQueryBuilder.getOne();
}
//+********************
async getServiceBySlug(slug: string, isAdmin: boolean) {
const serviceQueryBuilder = this.createQueryBuilder("service")
.where("service.deletedAt IS NULL")
.leftJoin("service.category", "category")
.addSelect(["category.id", "category.title"])
.leftJoinAndSelect("service.images", "images")
.leftJoinAndSelect("service.subscriptionPlans", "subscriptionPlans")
.leftJoinAndSelect("subscriptionPlans.directDiscount", "directDiscount", "directDiscount.id IS NOT NULL")
.leftJoin("service.reviews", "reviews", "reviews.status = :reviewStatus", { reviewStatus: ReviewStatus.APPROVED })
.leftJoin("reviews.user", "user")
.addSelect([
"reviews.id",
"reviews.comment",
"reviews.rating",
"reviews.title",
"reviews.createdAt",
"reviews.status",
"user.id",
"user.firstName",
"user.lastName",
"user.profilePic",
])
// .loadRelationCountAndMap("service.reviewCount", "service.reviews")
// .addSelect(
// (subQuery) =>
// subQuery
// .select("CAST(AVG(rating) AS DECIMAL(10,2))", "averageRating")
// .from(DanakServiceReview, "r")
// .where("r.serviceId = service.id")
// .andWhere("r.status = :reviewStatus", { reviewStatus: ReviewStatus.APPROVED }),
// "averageRating",
// )
.andWhere("service.slug = :slug", { slug })
.groupBy("service.id,category.id, images.id, subscriptionPlans.id, reviews.id, user.id, directDiscount.id");
if (!isAdmin) {
serviceQueryBuilder
.andWhere("service.isActive = :isActive", { isActive: true })
.andWhere("subscriptionPlans.isActive = :planActive", { planActive: true });
}
serviceQueryBuilder.orderBy("subscriptionPlans.price", "ASC");
return serviceQueryBuilder.getOne();
}
//+********************
async getUsersByService(serviceId: string) {
const users = await this.createQueryBuilder("service")
.innerJoin("service.subscriptionPlans", "subscriptionPlans")