move CalendarStore to separate file

This commit is contained in:
Lennart
2024-06-01 11:44:04 +02:00
parent 37ec7edca7
commit 7fcd9a17f5
16 changed files with 35 additions and 33 deletions

View File

@@ -5,7 +5,7 @@ use actix_web::{
HttpResponse, HttpResponse,
}; };
use rustical_auth::{AuthInfoExtractor, CheckAuthentication}; use rustical_auth::{AuthInfoExtractor, CheckAuthentication};
use rustical_store::calendar::CalendarStore; use rustical_store::store::CalendarStore;
pub async fn route_delete_calendar<A: CheckAuthentication, C: CalendarStore + ?Sized>( pub async fn route_delete_calendar<A: CheckAuthentication, C: CalendarStore + ?Sized>(
context: Data<CalDavContext<C>>, context: Data<CalDavContext<C>>,

View File

@@ -4,8 +4,8 @@ use actix_web::web::{Data, Path};
use actix_web::HttpResponse; use actix_web::HttpResponse;
use anyhow::Result; use anyhow::Result;
use rustical_auth::{AuthInfoExtractor, CheckAuthentication}; use rustical_auth::{AuthInfoExtractor, CheckAuthentication};
use rustical_dav::xml::tag_list::TagList; use rustical_store::calendar::Calendar;
use rustical_store::calendar::{Calendar, CalendarStore}; use rustical_store::store::CalendarStore;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Clone, Debug)] #[derive(Deserialize, Serialize, Clone, Debug)]

View File

@@ -9,7 +9,8 @@ use rustical_dav::{
propfind::{MultistatusElement, PropElement, PropfindType, ServicePrefix}, propfind::{MultistatusElement, PropElement, PropfindType, ServicePrefix},
resource::HandlePropfind, resource::HandlePropfind,
}; };
use rustical_store::{calendar::CalendarStore, event::Event}; use rustical_store::event::Event;
use rustical_store::store::CalendarStore;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use tokio::sync::RwLock; use tokio::sync::RwLock;

View File

@@ -5,7 +5,8 @@ use rustical_auth::AuthInfo;
use rustical_dav::error::Error; use rustical_dav::error::Error;
use rustical_dav::resource::{Resource, ResourceService}; use rustical_dav::resource::{Resource, ResourceService};
use rustical_dav::xml_snippets::{HrefElement, TextNode}; use rustical_dav::xml_snippets::{HrefElement, TextNode};
use rustical_store::calendar::{Calendar, CalendarStore}; use rustical_store::calendar::Calendar;
use rustical_store::store::CalendarStore;
use serde::Serialize; use serde::Serialize;
use std::sync::Arc; use std::sync::Arc;
use strum::{EnumString, IntoStaticStr, VariantNames}; use strum::{EnumString, IntoStaticStr, VariantNames};

View File

@@ -3,7 +3,7 @@ use actix_web::http::StatusCode;
use actix_web::web::{Data, Path}; use actix_web::web::{Data, Path};
use actix_web::{HttpResponse, ResponseError}; use actix_web::{HttpResponse, ResponseError};
use rustical_auth::{AuthInfoExtractor, CheckAuthentication}; use rustical_auth::{AuthInfoExtractor, CheckAuthentication};
use rustical_store::calendar::CalendarStore; use rustical_store::store::CalendarStore;
use thiserror::Error; use thiserror::Error;
#[derive(Debug, Error)] #[derive(Debug, Error)]

View File

@@ -5,8 +5,8 @@ use rustical_auth::AuthInfo;
use rustical_dav::error::Error; use rustical_dav::error::Error;
use rustical_dav::resource::{Resource, ResourceService}; use rustical_dav::resource::{Resource, ResourceService};
use rustical_dav::xml_snippets::TextNode; use rustical_dav::xml_snippets::TextNode;
use rustical_store::calendar::CalendarStore;
use rustical_store::event::Event; use rustical_store::event::Event;
use rustical_store::store::CalendarStore;
use serde::Serialize; use serde::Serialize;
use std::sync::Arc; use std::sync::Arc;
use strum::{EnumString, IntoStaticStr, VariantNames}; use strum::{EnumString, IntoStaticStr, VariantNames};

View File

@@ -8,7 +8,7 @@ use root::RootResource;
use rustical_auth::CheckAuthentication; use rustical_auth::CheckAuthentication;
use rustical_dav::error::Error; use rustical_dav::error::Error;
use rustical_dav::propfind::{route_propfind, ServicePrefix}; use rustical_dav::propfind::{route_propfind, ServicePrefix};
use rustical_store::calendar::CalendarStore; use rustical_store::store::CalendarStore;
use std::str::FromStr; use std::str::FromStr;
use std::sync::Arc; use std::sync::Arc;
use tokio::sync::RwLock; use tokio::sync::RwLock;

View File

@@ -7,7 +7,7 @@ use async_trait::async_trait;
use rustical_auth::AuthInfo; use rustical_auth::AuthInfo;
use rustical_dav::resource::{Resource, ResourceService}; use rustical_dav::resource::{Resource, ResourceService};
use rustical_dav::xml_snippets::HrefElement; use rustical_dav::xml_snippets::HrefElement;
use rustical_store::calendar::CalendarStore; use rustical_store::store::CalendarStore;
use serde::Serialize; use serde::Serialize;
use strum::{EnumString, IntoStaticStr, VariantNames}; use strum::{EnumString, IntoStaticStr, VariantNames};
use tokio::sync::RwLock; use tokio::sync::RwLock;

View File

@@ -1,6 +1,3 @@
use crate::event::Event;
use anyhow::Result;
use async_trait::async_trait;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Clone, Deserialize, Serialize)] #[derive(Debug, Default, Clone, Deserialize, Serialize)]
@@ -12,16 +9,3 @@ pub struct Calendar {
pub color: Option<String>, pub color: Option<String>,
pub timezone: Option<String>, pub timezone: Option<String>,
} }
#[async_trait]
pub trait CalendarStore: Send + Sync + 'static {
async fn get_calendar(&self, id: &str) -> Result<Calendar>;
async fn get_calendars(&self, owner: &str) -> Result<Vec<Calendar>>;
async fn insert_calendar(&mut self, cid: String, calendar: Calendar) -> Result<()>;
async fn delete_calendar(&mut self, cid: &str) -> Result<()>;
async fn get_events(&self, cid: &str) -> Result<Vec<Event>>;
async fn get_event(&self, cid: &str, uid: &str) -> Result<Event>;
async fn upsert_event(&mut self, cid: String, uid: String, ics: String) -> Result<()>;
async fn delete_event(&mut self, cid: &str, uid: &str) -> Result<()>;
}

View File

@@ -1,5 +1,6 @@
pub mod calendar; pub mod calendar;
pub mod event; pub mod event;
pub mod sqlite_store; pub mod sqlite_store;
pub mod store;
pub mod timestamps; pub mod timestamps;
pub mod toml_store; pub mod toml_store;

View File

@@ -2,10 +2,7 @@ use anyhow::Result;
use async_trait::async_trait; use async_trait::async_trait;
use sqlx::{sqlite::SqliteConnectOptions, Pool, Sqlite, SqlitePool}; use sqlx::{sqlite::SqliteConnectOptions, Pool, Sqlite, SqlitePool};
use crate::{ use crate::{calendar::Calendar, event::Event, store::CalendarStore};
calendar::{Calendar, CalendarStore},
event::Event,
};
#[derive(Debug)] #[derive(Debug)]
pub struct SqliteCalendarStore { pub struct SqliteCalendarStore {

17
crates/store/src/store.rs Normal file
View File

@@ -0,0 +1,17 @@
use anyhow::Result;
use async_trait::async_trait;
use crate::{calendar::Calendar, event::Event};
#[async_trait]
pub trait CalendarStore: Send + Sync + 'static {
async fn get_calendar(&self, id: &str) -> Result<Calendar>;
async fn get_calendars(&self, owner: &str) -> Result<Vec<Calendar>>;
async fn insert_calendar(&mut self, cid: String, calendar: Calendar) -> Result<()>;
async fn delete_calendar(&mut self, cid: &str) -> Result<()>;
async fn get_events(&self, cid: &str) -> Result<Vec<Event>>;
async fn get_event(&self, cid: &str, uid: &str) -> Result<Event>;
async fn upsert_event(&mut self, cid: String, uid: String, ics: String) -> Result<()>;
async fn delete_event(&mut self, cid: &str, uid: &str) -> Result<()>;
}

View File

@@ -1,5 +1,6 @@
use crate::calendar::{Calendar, CalendarStore}; use crate::calendar::Calendar;
use crate::event::Event; use crate::event::Event;
use crate::store::CalendarStore;
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use async_trait::async_trait; use async_trait::async_trait;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};

View File

@@ -1,7 +1,7 @@
use rstest::rstest; use rstest::rstest;
use rstest_reuse::{self, apply, template}; use rstest_reuse::{self, apply, template};
use rustical_store::calendar::CalendarStore;
use rustical_store::sqlite_store::create_test_store; use rustical_store::sqlite_store::create_test_store;
use rustical_store::store::CalendarStore;
use rustical_store::toml_store::TomlCalendarStore; use rustical_store::toml_store::TomlCalendarStore;
const TIMEZONE: &str = include_str!("examples/timezone.ics"); const TIMEZONE: &str = include_str!("examples/timezone.ics");

View File

@@ -5,7 +5,7 @@ use actix_web::dev::{ServiceFactory, ServiceRequest, ServiceResponse};
use actix_web::middleware::{Logger, NormalizePath}; use actix_web::middleware::{Logger, NormalizePath};
use actix_web::{web, App}; use actix_web::{web, App};
use rustical_auth::CheckAuthentication; use rustical_auth::CheckAuthentication;
use rustical_store::calendar::CalendarStore; use rustical_store::store::CalendarStore;
use tokio::sync::RwLock; use tokio::sync::RwLock;
pub fn make_app<CS: CalendarStore + ?Sized, A: CheckAuthentication>( pub fn make_app<CS: CalendarStore + ?Sized, A: CheckAuthentication>(

View File

@@ -5,8 +5,8 @@ use app::make_app;
use clap::Parser; use clap::Parser;
use config::{CalendarStoreConfig, SqliteCalendarStoreConfig, TomlCalendarStoreConfig}; use config::{CalendarStoreConfig, SqliteCalendarStoreConfig, TomlCalendarStoreConfig};
use rustical_auth::AuthProvider; use rustical_auth::AuthProvider;
use rustical_store::calendar::CalendarStore;
use rustical_store::sqlite_store::{create_db_pool, SqliteCalendarStore}; use rustical_store::sqlite_store::{create_db_pool, SqliteCalendarStore};
use rustical_store::store::CalendarStore;
use rustical_store::toml_store::TomlCalendarStore; use rustical_store::toml_store::TomlCalendarStore;
use std::fs; use std::fs;
use std::sync::Arc; use std::sync::Arc;