using CMSDAL.CustomCode.ContentBlock; using CMSDAL.DTO.ContentBlock; using GB5Shared.DTO.Framework.Login; using GB5Shared.Validation; namespace FrameworkBLL.ContentBlock; public class ContentBlockBLL : CMSBLL.ContentBlock.IContentBlockBLL { private readonly IContentBlockDAL _dal; private readonly ICrossTenantGuard _guard; public ContentBlockBLL(IContentBlockDAL dal, ICrossTenantGuard guard) { _dal = dal; _guard = guard; } public async Task GetByContainerAsync(int containerId, LoginDTO loginDTO, CancellationToken ct) { try { return await _dal.GetByContainerAsync(containerId, loginDTO, ct); } catch { throw; } } public async Task GetFullDocumentAsync(int contentId, LoginDTO loginDTO, CancellationToken ct) { try { return await _dal.GetFullDocumentAsync(contentId, loginDTO, ct); } catch { throw; } } public async Task SaveAsync(ContentBlockDTO dto, LoginDTO loginDTO, CancellationToken ct) { try { // Only a brand-new block attaches to a caller-supplied ContentContainerId — an // update to an existing block is already tenant-scoped by // ContentBlockQB.UPDATE_PROPS's own WHERE clause. if (dto.ContentBlockId == 0) { var ownerTenantId = await _dal.GetContainerTenantIdAsync(dto.ContentContainerId, loginDTO, ct); _guard.EnsureOwnedByTenant(ownerTenantId, loginDTO.ClientId, "ContentContainer", dto.ContentContainerId); } return await _dal.SaveAsync(dto, loginDTO, ct); } catch { throw; } } public async Task UpdatePropsAsync(ContentBlockDTO dto, LoginDTO loginDTO, CancellationToken ct) { try { return await _dal.UpdatePropsAsync(dto, loginDTO, ct); } catch { throw; } } public async Task ReorderAsync(int contentBlockId, short positionNo, string zoneName, LoginDTO loginDTO, CancellationToken ct) { try { return await _dal.ReorderAsync(contentBlockId, positionNo, zoneName, loginDTO, ct); } catch { throw; } } public async Task DeleteAsync(int contentBlockId, LoginDTO loginDTO, CancellationToken ct) { try { return await _dal.DeleteAsync(contentBlockId, loginDTO, ct); } catch { throw; } } public async Task GetBlockIdByCodeAsync(string blockCode, LoginDTO loginDTO, CancellationToken ct) { try { return await _dal.GetBlockIdByCodeAsync(blockCode, loginDTO, ct); } catch { throw; } } }