Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7475b20

Browse files
committed
Created serverless function
1 parent 133f1bb commit 7475b20

File tree

9 files changed

+140
-4
lines changed

9 files changed

+140
-4
lines changed

‎.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
FAUNADB_SERVER_SECRET=

‎.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,5 @@ testem.log
4444
# System Files
4545
.DS_Store
4646
Thumbs.db
47+
48+
.env

‎.netlify/functions/hello.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎.netlify/functions/products.js

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎functions/products.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import faunadb from 'faunadb'
2+
3+
import { ProductService } from '../lib/product-service.js'
4+
import { client, q, headers } from '../lib/config.js'
5+
6+
const service = new ProductService({ client, q })
7+
8+
exports.handler = async (event, context) => {
9+
console.log('Function `products` invoked')
10+
11+
if (event.httpMethod !== 'GET') {
12+
return { statusCode: 405, headers, body: 'Method Not Allowed' }
13+
}
14+
15+
try {
16+
const products = await service.getProducts()
17+
return {
18+
statusCode: 200,
19+
headers,
20+
body: JSON.stringify(products),
21+
}
22+
} catch (error) {
23+
console.log('error', error)
24+
25+
return {
26+
statusCode: 400,
27+
headers,
28+
body: JSON.stringify(error),
29+
}
30+
}
31+
}

‎lib/config.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import faunadb from 'faunadb'
2+
require('dotenv').config()
3+
4+
const headers = {
5+
'Access-Control-Allow-Origin': '*',
6+
'Access-Control-Allow-Headers': 'Content-Type',
7+
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',
8+
}
9+
10+
const q = faunadb.query
11+
12+
const client = new faunadb.Client({
13+
secret: process.env.FAUNADB_SERVER_SECRET,
14+
})
15+
16+
export { q, client, headers }

‎lib/product-service.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
export class ProductService {
2+
constructor(data) {
3+
this.q = data.q
4+
this.client = data.client
5+
}
6+
7+
async getProducts() {
8+
return new Promise((resolve, reject) => {
9+
this.client
10+
.query(this.q.Paginate(this.q.Match(this.q.Ref('indexes/all_products'))))
11+
.then((response) => {
12+
const productRefs = response.data
13+
14+
console.log('Product refs', productRefs)
15+
console.log(`${productRefs.length} todos found`)
16+
17+
const getAllProductDataQuery = productRefs.map((ref) => {
18+
return this.q.Get(ref)
19+
})
20+
// then query the refs
21+
this.client.query(getAllProductDataQuery).then((ret) => {
22+
resolve(ret)
23+
})
24+
})
25+
.catch((error) => {
26+
console.log('error', error)
27+
28+
reject(error)
29+
})
30+
})
31+
}
32+
}

‎package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"@angular/platform-browser": "~9.1.9",
2424
"@angular/platform-browser-dynamic": "~9.1.9",
2525
"@angular/router": "~9.1.9",
26+
"faunadb": "^2.14.1",
2627
"netlify-lambda": "^1.6.3",
2728
"rxjs": "~6.5.4",
2829
"tslib": "^1.10.0",

‎yarn.lock

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1971,7 +1971,7 @@ base64-arraybuffer@0.1.5:
19711971
resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
19721972
integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
19731973

1974-
base64-js@^1.0.2:
1974+
base64-js@^1.0.2, base64-js@^1.2.0:
19751975
version "1.3.1"
19761976
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
19771977
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
@@ -2209,6 +2209,11 @@ browserstack@^1.5.1:
22092209
dependencies:
22102210
https-proxy-agent "^2.2.1"
22112211

2212+
btoa-lite@^1.0.0:
2213+
version "1.0.0"
2214+
resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
2215+
integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc=
2216+
22122217
buffer-from@^1.0.0:
22132218
version "1.1.1"
22142219
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
@@ -2873,6 +2878,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
28732878
safe-buffer "^5.0.1"
28742879
sha.js "^2.4.8"
28752880

2881+
cross-fetch@^3.0.4:
2882+
version "3.0.4"
2883+
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.4.tgz#7bef7020207e684a7638ef5f2f698e24d9eb283c"
2884+
integrity sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw==
2885+
dependencies:
2886+
node-fetch "2.6.0"
2887+
whatwg-fetch "3.0.0"
2888+
28762889
cross-spawn@^6.0.0:
28772890
version "6.0.5"
28782891
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
@@ -3388,6 +3401,11 @@ dot-prop@^5.2.0:
33883401
dependencies:
33893402
is-obj "^2.0.0"
33903403

3404+
dotenv@^8.2.0:
3405+
version "8.2.0"
3406+
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
3407+
integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
3408+
33913409
duplexify@^3.4.2, duplexify@^3.6.0:
33923410
version "3.7.1"
33933411
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
@@ -3810,6 +3828,20 @@ fastq@^1.6.0:
38103828
dependencies:
38113829
reusify "^1.0.4"
38123830

3831+
faunadb@^2.14.1:
3832+
version "2.14.1"
3833+
resolved "https://registry.yarnpkg.com/faunadb/-/faunadb-2.14.1.tgz#62e06992c8fcece560109aa2e37405a522c6e6e6"
3834+
integrity sha512-dP2H0ZatKsyVLcmNk5xT4tIiAULhB0fD3bpneWsEpXRwq0T5uw5R3NDX/OU3gpIkSgh5ZyzrUVCckxGyHM2ntw==
3835+
dependencies:
3836+
base64-js "^1.2.0"
3837+
btoa-lite "^1.0.0"
3838+
cross-fetch "^3.0.4"
3839+
dotenv "^8.2.0"
3840+
fn-annotate "^1.1.3"
3841+
object-assign "^4.1.0"
3842+
url-parse "^1.4.7"
3843+
util-deprecate "^1.0.2"
3844+
38133845
faye-websocket@^0.10.0:
38143846
version "0.10.0"
38153847
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
@@ -3940,6 +3972,11 @@ flush-write-stream@^1.0.0:
39403972
inherits "^2.0.3"
39413973
readable-stream "^2.3.6"
39423974

3975+
fn-annotate@^1.1.3:
3976+
version "1.2.0"
3977+
resolved "https://registry.yarnpkg.com/fn-annotate/-/fn-annotate-1.2.0.tgz#28da000117dea61842fe61f353f41cf4c93a7a7e"
3978+
integrity sha1-KNoAARfephhC/mHzU/Qc9Mk6en4=
3979+
39433980
follow-redirects@^1.0.0:
39443981
version "1.11.0"
39453982
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb"
@@ -5862,6 +5899,11 @@ node-fetch-npm@^2.0.2:
58625899
json-parse-better-errors "^1.0.0"
58635900
safe-buffer "^5.1.1"
58645901

5902+
node-fetch@2.6.0:
5903+
version "2.6.0"
5904+
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
5905+
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
5906+
58655907
node-forge@0.9.0:
58665908
version "0.9.0"
58675909
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
@@ -8656,7 +8698,7 @@ urix@^0.1.0:
86568698
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
86578699
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
86588700

8659-
url-parse@^1.4.3:
8701+
url-parse@^1.4.3, url-parse@^1.4.7:
86608702
version "1.4.7"
86618703
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
86628704
integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
@@ -8677,7 +8719,7 @@ use@^3.1.0:
86778719
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
86788720
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
86798721

8680-
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
8722+
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
86818723
version "1.0.2"
86828724
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
86838725
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
@@ -8988,6 +9030,11 @@ websocket-extensions@>=0.1.1:
89889030
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
89899031
integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
89909032

9033+
whatwg-fetch@3.0.0:
9034+
version "3.0.0"
9035+
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
9036+
integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
9037+
89919038
when@~3.6.x:
89929039
version "3.6.4"
89939040
resolved "https://registry.yarnpkg.com/when/-/when-3.6.4.tgz#473b517ec159e2b85005497a13983f095412e34e"

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /