qleany 1.7.3

Architecture generator for Rust and C++/Qt applications.
// Generated by Qleany v1.7.0 from frontend_entity_commands.tera

//! Relationship entity commands
#![allow(unused_imports, dead_code)]

use crate::app_context::AppContext;
use anyhow::{Context, Result};
use common::direct_access::relationship::RelationshipRelationshipField;
use common::types::EntityId;
use direct_access::RelationshipRelationshipDto;
use direct_access::{
    CreateRelationshipDto, RelationshipDto, UpdateRelationshipDto, relationship_controller,
};

/// Create a new relationship entity (orphan, no parent)
pub fn create_orphan_relationship(
    ctx: &AppContext,
    stack_id: Option<u64>,
    dto: &CreateRelationshipDto,
) -> Result<RelationshipDto> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::create_orphan(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        dto,
    )
    .context("creating relationship")
}
/// Create a new relationship entity as child of owner
pub fn create_relationship(
    ctx: &AppContext,
    stack_id: Option<u64>,
    dto: &CreateRelationshipDto,
    owner_id: EntityId,
    index: i32,
) -> Result<RelationshipDto> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::create(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        dto,
        owner_id,
        index,
    )
    .context("creating relationship")
}
/// Create multiple relationship entities (orphan, no parent)
pub fn create_orphan_relationship_multi(
    ctx: &AppContext,
    stack_id: Option<u64>,
    dtos: &[CreateRelationshipDto],
) -> Result<Vec<RelationshipDto>> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::create_orphan_multi(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        dtos,
    )
    .context("creating relationship entities")
}
/// Create multiple relationship entities as children of owner
pub fn create_relationship_multi(
    ctx: &AppContext,
    stack_id: Option<u64>,
    dtos: &[CreateRelationshipDto],
    owner_id: EntityId,
    index: i32,
) -> Result<Vec<RelationshipDto>> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::create_multi(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        dtos,
        owner_id,
        index,
    )
    .context("creating relationship entities")
}
/// Get a relationship entity by ID
pub fn get_relationship(ctx: &AppContext, id: &EntityId) -> Result<Option<RelationshipDto>> {
    relationship_controller::get(&ctx.db_context, id).context("getting relationship")
}

/// Get multiple relationship entities by IDs
pub fn get_relationship_multi(
    ctx: &AppContext,
    ids: &[EntityId],
) -> Result<Vec<Option<RelationshipDto>>> {
    relationship_controller::get_multi(&ctx.db_context, ids)
        .context("getting relationship entities")
}

/// Get all relationship entities.
/// Note: returns entities in database key order (by EntityId), not insertion order
/// or any user-defined sort. For ordered collections, use relationship-based
/// retrieval (e.g. get_*_relationship for ordered_one_to_many fields).
pub fn get_all_relationship(ctx: &AppContext) -> Result<Vec<RelationshipDto>> {
    relationship_controller::get_all(&ctx.db_context).context("getting all relationship entities")
}

/// Update a relationship entity
pub fn update_relationship(
    ctx: &AppContext,
    stack_id: Option<u64>,
    dto: &UpdateRelationshipDto,
) -> Result<RelationshipDto> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::update(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        dto,
    )
    .context("updating relationship")
}

/// Update multiple relationship entities
pub fn update_relationship_multi(
    ctx: &AppContext,
    stack_id: Option<u64>,
    dtos: &[UpdateRelationshipDto],
) -> Result<Vec<RelationshipDto>> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::update_multi(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        dtos,
    )
    .context("updating relationship entities")
}

/// Update a relationship entity with relationships
pub fn update_relationship_with_relationships(
    ctx: &AppContext,
    stack_id: Option<u64>,
    dto: &RelationshipDto,
) -> Result<RelationshipDto> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::update_with_relationships(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        dto,
    )
    .context("updating relationship with relationships")
}

/// Update multiple relationship entities with relationships
pub fn update_relationship_with_relationships_multi(
    ctx: &AppContext,
    stack_id: Option<u64>,
    dtos: &[RelationshipDto],
) -> Result<Vec<RelationshipDto>> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::update_with_relationships_multi(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        dtos,
    )
    .context("updating relationship entities with relationships")
}

/// Remove a relationship entity by ID
pub fn remove_relationship(ctx: &AppContext, stack_id: Option<u64>, id: &EntityId) -> Result<()> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::remove(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        id,
    )
    .context("removing relationship")
}

/// Remove multiple relationship entities by IDs
pub fn remove_relationship_multi(
    ctx: &AppContext,
    stack_id: Option<u64>,
    ids: &[EntityId],
) -> Result<()> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::remove_multi(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        ids,
    )
    .context("removing relationship entities")
}

/// Get a relationship relationship
pub fn get_relationship_relationship(
    ctx: &AppContext,
    id: &EntityId,
    field: &RelationshipRelationshipField,
) -> Result<Vec<EntityId>> {
    relationship_controller::get_relationship(&ctx.db_context, id, field)
        .context("getting relationship relationship")
}

/// Get relationship IDs for multiple relationship entities at once
pub fn get_relationship_relationship_many(
    ctx: &AppContext,
    ids: &[EntityId],
    field: &RelationshipRelationshipField,
) -> Result<std::collections::HashMap<EntityId, Vec<EntityId>>> {
    relationship_controller::get_relationship_many(&ctx.db_context, ids, field)
        .context("getting relationship relationships (many)")
}

/// Get relationship count for a relationship entity
pub fn get_relationship_relationship_count(
    ctx: &AppContext,
    id: &EntityId,
    field: &RelationshipRelationshipField,
) -> Result<usize> {
    relationship_controller::get_relationship_count(&ctx.db_context, id, field)
        .context("getting relationship relationship count")
}

/// Get relationship IDs for a relationship entity with pagination
pub fn get_relationship_relationship_in_range(
    ctx: &AppContext,
    id: &EntityId,
    field: &RelationshipRelationshipField,
    offset: usize,
    limit: usize,
) -> Result<Vec<EntityId>> {
    relationship_controller::get_relationship_in_range(&ctx.db_context, id, field, offset, limit)
        .context("getting relationship relationship range")
}

/// Set a relationship relationship
pub fn set_relationship_relationship(
    ctx: &AppContext,
    stack_id: Option<u64>,
    dto: &RelationshipRelationshipDto,
) -> Result<()> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::set_relationship(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        dto,
    )
    .context("setting relationship relationship")
}

/// Move (reorder) IDs within a relationship relationship
pub fn move_relationship_relationship(
    ctx: &AppContext,
    stack_id: Option<u64>,
    id: &EntityId,
    field: &RelationshipRelationshipField,
    ids_to_move: &[EntityId],
    new_index: i32,
) -> Result<Vec<EntityId>> {
    let mut undo_redo_manager = ctx.undo_redo_manager.lock().unwrap();
    relationship_controller::move_relationship(
        &ctx.db_context,
        &ctx.event_hub,
        &mut undo_redo_manager,
        stack_id,
        id,
        field,
        ids_to_move,
        new_index,
    )
    .context("moving relationship relationship")
}