Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updates GraphQL SDL Required Types logic #432

Merged
merged 5 commits into from
Apr 14, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export const QUERY = gql`
}
`
const UPDATE_POST_MUTATION = gql`
mutation UpdatePostMutation($id: Int!, $input: PostInput!) {
mutation UpdatePostMutation($id: Int!, $input: UpdatePostInput!) {
updatePost(id: $id, input: $input) {
id
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export const QUERY = gql`
}
`
const UPDATE_POST_MUTATION = gql`
mutation UpdateUserProfileMutation($id: Int!, $input: UserProfileInput!) {
mutation UpdateUserProfileMutation($id: Int!, $input: UpdateUserProfileInput!) {
updateUserProfile(id: $id, input: $input) {
id
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { navigate, routes } from '@redwoodjs/router'
import UserProfileForm from 'src/components/UserProfileForm'

const CREATE_POST_MUTATION = gql`
mutation CreateUserProfileMutation($input: UserProfileInput!) {
mutation CreateUserProfileMutation($input: CreateUserProfileInput!) {
createUserProfile(input: $input) {
id
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { navigate, routes } from '@redwoodjs/router'
import PostForm from 'src/components/PostForm'

const CREATE_POST_MUTATION = gql`
mutation CreatePostMutation($input: PostInput!) {
mutation CreatePostMutation($input: CreatePostInput!) {
createPost(input: $input) {
id
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export const QUERY = gql`
}
`
const UPDATE_POST_MUTATION = gql`
mutation Update${singularPascalName}Mutation($id: ${idType}!, $input: ${singularPascalName}Input!) {
mutation Update${singularPascalName}Mutation($id: ${idType}!, $input: Update${singularPascalName}Input!) {
update${singularPascalName}(id: $id, input: $input) {
id
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { navigate, routes } from '@redwoodjs/router'
import ${singularPascalName}Form from 'src/components/${singularPascalName}Form'

const CREATE_POST_MUTATION = gql`
mutation Create${singularPascalName}Mutation($input: ${singularPascalName}Input!) {
mutation Create${singularPascalName}Mutation($input: Create${singularPascalName}Input!) {
create${singularPascalName}(input: $input) {
id
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,15 @@ export const schema = gql`
}

type Query {
userProfiles: [UserProfile]
userProfiles: [UserProfile!]!
}

input UserProfileInput {
input CreateUserProfileInput {
username: String!
userId: Int!
}

input UpdateUserProfileInput {
username: String
userId: Int
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,23 @@ export const schema = gql`
}

type Query {
userProfiles: [UserProfile]
userProfile(id: Int!): UserProfile
userProfiles: [UserProfile!]!
userProfile(id: Int!): UserProfile!
}

input UserProfileInput {
input CreateUserProfileInput {
username: String!
userId: Int!
}

input UpdateUserProfileInput {
username: String
userId: Int
}

type Mutation {
createUserProfile(input: UserProfileInput!): UserProfile
updateUserProfile(id: Int!, input: UserProfileInput!): UserProfile
deleteUserProfile(id: Int!): UserProfile
createUserProfile(input: CreateUserProfileInput!): UserProfile!
updateUserProfile(id: Int!, input: UpdateUserProfileInput!): UserProfile!
deleteUserProfile(id: Int!): UserProfile!
}
`
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,16 @@ export const schema = gql`
}

type Query {
users: [User]
users: [User!]!
}

input UserInput {
input CreateUserInput {
name: String
email: String!
isAdmin: Boolean!
}

input UpdateUserInput {
name: String
email: String
isAdmin: Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,20 @@ export const schema = gql`
}

type Query {
posts: [Post]
post(id: Int!): Post
posts: [Post!]!
post(id: Int!): Post!
}

input PostInput {
input CreatePostInput {
title: String!
slug: String!
author: String!
body: String!
image: String
postedAt: DateTime
}

input UpdatePostInput {
title: String
slug: String
author: String
Expand All @@ -24,8 +33,8 @@ export const schema = gql`
}

type Mutation {
createPost(input: PostInput!): Post
updatePost(id: Int!, input: PostInput!): Post
deletePost(id: Int!): Post
createPost(input: CreatePostInput!): Post!
updatePost(id: Int!, input: UpdatePostInput!): Post!
deletePost(id: Int!): Post!
}
`
30 changes: 23 additions & 7 deletions packages/cli/src/commands/generate/sdl/sdl.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,25 @@ const querySDL = (model) => {
return model.fields.map((field) => modelFieldToSDL(field))
}

const inputSDL = (model, types = {}) => {
const inputSDL = (model, required, types = {}) => {
return model.fields
.filter((field) => {
return (
IGNORE_FIELDS_FOR_INPUT.indexOf(field.name) === -1 &&
field.kind !== 'object'
)
})
.map((field) => modelFieldToSDL(field, false, types))
.map((field) => modelFieldToSDL(field, required, types))
}

// creates the CreateInput type (all fields are required)
const createInputSDL = (model, types = {}) => {
return inputSDL(model, true, types)
}

// creates the UpdateInput type (not all fields are required)
const updateInputSDL = (model, types = {}) => {
return inputSDL(model, false, types)
}

const idType = (model) => {
Expand Down Expand Up @@ -64,7 +74,8 @@ const sdlFromSchemaModel = async (name) => {

return {
query: querySDL(model).join('\n '),
input: inputSDL(model, types).join('\n '),
createInput: createInputSDL(model, types).join('\n '),
updateInput: updateInputSDL(model, types).join('\n '),
idType: idType(model),
relations: relationsForModel(model),
}
Expand All @@ -76,17 +87,22 @@ const sdlFromSchemaModel = async (name) => {
}

export const files = async ({ name, crud }) => {
const { query, input, idType, relations } = await sdlFromSchemaModel(
pascalcase(pluralize.singular(name))
)
const {
query,
createInput,
updateInput,
idType,
relations,
} = await sdlFromSchemaModel(pascalcase(pluralize.singular(name)))

const template = generateTemplate(
path.join('sdl', 'templates', 'sdl.js.template'),
{
name,
crud,
query,
input,
createInput,
updateInput,
idType,
}
)
Expand Down
18 changes: 11 additions & 7 deletions packages/cli/src/commands/generate/sdl/templates/sdl.js.template
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,21 @@ export const schema = gql`
}

type Query {
${pluralCamelName}: [${singularPascalName}]<% if (crud) { %>
${singularCamelName}(id: ${idType}!): ${singularPascalName}<% } %>
${pluralCamelName}: [${singularPascalName}!]!<% if (crud) { %>
${singularCamelName}(id: ${idType}!): ${singularPascalName}!<% } %>
}

input ${singularPascalName}Input {
${input}
input Create${singularPascalName}Input {
${createInput}
}

input Update${singularPascalName}Input {
${updateInput}
}<% if (crud) { %>

type Mutation {
create${singularPascalName}(input: ${singularPascalName}Input!): ${singularPascalName}
update${singularPascalName}(id: ${idType}!, input: ${singularPascalName}Input!): ${singularPascalName}
delete${singularPascalName}(id: ${idType}!): ${singularPascalName}
create${singularPascalName}(input: Create${singularPascalName}Input!): ${singularPascalName}!
update${singularPascalName}(id: ${idType}!, input: Update${singularPascalName}Input!): ${singularPascalName}!
delete${singularPascalName}(id: ${idType}!): ${singularPascalName}!
}<% } %>
`