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