/
serverless.appsync-api.yml
308 lines (300 loc) · 7.84 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
name: appsyncmasterclass
schema: schema.api.graphql
authenticationType: AMAZON_COGNITO_USER_POOLS
userPoolConfig:
awsRegion: eu-west-1
defaultAction: ALLOW
userPoolId: !Ref CognitoUserPool
additionalAuthenticationProviders:
- authenticationType: AWS_IAM
# tells serverless-appsync-plugin where the appsync templates are
mappingTemplatesLocation: mapping-templates
mappingTemplates:
- type: Subscription
field: onNotified
dataSource: none
- type: Query
field: getMyProfile
dataSource: usersTable
request: Query.getMyProfile.request.vtl
response: Query.getMyProfile.response.vtl
- type: Query
field: getImageUploadUrl
dataSource: getImageUploadUrlFunction
request: false
response: false
- type: Query
field: getTweets
dataSource: tweetsTable
request: Query.getTweets.request.vtl
response: Query.getTweets.response.vtl
- type: Query
field: getMyTimeline
dataSource: timelinesTable
request: Query.getMyTimeline.request.vtl
response: Query.getMyTimeline.response.vtl
- type: Query
field: getLikes
dataSource: likesTable
request: Query.getLikes.request.vtl
response: Query.getLikes.response.vtl
- type: Query
field: getProfile
dataSource: usersTable
# https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html
- 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: Mutation
field: editMyProfile
dataSource: usersTable
request: Mutation.editMyProfile.request.vtl
response: Mutation.editMyProfile.response.vtl
- type: Mutation
field: tweet
dataSource: tweetFunction
request: false
response: false
- type: Mutation
field: like
dataSource: likesMutation
request: Mutation.like.request.vtl
response: Mutation.like.response.vtl
- type: Mutation
field: unlike
dataSource: unlikeMutation
request: Mutation.unlike.request.vtl
response: Mutation.unlike.response.vtl
- 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: unfollow
dataSource: unfollowMutation
- type: Mutation
field: notifyRetweeted
dataSource: notificationsTable
- type: Mutation
field: notifyLiked
dataSource: notificationsTable
- type: Mutation
field: notifyMentioned
dataSource: notificationsTable
- type: Mutation
field: notifyReplied
dataSource: notificationsTable
# nested resolvers
- type: Tweet
field: profile
dataSource: usersTable
- type: Tweet
field: liked
dataSource: likesTable
- type: Tweet
field: retweeted
dataSource: retweetsTable
- 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: Retweet
field: profile
dataSource: usersTable
request: Tweet.profile.request.vtl
response: Tweet.profile.response.vtl
- type: Retweet
field: retweetOf
dataSource: tweetsTable
- type: Reply
field: profile
dataSource: usersTable
request: Tweet.profile.request.vtl
response: Tweet.profile.response.vtl
- type: Reply
field: inReplyToTweet
dataSource: tweetsTable
- type: Reply
field: inReplyToUser
dataSource: usersTable
- type: Reply
field: retweeted
dataSource: retweetsTable
request: Tweet.retweeted.request.vtl
response: Tweet.retweeted.response.vtl
- type: Reply
field: liked
dataSource: likesTable
request: Tweet.liked.request.vtl
response: Tweet.liked.response.vtl
- type: OtherProfile
field: following
dataSource: relationshipsTable
- type: OtherProfile
field: followedBy
dataSource: relationshipsTable
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: likesMutation
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: AMAZON_DYNAMODB
name: notificationsTable
config:
tableName: !Ref NotificationsTable
- type: AWS_LAMBDA
name: getImageUploadUrlFunction
config:
functionName: getImageUploadUrl
- type: AWS_LAMBDA
name: tweetFunction
config:
functionName: tweetFunction
- type: AWS_LAMBDA
name: retweetFunction
config:
functionName: retweetFunction
- type: AWS_LAMBDA
name: unretweetFunction
config:
functionName: unretweetFunction
- type: AWS_LAMBDA
name: replyFunction
config:
functionName: replyFunction
- type: AWS_LAMBDA
name: searchFunction
config:
functionName: search
- type: AWS_LAMBDA
name: getHashTagFunction
config:
functionName: getHashTag
substitutions:
TweetsTable: !Ref TweetsTable
LikesTable: !Ref LikesTable
UsersTable: !Ref UsersTable
RelationshipsTable: !Ref RelationshipsTable