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}%'`
: '';
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}
`)) ?? [];