2024-07-24 11:03:19 -07:00
|
|
|
use crate::state::{
|
2024-08-16 23:20:11 -07:00
|
|
|
CacheBehaviour, CacheValueType, CachedEntry, Organization, Project,
|
|
|
|
|
SearchResults, TeamMember, User, Version,
|
2024-07-24 11:03:19 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
macro_rules! impl_cache_methods {
|
|
|
|
|
($(($variant:ident, $type:ty)),*) => {
|
|
|
|
|
$(
|
|
|
|
|
paste::paste! {
|
|
|
|
|
#[tracing::instrument]
|
|
|
|
|
pub async fn [<get_ $variant:snake>](
|
|
|
|
|
id: &str,
|
2024-08-16 23:20:11 -07:00
|
|
|
cache_behaviour: Option<CacheBehaviour>,
|
2024-07-24 11:03:19 -07:00
|
|
|
) -> crate::Result<Option<$type>>
|
|
|
|
|
{
|
|
|
|
|
let state = crate::State::get().await?;
|
2024-08-16 23:20:11 -07:00
|
|
|
Ok(CachedEntry::[<get_ $variant:snake _many>](&[id], cache_behaviour, &state.pool, &state.api_semaphore).await?.into_iter().next())
|
2024-07-24 11:03:19 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tracing::instrument]
|
|
|
|
|
pub async fn [<get_ $variant:snake _many>](
|
|
|
|
|
ids: &[&str],
|
2024-08-16 23:20:11 -07:00
|
|
|
cache_behaviour: Option<CacheBehaviour>,
|
2024-07-24 11:03:19 -07:00
|
|
|
) -> crate::Result<Vec<$type>>
|
|
|
|
|
{
|
|
|
|
|
let state = crate::State::get().await?;
|
|
|
|
|
let entries =
|
|
|
|
|
CachedEntry::[<get_ $variant:snake _many>](ids, None, &state.pool, &state.api_semaphore).await?;
|
|
|
|
|
|
|
|
|
|
Ok(entries)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
)*
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl_cache_methods!(
|
|
|
|
|
(Project, Project),
|
|
|
|
|
(Version, Version),
|
|
|
|
|
(User, User),
|
|
|
|
|
(Team, Vec<TeamMember>),
|
|
|
|
|
(Organization, Organization),
|
|
|
|
|
(SearchResults, SearchResults)
|
|
|
|
|
);
|
2024-08-16 23:20:11 -07:00
|
|
|
|
|
|
|
|
pub async fn purge_cache_types(
|
|
|
|
|
cache_types: &[CacheValueType],
|
|
|
|
|
) -> crate::Result<()> {
|
|
|
|
|
let state = crate::State::get().await?;
|
|
|
|
|
CachedEntry::purge_cache_types(cache_types, &state.pool).await?;
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|