목 차

1. 스키마

input CreateNoticeInput {
	title: String
	contents: String
	date: AWSDateTime
}

input CreateTeamAutoMatcher_QuestionnaireInput {
	questionTitle: String!
	questionList: [String]!
	bDuplicate: Boolean!
}

input CreateTeamInput {
	id: String!
	name: String
	people: [teamListInput]
	skills: [String]
	outline: String
	owner: String
	reponame: String
	contents: [dashboardContentInput]
	state: String
	createdAt: AWSDateTime
	comments: [commentsInput]
}

input CreateUserInput {
	question: [questionInput]
	haveTeam: Boolean
	surveyCompleted: Boolean
	mail: [mailInput]
	personState: String
	teamList: [teamListInput]
}

input DeleteNoticeInput {
	id: ID!
}

input DeleteTeamAutoMatcher_QuestionnaireInput {
	id: ID!
}

input DeleteTeamInput {
	id: ID!
}

input DeleteUserInput {
	id: ID!
}

type ModelSingleUserConnection {
	items: [user]
	nextToken: String
}

type Mutation {
	createTeamAutoMatcher_Questionnaire(input: CreateTeamAutoMatcher_QuestionnaireInput!): TeamAutoMatcher_Questionnaire
	updateTeamAutoMatcher_Questionnaire(input: UpdateTeamAutoMatcher_QuestionnaireInput!): TeamAutoMatcher_Questionnaire
	deleteTeamAutoMatcher_Questionnaire(input: DeleteTeamAutoMatcher_QuestionnaireInput!): TeamAutoMatcher_Questionnaire
	createUser(input: CreateUserInput!): user
	updateUser(input: UpdateUserInput!): user
	deleteUser(input: DeleteUserInput!): user
	createTeam(input: CreateTeamInput!): teamDashboard
	updateTeam(input: UpdateTeamInput!): teamDashboard
	deleteTeam(input: DeleteTeamInput!): teamDashboard
	createNotice(input: CreateNoticeInput!): notice
	deleteNotice(input: DeleteNoticeInput!): notice
}

type Query {
	getQuestionnaire(id: ID!): TeamAutoMatcher_Questionnaire
	listQuestionnaires(nextToken: String): TeamAutoMatcher_QuestionnaireConnection
	listNotice(nextToken: String): notice_Connection
		@aws_api_key
@aws_cognito_user_pools
	getUser: ModelSingleUserConnection
	getUserById(id: String!): user
	listUser(nextToken: String): userList_Connection
		@aws_api_key
@aws_cognito_user_pools
	getTeamDashboard(id: String!): teamDashboard
	listTeamDashboard(nextToken: String): teamDashbaord_Connection
		@aws_api_key
@aws_cognito_user_pools
}

type Subscription {
	onCreateTeamAutoMatcher_Questionnaire(
		id: ID,
		questionTitle: String,
		questionList: [String],
		bDuplicate: Boolean
	): TeamAutoMatcher_Questionnaire
		@aws_subscribe(mutations: ["createTeamAutoMatcher_Questionnaire"])
	onUpdateTeamAutoMatcher_Questionnaire(
		id: ID,
		questionTitle: String,
		questionList: [String],
		bDuplicate: Boolean
	): TeamAutoMatcher_Questionnaire
		@aws_subscribe(mutations: ["updateTeamAutoMatcher_Questionnaire"])
	onDeleteTeamAutoMatcher_Questionnaire(
		id: ID,
		questionTitle: String,
		questionList: [String],
		bDuplicate: Boolean
	): TeamAutoMatcher_Questionnaire
		@aws_subscribe(mutations: ["deleteTeamAutoMatcher_Questionnaire"])
	onCreateUser(id: ID, question: [questionInput], mail: [mailInput]): user
		@aws_subscribe(mutations: ["createUser"])
	onUpdateUser(id: ID, question: [questionInput], mail: [mailInput]): user
		@aws_subscribe(mutations: ["updateUser"])
	onDeleteUser(id: ID, question: [questionInput]): user
		@aws_subscribe(mutations: ["deleteUser"])
}

input TableBooleanFilterInput {
	ne: Boolean
	eq: Boolean
}

input TableFloatFilterInput {
	ne: Float
	eq: Float
	le: Float
	lt: Float
	ge: Float
	gt: Float
	contains: Float
	notContains: Float
	between: [Float]
}

input TableIDFilterInput {
	ne: ID
	eq: ID
	le: ID
	lt: ID
	ge: ID
	gt: ID
	contains: ID
	notContains: ID
	between: [ID]
	beginsWith: ID
}

input TableIntFilterInput {
	ne: Int
	eq: Int
	le: Int
	lt: Int
	ge: Int
	gt: Int
	contains: Int
	notContains: Int
	between: [Int]
}

input TableStringFilterInput {
	ne: String
	eq: String
	le: String
	lt: String
	ge: String
	gt: String
	contains: String
	notContains: String
	between: [String]
	beginsWith: String
}

input TableTeamAutoMatcher_QuestionnaireFilterInput {
	id: TableIDFilterInput
	questionTitle: TableStringFilterInput
	questionList: TableStringFilterInput
	bDuplicate: TableBooleanFilterInput
}

input TableUserFilterInput {
	id: TableIDFilterInput
	question: TableStringFilterInput
}

type TeamAutoMatcher_Questionnaire {
	id: ID!
	questionTitle: String!
	questionBrief: String!
	priority: Int!
	questionList: [String]!
	bDuplicate: Boolean!
}

type TeamAutoMatcher_QuestionnaireConnection {
	items: [TeamAutoMatcher_Questionnaire]
	nextToken: String
}

input UpdateTeamAutoMatcher_QuestionnaireInput {
	id: ID!
	questionTitle: String
	priority: Int
	questionList: [String]
	bDuplicate: Boolean
}

input UpdateTeamInput {
	id: ID!
	name: String
	people: [teamListInput]
	skills: [String]
	outline: String
	owner: String
	contents: [dashboardContentInput]
	reponame: String
	state: String
	createdAt: AWSDateTime
	comments: [commentsInput]
}

input UpdateUserInput {
	id: ID!
	haveTeam: Boolean
	surveyCompleted: Boolean
	teamList: [teamListInput]
	question: [questionInput]
	mail: [mailInput]
	personState: String
}

input commentsInput {
	date: AWSDateTime
	owner: String
	comment: String
	name: String
}

type commnetsType @aws_api_key
@aws_cognito_user_pools {
	date: AWSDateTime
	owner: String
	comment: String
	name: String
}

type dashboardContent @aws_api_key
@aws_cognito_user_pools {
	title: String
	text: String
}

input dashboardContentInput {
	title: String
	text: String
}

input mailInput {
	from: String!
	teamId: String
	type: String
	teamName: String
	date: AWSDateTime
}

type mailType @aws_api_key
@aws_cognito_user_pools {
	from: String!
	teamId: String
	type: String
	teamName: String
	date: AWSDateTime
}

type notice @aws_api_key
@aws_cognito_user_pools {
	id: ID!
	title: String
	contents: String
	date: AWSDateTime
}

type notice_Connection @aws_api_key
@aws_cognito_user_pools {
	items: [notice]
	nextToken: String
}

input questionInput {
	title: String
	answers: [String]
}

type questionType @aws_api_key
@aws_cognito_user_pools {
	title: String
	answers: [String]
}

type teamDashbaord_Connection @aws_api_key
@aws_cognito_user_pools {
	items: [teamDashboard]
	nextToken: String
}

type teamDashboard @aws_api_key
@aws_cognito_user_pools {
	id: ID!
	name: String
	people: [teamListType]
	skills: [String]
	outline: String
	contents: [dashboardContent]
	mail: [mailType]
	reponame: String
	owner: String
	state: String
	createdAt: AWSDateTime
	comments: [commnetsType]
}

input teamListInput {
	id: String
	name: String
}

type teamListType @aws_api_key
@aws_cognito_user_pools {
	id: String
	name: String
}

type user @aws_api_key
@aws_cognito_user_pools {
	id: ID!
	haveTeam: Boolean
	surveyCompleted: Boolean
	question: [questionType]
	owner: String
	personState: String
	teamList: [teamListType]
	mail: [mailType]
}

type userList_Connection @aws_api_key
@aws_cognito_user_pools {
	items: [user]
	nextToken: String
}

2. 리졸버 연결

3. Mutation Resolver

createUser(...): user

## Below example shows how to create an object from all provided GraphQL arguments
## The primary key of the obejct is a randomly generated UUD using the $util.autoId() utility
## Other utilities include $util.matches() for regular expressions, $util.time.nowISO8601() or
##   $util.time.nowEpochMilliSeconds() for timestamps, and even List or Map helpers like
##   $util.list.copyAndRetainAll() $util.map.copyAndRemoveAllKeys() for shallow copies
## Read more: <https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html#utility-helpers-in-util>

## [Start] Set default values. **
$util.qr($context.args.input.put("id", $util.defaultIfNull($ctx.args.input.id, $util.autoId())))
#set( $createdAt = $util.time.nowISO8601() )
## Automatically set the createdAt timestamp. **
$util.qr($context.args.input.put("createdAt", $util.defaultIfNull($ctx.args.input.createdAt, $createdAt)))
## Automatically set the updatedAt timestamp. **
$util.qr($context.args.input.put("updatedAt", $util.defaultIfNull($ctx.args.input.updatedAt, $createdAt)))
## [End] Set default values. **
## [Start] Determine request authentication mode **
#if( $util.isNullOrEmpty($authMode) && !$util.isNull($ctx.identity) && !$util.isNull($ctx.identity.sub) && !$util.isNull($ctx.identity.issuer) && !$util.isNull($ctx.identity.username) && !$util.isNull($ctx.identity.claims) && !$util.isNull($ctx.identity.sourceIp) && !$util.isNull($ctx.identity.defaultAuthStrategy) )
  #set( $authMode = "userPools" )
#end
## [End] Determine request authentication mode **
## [Start] Check authMode and execute owner/group checks **
#if( $authMode == "userPools" )
  ## No Static Group Authorization Rules **

  ## No Dynamic Group Authorization Rules **

  ## [Start] Owner Authorization Checks **
  #set( $isOwnerAuthorized = false )
  ## Authorization rule: { allow: owner, ownerField: "owner", identityClaim: "cognito:username" } **
  #set( $allowedOwners0 = $util.defaultIfNull($ctx.args.input.owner, null) )
  #set( $identityValue = $util.defaultIfNull($ctx.identity.claims.get("username"), $util.defaultIfNull($ctx.identity.claims.get("cognito:username"), "___xamznone____")) )
  #if( $util.isList($allowedOwners0) )
    #foreach( $allowedOwner in $allowedOwners0 )
      #if( $allowedOwner == $identityValue )
        #set( $isOwnerAuthorized = true )
      #end
    #end
  #end
  #if( $util.isString($allowedOwners0) )
    #if( $allowedOwners0 == $identityValue )
      #set( $isOwnerAuthorized = true )
    #end
  #end
  #if( $util.isNull($allowedOwners0) && (! $ctx.args.input.containsKey("owner")) )
    $util.qr($ctx.args.input.put("owner", $identityValue))
    #set( $isOwnerAuthorized = true )
  #end
  ## [End] Owner Authorization Checks **

  ## [Start] Throw if unauthorized **
  #if( !($isStaticGroupAuthorized == true || $isDynamicGroupAuthorized == true || $isOwnerAuthorized == true) )
    $util.unauthorized()
  #end
  ## [End] Throw if unauthorized **
#end
## [End] Check authMode and execute owner/group checks **

## [Start] Prepare DynamoDB PutItem Request. **
$util.qr($context.args.input.put("__typename", "User"))
#set( $condition = {
  "expression": "attribute_not_exists(#id)",
  "expressionNames": {
      "#id": "id"
  }
} )
#if( $context.args.condition )
  #set( $condition.expressionValues = {} )
  #set( $conditionFilterExpressions = $util.parseJson($util.transform.toDynamoDBConditionExpression($context.args.condition)) )
  $util.qr($condition.put("expression", "($condition.expression) AND $conditionFilterExpressions.expression"))
  $util.qr($condition.expressionNames.putAll($conditionFilterExpressions.expressionNames))
  $util.qr($condition.expressionValues.putAll($conditionFilterExpressions.expressionValues))
#end
#if( $condition.expressionValues && $condition.expressionValues.size() == 0 )
  #set( $condition = {
  "expression": $condition.expression,
  "expressionNames": $condition.expressionNames
} )
#end
{
  "version": "2018-05-29",
  "operation": "PutItem",
  "key": #if( $modelObjectKey ) $util.toJson($modelObjectKey) #else {
  "id":   $util.dynamodb.toDynamoDBJson($ctx.args.input.id)
} #end,
  "attributeValues": $util.dynamodb.toMapValuesJson($context.args.input),
  "condition": $util.toJson($condition)
}
## [End] Prepare DynamoDB PutItem Request. **
#if( $ctx.error )
$util.error($ctx.error.message, $ctx.error.type)
#else
$util.toJson($ctx.result)
#end

createTeam(...): teamDashboard

## Below example shows how to create an object from all provided GraphQL arguments
## The primary key of the obejct is a randomly generated UUD using the $util.autoId() utility
## Other utilities include $util.matches() for regular expressions, $util.time.nowISO8601() or
##   $util.time.nowEpochMilliSeconds() for timestamps, and even List or Map helpers like
##   $util.list.copyAndRetainAll() $util.map.copyAndRemoveAllKeys() for shallow copies
## Read more: <https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html#utility-helpers-in-util>

{
    "version" : "2018-05-29",
    "operation" : "PutItem",
    "key" : {
        "id":   $util.dynamodb.toDynamoDBJson($ctx.args.input.id)
    },
    "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args.input)
}
## Pass back the result from DynamoDB. **
$util.toJson($ctx.result)