Files
Oxicloud/src/application/ports/carddav_ports.rs
T

142 lines
4.3 KiB
Rust
Raw Normal View History

2025-04-13 01:04:04 +02:00
use crate::application::dtos::address_book_dto::{
2026-02-14 01:29:34 +01:00
AddressBookDto, CreateAddressBookDto, ShareAddressBookDto, UnshareAddressBookDto,
UpdateAddressBookDto,
2025-04-13 01:04:04 +02:00
};
use crate::application::dtos::contact_dto::{
2026-02-14 01:29:34 +01:00
ContactDto, ContactGroupDto, CreateContactDto, CreateContactGroupDto, CreateContactVCardDto,
GroupMembershipDto, UpdateContactDto, UpdateContactGroupDto,
2025-04-13 01:04:04 +02:00
};
2026-02-14 01:29:34 +01:00
use crate::common::errors::DomainError;
use uuid::Uuid;
2025-04-13 01:04:04 +02:00
pub type CardDavRepositoryError = DomainError;
pub trait AddressBookUseCase: Send + Sync + 'static {
// Address Book operations
2026-02-14 01:29:34 +01:00
async fn create_address_book(
&self,
dto: CreateAddressBookDto,
) -> Result<AddressBookDto, DomainError>;
async fn update_address_book(
&self,
address_book_id: &str,
update: UpdateAddressBookDto,
) -> Result<AddressBookDto, DomainError>;
async fn delete_address_book(
&self,
address_book_id: &str,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<(), DomainError>;
async fn get_address_book(
&self,
address_book_id: &str,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<AddressBookDto, DomainError>;
async fn list_user_address_books(
&self,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<Vec<AddressBookDto>, DomainError>;
2025-04-13 01:04:04 +02:00
async fn list_public_address_books(&self) -> Result<Vec<AddressBookDto>, DomainError>;
2026-02-14 01:29:34 +01:00
2025-04-13 01:04:04 +02:00
// Address Book sharing
2026-02-14 01:29:34 +01:00
async fn share_address_book(
&self,
dto: ShareAddressBookDto,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<(), DomainError>;
async fn unshare_address_book(
&self,
dto: UnshareAddressBookDto,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<(), DomainError>;
async fn get_address_book_shares(
&self,
address_book_id: &str,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<Vec<(String, bool)>, DomainError>;
2025-04-13 01:04:04 +02:00
}
pub trait ContactUseCase: Send + Sync + 'static {
// Contact operations
async fn create_contact(&self, dto: CreateContactDto) -> Result<ContactDto, DomainError>;
2026-02-14 01:29:34 +01:00
async fn create_contact_from_vcard(
&self,
dto: CreateContactVCardDto,
) -> Result<ContactDto, DomainError>;
async fn update_contact(
&self,
contact_id: &str,
update: UpdateContactDto,
) -> Result<ContactDto, DomainError>;
async fn delete_contact(&self, contact_id: &str, user_id: Uuid) -> Result<(), DomainError>;
async fn get_contact(&self, contact_id: &str, user_id: Uuid)
2026-02-14 01:29:34 +01:00
-> Result<ContactDto, DomainError>;
async fn list_contacts(
&self,
address_book_id: &str,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<Vec<ContactDto>, DomainError>;
async fn search_contacts(
&self,
address_book_id: &str,
query: &str,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<Vec<ContactDto>, DomainError>;
2025-04-13 01:04:04 +02:00
// Contact Group operations
2026-02-14 01:29:34 +01:00
async fn create_group(
&self,
dto: CreateContactGroupDto,
) -> Result<ContactGroupDto, DomainError>;
async fn update_group(
&self,
group_id: &str,
update: UpdateContactGroupDto,
) -> Result<ContactGroupDto, DomainError>;
async fn delete_group(&self, group_id: &str, user_id: Uuid) -> Result<(), DomainError>;
2026-02-14 01:29:34 +01:00
async fn get_group(
&self,
group_id: &str,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<ContactGroupDto, DomainError>;
async fn list_groups(
&self,
address_book_id: &str,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<Vec<ContactGroupDto>, DomainError>;
2025-04-13 01:04:04 +02:00
// Group membership
2026-02-14 01:29:34 +01:00
async fn add_contact_to_group(
&self,
dto: GroupMembershipDto,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<(), DomainError>;
async fn remove_contact_from_group(
&self,
dto: GroupMembershipDto,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<(), DomainError>;
async fn list_contacts_in_group(
&self,
group_id: &str,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<Vec<ContactDto>, DomainError>;
async fn list_groups_for_contact(
&self,
contact_id: &str,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<Vec<ContactGroupDto>, DomainError>;
2025-04-13 01:04:04 +02:00
// vCard operations
2026-02-14 01:29:34 +01:00
async fn get_contact_vcard(
&self,
contact_id: &str,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<String, DomainError>;
async fn get_contacts_as_vcards(
&self,
address_book_id: &str,
user_id: Uuid,
2026-02-14 01:29:34 +01:00
) -> Result<Vec<(String, String)>, DomainError>;
}