package jnpf.dmsMapper; import jnpf.dmsEntity.permission.vo.DmsFileCenterItemVO; import jnpf.dmsPermission.DmsFileCenterQuery; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface DmsFileCenterMapper { String ACTIVE_READ = "p.tenant_id = #{q.tenantId} AND p.action_code = 'READ' " + "AND p.revoked_at IS NULL AND p.valid_from <= CURRENT_TIMESTAMP " + "AND (p.valid_to IS NULL OR CURRENT_TIMESTAMP < p.valid_to) " + "AND (p.max_use_count IS NULL OR p.used_count < p.max_use_count) "; String PRINCIPAL_MATCH = "AND ((p.principal_type = 'USER' AND p.principal_id = #{q.userId}) " + " " + "OR (p.principal_type = 'ORG' AND p.include_child_orgs = FALSE AND p.principal_id IN " + "#{id}) " + " " + " " + "OR (p.principal_type = 'ORG' AND p.include_child_orgs = TRUE AND p.principal_id IN " + "#{id}) " + " " + " " + "OR (p.principal_type = 'POSITION' AND p.principal_id IN " + "#{id}) " + " " + " " + "OR (p.principal_type = 'ROLE' AND p.principal_id IN " + "#{id}) " + " " + " " + "OR (p.principal_type = 'GROUP' AND p.principal_id IN " + "#{id}) " + ") "; String FOLDER_ANCESTORS = "WITH RECURSIVE folder_ancestors(id, parent_id) AS ( " + "SELECT f.id, f.parent_id FROM public.dms_folders f " + "WHERE f.tenant_id = #{q.tenantId} AND f.id = #{q.folderId} " + "UNION ALL SELECT parent.id, parent.parent_id FROM folder_ancestors child " + "JOIN public.dms_folders parent ON parent.tenant_id = #{q.tenantId} " + "AND parent.id = child.parent_id) "; String VERSION_COLUMNS = "v.id, 'FILE_VERSION' AS resource_type, d.folder_id AS parent_id, " + "d.name, d.id AS document_id, d.document_no, d.document_type, d.responsible_dept_id, " + "v.version_no, v.version_label, v.file_name, v.mime_type, v.size_bytes, " + "v.checksum_sha256, v.prepared_by, v.prepared_on, s.lifecycle_status, " + "s.effective_from, s.effective_to, v.created_at "; String ACTIVE_EXCLUSION = "e.tenant_id = #{q.tenantId} AND e.user_id = #{q.userId} " + "AND e.action_code = 'READ' AND e.revoked_at IS NULL " + "AND e.valid_from <= CURRENT_TIMESTAMP " + "AND (e.valid_to IS NULL OR CURRENT_TIMESTAMP < e.valid_to) "; String SHARED_ELIGIBLE_VERSIONS = "WITH eligible_versions(file_version_id) AS ( " + " " + "SELECT s.file_version_id FROM public.dms_version_states s " + "WHERE s.tenant_id = #{q.tenantId} " + " " + "SELECT s.file_version_id FROM public.dms_file_permissions p " + "JOIN public.dms_version_states s ON s.tenant_id = p.tenant_id " + "AND s.document_id = p.resource_id WHERE " + ACTIVE_READ + PRINCIPAL_MATCH + "AND p.resource_type = 'DOCUMENT' " + "UNION SELECT p.resource_id FROM public.dms_file_permissions p WHERE " + ACTIVE_READ + PRINCIPAL_MATCH + "AND p.resource_type = 'FILE_VERSION' " + ") "; @Select({""}) List selectFolders(@Param("q") DmsFileCenterQuery query); @Select({""}) List selectCurrentDocuments(@Param("q") DmsFileCenterQuery query); @Select({""}) List selectHistoricalVersions(@Param("q") DmsFileCenterQuery query); @Select({""}) List selectDocumentVersions(@Param("q") DmsFileCenterQuery query); @Select({""}) List selectSharedDocuments(@Param("q") DmsFileCenterQuery query); @Select({""}) List selectSharedHistoricalVersions(@Param("q") DmsFileCenterQuery query); }