This commit is contained in:
parent
bff425c3bd
commit
afc6816451
3 changed files with 111 additions and 70 deletions
|
|
@ -1,7 +1,10 @@
|
|||
import { getPayload } from 'payload'
|
||||
import { unstable_cache } from 'next/cache'
|
||||
import config from '@/payload.config'
|
||||
import { Announcement, Parish } from '@/payload-types'
|
||||
|
||||
const CACHE_TTL = 300 // 5 minutes
|
||||
|
||||
/**
|
||||
* Fetch last announcement for a parish
|
||||
*/
|
||||
|
|
@ -45,9 +48,8 @@ export const fetchLastAnnouncement = async (
|
|||
/**
|
||||
* Fetch the last announcement for each parish
|
||||
*/
|
||||
export const fetchLastAnnouncements = async (): Promise<
|
||||
Array<{ parish: Parish; doc: Announcement }>
|
||||
> => {
|
||||
export const fetchLastAnnouncements = unstable_cache(
|
||||
async (): Promise<Array<{ parish: Parish; doc: Announcement }>> => {
|
||||
const payload = await getPayload({ config })
|
||||
const parishes = await payload.find({ collection: 'parish', limit: 100 })
|
||||
|
||||
|
|
@ -61,4 +63,7 @@ export const fetchLastAnnouncements = async (): Promise<
|
|||
return results.filter(
|
||||
(r): r is { parish: Parish; doc: Announcement } => !!r,
|
||||
)
|
||||
}
|
||||
},
|
||||
['fetchLastAnnouncements'],
|
||||
{ revalidate: CACHE_TTL },
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
import { getPayload } from 'payload'
|
||||
import { unstable_cache } from 'next/cache'
|
||||
import config from '@/payload.config'
|
||||
import { Calendar, Parish } from '@/payload-types'
|
||||
|
||||
const CACHE_TTL = 300 // 5 minutes
|
||||
|
||||
/**
|
||||
* Fetch last calendar for a parish
|
||||
*/
|
||||
|
|
@ -45,9 +48,8 @@ export const fetchLastCalendar = async (
|
|||
/**
|
||||
* Fetch the last calendar for each parish
|
||||
*/
|
||||
export const fetchLastCalendars = async (): Promise<
|
||||
Array<{ parish: Parish; doc: Calendar }>
|
||||
> => {
|
||||
export const fetchLastCalendars = unstable_cache(
|
||||
async (): Promise<Array<{ parish: Parish; doc: Calendar }>> => {
|
||||
const payload = await getPayload({ config })
|
||||
const parishes = await payload.find({ collection: 'parish', limit: 100 })
|
||||
|
||||
|
|
@ -61,4 +63,7 @@ export const fetchLastCalendars = async (): Promise<
|
|||
return results.filter(
|
||||
(r): r is { parish: Parish; doc: Calendar } => !!r,
|
||||
)
|
||||
}
|
||||
},
|
||||
['fetchLastCalendars'],
|
||||
{ revalidate: CACHE_TTL },
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,29 +1,39 @@
|
|||
import { getPayload, PaginatedDocs } from 'payload'
|
||||
import { unstable_cache } from 'next/cache'
|
||||
import config from '@/payload.config'
|
||||
import { Worship } from '@/payload-types'
|
||||
|
||||
const CACHE_TTL = 300 // 5 minutes
|
||||
|
||||
type FetchWorshipArgs = {
|
||||
fromDate?: Date
|
||||
tillDate?: Date
|
||||
locations?: string[]
|
||||
}
|
||||
|
||||
export const fetchWorship = async (
|
||||
args?: FetchWorshipArgs,
|
||||
): Promise<PaginatedDocs<Worship>> => {
|
||||
const { fromDate, tillDate, locations } = args || {}
|
||||
|
||||
let date = fromDate
|
||||
if (!date) {
|
||||
date = new Date()
|
||||
date.setHours(0, 0, 0, 0)
|
||||
// Resolved args use ISO strings so they serialize into a stable cache key.
|
||||
type ResolvedWorshipArgs = {
|
||||
fromDate: string
|
||||
tillDate?: string
|
||||
locations?: string[]
|
||||
}
|
||||
|
||||
// Round down to the cache window so millisecond-precision dates produce a
|
||||
// stable key for the duration of the TTL.
|
||||
function roundDownToTtl(date: Date): Date {
|
||||
const ms = CACHE_TTL * 1000
|
||||
return new Date(Math.floor(date.getTime() / ms) * ms)
|
||||
}
|
||||
|
||||
const getWorship = unstable_cache(
|
||||
async (args: ResolvedWorshipArgs): Promise<PaginatedDocs<Worship>> => {
|
||||
const { fromDate, tillDate, locations } = args
|
||||
|
||||
const query: any = {
|
||||
and: [
|
||||
{
|
||||
date: {
|
||||
greater_than_equal: date.toISOString(),
|
||||
greater_than_equal: fromDate,
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
@ -32,7 +42,7 @@ export const fetchWorship = async (
|
|||
if (tillDate) {
|
||||
query.and.push({
|
||||
date: {
|
||||
less_than: tillDate.toISOString(),
|
||||
less_than: tillDate,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
|
@ -59,6 +69,27 @@ export const fetchWorship = async (
|
|||
},
|
||||
limit: 100,
|
||||
}) as Promise<PaginatedDocs<Worship>>
|
||||
},
|
||||
['fetchWorship'],
|
||||
{ revalidate: CACHE_TTL },
|
||||
)
|
||||
|
||||
export const fetchWorship = async (
|
||||
args?: FetchWorshipArgs,
|
||||
): Promise<PaginatedDocs<Worship>> => {
|
||||
const { fromDate, tillDate, locations } = args || {}
|
||||
|
||||
let date = fromDate
|
||||
if (!date) {
|
||||
date = new Date()
|
||||
date.setHours(0, 0, 0, 0)
|
||||
}
|
||||
|
||||
return getWorship({
|
||||
fromDate: roundDownToTtl(date).toISOString(),
|
||||
tillDate: tillDate ? roundDownToTtl(tillDate).toISOString() : undefined,
|
||||
locations,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue