Add Telegram ownership for voice reviews
All checks were successful
Build and deploy Backend / build (push) Successful in 1m1s
All checks were successful
Build and deploy Backend / build (push) Successful in 1m1s
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
import { GraphQLJSONObject } from './scalars.js';
|
||||
import { getOrCreateTelegramUser, requireTelegramUser } from '../auth/telegram.js';
|
||||
import { listPlaces, listVoiceExperiences } from './places.js';
|
||||
import { createVoiceExperience } from './voice-experiences.js';
|
||||
|
||||
export type GraphqlContext = {
|
||||
telegramInitData?: string;
|
||||
};
|
||||
|
||||
export const schema = /* GraphQL */ `
|
||||
scalar JSON
|
||||
|
||||
@@ -23,9 +28,20 @@ export const schema = /* GraphQL */ `
|
||||
experiences: [VoiceExperience!]!
|
||||
}
|
||||
|
||||
type User {
|
||||
id: ID!
|
||||
telegramId: String!
|
||||
username: String
|
||||
firstName: String
|
||||
lastName: String
|
||||
photoUrl: String
|
||||
languageCode: String
|
||||
}
|
||||
|
||||
type VoiceExperience {
|
||||
id: ID!
|
||||
place: Place!
|
||||
user: User
|
||||
status: VoiceExperienceStatus!
|
||||
durationSeconds: Int!
|
||||
audioObjectKey: String!
|
||||
@@ -43,6 +59,14 @@ export const schema = /* GraphQL */ `
|
||||
audioObjectKey: String!
|
||||
}
|
||||
|
||||
input AuthenticateTelegramInput {
|
||||
initData: String!
|
||||
}
|
||||
|
||||
type AuthPayload {
|
||||
user: User!
|
||||
}
|
||||
|
||||
type Query {
|
||||
health: String!
|
||||
places: [Place!]!
|
||||
@@ -50,6 +74,7 @@ export const schema = /* GraphQL */ `
|
||||
}
|
||||
|
||||
type Mutation {
|
||||
authenticateTelegram(input: AuthenticateTelegramInput!): AuthPayload!
|
||||
createVoiceExperience(input: CreateVoiceExperienceInput!): VoiceExperience!
|
||||
}
|
||||
`;
|
||||
@@ -62,9 +87,18 @@ export const resolvers = {
|
||||
voiceExperiences: () => listVoiceExperiences(),
|
||||
},
|
||||
Mutation: {
|
||||
authenticateTelegram: async (
|
||||
_: unknown,
|
||||
args: { input: { initData: string } },
|
||||
) => ({ user: await getOrCreateTelegramUser(args.input.initData) }),
|
||||
createVoiceExperience: async (
|
||||
_: unknown,
|
||||
args: { input: Parameters<typeof createVoiceExperience>[0] },
|
||||
) => createVoiceExperience(args.input),
|
||||
context: unknown,
|
||||
) => {
|
||||
const graphqlContext = context as GraphqlContext;
|
||||
const user = await requireTelegramUser(graphqlContext.telegramInitData);
|
||||
return createVoiceExperience(args.input, user.id);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user