using GB5Shared.ListQuery;
namespace SwDAL.DTO.DbServer;
// ── Main entity DTO ────────────────────────────────────────────────────────
public class DbServerDTO
{
public int DbServerId { get; set; }
public string? HostName { get; set; }
public int Port { get; set; } = 1433;
public byte DbType { get; set; } = 0; // 0=SqlServer,1=PostgreSQL,2=MySQL,3=Oracle
public string DbUsername { get; set; } = string.Empty; // credential — never log
public string DbPassword { get; set; } = string.Empty; // credential — never log, never cache
public string? ServerDesc { get; set; }
public string DatabaseName { get; set; }
/// Join-only, populated by DbServerQB.GET_DATABASE_LIST_BY_HOSTNAME — the specific
/// ClientDatabase row this DatabaseName came from (a single DbServerId can back several
/// ClientDatabase rows, so this is the field that actually identifies which one). Null
/// everywhere else this DTO is used.
public int? ClientDbId { get; set; }
// Standard M-table fields
public short Version { get; set; }
public byte Status { get; set; } = 1;
public short SortOrder { get; set; } = 9999;
public int CreatedById { get; set; }
public DateTime? CreatedOn { get; set; }
public int ModifiedById { get; set; }
public DateTime? ModifiedOn { get; set; }
public byte SourceType { get; set; } = 5;
public int TenantId { get; set; }
}
// ── Picklist DTO ───────────────────────────────────────────────────────────
public class DbServerPickListDTO
{
public int DbServerId { get; set; }
public string HostName { get; set; } = string.Empty;
public string DbUserName { get; set; }
}
public class GetServerHostNameDTO
{
public string HostName { get; set; }
public string DbUserName { get; set; }
}
// ── List infrastructure ────────────────────────────────────────────────────
public sealed class DbServerListCriteria : ICriteria
{
[CriteriaField("ouid")]
public int? OUId { get; set; }
[CriteriaField("dbtype")]
public byte? DbType { get; set; }
[CriteriaField("searchtext")]
public string? SearchText { get; set; }
[CriteriaField("sortby")]
public string? SortBy { get; set; }
[CriteriaField("sortdesc")]
public bool SortDesc { get; set; }
[CriteriaField("pagesize")]
public int PageSize { get; set; } = 100;
[CriteriaField("pageoffset")]
public int PageOffset { get; set; } = 0;
}
public sealed record DbServerListQuery(DbServerListCriteria Criteria)
: IListQuery;
public sealed class DbServerListDTO
{
public int DbServerId { get; set; }
public string HostName { get; set; } = string.Empty;
public int Port { get; set; }
public byte DbType { get; set; }
public int TotalCount { get; set; }
}