// pagamentos-plugin-cache/index.ts
import {
type LifecycleHook,
onCobrancaCreated,
onCobrancaRetrieved,
onCobrancaUpdated,
onClienteCreated,
onClienteRetrieved,
onClienteUpdated
} from 'pagamentos'
export interface CachePluginOptions {
adapter: CacheAdapter // { get(key), set(key, value, ttl), del(key) }
ttl?: number // segundos
}
export function pluginCache(options: CachePluginOptions): LifecycleHook[] {
const { adapter, ttl = 300 } = options
return [
// Invalida cache em mutações
onCobrancaCreated(async (evt) => {
await adapter.del(`cobrancas:list:${evt.input.cliente?.documento}`)
}),
onCobrancaUpdated(async (evt) => {
await adapter.del(`cobrancas:${evt.output.id}`)
}),
// Popula cache em consultas
onCobrancaRetrieved(async (evt) => {
await adapter.set(
`cobrancas:${evt.output.id}`,
evt.output,
ttl
)
}),
onClienteRetrieved(async (evt) => {
await adapter.set(
`clientes:${evt.output.id}`,
evt.output,
ttl
)
}),
onClienteCreated(async (evt) => {
await adapter.del('clientes:list')
}),
onClienteUpdated(async (evt) => {
await adapter.del(`clientes:${evt.output.id}`)
await adapter.del('clientes:list')
})
]
}