Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions apps/frilvault-cli/src/command/add.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
use anyhow::{Result, bail};
use frilvault_core::{
AddNoteRequest, LineAnchor, NoteAnchor, SymbolAnchor, SymbolKind, create_note_service,
};
use frilvault_core::{AddNoteRequest, FrilVault, LineAnchor, NoteAnchor, SymbolAnchor, SymbolKind};

use crate::cli::add::{AddCommand, SymbolKindArg};

pub fn execute(command: AddCommand) -> Result<()> {
let mut service = create_note_service()?;
let workspace = FrilVault::open(std::env::current_dir()?)?;
let mut service = FrilVault::create_note_service(&workspace)?;

let anchor = create_anchor(&command)?;

Expand Down
6 changes: 4 additions & 2 deletions apps/frilvault-cli/src/command/delete.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
use anyhow::Result;
use frilvault_core::create_note_service;

use frilvault_core::FrilVault;
use uuid::Uuid;

use crate::cli::delete::DeleteCommand;

pub fn execute(command: DeleteCommand) -> Result<()> {
let mut service = create_note_service()?;
let workspace = FrilVault::open(std::env::current_dir()?)?;
let mut service = FrilVault::create_note_service(&workspace)?;

service.delete_note(&command.file, Uuid::parse_str(&command.id)?)?;

Expand Down
5 changes: 3 additions & 2 deletions apps/frilvault-cli/src/command/doctor.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use anyhow::Result;
use frilvault_core::create_workspace_service;
use frilvault_core::FrilVault;

pub fn execute() -> Result<()> {
let mut service = create_workspace_service()?;
let workspace = FrilVault::open(std::env::current_dir()?)?;
let mut service = FrilVault::create_workspace_service(&workspace)?;

let health = service.health_check()?;

Expand Down
5 changes: 3 additions & 2 deletions apps/frilvault-cli/src/command/list.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
use anyhow::Result;
use frilvault_core::create_note_service;
use frilvault_core::FrilVault;

use crate::{
cli::list::{ListCommand, ListFormatArg},
output::{OutputFormat, print_notes},
};

pub fn execute(command: ListCommand) -> Result<()> {
let mut service = create_note_service()?;
let workspace = FrilVault::open(std::env::current_dir()?)?;
let mut service = FrilVault::create_note_service(&workspace)?;

let notes = service.list_notes(&command.file)?;

Expand Down
5 changes: 3 additions & 2 deletions apps/frilvault-cli/src/command/repair.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
use anyhow::Result;
use frilvault_core::create_workspace_service;
use frilvault_core::FrilVault;

use crate::cli::repair::RepairCommand;

pub fn execute(command: RepairCommand) -> Result<()> {
let mut service = create_workspace_service()?;
let workspace = FrilVault::open(std::env::current_dir()?)?;
let mut service = FrilVault::create_workspace_service(&workspace)?;

if command.apply {
let repaired = service.apply_repairs()?;
Expand Down
5 changes: 3 additions & 2 deletions apps/frilvault-cli/src/command/search.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
use anyhow::Result;
use frilvault_core::create_note_service;
use frilvault_core::FrilVault;

use crate::{
cli::search::{SearchCommand, SearchFormatArg},
output::{OutputFormat, print_notes},
};

pub fn execute(command: SearchCommand) -> Result<()> {
let mut service = create_note_service()?;
let workspace = FrilVault::open(std::env::current_dir()?)?;
let mut service = FrilVault::create_note_service(&workspace)?;

let results = match (command.keyword.as_deref(), command.file.as_deref()) {
(Some(keyword), Some(file)) => service
Expand Down
5 changes: 3 additions & 2 deletions apps/frilvault-cli/src/command/stats.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use anyhow::Result;
use frilvault_core::create_workspace_service;
use frilvault_core::FrilVault;

pub fn execute() -> Result<()> {
let mut service = create_workspace_service()?;
let workspace = FrilVault::open(std::env::current_dir()?)?;
let mut service = FrilVault::create_workspace_service(&workspace)?;

let stats = service.stats()?;

Expand Down
6 changes: 4 additions & 2 deletions apps/frilvault-cli/src/command/update.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
use anyhow::Result;
use frilvault_core::create_note_service;

use frilvault_core::FrilVault;
use uuid::Uuid;

use crate::cli::update::UpdateCommand;

pub fn execute(command: UpdateCommand) -> Result<()> {
let mut service = create_note_service()?;
let workspace = FrilVault::open(std::env::current_dir()?)?;
let mut service = FrilVault::create_note_service(&workspace)?;

service.update_note(
&command.file,
Expand Down
52 changes: 31 additions & 21 deletions crates/frilvault-core/src/app/frilvault.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use std::path::{Path, PathBuf};

use crate::{
FrilVaultResult,
note::NoteService,
Expand All @@ -6,36 +8,44 @@ use crate::{
workspace::{PathResolver, WorkspaceIndexRepository, WorkspaceRepository, WorkspaceService},
};

pub fn create_note_service() -> FrilVaultResult<NoteService> {
let workspace_root = std::env::current_dir()?;
pub struct FrilVault {
workspace_root: PathBuf,
}

let resolver = PathResolver::new(workspace_root);
impl FrilVault {
pub fn open(workspace_root: impl AsRef<Path>) -> FrilVaultResult<Self> {
Ok(Self {
workspace_root: workspace_root.as_ref().to_path_buf(),
})
}

let workspace_repository = WorkspaceRepository::new(resolver.clone());
workspace_repository.create_if_missing()?;
pub fn create_note_service(&self) -> FrilVaultResult<NoteService> {
let resolver = PathResolver::new(&self.workspace_root);

let index_repository = WorkspaceIndexRepository::new(resolver.clone());
index_repository.create_if_missing()?;
let workspace_repository = WorkspaceRepository::new(resolver.clone());
workspace_repository.create_if_missing()?;

let note_repository = YamlNoteRepository::new(resolver.clone());
let vault_context = VaultContext::new(note_repository, index_repository);
let index_repository = WorkspaceIndexRepository::new(resolver.clone());
index_repository.create_if_missing()?;

Ok(NoteService::new(vault_context))
}
let note_repository = YamlNoteRepository::new(resolver.clone());
let vault_context = VaultContext::new(note_repository, index_repository);

pub fn create_workspace_service() -> FrilVaultResult<WorkspaceService> {
let workspace_root = std::env::current_dir()?;
Ok(NoteService::new(vault_context))
}

let resolver = PathResolver::new(workspace_root);
pub fn create_workspace_service(&self) -> FrilVaultResult<WorkspaceService> {
let resolver = PathResolver::new(&self.workspace_root);

let workspace_repository = WorkspaceRepository::new(resolver.clone());
workspace_repository.create_if_missing()?;
let workspace_repository = WorkspaceRepository::new(resolver.clone());
workspace_repository.create_if_missing()?;

let index_repository = WorkspaceIndexRepository::new(resolver.clone());
index_repository.create_if_missing()?;
let index_repository = WorkspaceIndexRepository::new(resolver.clone());
index_repository.create_if_missing()?;

let note_repository = YamlNoteRepository::new(resolver);
let vault_context = VaultContext::new(note_repository, index_repository.clone());
let note_repository = YamlNoteRepository::new(resolver);
let vault_context = VaultContext::new(note_repository, index_repository.clone());

Ok(WorkspaceService::new(vault_context, index_repository))
Ok(WorkspaceService::new(vault_context, index_repository))
}
}
2 changes: 1 addition & 1 deletion crates/frilvault-core/src/app/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
pub mod frilvault;
mod frilvault;

pub use frilvault::*;
2 changes: 1 addition & 1 deletion crates/frilvault-core/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
pub mod app;
pub mod error;
pub mod note;

mod constants;
pub mod note;
mod parser;
mod runtime;
mod storage;
Expand Down
48 changes: 48 additions & 0 deletions crates/frilvault-core/src/tests/frilvault_app_test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
use std::fs;

use crate::{AddNoteRequest, FrilVault, LineAnchor, NoteAnchor};

#[test]
fn frilvault_open_creates_note_service() {
let workspace_root =
std::env::temp_dir().join(format!("frilvault-test-{}", uuid::Uuid::new_v4()));

fs::create_dir_all(&workspace_root).unwrap();

let vault = FrilVault::open(&workspace_root).unwrap();

let mut notes = vault.create_note_service().unwrap();

notes
.add_note(AddNoteRequest {
source_file: "src/main.rs".into(),
anchor: NoteAnchor::Line(LineAnchor { line: 1, column: 1 }),
content: "facade note".to_string(),
})
.unwrap();

let result = notes.list_notes("src/main.rs").unwrap();

assert_eq!(result.len(), 1);
assert_eq!(result[0].note.content, "facade note");

fs::remove_dir_all(workspace_root).unwrap();
}

#[test]
fn frilvault_open_creates_workspace_service() {
let workspace_root =
std::env::temp_dir().join(format!("frilvault-test-{}", uuid::Uuid::new_v4()));

fs::create_dir_all(&workspace_root).unwrap();

let vault = FrilVault::open(&workspace_root).unwrap();

let mut workspace = vault.create_workspace_service().unwrap();

let stats = workspace.stats().unwrap();

assert_eq!(stats.file_count, 0);

fs::remove_dir_all(workspace_root).unwrap();
}
3 changes: 3 additions & 0 deletions crates/frilvault-core/src/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,8 @@ mod workspace_index_repository_test;
#[cfg(test)]
mod vault_context_test;

#[cfg(test)]
mod frilvault_app_test;

#[cfg(test)]
mod repair_engin_test;