using System; using Erp.SqlQueryManager.Domain.Shared; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; namespace Erp.SqlQueryManager.Domain.Entities; /// /// SQL Query entity for storing and managing SQL queries /// public class SqlQuery : FullAuditedEntity, IMultiTenant { public Guid? TenantId { get; set; } /// /// Unique code for the query /// public string Code { get; set; } /// /// Display name /// public string Name { get; set; } /// /// Description of the query /// public string Description { get; set; } /// /// SQL query content /// public string QueryText { get; set; } /// /// DataSource code to use for execution /// public string DataSourceCode { get; set; } /// /// Query status /// public SqlQueryStatus Status { get; set; } /// /// Category for organization /// public string Category { get; set; } /// /// Tags for filtering /// public string Tags { get; set; } /// /// Last execution time /// public DateTime? LastExecutedAt { get; set; } /// /// Execution count /// public int ExecutionCount { get; set; } /// /// Whether query modifies data /// public bool IsModifyingData { get; set; } /// /// Expected parameter definitions (JSON format) /// public string Parameters { get; set; } protected SqlQuery() { } public SqlQuery( Guid id, string code, string name, string queryText, string dataSourceCode, Guid? tenantId = null) : base(id) { Code = code; Name = name; QueryText = queryText; DataSourceCode = dataSourceCode; TenantId = tenantId; Status = SqlQueryStatus.Draft; ExecutionCount = 0; } public void UpdateQueryText(string queryText) { QueryText = queryText; } public void MarkAsExecuted() { LastExecutedAt = DateTime.UtcNow; ExecutionCount++; } public void Activate() { Status = SqlQueryStatus.Active; } public void Archive() { Status = SqlQueryStatus.Archived; } }