diff --git a/server/src/models/Characters.ts b/server/src/models/Characters.ts new file mode 100644 index 0000000..0c576d3 --- /dev/null +++ b/server/src/models/Characters.ts @@ -0,0 +1,29 @@ +import mongoose, { Schema, Document } from 'mongoose'; + +export interface ICharacter extends Document { + name: string; + picture: string; + voice: string; +} + +const CharacterSchema: Schema = new Schema( + { + name: { + type: String, + required: true, + trim: true, + }, + picture: { + type: String, + required: true, + }, + voice: { + type: String, + required: true, + }, + }, +); + +const Character = mongoose.model('Character', CharacterSchema); + +export default Character; diff --git a/server/src/schemas/resolvers.ts b/server/src/schemas/resolvers.ts index 9b4c318..54998fa 100644 --- a/server/src/schemas/resolvers.ts +++ b/server/src/schemas/resolvers.ts @@ -1,4 +1,5 @@ import User from '../models/User'; +import Character from '../models/Characters'; import { signToken } from '../utils/auth'; import { AuthenticationError } from 'apollo-server-express'; @@ -23,15 +24,27 @@ const resolvers = { } throw new AuthenticationError('You need to be logged in!'); }, + users: async () => { + return await User.find(); + }, + user: async (_: any, { username }: { username: string }) => { + return await User.findOne({ username }); + }, + characters: async () => { + return await Character.find(); + }, + character: async (_: any, { id }: { id: string }) => { + return await Character.findById(id); + }, }, Mutation: { addUser: async (_parent: any, { input }: AddUserArgs) => { - const user = await User.create(input) as { username: string; email: string; _id: string }; + const user = await User.create(input); const token = signToken(user.username, user.email, user._id); return { token, user }; }, login: async (_parent: any, { email, password }: LoginUserArgs) => { - const user = await User.findOne({ email }) as { username: string; email: string; _id: string; isCorrectPassword: (password: string) => Promise }; + const user = await User.findOne({ email }); if (!user) { throw new AuthenticationError('Invalid credentials'); @@ -46,7 +59,14 @@ const resolvers = { const token = signToken(user.username, user.email, user._id); return { token, user }; }, + createCharacter: async (_: any, { name, picture, voice }: { name: string, picture: string, voice: string }) => { + const newCharacter = new Character({ name, picture, voice }); + return await newCharacter.save(); + }, + deleteCharacter: async (_: any, { id }: { id: string }) => { + return await Character.findByIdAndDelete(id); + }, }, }; -export default resolvers; \ No newline at end of file +export default resolvers; diff --git a/server/src/schemas/typeDefs.ts b/server/src/schemas/typeDefs.ts index 545a57c..a9b876e 100644 --- a/server/src/schemas/typeDefs.ts +++ b/server/src/schemas/typeDefs.ts @@ -1,9 +1,13 @@ -const typeDefs = ` +import { gql } from 'apollo-server-express'; + +const typeDefs = gql` type User { _id: ID username: String email: String password: String + correctAnswers: Int + wrongAnswers: Int } input UserInput { @@ -11,7 +15,14 @@ const typeDefs = ` email: String! password: String! } - + + type Character { + _id: ID! + name: String! + picture: String! + voice: String! + } + type Auth { token: ID! user: User @@ -21,12 +32,17 @@ const typeDefs = ` users: [User] user(username: String!): User me: User + updateStats(isCorrect: Boolean!): User + characters: [Character] + character(id: ID!): Character } type Mutation { addUser(input: UserInput!): Auth login(email: String!, password: String!): Auth + createCharacter(name: String!, picture: String!, voice: String!): Character + deleteCharacter(id: ID!): Character } `; -export default typeDefs; \ No newline at end of file +export default typeDefs; diff --git a/server/src/utils/PromptBuilder.ts b/server/src/utils/PromptBuilder.ts index a5c81b1..deaa247 100644 --- a/server/src/utils/PromptBuilder.ts +++ b/server/src/utils/PromptBuilder.ts @@ -1,4 +1,6 @@ -import { FallbackQuestion, fallbackQuestion } from "@/utils/fallbackQuestions"; + +import { FallbackQuestion, fallbackQuestion } from "../utils/fallbackQuestions"; + export class PromptBuilder { /**