From aedfc8397ef6bce3631a57d4ed5e1955181cee4d Mon Sep 17 00:00:00 2001 From: "Mr. Robot" Date: Fri, 12 May 2023 00:15:05 +0600 Subject: [PATCH 1/5] initial commit. --- server/api/events/index.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/server/api/events/index.ts b/server/api/events/index.ts index b777cbe..13406c9 100644 --- a/server/api/events/index.ts +++ b/server/api/events/index.ts @@ -1,8 +1,28 @@ import { getQuery } from 'h3' +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + + +async function findEventsWithinDistance(city:string, lng:number, lat:number, distanceInKm:number) { + const events = await prisma.$queryRaw` + SELECT * + FROM events + WHERE ST_Distance_Sphere( + ST_MakePoint(${lng}, ${lat}), + ST_MakePoint(venues_longitude, venues_latitude) + ) <= ${distanceInKm * 1000} + AND venues.city = ${city} + ` + return events; +} + export default defineEventHandler((event) => { const { username } = getQuery(event) + + return event.context.prisma.event.findMany({ where: { startDate: { From 75502949d9e9669b516c0914f2e80d6fdc18a4dd Mon Sep 17 00:00:00 2001 From: "Mr. Robot" Date: Thu, 18 May 2023 23:17:23 +0600 Subject: [PATCH 2/5] add postgis --- docker-compose.yml | 13 +++++++++ server/api/events/index.ts | 55 +++++++++++--------------------------- 2 files changed, 29 insertions(+), 39 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index e81b054..5dc6137 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,5 +10,18 @@ services: POSTGRES_DB: db POSTGRES_USER: user POSTGRES_PASSWORD: password + + postgis: + image: postgis/postgis + volumes: + - postgis-data:/var/lib/postgis/data + ports: + - 5431:5431 + environment: + POSTGRES_DB: db + POSTGRES_USER: user + POSTGRES_PASSWORD: password + volumes: postgres-data: + postgis-data: diff --git a/server/api/events/index.ts b/server/api/events/index.ts index 13406c9..1af836d 100644 --- a/server/api/events/index.ts +++ b/server/api/events/index.ts @@ -4,46 +4,23 @@ import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() -async function findEventsWithinDistance(city:string, lng:number, lat:number, distanceInKm:number) { - const events = await prisma.$queryRaw` - SELECT * - FROM events +export default defineEventHandler(async (event) => { + + const { lng, lat, distance } = getQuery(event) + + const events = await prisma.$queryRaw` + SELECT * + FROM "Event" + WHERE venueId IN ( + SELECT id + FROM "Profile" WHERE ST_Distance_Sphere( ST_MakePoint(${lng}, ${lat}), - ST_MakePoint(venues_longitude, venues_latitude) - ) <= ${distanceInKm * 1000} - AND venues.city = ${city} - ` - return events; -} + ST_MakePoint(lng, lat) + ) <= ${(distance as number ?? 50) * 1000} + ); + `; - -export default defineEventHandler((event) => { - const { username } = getQuery(event) - - - - return event.context.prisma.event.findMany({ - where: { - startDate: { - gte: new Date() - }, - venue: { - city: { - username - } - } - }, - include: { - venue: true, - organizer: true, - styles: true - }, - orderBy: [ - { - startDate: 'asc' - } - ], - take: 10 - }) + return events; + }) From 91fcd117e201d376e858caff474de09a85db8072 Mon Sep 17 00:00:00 2001 From: "Mr. Robot" Date: Fri, 19 May 2023 00:58:34 +0600 Subject: [PATCH 3/5] format with prettier. --- .vscode/settings.json | 10 +++------- server/api/events/index.ts | 19 ++++++++----------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 1719b8d..60cd1bf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,18 +13,14 @@ "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, "[typescript]": { - "editor.defaultFormatter": "dbaeumer.vscode-eslint" + "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "eslint.validate": [ - "javascript", - "typescript", - "vue" - ], + "eslint.validate": ["javascript", "typescript", "vue"], // Tailwind Support, see https://tailwindcss.nuxt.dev/tailwind/editor-support "tailwindCSS.experimental.configFile": ".nuxt/tailwind.config.cjs", "files.associations": { "*.css": "tailwindcss" }, // Auto-complete `.value` attribute when volar is installed - "volar.autoCompleteRefs": true, + "volar.autoCompleteRefs": true } diff --git a/server/api/events/index.ts b/server/api/events/index.ts index 1af836d..a71ebf1 100644 --- a/server/api/events/index.ts +++ b/server/api/events/index.ts @@ -1,13 +1,11 @@ -import { getQuery } from 'h3' -import { PrismaClient } from '@prisma/client' - -const prisma = new PrismaClient() +import { getQuery } from "h3"; +import { PrismaClient } from "@prisma/client"; +const prisma = new PrismaClient(); export default defineEventHandler(async (event) => { - - const { lng, lat, distance } = getQuery(event) - + const { lng, lat, distance } = getQuery(event); + const events = await prisma.$queryRaw` SELECT * FROM "Event" @@ -17,10 +15,9 @@ export default defineEventHandler(async (event) => { WHERE ST_Distance_Sphere( ST_MakePoint(${lng}, ${lat}), ST_MakePoint(lng, lat) - ) <= ${(distance as number ?? 50) * 1000} + ) <= ${((distance as number) ?? 50) * 1000} ); `; - return events; - -}) + return events; +}); From 13d785055cf285e61c6843dcf64339c3c34245fd Mon Sep 17 00:00:00 2001 From: "Mr. Robot" Date: Fri, 19 May 2023 00:59:20 +0600 Subject: [PATCH 4/5] add distance, lng, lat for query. --- pages/[username].vue | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/pages/[username].vue b/pages/[username].vue index 16eff0c..9eb4353 100644 --- a/pages/[username].vue +++ b/pages/[username].vue @@ -1,15 +1,22 @@ From b075972e282d2685f6099dd3b6efb7e4fd202cb8 Mon Sep 17 00:00:00 2001 From: "Mr. Robot" Date: Mon, 22 May 2023 22:08:42 +0600 Subject: [PATCH 5/5] get events by lng, lat & distance. --- docker-compose.yml | 4 +--- server/api/events/index.ts | 30 +++++++++++++++++++----------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 5dc6137..7a71aee 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,8 +4,6 @@ services: image: postgres volumes: - postgres-data:/var/lib/postgresql/data - ports: - - 5432:5432 environment: POSTGRES_DB: db POSTGRES_USER: user @@ -16,7 +14,7 @@ services: volumes: - postgis-data:/var/lib/postgis/data ports: - - 5431:5431 + - 5432:5432 environment: POSTGRES_DB: db POSTGRES_USER: user diff --git a/server/api/events/index.ts b/server/api/events/index.ts index a71ebf1..e4a9dc5 100644 --- a/server/api/events/index.ts +++ b/server/api/events/index.ts @@ -4,19 +4,27 @@ import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); export default defineEventHandler(async (event) => { - const { lng, lat, distance } = getQuery(event); + const { + lng: longitude, + lat: latitude, + distance: distanceInKm, + } = getQuery(event); + + const lng = Number(longitude); + const lat = Number(latitude); + const distance = Number(distanceInKm); const events = await prisma.$queryRaw` - SELECT * - FROM "Event" - WHERE venueId IN ( - SELECT id - FROM "Profile" - WHERE ST_Distance_Sphere( - ST_MakePoint(${lng}, ${lat}), - ST_MakePoint(lng, lat) - ) <= ${((distance as number) ?? 50) * 1000} - ); + SELECT * + FROM "Event" + WHERE "venueId" IN ( + SELECT "Profile"."id" + FROM "Profile" + WHERE ST_Distance( + ST_MakePoint(${lng}, ${lat})::geography, + ST_MakePoint("Profile"."lng", "Profile"."lat")::geography + ) <= (${distance} * 80000) + ); `; return events;