-
Notifications
You must be signed in to change notification settings - Fork 6
/
serverless.appsync-api.yml
367 lines (361 loc) · 9.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
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
name: twitter
schema: schema.api.graphql
caching: ${self:custom.appSyncCaching}
authenticationType: AMAZON_COGNITO_USER_POOLS
userPoolConfig:
awsRegion: eu-west-1
defaultAction: ALLOW
userPoolId: !Ref CognitoUserPool
logConfig:
loggingRoleArn: !GetAtt AppSyncLoggingServiceRole.Arn
level: ${self:custom.appSyncLogLevel}
excludeVerboseContent: ${self:custom.appSyncLogExcludeVerboseContent}
additionalAuthenticationProviders:
- authenticationType: AWS_IAM
mappingTemplatesLocation: mapping-templates
mappingTemplates:
- type: Subscription
field: onNotified
dataSource: none
- type: Query
field: getMyProfile
dataSource: usersTable
# request: Query.getMyProfile.request.vtl (DEFAULT)
# response: Query.getMyProfile.response.vtl (DEFAULT)
- type: Query
field: getProfile
dataSource: usersTable
caching:
keys:
- $context.arguments.screenName
ttl: 300 # 5 minutes in seconds
- type: Query
field: getImageUploadUrl
dataSource: getImageUploadUrlFunction
request: false
response: false
- type: Mutation
field: editMyProfile
dataSource: usersTable
- type: Mutation
field: tweet
dataSource: tweetFunction
request: false
response: false
- type: Query
field: getTweets
dataSource: tweetsTable
- type: Query
field: getMyTimeline
dataSource: timelinesTable
- type: Mutation
field: like
dataSource: likeMutation
- type: Mutation
field: unlike
dataSource: unlikeMutation
- type: Query
field: getLikes
dataSource: likesTable
- type: Query
field: getFollowers
kind: PIPELINE
functions:
- getFollowers
- hydrateFollowers
request: simplePipeline.request.vtl
response: simplePipeline.response.vtl
- type: Query
field: getFollowing
kind: PIPELINE
functions:
- getFollowing
- hydrateFollowing
request: simplePipeline.request.vtl
response: simplePipeline.response.vtl
- type: Query
field: search
dataSource: searchFunction
request: false
response: false
- type: Query
field: getHashTag
dataSource: getHashTagFunction
request: false
response: false
- type: Query
field: listConversations
dataSource: conversationsTable
- type: Query
field: getDirectMessages
dataSource: directMessagesTable
- 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
- type: Mutation
field: follow
dataSource: followMutation
- type: Mutation
field: unfollow
dataSource: unfollowMutation
- type: Mutation
field: notifyRetweeted
dataSource: notificationsTable
- type: Mutation
field: notifyLiked
dataSource: notificationsTable
- type: Mutation
field: notifyDMed
dataSource: notificationsTable
- type: Mutation
field: notifyMentioned
dataSource: notificationsTable
- type: Mutation
field: notifyReplied
dataSource: notificationsTable
- type: Mutation
field: sendDirectMessage
dataSource: sendDirectMessageFunction
request: false
response: false
- type: Query
field: getAnalyticsConfig
dataSource: none
# NESTED FIELDS
- type: Tweet
field: profile
dataSource: getTweetCreatorFunction
request: Tweet.profile.batchInvoke.request.vtl
response: Tweet.profile.batchInvoke.response.vtl
caching:
keys:
- $context.identity.username
- $context.source.creator
ttl: 300 # 5 minutes in seconds
- type: Retweet
field: profile
dataSource: getTweetCreatorFunction
request: Tweet.profile.batchInvoke.request.vtl
response: Tweet.profile.batchInvoke.response.vtl
caching:
keys:
- $context.identity.username
- $context.source.creator
ttl: 300 # 5 minutes in seconds
- type: Reply
field: profile
dataSource: getTweetCreatorFunction
request: Tweet.profile.batchInvoke.request.vtl
response: Tweet.profile.batchInvoke.response.vtl
caching:
keys:
- $context.identity.username
- $context.source.creator
ttl: 300 # 5 minutes in seconds
- 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
caching:
keys:
- $context.identity.username
- $context.source.inReplyToUserIds
ttl: 300 # 5 minutes in seconds
- type: UnhydratedTweetsPage
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
- type: Conversation
field: otherUser
dataSource: usersTable
- type: Message
field: from
dataSource: usersTable
functionConfigurations:
- name: getFollowers
dataSource: relationshipsTable
- name: hydrateFollowers
dataSource: usersTable
- name: getFollowing
dataSource: relationshipsTable
- name: hydrateFollowing
dataSource: usersTable
dataSources:
- type: NONE
name: none
- type: AMAZON_DYNAMODB
name: usersTable
config:
tableName: !Ref UsersTable
- 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: notificationsTable
config:
tableName: !Ref NotificationsTable
- type: AMAZON_DYNAMODB
name: conversationsTable
config:
tableName: !Ref ConversationsTable
- type: AMAZON_DYNAMODB
name: directMessagesTable
config:
tableName: !Ref DirectMessagesTable
- 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
- 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: AMAZON_DYNAMODB
name: unfollowMutation
config:
tableName: !Ref RelationshipsTable
iamRoleStatements:
- Effect: Allow
Action: dynamodb:DeleteItem
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: AWS_LAMBDA
name: searchFunction
config:
functionName: search
- type: AWS_LAMBDA
name: getHashTagFunction
config:
functionName: getHashTag
- type: AWS_LAMBDA
name: sendDirectMessageFunction
config:
functionName: sendDirectMessage
- type: AWS_LAMBDA
name: getTweetCreatorFunction
config:
functionName: getTweetCreator
substitutions:
TweetsTable: !Ref TweetsTable
LikesTable: !Ref LikesTable
UsersTable: !Ref UsersTable
RelationshipsTable: !Ref RelationshipsTable
FirehoseStreamName: !Ref FirehoseStream
IdentityPoolId: !Ref IdentityPool