Commit 8d1241ec authored by aimagambetov_an's avatar aimagambetov_an

issue-23 and filter in tempalate/getAll

parent a2290723
......@@ -270,11 +270,12 @@ public class TemplateController {
@Operation(description = "Метод для получения всех шаблонов")
public ResponseEntity getAll(@Parameter(name = "isActive") @RequestParam(value = "isActive", required = false) Boolean isActive,
@Parameter(name = "page") @RequestParam(value = "page", defaultValue = "0") Integer page,
@Parameter(name = "size") @RequestParam(value = "size", defaultValue = "50") Integer size) {
@Parameter(name = "size") @RequestParam(value = "size", defaultValue = "50") Integer size,
@Parameter(name = "search") @RequestParam(value = "search", required = false) String search) {
try {
processLogger.start(TemplateController.class, new Throwable().getStackTrace()[0].getMethodName(), "Получение списка шаблонов");
Page<TemplateShortDto> allTemplates = service.getAllTemplate(isActive, PageRequest.of(page, size));
Page<TemplateShortDto> allTemplates = service.getAllTemplate(isActive, PageRequest.of(page, size), search);
processLogger.finish(TemplateController.class, new Throwable().getStackTrace()[0].getMethodName(), "Получение списка шаблонов");
return ResponseEntity.ok(allTemplates);
} catch (Exception e) {
......
package kz.project.printedFormsService.data.repository;
import kz.project.printedFormsService.data.entity.TemplateEntity;
import kz.project.printedFormsService.data.entity.dict.DTemplateType;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class TemplateJdbcRepository {
private final JdbcTemplate jdbcTemplate;
public Page<TemplateEntity> findAllByStatusAndFilter(Boolean isActive,
Pageable pageable,
String search,
List<String> projects) {
StringBuilder inClause = new StringBuilder("t.project IN (?");
inClause.append(", ?".repeat(Math.max(0, projects.size() - 1)));
inClause.append(")");
String sql = "SELECT t.*, type.id as typeId, type.code as typeCode, type.name as typeName FROM template_schema.template t " +
"INNER JOIN template_schema.d_template_type type ON t.type_id = type.id " +
"WHERE " + inClause;
if (isActive != null) {
sql += " AND t.status = " + isActive;
}
if (search != null) {
sql += " AND (t.code = '" + search + "' OR t.name = '" + search + "')";
}
sql += " LIMIT ? OFFSET ?";
Object[] queryParams = projects.toArray();
Object[] additionalParams = {pageable.getPageSize(), pageable.getOffset()};
Object[] allParams = ArrayUtils.addAll(queryParams, additionalParams);
List<TemplateEntity> result = jdbcTemplate.query(sql, allParams, (rs, rowNum) -> {
DTemplateType type = new DTemplateType();
type.setId(rs.getLong("typeId"));
type.setCode(rs.getString("typeCode"));
type.setName(rs.getString("typeName"));
TemplateEntity templateEntity = new TemplateEntity();
templateEntity.setId(rs.getLong("id"));
templateEntity.setCode(rs.getString("code"));
templateEntity.setName(rs.getString("name"));
templateEntity.setStatus(rs.getBoolean("status"));
templateEntity.setProject(rs.getString("project"));
templateEntity.setVersion(rs.getInt("version"));
templateEntity.setType(type);
return templateEntity;
});
return new PageImpl<>(result, pageable, 100L);
}
}
......@@ -23,7 +23,7 @@ public interface TemplateService {
void delete(String code) throws ValidationException;
Page<TemplateShortDto> getAllTemplate(Boolean isActive, Pageable pageable);
Page<TemplateShortDto> getAllTemplate(Boolean isActive, Pageable pageable, String search);
TemplateDto getTemplateData(Long id) throws ValidationException;
......
......@@ -31,6 +31,7 @@ import java.util.Map;
@Service
public class TemplateServiceImpl implements TemplateService {
private final TemplateRepository repository;
private final TemplateJdbcRepository templateJdbcRepository;
private final TemplateVersionRepository versionRepository;
private final DTemplateTypeRepository dTemplateTypeRepository;
......@@ -39,12 +40,14 @@ public class TemplateServiceImpl implements TemplateService {
private ProcessLogger processLogger;
public TemplateServiceImpl(TemplateRepository repository,
TemplateJdbcRepository templateJdbcRepository,
TemplateVersionRepository versionRepository,
DTemplateTypeRepository dTemplateTypeRepository,
TemplateFileInfoRepository fileInfoRepository,
DocumentRepository documentRepository,
ProcessLogger processLogger) {
this.repository = repository;
this.templateJdbcRepository = templateJdbcRepository;
this.versionRepository = versionRepository;
this.dTemplateTypeRepository = dTemplateTypeRepository;
this.fileInfoRepository = fileInfoRepository;
......@@ -128,11 +131,15 @@ public class TemplateServiceImpl implements TemplateService {
}
@Override
public Page<TemplateShortDto> getAllTemplate(Boolean isActive, Pageable pageable) {
if (isActive == null) return TemplateShortDto.toDtoList(repository.findAll(pageable));
else if (isActive)
return TemplateShortDto.toDtoList(repository.findAllByStatusTrue(pageable));
else return TemplateShortDto.toDtoList(repository.findAllByStatusFalse(pageable));
public Page<TemplateShortDto> getAllTemplate(Boolean isActive, Pageable pageable, String search) {
Map<String, List<String>> projectRoleMap = SecurityContextUtils.getProjectRoleMap();
List<String> valuesToCheck = Arrays.asList("creator", "editor", "delete", "admin");
List<String> projects = projectRoleMap.entrySet()
.stream()
.filter(entry -> valuesToCheck.stream().anyMatch(entry.getValue()::contains))
.map(Map.Entry::getKey)
.toList();
return TemplateShortDto.toDtoList(templateJdbcRepository.findAllByStatusAndFilter(isActive, pageable, search, projects));
}
@Override
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment