namespace CMSDAL.Query.Site; public static class SiteDomainQB { public const string GET_BY_SITE = @" SELECT d.SITEDOMAINID AS SiteDomainId, d.SITEID AS SiteId, d.DOMAINNAME AS DomainName, d.ISPRIMARY AS IsPrimary, d.ISVERIFIED AS IsVerified, d.STATUS AS Status, d.TENANTID AS TenantId FROM DBO.MCMSSITEDOMAIN d WHERE d.SITEID = @SiteId AND d.TENANTID = @TenantId AND d.STATUS = 1 ORDER BY d.ISPRIMARY DESC, d.DOMAINNAME"; public const string SAVE_SITEDOMAIN = @" INSERT INTO DBO.MCMSSITEDOMAIN (SITEID, DOMAINNAME, ISPRIMARY, ISVERIFIED, STATUS, TENANTID, CREATEDBYID, CREATEDON, MODIFIEDBYID, MODIFIEDON) VALUES (@SiteId, @DomainName, @IsPrimary, @IsVerified, 1, @TenantId, @CreatedById, @CreatedOn, @ModifiedById, @ModifiedOn); SELECT SCOPE_IDENTITY();"; public const string DELETE_SITEDOMAIN = @" UPDATE DBO.MCMSSITEDOMAIN SET STATUS = 0, MODIFIEDBYID = @ModifiedById, MODIFIEDON = GETDATE() WHERE SITEDOMAINID = @SiteDomainId AND TENANTID = @TenantId"; // Deliberately NOT tenant-filtered by any caller-claimed TenantId — this is the resolution // path itself: an anonymous public request supplies only a Host header (DomainName), and // this query is how SiteResolverBLL discovers which Site/TenantId genuinely owns it. // DOMAINNAME's UQ_MCMSSITEDOMAIN_DOMAIN constraint guarantees at most one row matches. public const string RESOLVE_SITE_BY_DOMAIN = @" SELECT s.SITEID AS SiteId, s.TENANTID AS TenantId, s.SITECODE AS SiteCode, s.SITESTATUS AS SiteStatus FROM DBO.MCMSSITEDOMAIN d JOIN DBO.MCMSSITE s ON s.SITEID = d.SITEID AND s.STATUS = 1 WHERE d.DOMAINNAME = @DomainName AND d.STATUS = 1"; }