@@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common';
 import PlanOrder from 'src/common/constants/planOrder.enum';
 import { RoleEnum } from 'src/common/constants/role.type';
 import SortOrder from 'src/common/constants/sortOrder.enum';
+import { StatusEnum } from 'src/common/constants/status.type';
 import { TRIP_TYPE } from 'src/common/constants/tripType.type';
 import IPlan from 'src/common/domains/plan/plan.interface';
 import PlanMapper from 'src/common/domains/plan/plan.mapper';
@@ -16,7 +17,8 @@ export default class PlanRepository {
   constructor(private readonly db: DBClient) {}
 
   async findMany(options: PlanQueryOptions): Promise<IPlan[]> {
-    const { orderBy, page, pageSize } = options || {};
+    const { orderBy, page, pageSize, reviewed } = options || {};
+    const isHasReview = reviewed === true || reviewed === false;
 
     const whereConditions = this.buildWhereConditions(options);
     const orderByField: PlanOrderByField =
@@ -29,9 +31,20 @@ export default class PlanRepository {
       skip: pageSize * (page - 1),
       include: {
         dreamer: { select: { id: true, nickName: true } },
-        assignees: { select: { id: true, nickName: true } }
+        assignees: { select: { id: true, nickName: true } },
+        quotes: isHasReview
+          ? {
+              where: { isConfirmed: true },
+              select: {
+                id: true,
+                price: true,
+                maker: { select: { id: true, nickName: true, makerProfile: { select: { image: true } } } }
+              }
+            }
+          : {}
       }
     });
+
     const domainPlans = plans.map((plan) => new PlanMapper(plan).toDomain());
     return domainPlans;
   }
@@ -79,7 +92,7 @@ export default class PlanRepository {
   }
 
   async create(data: IPlan): Promise<IPlan> {
-    const { title, tripDate, tripType, serviceArea, details, address, status, dreamerId } = data.toDB();
+    const { title, tripDate, tripType, serviceArea, details, address, dreamerId } = data.toDB();
     const plan = await this.db.plan.create({
       data: {
         title,
@@ -88,7 +101,7 @@ export default class PlanRepository {
         serviceArea,
         details,
         address,
-        status,
+        status: StatusEnum.PENDING,
         dreamer: { connect: { id: dreamerId } }
       },
       include: {
@@ -147,7 +160,7 @@ export default class PlanRepository {
   }
 
   private buildWhereConditions(whereOptions: PlanQueryOptions): PlanWhereConditions {
-    const { keyword, tripDate, tripType, serviceArea, isAssigned, userId, status, role } = whereOptions;
+    const { keyword, tripDate, tripType, serviceArea, isAssigned, userId, status, role, reviewed } = whereOptions;
 
     const whereConditions: PlanWhereConditions = {
       isDeletedAt: null
@@ -156,7 +169,7 @@ export default class PlanRepository {
     if (tripDate) {
       whereConditions.tripDate = { lte: tripDate };
       whereConditions.status = { in: status };
-    } //NOTE.스케줄러 조건
+    } //NOTE.스케줄러 조건 + readyToCompete 조건
 
     if (serviceArea) whereConditions.serviceArea = { in: serviceArea };
 
@@ -165,13 +178,14 @@ export default class PlanRepository {
     if (role === RoleEnum.MAKER) {
       whereConditions.status = { in: status }; //NOTE. Maker 전용 api 조건
       whereConditions.quotes = { some: { makerId: { not: userId } } };
-    } else if (status && userId) {
-      whereConditions.status = { in: status };
+      if (isAssigned === true) whereConditions.assignees = { some: { id: userId } }; //NOTE. 지정견적 조회 API
+    } else if (userId) {
       whereConditions.dreamerId = userId; //NOTE. Dreamer 전용 api 조건
+      if (status) whereConditions.status = { in: status };
+      if (reviewed === true) whereConditions.review = { isNot: null };
+      else if (reviewed === false) whereConditions.review = { is: null };
     }
 
-    if (isAssigned === true) whereConditions.assignees = { some: { id: userId } }; //NOTE. 지정견적 조회 API
-
     if (keyword) {
       whereConditions.OR = [
         {

리뷰: 프리즈마에서 1:1 관계성 필드일 때 id로 체크하는게 가장 좋지만 plan과 review는 리뷰만 플랜 id를 가지고 있죠
그렇기에 리뷰가 있는지 없는지를 체크하기 위한 문법입니다. 혹시 다른 문법을 아시는게 있으신가요?