diff --git a/src/services/api/controllers/dropy.controller.ts b/src/services/api/controllers/dropy.controller.ts index cc1aedb..33d4a81 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 onboardingDropy(req: AuthenticatedRequest, res: Response, next: NextFunction): Promise { + try { + const { latitude, longitude } = req.body; + utils.throwIfNotNumber(latitude, longitude); + + 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 44d41bc..4b446cb 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}/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 fb50c54..3bc66aa 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,33 @@ 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 offsetPosition = 0.0005; + + const onboardingDropyLatitude = latitude + offsetPosition; + const onboardingDropyLongitude = longitude + offsetPosition; + + const onboardingDropy = await client.dropy.create({ + data: { + emitterId: devUserEmitter.id, + latitude: onboardingDropyLatitude, + longitude: onboardingDropyLongitude, + mediaType: MediaType.PICTURE, + mediaUrl: devUserEmitter.avatarUrl, + geohash: Geohash.encode_int(onboardingDropyLatitude, onboardingDropyLongitude, GEOHASH_SIZE).toString(), + }, + }); + + return onboardingDropy; +}