diff --git a/cdk/resources/schema.graphql b/cdk/resources/schema.graphql index fde33f0..025294f 100644 --- a/cdk/resources/schema.graphql +++ b/cdk/resources/schema.graphql @@ -6,7 +6,7 @@ scalar AWSJSON type Query { page(input: PageInput!): Page - @aws_api_key + @aws_api_key @aws_cognito_user_pools projects: ProjectConnection! trackings(query: TrackingQuery): TrackingConnection! } diff --git a/cdk/stacks/ApiStack.ts b/cdk/stacks/ApiStack.ts index 9a9df63..7a59d8e 100644 --- a/cdk/stacks/ApiStack.ts +++ b/cdk/stacks/ApiStack.ts @@ -2,7 +2,7 @@ import { Stack, App, StackProps, CfnOutput, Fn, } from '@aws-cdk/core'; import { - GraphQLApi, DynamoDbDataSource, MappingTemplate, UserPoolDefaultAction, CfnApiKey, AuthorizationType, KeyCondition, + GraphQLApi, DynamoDbDataSource, MappingTemplate, UserPoolDefaultAction, CfnApiKey, AuthorizationType, KeyCondition, FieldLogLevel, } from '@aws-cdk/aws-appsync'; import { UserPool } from '@aws-cdk/aws-cognito'; import { Table, ITable } from '@aws-cdk/aws-dynamodb'; @@ -26,6 +26,9 @@ export class ApiStack extends Stack { const api = new GraphQLApi(this, 'GraphQLApi', { name: 'prod.api.clean.dev', + logConfig: { + fieldLogLevel: FieldLogLevel.ALL + }, schemaDefinitionFile: 'cdk/resources/schema.graphql', authorizationConfig: { defaultAuthorization: { @@ -94,11 +97,23 @@ export class ApiStack extends Stack { } static addProjectsResolver(queryDataSource: DynamoDbDataSource): void { - const keyCondition = KeyCondition.beginsWith('id', "project-") + // const keyCondition = KeyCondition.beginsWith('id', 'project') queryDataSource.createResolver({ fieldName: 'projects', typeName: 'Query', - requestMappingTemplate: MappingTemplate.dynamoDbQuery(keyCondition), + requestMappingTemplate: MappingTemplate.fromString(` + { + "version" : "2017-02-28", + "operation" : "Query", + "query":{ + "expression": "pk = :user AND begins_with(id, :id)", + "expressionValues": { + ":id": $util.dynamodb.toDynamoDBJson("project-"), + ":user": $util.dynamodb.toDynamoDBJson($ctx.identity.sub) + } + }, + } + `), responseMappingTemplate: MappingTemplate.fromString(` { "items": $util.toJson($ctx.result.items),