prisma rawQuery enum 검색 시 주의사항, 위치 기반 좌표 검색

agnusdei·2024년 6월 27일
    const _stageCondition =
      stage && stage !== 'ALL'
        ? `AND "DetailGwangjuStartupCompany"."stage" = '${stage}'`
        : '';

    const _yearCondition =
      year && year !== '전체'
        ? `AND "DetailGwangjuStartupCompany"."year" = ${year}`
        : '';

    const _queryCondition =
      query && query.length > 0
        ? `AND "GwangjuStartupCompany"."name" LIKE '%${query}%'`
        : '';

    // 동적 _query 생성
    const _query = `
        SELECT DISTINCT "DetailGwangjuStartupCompany"."gwangjuStartupCompanyId"
        FROM "DetailGwangjuStartupCompany"
        LEFT OUTER JOIN "GwangjuStartupCompany"
        ON "GwangjuStartupCompany"."id" = "DetailGwangjuStartupCompany"."gwangjuStartupCompanyId"
        WHERE 1 = 1
        ${_stageCondition}
        ${_yearCondition}
        ${_queryCondition}
        LIMIT ${pageSize}
        OFFSET ${(pageNo - 1) * pageSize}
      `;

    const result: any[] = await this.prismaService.$queryRawUnsafe(_query);
  • enum 타입은 반드시 '으로 감싸야합니다.' '${stage}'` 처럼

    const trainerUsers: User[] =
      (await this.prismaService.$queryRawUnsafe(`
    SELECT u."id", u."address", u."type", u."name", u."lat", u."lng", 
           (6371 * acos(cos(radians(${lat})) * cos(radians(u.lat)) * 
           cos(radians(u.lng) - radians(${lng})) + 
           sin(radians(${lat})) * sin(radians(u.lat)))) AS distance
    FROM "User" AS u
    WHERE (6371 * acos(cos(radians(${lat})) * cos(radians(u.lat)) * 
           cos(radians(u.lng) - radians(${lng})) + 
           sin(radians(${lat})) * sin(radians(u.lat)))) <= ${maxDistance}
      AND u."deletedAt" IS NULL
      AND u."type" = 'TRAINER'
    ORDER BY distance ASC
    LIMIT ${option.pageSize} OFFSET ${(option.pageNo - 1) * option.pageSize}
  `)) ?? [];
profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글