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}"; }