From b1ac001211764eab9e5fc6a0e0cecdc214c53296 Mon Sep 17 00:00:00 2001 From: Tomm Jobit Date: Fri, 30 Dec 2022 19:02:56 +0100 Subject: [PATCH 1/3] feat: add a welcome drop near user --- .../api/controllers/dropy.controller.ts | 12 ++++++++ src/services/api/routes/dropy.route.ts | 2 ++ src/services/api/services/dropy.service.ts | 29 ++++++++++++++++++- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/services/api/controllers/dropy.controller.ts b/src/services/api/controllers/dropy.controller.ts index cc1aedb..8c7b3c7 100644 --- a/src/services/api/controllers/dropy.controller.ts +++ b/src/services/api/controllers/dropy.controller.ts @@ -92,3 +92,15 @@ export async function deleteDropy(req: AuthenticatedRequest, res: Response, next next(error); } } + +export async function welcomeDropy(req: AuthenticatedRequest, res: Response, next: NextFunction): Promise { + try { + const { latitude, longitude } = req.body; + utils.throwIfNotNumber(latitude, longitude); + + const welcomeDropy = await dropyService.welcomeDropy(req.user, latitude, longitude); + res.status(200).json(welcomeDropy); + } catch (error) { + next(error); + } +} diff --git a/src/services/api/routes/dropy.route.ts b/src/services/api/routes/dropy.route.ts index 44d41bc..b71f8ec 100644 --- a/src/services/api/routes/dropy.route.ts +++ b/src/services/api/routes/dropy.route.ts @@ -17,5 +17,7 @@ export function getRouter() { router.get(`${path}/:id/media`, authMiddleware as any, dropyController.getDropyMedia, errorMiddleware); router.get(`${path}/:id`, authMiddleware as any, dropyController.getDropy, errorMiddleware); + router.post(`${path}/welcomeDropy`, authMiddleware as any, dropyController.welcomeDropy, errorMiddleware); + return router; } diff --git a/src/services/api/services/dropy.service.ts b/src/services/api/services/dropy.service.ts index fb50c54..98f1166 100644 --- a/src/services/api/services/dropy.service.ts +++ b/src/services/api/services/dropy.service.ts @@ -1,9 +1,11 @@ import client from '@/client'; import { HttpException } from '@exceptions/HttpException'; -import { MediaType, User } from '@prisma/client'; +import { Dropy, MediaType, User } from '@prisma/client'; import { deleteContent } from '@/utils/content.utils'; import { DropyAround, DropyWithUsers } from '@/interfaces/dropy.interface'; import { SimplifiedUser } from '@/interfaces/user.interface'; +import Geohash from 'ngeohash'; +import { GEOHASH_SIZE } from '@/utils/geolocation.utils'; export async function getDropy(dropyId: number): Promise { const dropy = await client.dropy.findUnique({ @@ -156,3 +158,28 @@ export async function getUnretrievedDropyInfos(dropyId: number): Promise { + const devUsers = await client.user.findMany({ + where: { isDeveloper: true }, + }); + + if (devUsers.length == 0) { + throw new HttpException(500, `No developer user found`); + } + + const devUserEmitter = devUsers[Math.floor(Math.random() * devUsers.length)]; + + const welcomeDropy = await client.dropy.create({ + data: { + emitterId: devUserEmitter.id, + latitude: latitude + (Math.random() - 0.5) * 0.01, + longitude: longitude + (Math.random() - 0.2) * 0.01, + mediaType: MediaType.PICTURE, + mediaUrl: devUserEmitter.avatarUrl, + geohash: Geohash.encode_int(latitude, longitude, GEOHASH_SIZE).toString(), + }, + }); + + return welcomeDropy; +} From df43e79e3143862770fca54dcb13774017f10446 Mon Sep 17 00:00:00 2001 From: Tomm Jobit Date: Sat, 31 Dec 2022 10:20:04 +0100 Subject: [PATCH 2/3] fix: welcome drop distance --- src/services/api/services/dropy.service.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/services/api/services/dropy.service.ts b/src/services/api/services/dropy.service.ts index 98f1166..12511bf 100644 --- a/src/services/api/services/dropy.service.ts +++ b/src/services/api/services/dropy.service.ts @@ -170,14 +170,17 @@ export async function welcomeDropy(user: User, latitude: number, longitude: numb const devUserEmitter = devUsers[Math.floor(Math.random() * devUsers.length)]; + const randLatitude = latitude + (Math.random() - 0.2) * 0.01; + const randLongitude = longitude + (Math.random() - 0.2) * 0.01; + const welcomeDropy = await client.dropy.create({ data: { emitterId: devUserEmitter.id, - latitude: latitude + (Math.random() - 0.5) * 0.01, - longitude: longitude + (Math.random() - 0.2) * 0.01, + latitude: randLatitude, + longitude: randLongitude, mediaType: MediaType.PICTURE, mediaUrl: devUserEmitter.avatarUrl, - geohash: Geohash.encode_int(latitude, longitude, GEOHASH_SIZE).toString(), + geohash: Geohash.encode_int(randLatitude, randLongitude, GEOHASH_SIZE).toString(), }, }); From 1d06d4cf1cb6961bb7ac547f44f4823c90fe8fe6 Mon Sep 17 00:00:00 2001 From: Tomm Jobit Date: Sun, 1 Jan 2023 11:05:58 +0100 Subject: [PATCH 3/3] ci: offset fixe, rename onboardingDropy --- .../api/controllers/dropy.controller.ts | 6 +++--- src/services/api/routes/dropy.route.ts | 2 +- src/services/api/services/dropy.service.ts | 18 ++++++++++-------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/services/api/controllers/dropy.controller.ts b/src/services/api/controllers/dropy.controller.ts index 8c7b3c7..33d4a81 100644 --- a/src/services/api/controllers/dropy.controller.ts +++ b/src/services/api/controllers/dropy.controller.ts @@ -93,13 +93,13 @@ export async function deleteDropy(req: AuthenticatedRequest, res: Response, next } } -export async function welcomeDropy(req: AuthenticatedRequest, res: Response, next: NextFunction): Promise { +export async function onboardingDropy(req: AuthenticatedRequest, res: Response, next: NextFunction): Promise { try { const { latitude, longitude } = req.body; utils.throwIfNotNumber(latitude, longitude); - const welcomeDropy = await dropyService.welcomeDropy(req.user, latitude, longitude); - res.status(200).json(welcomeDropy); + const onboardingDropy = await dropyService.onboardingDropy(req.user, latitude, longitude); + res.status(200).json(onboardingDropy); } catch (error) { next(error); } diff --git a/src/services/api/routes/dropy.route.ts b/src/services/api/routes/dropy.route.ts index b71f8ec..4b446cb 100644 --- a/src/services/api/routes/dropy.route.ts +++ b/src/services/api/routes/dropy.route.ts @@ -17,7 +17,7 @@ export function getRouter() { router.get(`${path}/:id/media`, authMiddleware as any, dropyController.getDropyMedia, errorMiddleware); router.get(`${path}/:id`, authMiddleware as any, dropyController.getDropy, errorMiddleware); - router.post(`${path}/welcomeDropy`, authMiddleware as any, dropyController.welcomeDropy, errorMiddleware); + router.post(`${path}/onboardingDropy`, authMiddleware as any, dropyController.onboardingDropy, errorMiddleware); return router; } diff --git a/src/services/api/services/dropy.service.ts b/src/services/api/services/dropy.service.ts index 12511bf..3bc66aa 100644 --- a/src/services/api/services/dropy.service.ts +++ b/src/services/api/services/dropy.service.ts @@ -159,7 +159,7 @@ export async function getUnretrievedDropyInfos(dropyId: number): Promise { +export async function onboardingDropy(user: User, latitude: number, longitude: number): Promise { const devUsers = await client.user.findMany({ where: { isDeveloper: true }, }); @@ -170,19 +170,21 @@ export async function welcomeDropy(user: User, latitude: number, longitude: numb const devUserEmitter = devUsers[Math.floor(Math.random() * devUsers.length)]; - const randLatitude = latitude + (Math.random() - 0.2) * 0.01; - const randLongitude = longitude + (Math.random() - 0.2) * 0.01; + const offsetPosition = 0.0005; - const welcomeDropy = await client.dropy.create({ + const onboardingDropyLatitude = latitude + offsetPosition; + const onboardingDropyLongitude = longitude + offsetPosition; + + const onboardingDropy = await client.dropy.create({ data: { emitterId: devUserEmitter.id, - latitude: randLatitude, - longitude: randLongitude, + latitude: onboardingDropyLatitude, + longitude: onboardingDropyLongitude, mediaType: MediaType.PICTURE, mediaUrl: devUserEmitter.avatarUrl, - geohash: Geohash.encode_int(randLatitude, randLongitude, GEOHASH_SIZE).toString(), + geohash: Geohash.encode_int(onboardingDropyLatitude, onboardingDropyLongitude, GEOHASH_SIZE).toString(), }, }); - return welcomeDropy; + return onboardingDropy; }