-
Notifications
You must be signed in to change notification settings - Fork 0
/
serverless.appsync-api.yml
214 lines (210 loc) · 5.3 KB
/
serverless.appsync-api.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
name: appsyncmasterclass
schema: schema.api.graphql
authenticationType: AMAZON_COGNITO_USER_POOLS
userPoolConfig:
awsRegion: us-east-2
defaultAction: ALLOW
userPoolId: !Ref CognitoUserPool
mappingTemplatesLocation: mapping-templates
mappingTemplates:
- type: Query
field: getMyProfile
dataSource: usersTable
- type: Query
field: getProfile
dataSource: usersTable
# Convention, so we don't need to explicitly add
# request: Query.getMyProfile.request.vtl
# response: Query.getMyProfile.response.vtl
- type: Query
field: getTweets
dataSource: tweetsTable
- type: Query
field: getMyTimeline
dataSource: timelinesTable
- type: Query
field: getImageUploadUrl
dataSource: getImageUploadUrlFunction
# direct integration with Lambda, so we don't need specific templates
request: false
response: false
- type: Query
field: getLikes
dataSource: likesTable
- type: Mutation
field: editMyProfile
dataSource: usersTable
- type: Mutation
field: tweet
dataSource: tweetFunction
request: false
response: false
- type: Mutation
field: like
dataSource: likeMutation
- type: Mutation
field: unlike
dataSource: unlikeMutation
- type: Mutation
field: retweet
dataSource: retweetFunction
request: false
response: false
- type: Mutation
field: unretweet
dataSource: unretweetFunction
request: false
response: false
- type: Mutation
field: reply
dataSource: replyFunction
request: false
response: false
- type: Mutation
field: follow
dataSource: followMutation
# NESTED FIELDS
- type: Tweet
field: profile
dataSource: usersTable
- type: Retweet
field: profile
dataSource: usersTable
request: Tweet.profile.request.vtl
response: Tweet.profile.response.vtl
- type: Reply
field: profile
dataSource: usersTable
request: Tweet.profile.request.vtl
response: Tweet.profile.response.vtl
- type: Tweet
field: liked
dataSource: likesTable
- type: Reply
field: liked
dataSource: likesTable
request: Tweet.liked.request.vtl
response: Tweet.liked.response.vtl
- type: Tweet
field: retweeted
dataSource: retweetsTable
- type: Reply
field: retweeted
dataSource: retweetsTable
request: Tweet.retweeted.request.vtl
response: Tweet.retweeted.response.vtl
- type: Retweet
field: retweetOf
dataSource: tweetsTable
- type: Reply
field: inReplyToTweet
dataSource: tweetsTable
- type: Reply
field: inReplyToUsers
dataSource: usersTable
- type: UnhydratedTweeetsPage
field: tweets
dataSource: tweetsTable
- type: MyProfile
field: tweets
dataSource: tweetsTable
- type: OtherProfile
field: tweets
dataSource: tweetsTable
request: MyProfile.tweets.request.vtl
response: MyProfile.tweets.response.vtl
- type: OtherProfile
field: following
dataSource: relationshipsTable
- type: OtherProfile
field: followedBy
dataSource: relationshipsTable
dataSources:
- type: NONE
name: NONE
- type: AMAZON_DYNAMODB
name: usersTable
config:
tableName: !Ref UsersTable
- type: AMAZON_DYNAMODB
name: followMutation
config:
tableName: !Ref RelationshipsTable
iamRoleStatements:
- Effect: Allow
Action: dynamodb:PutItem
Resource: !GetAtt RelationshipsTable.Arn
- Effect: Allow
Action: dynamodb:UpdateItem
Resource: !GetAtt UsersTable.Arn
- type: AWS_LAMBDA
name: getImageUploadUrlFunction
config:
functionName: getImageUploadUrl
- type: AWS_LAMBDA
name: tweetFunction
config:
functionName: tweet
- type: AWS_LAMBDA
name: retweetFunction
config:
functionName: retweet
- type: AWS_LAMBDA
name: unretweetFunction
config:
functionName: unretweet
- type: AWS_LAMBDA
name: replyFunction
config:
functionName: reply
- type: AMAZON_DYNAMODB
name: tweetsTable
config:
tableName: !Ref TweetsTable
- type: AMAZON_DYNAMODB
name: timelinesTable
config:
tableName: !Ref TimelinesTable
- type: AMAZON_DYNAMODB
name: likesTable
config:
tableName: !Ref LikesTable
- type: AMAZON_DYNAMODB
name: retweetsTable
config:
tableName: !Ref RetweetsTable
- type: AMAZON_DYNAMODB
name: relationshipsTable
config:
tableName: !Ref RelationshipsTable
- type: AMAZON_DYNAMODB
name: likeMutation
config:
tableName: !Ref LikesTable
iamRoleStatements:
- Effect: Allow
Action: dynamodb:PutItem
Resource: !GetAtt LikesTable.Arn
- Effect: Allow
Action: dynamodb:UpdateItem
Resource:
- !GetAtt UsersTable.Arn
- !GetAtt TweetsTable.Arn
- type: AMAZON_DYNAMODB
name: unlikeMutation
config:
tableName: !Ref LikesTable
iamRoleStatements:
- Effect: Allow
Action: dynamodb:DeleteItem
Resource: !GetAtt LikesTable.Arn
- Effect: Allow
Action: dynamodb:UpdateItem
Resource:
- !GetAtt UsersTable.Arn
- !GetAtt TweetsTable.Arn
substitutions:
TweetsTable: !Ref TweetsTable
LikesTable: !Ref LikesTable
UsersTable: !Ref UsersTable
RelationshipsTable: !Ref RelationshipsTable