mirror of
https://github.com/documenso/documenso
synced 2026-04-28 00:17:17 +00:00
### Summary - Add Cache-Control headers to all route responses (1h s-maxage, 2h stale-while-revalidate) - Append current month to chart data so graphs stay up-to-date (cumulative carries forward, else zero) - Remove `.limit(12)` from growth queries for full history - Pass isCumulative flag through addZeroMonth - Deduplicate TransformedData type, remove transformRepoStats
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import { DateTime } from 'luxon';
|
|
|
|
export type TransformedData = {
|
|
labels: string[];
|
|
datasets: Array<{
|
|
label: string;
|
|
data: number[];
|
|
}>;
|
|
};
|
|
|
|
const FORMAT = 'MMM yyyy';
|
|
|
|
export const addZeroMonth = (
|
|
transformedData: TransformedData,
|
|
isCumulative = false,
|
|
): TransformedData => {
|
|
const result: TransformedData = {
|
|
labels: [...transformedData.labels],
|
|
datasets: transformedData.datasets.map((dataset) => ({
|
|
label: dataset.label,
|
|
data: [...dataset.data],
|
|
})),
|
|
};
|
|
|
|
if (result.labels.length === 0) {
|
|
return result;
|
|
}
|
|
|
|
if (!result.datasets.every((dataset) => dataset.data[0] === 0)) {
|
|
const firstMonth = DateTime.fromFormat(result.labels[0], FORMAT);
|
|
if (!firstMonth.isValid) {
|
|
console.warn(`Could not parse date: "${result.labels[0]}"`);
|
|
return transformedData;
|
|
}
|
|
|
|
result.labels.unshift(firstMonth.minus({ months: 1 }).toFormat(FORMAT));
|
|
result.datasets.forEach((dataset) => {
|
|
dataset.data.unshift(0);
|
|
});
|
|
}
|
|
|
|
const now = DateTime.now().startOf('month');
|
|
const lastMonth = DateTime.fromFormat(result.labels[result.labels.length - 1], FORMAT);
|
|
|
|
if (lastMonth.isValid && lastMonth.startOf('month') < now) {
|
|
result.labels.push(now.toFormat(FORMAT));
|
|
result.datasets.forEach((dataset) => {
|
|
dataset.data.push(isCumulative ? dataset.data[dataset.data.length - 1] : 0);
|
|
});
|
|
}
|
|
|
|
return result;
|
|
};
|