using System;
using Erp.SqlQueryManager.Domain.Shared;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;
namespace Erp.SqlQueryManager.Domain.Entities;
///
/// SQL Stored Procedure entity for creating and managing stored procedures
///
public class SqlStoredProcedure : FullAuditedEntity, IMultiTenant
{
public Guid? TenantId { get; set; }
///
/// Procedure name in database
///
public string ProcedureName { get; set; }
///
/// Schema name (default: dbo)
///
public string SchemaName { get; set; }
///
/// Display name
///
public string DisplayName { get; set; }
///
/// Description
///
public string Description { get; set; }
///
/// Full procedure definition (CREATE/ALTER)
///
public string ProcedureBody { get; set; }
///
/// DataSource code
///
public string DataSourceCode { get; set; }
///
/// Status
///
public SqlQueryStatus Status { get; set; }
///
/// Category
///
public string Category { get; set; }
///
/// Whether procedure exists in database
///
public bool IsDeployed { get; set; }
///
/// Last deployment time
///
public DateTime? LastDeployedAt { get; set; }
///
/// Parameter definitions (JSON)
///
public string Parameters { get; set; }
protected SqlStoredProcedure()
{
}
public SqlStoredProcedure(
Guid id,
string procedureName,
string schemaName,
string displayName,
string procedureBody,
string dataSourceCode,
Guid? tenantId = null) : base(id)
{
ProcedureName = procedureName;
SchemaName = schemaName ?? "dbo";
DisplayName = displayName;
ProcedureBody = procedureBody;
DataSourceCode = dataSourceCode;
TenantId = tenantId;
Status = SqlQueryStatus.Draft;
IsDeployed = false;
}
public void UpdateBody(string body)
{
ProcedureBody = body;
}
public void MarkAsDeployed()
{
IsDeployed = true;
LastDeployedAt = DateTime.UtcNow;
Status = SqlQueryStatus.Active;
}
public string GetFullName() => $"{SchemaName}.{ProcedureName}";
}