mirror of
https://github.com/jakejarvis/jarv.is.git
synced 2025-04-27 18:30:30 -04:00
add popular posts API endpoint
This commit is contained in:
parent
37807e008b
commit
bf6be99a21
@ -17,7 +17,7 @@ exports.handler = async (event) => {
|
|||||||
return {
|
return {
|
||||||
statusCode: 400,
|
statusCode: 400,
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
message: "Page slug required.",
|
message: "Parameter `slug` is required.",
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -40,7 +40,6 @@ exports.handler = async (event) => {
|
|||||||
Pragma: "no-cache",
|
Pragma: "no-cache",
|
||||||
"Access-Control-Allow-Methods": "GET",
|
"Access-Control-Allow-Methods": "GET",
|
||||||
"Access-Control-Allow-Origin": "*",
|
"Access-Control-Allow-Origin": "*",
|
||||||
"x-fauna-ts": result.ts.toString().slice(0, -3),
|
|
||||||
},
|
},
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
slug: result.data.slug,
|
slug: result.data.slug,
|
||||||
|
51
functions/popular.js
Normal file
51
functions/popular.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
const faunadb = require("faunadb"),
|
||||||
|
q = faunadb.query;
|
||||||
|
const numeral = require("numeral");
|
||||||
|
const pluralize = require("pluralize");
|
||||||
|
require("dotenv").config();
|
||||||
|
|
||||||
|
exports.handler = async () => {
|
||||||
|
try {
|
||||||
|
const client = new faunadb.Client({
|
||||||
|
secret: process.env.FAUNADB_SERVER_SECRET,
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await client.query(
|
||||||
|
q.Map(
|
||||||
|
q.Paginate(q.Documents(q.Collection("hits"))),
|
||||||
|
q.Lambda((x) => q.Select("data", q.Get(x)))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
const posts = result.data.sort((a, b) => {
|
||||||
|
return a.hits > b.hits ? -1 : 1;
|
||||||
|
});
|
||||||
|
|
||||||
|
posts.forEach((p) => {
|
||||||
|
p.pretty_hits = numeral(p.hits).format("0,0");
|
||||||
|
p.pretty_unit = pluralize("hit", p.hits);
|
||||||
|
p.url = "https://jarv.is/" + p.slug + "/";
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
statusCode: 200,
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json; charset=utf-8",
|
||||||
|
"Access-Control-Allow-Methods": "GET",
|
||||||
|
"Access-Control-Allow-Origin": "*",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(posts),
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
|
||||||
|
return {
|
||||||
|
statusCode: 400,
|
||||||
|
body: JSON.stringify({
|
||||||
|
message: error.message,
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
@ -59,7 +59,7 @@
|
|||||||
"imagemin-cli": "^6.0.0",
|
"imagemin-cli": "^6.0.0",
|
||||||
"lint-staged": "^11.0.0",
|
"lint-staged": "^11.0.0",
|
||||||
"markdownlint-cli": "~0.27.1",
|
"markdownlint-cli": "~0.27.1",
|
||||||
"netlify-lambda": "^2.0.7",
|
"netlify-lambda": "^2.0.8",
|
||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"postcss": "^8.3.0",
|
"postcss": "^8.3.0",
|
||||||
"postcss-clean": "jakejarvis/postcss-clean#master",
|
"postcss-clean": "jakejarvis/postcss-clean#master",
|
||||||
|
21
yarn.lock
21
yarn.lock
@ -1952,9 +1952,9 @@ caniuse-api@^3.0.0:
|
|||||||
lodash.uniq "^4.5.0"
|
lodash.uniq "^4.5.0"
|
||||||
|
|
||||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001166, caniuse-lite@^1.0.30001179, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001230:
|
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001166, caniuse-lite@^1.0.30001179, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001230:
|
||||||
version "1.0.30001230"
|
version "1.0.30001231"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71"
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001231.tgz#6c1f9b49fc27cc368b894e64b9b28b39ef80603b"
|
||||||
integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==
|
integrity sha512-WAFFv31GgU4DiwNAy77qMo3nNyycEhH3ikcCVHvkQpPe/fO8Tb2aRYzss8kgyLQBm8mJ7OryW4X6Y4vsBCIqag==
|
||||||
|
|
||||||
caw@^2.0.0, caw@^2.0.1:
|
caw@^2.0.0, caw@^2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
@ -5584,11 +5584,16 @@ miller-rabin@^4.0.0:
|
|||||||
bn.js "^4.0.0"
|
bn.js "^4.0.0"
|
||||||
brorand "^1.0.1"
|
brorand "^1.0.1"
|
||||||
|
|
||||||
mime-db@1.47.0, mime-db@^1.28.0:
|
mime-db@1.47.0:
|
||||||
version "1.47.0"
|
version "1.47.0"
|
||||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c"
|
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c"
|
||||||
integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==
|
integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==
|
||||||
|
|
||||||
|
mime-db@^1.28.0:
|
||||||
|
version "1.48.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d"
|
||||||
|
integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==
|
||||||
|
|
||||||
mime-types@~2.1.24:
|
mime-types@~2.1.24:
|
||||||
version "2.1.30"
|
version "2.1.30"
|
||||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d"
|
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d"
|
||||||
@ -5777,10 +5782,10 @@ neo-async@^2.5.0, neo-async@^2.6.1:
|
|||||||
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
||||||
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
||||||
|
|
||||||
netlify-lambda@^2.0.7:
|
netlify-lambda@^2.0.8:
|
||||||
version "2.0.7"
|
version "2.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/netlify-lambda/-/netlify-lambda-2.0.7.tgz#09475e6ec658a7501934697d27addc4d45b5c353"
|
resolved "https://registry.yarnpkg.com/netlify-lambda/-/netlify-lambda-2.0.8.tgz#d8e3abcc052c436ea768d317a3c2a8dac6320e53"
|
||||||
integrity sha512-vHgEIUhUq+StzLPzh4JXf2jTjD/N8RYaGWUnsSykSd/KvTbGoVL95XPN9modVi0Bm5MCFNAUuEAiLdxZeQvR7Q==
|
integrity sha512-y7bR8DXUYWsCPvxoq7fFAuRrRIKJ80NJKHJhck8B7Y37fTaePl5PyvgE07EliBwKyO0udfbRqOadh/aMBVEGrw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/core" "^7.10.4"
|
"@babel/core" "^7.10.4"
|
||||||
"@babel/plugin-proposal-class-properties" "^7.10.4"
|
"@babel/plugin-proposal-class-properties" "^7.10.4"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user