#![allow(unused_imports, dead_code)]
use crate::app_context::AppContext;
use anyhow::{Context, Result};
use common::direct_access::feature::FeatureRelationshipField;
use common::types::EntityId;
use direct_access::FeatureRelationshipDto;
use direct_access::{CreateFeatureDto, FeatureDto, UpdateFeatureDto, feature_controller};
pub fn create_orphan_feature(
ctx: &AppContext,
stack_id: Option<u64>,
dto: &CreateFeatureDto,
) -> Result<FeatureDto> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::create_orphan(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
dto,
)
.context("creating feature")
}
pub fn create_feature(
ctx: &AppContext,
stack_id: Option<u64>,
dto: &CreateFeatureDto,
owner_id: EntityId,
index: i32,
) -> Result<FeatureDto> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::create(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
dto,
owner_id,
index,
)
.context("creating feature")
}
pub fn create_orphan_feature_multi(
ctx: &AppContext,
stack_id: Option<u64>,
dtos: &[CreateFeatureDto],
) -> Result<Vec<FeatureDto>> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::create_orphan_multi(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
dtos,
)
.context("creating feature entities")
}
pub fn create_feature_multi(
ctx: &AppContext,
stack_id: Option<u64>,
dtos: &[CreateFeatureDto],
owner_id: EntityId,
index: i32,
) -> Result<Vec<FeatureDto>> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::create_multi(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
dtos,
owner_id,
index,
)
.context("creating feature entities")
}
pub fn get_feature(ctx: &AppContext, id: &EntityId) -> Result<Option<FeatureDto>> {
feature_controller::get(&ctx.db_context, id).context("getting feature")
}
pub fn get_feature_multi(ctx: &AppContext, ids: &[EntityId]) -> Result<Vec<Option<FeatureDto>>> {
feature_controller::get_multi(&ctx.db_context, ids).context("getting feature entities")
}
pub fn get_all_feature(ctx: &AppContext) -> Result<Vec<FeatureDto>> {
feature_controller::get_all(&ctx.db_context).context("getting all feature entities")
}
pub fn update_feature(
ctx: &AppContext,
stack_id: Option<u64>,
dto: &UpdateFeatureDto,
) -> Result<FeatureDto> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::update(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
dto,
)
.context("updating feature")
}
pub fn update_feature_multi(
ctx: &AppContext,
stack_id: Option<u64>,
dtos: &[UpdateFeatureDto],
) -> Result<Vec<FeatureDto>> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::update_multi(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
dtos,
)
.context("updating feature entities")
}
pub fn update_feature_with_relationships(
ctx: &AppContext,
stack_id: Option<u64>,
dto: &FeatureDto,
) -> Result<FeatureDto> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::update_with_relationships(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
dto,
)
.context("updating feature with relationships")
}
pub fn update_feature_with_relationships_multi(
ctx: &AppContext,
stack_id: Option<u64>,
dtos: &[FeatureDto],
) -> Result<Vec<FeatureDto>> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::update_with_relationships_multi(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
dtos,
)
.context("updating feature entities with relationships")
}
pub fn remove_feature(ctx: &AppContext, stack_id: Option<u64>, id: &EntityId) -> Result<()> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::remove(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
id,
)
.context("removing feature")
}
pub fn remove_feature_multi(
ctx: &AppContext,
stack_id: Option<u64>,
ids: &[EntityId],
) -> Result<()> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::remove_multi(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
ids,
)
.context("removing feature entities")
}
pub fn get_feature_relationship(
ctx: &AppContext,
id: &EntityId,
field: &FeatureRelationshipField,
) -> Result<Vec<EntityId>> {
feature_controller::get_relationship(&ctx.db_context, id, field)
.context("getting feature relationship")
}
pub fn get_feature_relationship_many(
ctx: &AppContext,
ids: &[EntityId],
field: &FeatureRelationshipField,
) -> Result<std::collections::HashMap<EntityId, Vec<EntityId>>> {
feature_controller::get_relationship_many(&ctx.db_context, ids, field)
.context("getting feature relationships (many)")
}
pub fn get_feature_relationship_count(
ctx: &AppContext,
id: &EntityId,
field: &FeatureRelationshipField,
) -> Result<usize> {
feature_controller::get_relationship_count(&ctx.db_context, id, field)
.context("getting feature relationship count")
}
pub fn get_feature_relationship_in_range(
ctx: &AppContext,
id: &EntityId,
field: &FeatureRelationshipField,
offset: usize,
limit: usize,
) -> Result<Vec<EntityId>> {
feature_controller::get_relationship_in_range(&ctx.db_context, id, field, offset, limit)
.context("getting feature relationship range")
}
pub fn set_feature_relationship(
ctx: &AppContext,
stack_id: Option<u64>,
dto: &FeatureRelationshipDto,
) -> Result<()> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::set_relationship(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
dto,
)
.context("setting feature relationship")
}
pub fn move_feature_relationship(
ctx: &AppContext,
stack_id: Option<u64>,
id: &EntityId,
field: &FeatureRelationshipField,
ids_to_move: &[EntityId],
new_index: i32,
) -> Result<Vec<EntityId>> {
let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
feature_controller::move_relationship(
&ctx.db_context,
&ctx.event_hub,
&mut undo_redo_manager,
stack_id,
id,
field,
ids_to_move,
new_index,
)
.context("moving feature relationship")
}