erp-platform/api/modules/Erp.SqlQueryManager/Erp.SqlQueryManager.Domain/Entities/SqlFunction.cs
2025-12-05 11:56:53 +03:00

120 lines
2.8 KiB
C#

using System;
using Erp.SqlQueryManager.Domain.Shared;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;
namespace Erp.SqlQueryManager.Domain.Entities;
/// <summary>
/// SQL Function entity for creating and managing database functions
/// </summary>
public class SqlFunction : FullAuditedEntity<Guid>, IMultiTenant
{
public Guid? TenantId { get; set; }
/// <summary>
/// Function name in database
/// </summary>
public string FunctionName { get; set; }
/// <summary>
/// Schema name (default: dbo)
/// </summary>
public string SchemaName { get; set; }
/// <summary>
/// Display name
/// </summary>
public string DisplayName { get; set; }
/// <summary>
/// Description
/// </summary>
public string Description { get; set; }
/// <summary>
/// Function type
/// </summary>
public SqlFunctionType FunctionType { get; set; }
/// <summary>
/// Full function definition (CREATE/ALTER)
/// </summary>
public string FunctionBody { get; set; }
/// <summary>
/// Return type definition
/// </summary>
public string ReturnType { get; set; }
/// <summary>
/// DataSource code
/// </summary>
public string DataSourceCode { get; set; }
/// <summary>
/// Status
/// </summary>
public SqlQueryStatus Status { get; set; }
/// <summary>
/// Category
/// </summary>
public string Category { get; set; }
/// <summary>
/// Whether function exists in database
/// </summary>
public bool IsDeployed { get; set; }
/// <summary>
/// Last deployment time
/// </summary>
public DateTime? LastDeployedAt { get; set; }
/// <summary>
/// Parameter definitions (JSON)
/// </summary>
public string Parameters { get; set; }
protected SqlFunction()
{
}
public SqlFunction(
Guid id,
string functionName,
string schemaName,
string displayName,
SqlFunctionType functionType,
string functionBody,
string returnType,
string dataSourceCode,
Guid? tenantId = null) : base(id)
{
FunctionName = functionName;
SchemaName = schemaName ?? "dbo";
DisplayName = displayName;
FunctionType = functionType;
FunctionBody = functionBody;
ReturnType = returnType;
DataSourceCode = dataSourceCode;
TenantId = tenantId;
Status = SqlQueryStatus.Draft;
IsDeployed = false;
}
public void UpdateBody(string body)
{
FunctionBody = body;
}
public void MarkAsDeployed()
{
IsDeployed = true;
LastDeployedAt = DateTime.UtcNow;
Status = SqlQueryStatus.Active;
}
public string GetFullName() => $"{SchemaName}.{FunctionName}";
}