Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
ember-aws-ehipster
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Redmine
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Bertrand PINEL
ember-aws-ehipster
Commits
bbc80fb5
Commit
bbc80fb5
authored
6 years ago
by
Bertrand PINEL
Browse files
Options
Downloads
Patches
Plain Diff
add support for simple query
parent
9196acfe
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
cloud/lambda-jsonapi-test.js
+117
-19
117 additions, 19 deletions
cloud/lambda-jsonapi-test.js
cloud/lambda/lambda-jsonapi.js
+71
-44
71 additions, 44 deletions
cloud/lambda/lambda-jsonapi.js
with
188 additions
and
63 deletions
cloud/lambda-jsonapi-test.js
+
117
−
19
View file @
bbc80fb5
...
...
@@ -66,7 +66,7 @@ function generateRowId(subid) {
objout
[(
attr
===
'
ObjectType
'
)?
'
type
'
:
'
id
'
]
=
obj
[
attr
];
}
}
console
.
log
(
'
Return object is
'
+
JSON
.
stringify
(
objout
));
//
console.log('Return object is '+JSON.stringify(objout));
return
objout
;
}
...
...
@@ -92,7 +92,7 @@ function generateRowId(subid) {
}
const
createResponse
=
(
statusCode
,
body
)
=>
{
console
.
log
(
"
Body is
"
+
JSON
.
stringify
(
body
));
//
console.log("Body is "+JSON.stringify(body));
return
{
'
statusCode
'
:
statusCode
,
'
data
'
:
handlingData
(
body
),
...
...
@@ -100,12 +100,34 @@ function generateRowId(subid) {
}
};
const
buildQuery
=
(
queryParams
,
type
)
=>
{
let
filterExpression
=
[];
let
params
=
{
TableName
:
tableName
,
KeyConditionExpression
:
'
ObjectType = :objectType
'
,
FilterExpression
:
""
,
ExpressionAttributeValues
:
{
'
:objectType
'
:
type
}
}
for
(
var
filter
in
queryParams
)
{
//"filter[email]": "klaroutte@yopmail.com",
if
(
filter
.
startsWith
(
'
filter
'
)){
let
attr
=
filter
.
substring
(
7
,
filter
.
length
-
1
);
let
value
=
queryParams
[
filter
];
filterExpression
.
push
(
attr
+
"
= :
"
+
attr
);
params
[
"
ExpressionAttributeValues
"
][
"
:
"
+
attr
]
=
value
;
}
params
[
"
FilterExpression
"
]
=
filterExpression
.
join
(
'
and
'
);
}
console
.
log
(
'
Query is
'
+
JSON
.
stringify
(
params
));
return
params
;
}
const
getMethod
=
(
event
,
context
,
callback
)
=>
{
let
params
=
{
TableName
:
tableName
,
},
type
=
event
.
params
.
path
.
type
,
query
=
event
.
params
.
querystring
,
id
=
Number
(
event
.
params
.
path
.
id
),
dbGet
=
{};
...
...
@@ -115,17 +137,22 @@ function generateRowId(subid) {
'
Id
'
:
id
};
dbGet
=
(
params
)
=>
{
return
dynamo
.
get
(
params
).
promise
()
};
console
.
log
(
'
E
mberDataServerless
lambda GET single value with params:
'
,
params
);
}
else
{
console
.
log
(
'
E
hipster
lambda GET single value with params:
'
,
params
);
}
else
if
(
Object
.
keys
(
query
).
length
===
0
)
{
// No filter expression
params
.
KeyConditionExpression
=
'
ObjectType = :objectType
'
;
params
.
ExpressionAttributeValues
=
{
'
:objectType
'
:
type
};
dbGet
=
(
params
)
=>
{
return
dynamo
.
query
(
params
).
promise
()
};
console
.
log
(
'
EmberDataServerless lambda GET multiple values with params:
'
,
params
);
console
.
log
(
'
Ehipster lambda GET multiple values with params:
'
,
params
);
}
else
{
// Use filter expression
params
=
buildQuery
(
query
,
type
);
dbGet
=
(
params
)
=>
{
return
dynamo
.
query
(
params
).
promise
()
};
console
.
log
(
'
Ehipster lambda GET query values with params:
'
,
params
);
}
dbGet
(
params
).
then
(
(
data
)
=>
{
console
.
log
(
'
E
mberDataServerless
lambda GET data received:
'
,
data
);
//
console.log('E
hipster
lambda GET data received: ', data);
if
(
id
&&
!
data
.
Item
)
{
callback
(
null
,
createResponse
(
404
,
"
ITEM NOT FOUND
"
));
...
...
@@ -206,17 +233,28 @@ function generateRowId(subid) {
};
const
patchMethod
=
(
event
,
context
,
callback
)
=>
{
let
type
=
event
.
params
.
path
.
type
,
id
=
Number
(
event
.
params
.
path
.
id
),
params
=
{
'
TableName
'
:
tableName
,
'
Key
'
:
{
'
ObjectType
'
:
type
,
'
Id
'
:
id
},
'
ReturnValues
'
:
'
ALL_OLD
'
};
const
body
=
event
[
'
body-json
'
];
const
attrs
=
body
.
data
.
attributes
;
let
updateExpressionList
=
[];
let
expressionAttributeList
=
[];
for
(
var
attr
in
attrs
)
{
updateExpressionList
.
push
(
attr
+
'
= :
'
+
attr
);
expressionAttributeList
[
'
:
'
+
attr
]
=
attrs
[
attr
];
}
let
updateExpression
=
'
set
'
+
updateExpressionList
.
join
(
'
,
'
);
let
type
=
event
.
params
.
path
.
type
,
id
=
Number
(
event
.
params
.
path
.
id
),
params
=
{
'
TableName
'
:
tableName
,
'
Key
'
:
{
'
ObjectType
'
:
type
,
'
Id
'
:
id
},
'
UpdateExpression
'
:
updateExpression
,
'
ExpressionAttributeValues
'
:
expressionAttributeList
,
'
ReturnValues
'
:
'
UPDATED_NEW
'
};
let
dbUpdate
=
(
params
)
=>
{
return
dynamo
.
update
(
params
).
promise
()
};
dbUpdate
(
params
).
then
(
(
data
)
=>
{
if
(
!
data
.
Attributes
)
{
...
...
@@ -258,6 +296,7 @@ const patchMethod = (event, context, callback) => {
});
};
const
callback
=
(
evt
,
msg
)
=>
{
console
.
log
(
msg
);};
...
...
@@ -291,6 +330,65 @@ const msgGet = {
}
};
const
msgGetQuery
=
{
"
body-json
"
:
{},
"
params
"
:
{
"
path
"
:
{
"
type
"
:
"
users
"
},
"
querystring
"
:
{
"
filter[email]
"
:
"
klaroutte@yopmail.com
"
},
"
header
"
:
{
"
Accept
"
:
"
application/vnd.api+json
"
,
"
Accept-Encoding
"
:
"
gzip, deflate, br
"
,
"
Accept-Language
"
:
"
fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
"
,
"
cache-control
"
:
"
no-cache
"
,
"
CloudFront-Forwarded-Proto
"
:
"
https
"
,
"
CloudFront-Is-Desktop-Viewer
"
:
"
true
"
,
"
CloudFront-Is-Mobile-Viewer
"
:
"
false
"
,
"
CloudFront-Is-SmartTV-Viewer
"
:
"
false
"
,
"
CloudFront-Is-Tablet-Viewer
"
:
"
false
"
,
"
CloudFront-Viewer-Country
"
:
"
FR
"
,
"
content-type
"
:
"
application/json; charset=utf-8
"
,
"
Cookie
"
:
"
remember-me=MGJGZnNQS3dOOURwczJsU01XcVg6czJPYVUwVEViRnZZb2I3MU9uVUs
"
,
"
Host
"
:
"
dcftkivcqe.execute-api.us-east-1.amazonaws.com
"
,
"
pragma
"
:
"
no-cache
"
,
"
Referer
"
:
"
http://localhost:4200/entity-factory/user
"
,
"
User-Agent
"
:
"
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
"
,
"
Via
"
:
"
1.1 c03df46dd14077b7e27646bae1647fb4.cloudfront.net (CloudFront)
"
,
"
X-Amz-Cf-Id
"
:
"
BXJ8PIGP0o96HpT3KfHpOy3hdQg94UkC-J6gdoqixkQfcaMhNmp9sQ==
"
,
"
X-Amzn-Trace-Id
"
:
"
Root=1-5c2f7554-9d3c6efa7785f9b665dee096
"
,
"
x-broccoli
"
:
"
[object Object]
"
,
"
X-Forwarded-For
"
:
"
::1, 195.5.224.170, 54.239.156.82
"
,
"
x-forwarded-host
"
:
"
localhost:4200
"
,
"
X-Forwarded-Port
"
:
"
443
"
,
"
X-Forwarded-Proto
"
:
"
https
"
,
"
x-requested-with
"
:
"
XMLHttpRequest
"
}
},
"
context
"
:
{
"
httpMethod
"
:
"
GET
"
,
"
account-id
"
:
""
,
"
api-id
"
:
"
dcftkivcqe
"
,
"
api-key
"
:
""
,
"
authorizer-principal-id
"
:
""
,
"
caller
"
:
""
,
"
cognito-authentication-provider
"
:
""
,
"
cognito-authentication-type
"
:
""
,
"
cognito-identity-id
"
:
""
,
"
cognito-identity-pool-id
"
:
""
,
"
stage
"
:
"
staging
"
,
"
source-ip
"
:
"
195.5.224.170
"
,
"
user
"
:
""
,
"
user-agent
"
:
"
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
"
,
"
user-arn
"
:
""
,
"
request-id
"
:
"
a41433ba-1031-11e9-9052-832dbc024b91
"
,
"
resource-id
"
:
"
cmo3pj
"
,
"
resource-path
"
:
"
/{type}
"
}
}
const
msgPost
=
{
"
body-json
"
:
{
"
data
"
:
{
...
...
@@ -378,5 +476,5 @@ const msgPost = {
}
};
getMethod
(
msgGet
,
{},
callback
);
getMethod
(
msgGet
Query
,
{},
callback
);
//putMethod(msgPost, {}, callback);
\ No newline at end of file
This diff is collapsed.
Click to expand it.
cloud/lambda/lambda-jsonapi.js
+
71
−
44
View file @
bbc80fb5
...
...
@@ -92,50 +92,77 @@ function generateRowId(subid) {
}
};
const
getMethod
=
(
event
,
context
,
callback
)
=>
{
let
params
=
{
TableName
:
tableName
,
},
type
=
event
.
params
.
path
.
type
,
id
=
Number
(
event
.
params
.
path
.
id
),
dbGet
=
{};
if
(
id
)
{
params
.
Key
=
{
'
ObjectType
'
:
type
,
'
Id
'
:
id
};
dbGet
=
(
params
)
=>
{
return
dynamo
.
get
(
params
).
promise
()
};
console
.
log
(
'
EmberDataServerless lambda GET single value with params:
'
,
params
);
}
else
{
params
.
KeyConditionExpression
=
'
ObjectType = :objectType
'
;
params
.
ExpressionAttributeValues
=
{
'
:objectType
'
:
type
};
dbGet
=
(
params
)
=>
{
return
dynamo
.
query
(
params
).
promise
()
};
console
.
log
(
'
EmberDataServerless lambda GET multiple values with params:
'
,
params
);
}
dbGet
(
params
).
then
(
(
data
)
=>
{
console
.
log
(
'
EmberDataServerless lambda GET data received:
'
,
data
);
if
(
id
&&
!
data
.
Item
)
{
callback
(
null
,
createResponse
(
404
,
"
ITEM NOT FOUND
"
));
return
;
}
else
if
(
id
&&
data
.
Item
)
{
console
.
log
(
`RETRIEVED ITEM SUCCESSFULLY WITH doc =
${
data
.
Item
}
`
);
callback
(
null
,
createResponse
(
200
,
data
.
Item
));
}
else
{
console
.
log
(
'
SCANNING TABLE
'
);
console
.
log
(
`RETRIEVED ITEMS SUCCESSFULLY WITH doc =
${
data
.
Items
}
`
);
callback
(
null
,
createResponse
(
200
,
data
.
Items
));
}
}).
catch
(
(
err
)
=>
{
console
.
log
(
`GET ITEM FAILED FOR Entry =
${
params
}
, WITH ERROR:
${
err
}
`
);
callback
(
null
,
createResponse
(
500
,
err
));
});
};
const
buildQuery
=
(
queryParams
,
type
)
=>
{
let
filterExpression
=
[];
let
params
=
{
TableName
:
tableName
,
KeyConditionExpression
:
'
ObjectType = :objectType
'
,
FilterExpression
:
""
,
ExpressionAttributeValues
:
{
'
:objectType
'
:
type
}
}
for
(
var
filter
in
queryParams
)
{
//"filter[email]": "klaroutte@yopmail.com",
if
(
filter
.
startsWith
(
'
filter
'
)){
let
attr
=
filter
.
substring
(
7
,
filter
.
length
-
1
);
let
value
=
queryParams
[
filter
];
filterExpression
.
push
(
attr
+
"
= :
"
+
attr
);
params
[
"
ExpressionAttributeValues
"
][
"
:
"
+
attr
]
=
value
;
}
params
[
"
FilterExpression
"
]
=
filterExpression
.
join
(
'
and
'
);
}
console
.
log
(
'
Query is
'
+
JSON
.
stringify
(
params
));
return
params
;
}
const
getMethod
=
(
event
,
context
,
callback
)
=>
{
let
params
=
{
TableName
:
tableName
,
},
type
=
event
.
params
.
path
.
type
,
query
=
event
.
params
.
querystring
,
id
=
Number
(
event
.
params
.
path
.
id
),
dbGet
=
{};
if
(
id
)
{
params
.
Key
=
{
'
ObjectType
'
:
type
,
'
Id
'
:
id
};
dbGet
=
(
params
)
=>
{
return
dynamo
.
get
(
params
).
promise
()
};
console
.
log
(
'
Ehipster lambda GET single value with params:
'
,
params
);
}
else
if
(
Object
.
keys
(
query
).
length
===
0
)
{
// No filter expression
params
.
KeyConditionExpression
=
'
ObjectType = :objectType
'
;
params
.
ExpressionAttributeValues
=
{
'
:objectType
'
:
type
};
dbGet
=
(
params
)
=>
{
return
dynamo
.
query
(
params
).
promise
()
};
console
.
log
(
'
Ehipster lambda GET multiple values with params:
'
,
params
);
}
else
{
// Use filter expression
params
=
buildQuery
(
query
,
type
);
dbGet
=
(
params
)
=>
{
return
dynamo
.
query
(
params
).
promise
()
};
console
.
log
(
'
Ehipster lambda GET query values with params:
'
,
params
);
}
dbGet
(
params
).
then
(
(
data
)
=>
{
//console.log('Ehipster lambda GET data received: ', data);
if
(
id
&&
!
data
.
Item
)
{
callback
(
null
,
createResponse
(
404
,
"
ITEM NOT FOUND
"
));
return
;
}
else
if
(
id
&&
data
.
Item
)
{
console
.
log
(
`RETRIEVED ITEM SUCCESSFULLY WITH doc =
${
data
.
Item
}
`
);
callback
(
null
,
createResponse
(
200
,
data
.
Item
));
}
else
{
console
.
log
(
'
SCANNING TABLE
'
);
console
.
log
(
`RETRIEVED ITEMS SUCCESSFULLY WITH doc =
${
data
.
Items
}
`
);
callback
(
null
,
createResponse
(
200
,
data
.
Items
));
}
}).
catch
(
(
err
)
=>
{
console
.
log
(
`GET ITEM FAILED FOR Entry =
${
params
}
, WITH ERROR:
${
err
}
`
);
callback
(
null
,
createResponse
(
500
,
err
));
});
};
const
putMethod
=
(
event
,
context
,
callback
)
=>
{
const
body
=
event
[
'
body-json
'
];
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment