From 7ca503667ffd193f90b7c0beeb1b9847f2036cf9 Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev <572431+veikab@users.noreply.github.com> Date: Fri, 8 May 2026 15:54:15 +0700 Subject: [PATCH] Expose places over GraphQL --- src/graphql/places.ts | 37 +++++++++++++++++++++++++++++++++++++ src/graphql/schema.ts | 6 ++++++ 2 files changed, 43 insertions(+) create mode 100644 src/graphql/places.ts diff --git a/src/graphql/places.ts b/src/graphql/places.ts new file mode 100644 index 0000000..877758d --- /dev/null +++ b/src/graphql/places.ts @@ -0,0 +1,37 @@ +import { prisma } from '../prisma.js'; + +function serializeVoiceExperience( + experience: Awaited>[number], +) { + return { + ...experience, + createdAt: experience.createdAt.toISOString(), + }; +} + +export async function listPlaces() { + const places = await prisma.place.findMany({ + include: { + experiences: { + orderBy: { createdAt: 'desc' }, + take: 10, + }, + }, + orderBy: { updatedAt: 'desc' }, + }); + + return places.map((place) => ({ + ...place, + experiences: place.experiences.map(serializeVoiceExperience), + })); +} + +export async function listVoiceExperiences() { + const experiences = await prisma.voiceExperience.findMany({ + include: { place: true }, + orderBy: { createdAt: 'desc' }, + take: 100, + }); + + return experiences.map(serializeVoiceExperience); +} diff --git a/src/graphql/schema.ts b/src/graphql/schema.ts index d52d2a8..9b51824 100644 --- a/src/graphql/schema.ts +++ b/src/graphql/schema.ts @@ -1,4 +1,5 @@ import { GraphQLJSONObject } from './scalars.js'; +import { listPlaces, listVoiceExperiences } from './places.js'; import { createVoiceExperience } from './voice-experiences.js'; export const schema = /* GraphQL */ ` @@ -19,6 +20,7 @@ export const schema = /* GraphQL */ ` name: String! latitude: Float! longitude: Float! + experiences: [VoiceExperience!]! } type VoiceExperience { @@ -43,6 +45,8 @@ export const schema = /* GraphQL */ ` type Query { health: String! + places: [Place!]! + voiceExperiences: [VoiceExperience!]! } type Mutation { @@ -54,6 +58,8 @@ export const resolvers = { JSON: GraphQLJSONObject, Query: { health: () => 'ok', + places: () => listPlaces(), + voiceExperiences: () => listVoiceExperiences(), }, Mutation: { createVoiceExperience: async (