using System; using Erp.SqlQueryManager.Domain.Shared; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; namespace Erp.SqlQueryManager.Domain.Entities; /// /// SQL View entity for creating and managing database views /// public class SqlView : FullAuditedEntity, IMultiTenant { public Guid? TenantId { get; set; } /// /// View name in database /// public string ViewName { get; set; } /// /// Schema name (default: dbo) /// public string SchemaName { get; set; } /// /// Display name /// public string DisplayName { get; set; } /// /// Description /// public string Description { get; set; } /// /// View definition (SELECT statement) /// public string ViewDefinition { get; set; } /// /// DataSource code /// public string DataSourceCode { get; set; } /// /// Status /// public SqlQueryStatus Status { get; set; } /// /// Category /// public string Category { get; set; } /// /// Whether view exists in database /// public bool IsDeployed { get; set; } /// /// Last deployment time /// public DateTime? LastDeployedAt { get; set; } /// /// Whether to use WITH SCHEMABINDING /// public bool WithSchemaBinding { get; set; } protected SqlView() { } public SqlView( Guid id, string viewName, string schemaName, string displayName, string viewDefinition, string dataSourceCode, Guid? tenantId = null) : base(id) { ViewName = viewName; SchemaName = schemaName ?? "dbo"; DisplayName = displayName; ViewDefinition = viewDefinition; DataSourceCode = dataSourceCode; TenantId = tenantId; Status = SqlQueryStatus.Draft; IsDeployed = false; WithSchemaBinding = false; } public void UpdateDefinition(string definition) { ViewDefinition = definition; } public void MarkAsDeployed() { IsDeployed = true; LastDeployedAt = DateTime.UtcNow; Status = SqlQueryStatus.Active; } public string GetFullName() => $"{SchemaName}.{ViewName}"; }