diff --git a/api/graphql/schema/index.ts b/api/graphql/schema/index.ts index 03d2a8d..1b936a2 100644 --- a/api/graphql/schema/index.ts +++ b/api/graphql/schema/index.ts @@ -9,17 +9,25 @@ import { resolvers as searchResultResolvers, } from "./types/searchResult"; import { typeDefs as suggestStringTypeDefs } from "./types/suggestString"; +import { typeDefs as userTypeDefs } from "./types/user"; const typeDefs = gql` type Query { hello: String! } + + type Mutation { + hello: String! + } `; const resolvers = { Query: { hello: () => "Hello, world!", }, + Mutation: { + hello: () => "Hello, world!", + }, }; export const schema = makeExecutableSchema({ @@ -31,6 +39,7 @@ export const schema = makeExecutableSchema({ documentTypeDefs, searchResultTypeDefs, suggestStringTypeDefs, + userTypeDefs, ], resolvers: [resolvers, searchResultResolvers], }); diff --git a/api/graphql/schema/types/scalars/emailAddress.ts b/api/graphql/schema/types/scalars/emailAddress.ts new file mode 100644 index 0000000..a742ebb --- /dev/null +++ b/api/graphql/schema/types/scalars/emailAddress.ts @@ -0,0 +1,5 @@ +import gql from "graphql-tag"; + +export const typeDefs = gql` + scalar EmailAddress +`; diff --git a/api/graphql/schema/types/scalars/index.ts b/api/graphql/schema/types/scalars/index.ts index b12480a..60dc927 100644 --- a/api/graphql/schema/types/scalars/index.ts +++ b/api/graphql/schema/types/scalars/index.ts @@ -1,3 +1,4 @@ +import { typeDefs as emailAddressTypeDefs } from "./emailAddress"; import { typeDefs as urlTypeDefs } from "./url"; -export const typeDefs = [urlTypeDefs]; +export const typeDefs = [emailAddressTypeDefs, urlTypeDefs]; diff --git a/api/graphql/schema/types/user.ts b/api/graphql/schema/types/user.ts new file mode 100644 index 0000000..cb17465 --- /dev/null +++ b/api/graphql/schema/types/user.ts @@ -0,0 +1,32 @@ +import gql from "graphql-tag"; + +export const typeDefs = gql` + type User implements Node { + id: ID! + firstName: String! + lastName: String! + email: EmailAddress! + } + + scalar AuthToken + + type LoginResponse { + user: User! + authToken: AuthToken! + } + + input RegisterInput { + firstName: String! + lastName: String! + email: EmailAddress! + } + + extend type Mutation { + login(email: EmailAddress!): LoginResponse! + register(input: RegisterInput!): LoginResponse! + } + + extend type Query { + me: User! + } +`;