feat: current state
This commit is contained in:
@@ -1 +1,42 @@
|
||||
pub struct ProfileService;
|
||||
use crate::{
|
||||
domain::profile::{ConnectionDraft, ConnectionProfile, ProfileFile, SecretReference},
|
||||
error::{AppError, SafeError},
|
||||
platform::profile_file::ProfileRepository,
|
||||
};
|
||||
pub struct ProfileService<R: ProfileRepository> {
|
||||
repository: R,
|
||||
}
|
||||
impl<R: ProfileRepository> ProfileService<R> {
|
||||
pub fn new(repository: R) -> Self {
|
||||
Self { repository }
|
||||
}
|
||||
pub async fn create(&self, draft: ConnectionDraft) -> Result<ConnectionProfile, AppError> {
|
||||
let draft = draft
|
||||
.validate()
|
||||
.map_err(|_| AppError(SafeError::input("Profile details are invalid")))?;
|
||||
let id = crate::domain::ids::ProfileId::new();
|
||||
let reference = if draft.save_secret {
|
||||
Some(SecretReference {
|
||||
service: "azure-database-tui".to_owned(),
|
||||
account: format!("profile/{id}"),
|
||||
})
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let profile = ConnectionProfile {
|
||||
id,
|
||||
azure_resource_id: crate::domain::ids::AzureResourceId::new(draft.azure_resource_id)
|
||||
.map_err(|_| AppError(SafeError::input("Profile details are invalid")))?,
|
||||
server_host: draft.server_host,
|
||||
port: draft.port,
|
||||
database: draft.database,
|
||||
username: draft.username,
|
||||
tls: draft.tls,
|
||||
secret_reference: reference,
|
||||
};
|
||||
let mut file: ProfileFile = self.repository.load().await?;
|
||||
file.profiles.push(profile.clone());
|
||||
self.repository.save(&file).await?;
|
||||
Ok(profile)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user