1
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:
Jake Jarvis 2021-05-31 11:24:23 -04:00
parent 37807e008b
commit bf6be99a21
Signed by: jake
GPG Key ID: 2B0C9CF251E69A39
4 changed files with 66 additions and 11 deletions

View File

@ -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
View 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,
}),
};
}
};

View File

@ -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",

View File

@ -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"