diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/BuildingController.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/BuildingController.java index d47e02f..8c9d525 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/BuildingController.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/BuildingController.java @@ -8,9 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.data.mapping.PropertyReferenceException; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -23,56 +21,62 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import ru.molokoin.resourceserviceapi.entities.Building; -import ru.molokoin.resourceserviceapi.repositories.BuildingRepository; +import ru.molokoin.resourceserviceapi.enums.Base; +import ru.molokoin.resourceserviceapi.services.BuildingService; + import org.springframework.web.bind.annotation.RequestParam; @RestController -@RequestMapping(path = "/building", consumes = {"*/*"}) +@RequestMapping(path = "/api/building", consumes = {"*/*"}) public class BuildingController { @Autowired - private BuildingRepository repo; + private BuildingService repo; - public BuildingController(BuildingRepository repo) { + public BuildingController(BuildingService repo) { this.repo = repo; } @GetMapping("/pages") - public Page page(@RequestParam(name = "page", required = false) Integer pageNo, - @RequestParam(name = "size", required = false) Long pageSize, - @RequestParam(name = "sortBy", required = false) String sortBy) { - if (pageNo == null || pageNo < 0) pageNo = 0; - if (pageSize == null || pageSize < 0) pageSize = repo.count(); - if (sortBy == null) sortBy = "id"; - - Sort sort = Sort.by(sortBy); - Pageable pageable = PageRequest.of(pageNo, pageSize == null ? null : Math.toIntExact(pageSize), sort); - try{ - return repo.findAll(pageable); - }catch(PropertyReferenceException e){ - sortBy = "id"; - sort = Sort.by(sortBy); - pageable = PageRequest.of(pageNo, pageSize == null ? null : Math.toIntExact(pageSize), sort); - return repo.findAll(pageable); - } + public Page page(@RequestParam(name = "page", defaultValue = "0") Integer pageNo, + @RequestParam(name = "size", defaultValue = "10") Integer pageSize, + @RequestParam(name = "sortBy", defaultValue = "id") String sortBy) { + if (!Base.BUILDINGS.contains(sortBy)) sortBy = "id"; + return repo.findAll(PageRequest.of(pageNo, pageSize, Sort.by(sortBy))); } @GetMapping("/count") - public ResponseEntity getСretareasCount(){ + public ResponseEntity count(){ return new ResponseEntity<>(repo.count(), HttpStatus.OK); } @GetMapping("") - public ResponseEntity building(@RequestParam(name="id", required = false) Long id, - @RequestParam(name="nameShort", required = false) String nameShort){ - boolean exists = false; - if(id != null && repo.existsById(id)){ - return new ResponseEntity<>(repo.findById(id), HttpStatus.OK); + public Page building(@RequestParam(name="id", defaultValue = "0", required = false) Long id, + @RequestParam(name="nameShort", defaultValue = "", required = false) String nameShort, + @RequestParam(name="nameFull", defaultValue = "", required = false) String nameFull, + @RequestParam(name="codeShort", defaultValue = "", required = false) String codeShort, + @RequestParam(name="codeFull", defaultValue = "", required = false) String codeFull, + @RequestParam(name="page", required = false, defaultValue = "0") Integer pageNo, + @RequestParam(name="size", required = false, defaultValue = "10") Integer pageSize, + @RequestParam(name="sortBy", required = false, defaultValue = "id") String sortBy + ){ + if (!Base.BUILDINGS.contains(sortBy)) sortBy = "id"; + if (id != 0) { + return repo.findById(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), id); + } + if (nameShort != null) { + return repo.findByNameShort(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), nameShort); + } + if (nameFull != null) { + return repo.findByNameFull(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), nameFull); + } + if (codeShort != null) { + return repo.findByCodeShort(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), codeShort); } - if (nameShort != null && repo.existsByNameShort(nameShort)){ - return new ResponseEntity<>(repo.findByNameShort(nameShort), HttpStatus.OK); + if (codeFull != null) { + return repo.findByCodeFull(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), codeFull); } - return new ResponseEntity<>(exists, HttpStatus.OK); + return new PageImpl<>(new ArrayList<>(), PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), 0); } @GetMapping("/exists") @@ -152,7 +156,7 @@ public class BuildingController { @DeleteMapping("/delete") public ResponseEntity delete(@RequestParam(name="id", required = true) Long id){ Boolean success = false; - Building pc = repo.findById(id).get(); + Building pc = repo.findById(id); try{ repo.delete(pc); success = true; diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/CourseController.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/CourseController.java index 7875326..80e8b25 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/CourseController.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/CourseController.java @@ -31,7 +31,7 @@ public class CourseController { @GetMapping("/course/{id}") public ResponseEntity getCourseByID(@PathVariable Integer id){ - return new ResponseEntity<>(repo.findCourseById(id), HttpStatus.OK); + return new ResponseEntity<>(repo.findById(id), HttpStatus.OK); } @PostMapping(path = "/course/create", @@ -46,7 +46,7 @@ public class CourseController { consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity updateCourse(@PathVariable Integer id, @RequestBody Course course) { - Course c = repo.findCourseById(id); + Course c = repo.findById(id); c.setPlace(course.getPlace()); c.setStartDate(course.getStartDate()); c.setProtocolDate(course.getProtocolDate()); @@ -56,12 +56,12 @@ public class CourseController { c.setProgram(course.getProgram()); c.setBuilding(course.getBuilding()); repo.save(c); - return new ResponseEntity<>(repo.findCourseById(id), HttpStatus.CREATED); + return new ResponseEntity<>(repo.findById(id), HttpStatus.CREATED); } @DeleteMapping("/course/delete/{id}") public ResponseEntity deleteCourse(@PathVariable Long id){ - Course c = repo.findCourseById(id); + Course c = repo.findById(id).get(); System.out.println(c.toString()); repo.delete(c); return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK); diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/OrganizationController.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/OrganizationController.java index 69327c0..fbd8b0e 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/OrganizationController.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/OrganizationController.java @@ -1,8 +1,16 @@ package ru.molokoin.resourceserviceapi.controllers.api; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.mapping.PropertyReferenceException; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -15,39 +23,84 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import ru.molokoin.resourceserviceapi.entities.Organization; -import ru.molokoin.resourceserviceapi.repositories.OrganizationFace; +import ru.molokoin.resourceserviceapi.enums.Base; +import ru.molokoin.resourceserviceapi.services.OrganizationService; +import org.springframework.web.bind.annotation.RequestParam; + @RestController -@RequestMapping(path = "/", consumes = {"*/*"}) +@RequestMapping(path = "/api/organization", consumes = {"*/*"}) public class OrganizationController { @Autowired - private OrganizationFace repo; + private OrganizationService repo; - /** - * Получение списа организаций - * @return - */ - @GetMapping("/organization/list") - public ResponseEntity> getOrganizations(){ - return new ResponseEntity<>(repo.findAll(), HttpStatus.OK); + public OrganizationController(OrganizationService repo) { + this.repo = repo; } - /** - * Получение сведений об организации по id - * @param id - * @return - */ - @GetMapping("/organization/{id}") - public ResponseEntity getOrganizationByID(@PathVariable Integer id){ - return new ResponseEntity<>(repo.findOrganizationById(id), HttpStatus.OK); + @GetMapping("/pages") + public Page page( + @RequestParam(name = "page", defaultValue = "0") Integer pageNo, + @RequestParam(name = "size", defaultValue = "10") Integer pageSize, + @RequestParam(name = "sortBy", defaultValue = "id") String sortBy) { + + //проверка на некорректные параметры сортировки + if (!Base.ORGANIZATIONS.contains(sortBy)) sortBy = "id"; + return repo.findAll(PageRequest.of(pageNo, pageSize, Sort.by(sortBy))); } + @GetMapping("/count") + public ResponseEntity count(){ + return new ResponseEntity<>(repo.count(), HttpStatus.OK); + } + + @GetMapping("") + public Page organization(@RequestParam(name="id", defaultValue = "0") long id, + @RequestParam(name="ownership", defaultValue = "") String ownership, + @RequestParam(name="nameShort", defaultValue = "") String nameShort, + @RequestParam(name="nameFull", defaultValue = "") String nameFull, + @RequestParam(name="type", defaultValue = "") String type, + @RequestParam(name="inn", defaultValue = "") String inn, + @RequestParam(name = "page", defaultValue = "0") Integer pageNo, + @RequestParam(name = "size", defaultValue = "10") Integer pageSize, + @RequestParam(name = "sortBy", defaultValue = "id") String sortBy){ + if(!Base.ORGANIZATIONS.contains(sortBy)) sortBy = "id"; + if(id != 0) return repo.findById(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), id); + if(!inn.isEmpty()) return repo.findByInn(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), inn); + if(!nameFull.isEmpty()) return repo.findByNameFull(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), nameFull); + if(!nameShort.isEmpty()) return repo.findByNameShort(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), nameShort); + if(!type.isEmpty()) return repo.findByType(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), type); + if(!ownership.isEmpty()) return repo.findByOwnership(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), ownership); + return repo.findAll(PageRequest.of(pageNo, pageSize, Sort.by(sortBy))); + } + + @GetMapping("/exists") + public ResponseEntity exists(@RequestBody Organization organization) { + return new ResponseEntity<>(repo.exists(organization), HttpStatus.OK); + } + + @GetMapping("/absent") + public Page absent(@RequestBody List organizations) { + List absent = new ArrayList<>(); + //проверяем наличие организации в базе + for (Organization organization : organizations) { + if (!repo.exists(organization)) { + //если не найдена - добавляем в список + absent.add(organization); + } + } + //сортируем наименования по алфавиту + absent.sort(Comparator.comparing(Organization::getNameFull)); + Page absentPage = new PageImpl<>(absent); + return absentPage; + } + /** * Создание записи об организации * @param organization * @return */ - @PostMapping(path = "/organization/create", + @PostMapping(path = "/create", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity saveOrganization(@RequestBody Organization organization) { @@ -61,29 +114,85 @@ public class OrganizationController { * @param organization * @return */ - @PostMapping(path = "/organization/update/{id}", + @PostMapping(path = "/update/{id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity updateOrganization(@PathVariable Integer id, @RequestBody Organization organization) { - Organization org = repo.findOrganizationById(id); + Organization org = repo.findById(id); + org.setOwnership(organization.getOwnership()); + org.setNameShort(organization.getNameShort()); + org.setNameFull(organization.getNameFull()); + org.setType(organization.getType()); + org.setInn(organization.getInn()); + repo.save(org); + return new ResponseEntity<>(repo.findById(id), HttpStatus.CREATED); + } + + @PostMapping(path = "/update", + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity update(@RequestParam(name="id", required = true) Integer id, @RequestBody Organization organization) { + Organization org = repo.findById(id); org.setOwnership(organization.getOwnership()); org.setNameShort(organization.getNameShort()); org.setNameFull(organization.getNameFull()); org.setType(organization.getType()); org.setInn(organization.getInn()); repo.save(org); - return new ResponseEntity<>(repo.findOrganizationById(id), HttpStatus.CREATED); + return new ResponseEntity<>(repo.findById(id), HttpStatus.CREATED); } + /** * Удаление записи об организации * @param id * @return */ - @DeleteMapping("/organization/delete/{id}") - public ResponseEntity deleteOrganization(@PathVariable Long id){ - Organization org = repo.findOrganizationById(id); - repo.delete(org); - return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK); + @DeleteMapping("/delete/{id}") + public ResponseEntity deleteOrganization(@PathVariable Long id){ + Boolean success = false; + Organization t = repo.findById(id); + try{ + repo.delete(t); + success = true; + } catch (Exception e){ + success = false; + } + return new ResponseEntity<>(success, HttpStatus.OK); + } + + + @DeleteMapping("/delete") + public ResponseEntity delete(@RequestParam(name="id", required = true) long id){ + Boolean success = false; + Organization t = repo.findById(id); + try{ + repo.delete(t); + success = true; + } catch (Exception e){ + success = false; + } + return new ResponseEntity<>(success, HttpStatus.OK); } + + + // /** + // * Получение списа организаций + // * @return + // */ + // @GetMapping("/list") + // public ResponseEntity> getOrganizations(){ + // return new ResponseEntity<>(repo.findAll(), HttpStatus.OK); + // } + + // /** + // * Получение сведений об организации по id + // * @param id + // * @return + // */ + // @GetMapping("/{id}") + // public ResponseEntity getOrganizationByID(@PathVariable Integer id){ + // return new ResponseEntity<>(repo.findById(id), HttpStatus.OK); + // } + } diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramController.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramController.java index ebb2bb3..3298ed7 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramController.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramController.java @@ -1,8 +1,13 @@ package ru.molokoin.resourceserviceapi.controllers.api; +import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -13,28 +18,97 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import ru.molokoin.resourceserviceapi.entities.Program; -import ru.molokoin.resourceserviceapi.repositories.ProgramRepositoryFace; +import ru.molokoin.resourceserviceapi.entities.ProgramCretarea; +import ru.molokoin.resourceserviceapi.enums.Base; +import ru.molokoin.resourceserviceapi.services.ProgramCretareaService; +import ru.molokoin.resourceserviceapi.services.ProgramService; @RestController -@RequestMapping(path = "/", consumes = {"*/*"}) +@RequestMapping(path = "/api/program", consumes = {"*/*"}) public class ProgramController { @Autowired - private ProgramRepositoryFace repo; + private ProgramService repo; - @GetMapping("/program/list") - public ResponseEntity> getPrograms(){ - return new ResponseEntity<>(repo.findAll(), HttpStatus.OK); + public ProgramController(ProgramService repo) { + this.repo = repo; } - @GetMapping("/program/{id}") - public ResponseEntity getProgramByID(@PathVariable Integer id){ - return new ResponseEntity<>(repo.findProgramById(id), HttpStatus.OK); + @GetMapping("/pages") + public Page page(@RequestParam(name = "page", defaultValue = "0") int pageNo, + @RequestParam(name = "size", defaultValue = "10") int pageSize, + @RequestParam(name = "sortBy", defaultValue = "id") String sortBy) { + + //проверка на некоректные параметры сортировки + if (!Base.PROGRAMS.contains(sortBy)) sortBy = "id"; + return repo.findAll(PageRequest.of(pageNo, pageSize, Sort.by(sortBy))); } - @PostMapping(path = "/program/create", + @GetMapping("/count") + public ResponseEntity count(){ + return new ResponseEntity<>(repo.count(), HttpStatus.OK); + } + + @GetMapping("") + public Page program( + //Основные параметры объекта + @RequestParam(name = "id", defaultValue = "0") Long id, + @RequestParam(name = "name", required = false) String name, + @RequestParam(name = "lenght", required = false) Integer lenght, + @RequestParam(name = "studyDirection", required = false) String studyDirection, + @RequestParam(name = "price", required = false) Integer price, + //Настройка параметров вложенного объекта + @RequestParam(name = "cretareaId", required = false) String cretareaId, + @RequestParam(name = "cretareaNameShort", required = false) String cretareaNameShort, + @RequestParam(name = "cretareaNameFull", required = false) String cretareaNameFull, + //Настройки возвращаемой страницы + @RequestParam(name = "page", defaultValue = "0") int pageNo, + @RequestParam(name = "size", defaultValue = "10") int pageSize, + @RequestParam(name = "sortBy", defaultValue = "id") String sortBy + ) { + + //проверка на некоректные параметры сортировки + if (!Base.PROGRAMS.contains(sortBy)) sortBy = "id"; + + if (id != 0) { + return repo.findById(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), id); + } + + if (name != null) { + return repo.findByName(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), name); + } + + if (lenght != null) { + return repo.findByLenght(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), lenght); + } + + if (studyDirection != null) { + return repo.findByStudyDirection(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), studyDirection); + } + + if (price != null) { + return repo.findByPrice(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), price); + } + + if (cretareaId != null) { + return repo.findByCretareaId(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), cretareaId); + } + + if (cretareaNameShort != null) { + return repo.findByCretareaNameShort(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), cretareaNameShort); + } + + //если никакие другие ответы не отправлены, возвращаем пустую страницу + return new PageImpl<>(new ArrayList(), PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), 0); + } + + + + + @PostMapping(path = "/create", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity saveProgram(@RequestBody Program program) { @@ -42,25 +116,57 @@ public class ProgramController { return new ResponseEntity<>(program, HttpStatus.CREATED); } - @PutMapping(path = "/program/update/{id}", + @PutMapping(path = "/update/{id}", + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity updateProgram(@PathVariable Long id, @RequestBody Program program) { + Program p = repo.findById(id); + p.setName(program.getName()); + p.setLenght(program.getLenght()); + p.setStudyDirection(program.getStudyDirection()); + p.setPrice(program.getPrice()); + p.setCretarea(program.getCretarea()); + repo.save(p); + return new ResponseEntity<>(repo.findById(id), HttpStatus.CREATED); + } + + @PutMapping(path = "/update", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity updateProgram(@PathVariable Integer id, @RequestBody Program program) { - Program p = repo.findProgramById(id); + public ResponseEntity update(@RequestParam(name = "id", required = true) Long id, @RequestBody Program program) { + Program p = repo.findById(id); p.setName(program.getName()); p.setLenght(program.getLenght()); p.setStudyDirection(program.getStudyDirection()); p.setPrice(program.getPrice()); p.setCretarea(program.getCretarea()); repo.save(p); - return new ResponseEntity<>(repo.findProgramById(id), HttpStatus.CREATED); + return new ResponseEntity<>(repo.findById(id), HttpStatus.CREATED); } - @DeleteMapping("/program/delete/{id}") + @DeleteMapping("/delete/{id}") public ResponseEntity deleteProgram(@PathVariable Long id){ - Program p = repo.findProgramById(id); + Program p = repo.findById(id); System.out.println(p.toString()); repo.delete(p); return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK); } + + @DeleteMapping("/delete") + public ResponseEntity delete(@RequestParam(name="id", required = true) Long id){ + Program p = repo.findById(id); + System.out.println(p.toString()); + repo.delete(p); + return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK); + } + + // @GetMapping("/list") + // public ResponseEntity> getPrograms(){ + // return new ResponseEntity<>(repo.findAll(), HttpStatus.OK); + // } + + @GetMapping("/{id}") + public ResponseEntity getProgramByID(@PathVariable Long id){ + return new ResponseEntity<>(repo.findById(id), HttpStatus.OK); + } } diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramCretareaController.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramCretareaController.java index abab518..707b246 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramCretareaController.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramCretareaController.java @@ -1,11 +1,11 @@ package ru.molokoin.resourceserviceapi.controllers.api; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; @@ -26,10 +26,11 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import ru.molokoin.resourceserviceapi.entities.ProgramCretarea; +import ru.molokoin.resourceserviceapi.enums.Base; import ru.molokoin.resourceserviceapi.repositories.ProgramCretareaRepository; @RestController -@RequestMapping(path = "/cretarea", consumes = {"*/*"}) +@RequestMapping(path = "/api/cretarea", consumes = {"*/*"}) public class ProgramCretareaController { @Autowired private final ProgramCretareaRepository repo; @@ -53,25 +54,14 @@ public class ProgramCretareaController { */ @GetMapping("/pages") public Page - page(@RequestParam(name = "page", required = false) Integer pageNo, - @RequestParam(name = "size", required = false) Long pageSize, - @RequestParam(name = "sortBy", required = false) String sortBy){ - + page(@RequestParam(name = "page", defaultValue = "0") Integer pageNo, + @RequestParam(name = "size", defaultValue = "10") Integer pageSize, + @RequestParam(name = "sortBy", defaultValue = "id") String sortBy){ - if (pageNo == null || pageNo < 0) pageNo = 0; - if (pageSize == null || pageSize < 0) pageSize = repo.count(); - if (sortBy == null) sortBy = "id"; - - Sort sort = Sort.by(sortBy); - Pageable pageable = PageRequest.of(pageNo, pageSize == null ? null : Math.toIntExact(pageSize), sort); - try{ - return repo.findAll(pageable); - }catch(PropertyReferenceException e){ - sortBy = "id"; - sort = Sort.by(sortBy); - pageable = PageRequest.of(pageNo, pageSize == null ? null : Math.toIntExact(pageSize), sort); - return repo.findAll(pageable); - } + //проверка на некоректные параметры сортировки + if (!Base.CRETAREAS.contains(sortBy)) sortBy = "id"; + + return repo.findAll(PageRequest.of(pageNo, pageSize, Sort.by(sortBy))); } /** @@ -85,29 +75,39 @@ public class ProgramCretareaController { } /** - * Получение объекта + * Получение страницы с критериями, удовлетворяющими запросу * - по id (приоритетный параметр) * - по nameShort (проверяет при отсутствии id в запросе) + * - по name * - * При вызове запроса нужно быть готовым получить либо булевый ответ, либо объект Критерия - * Метод может быть использован для проверки наличия Критерия в базе * * @param id * @param nameShort - * @return false - * - В случае указания отсутствующих/не верных параметров - * - в случае отсутствия параметров + * @return Page */ @GetMapping("") - public ResponseEntity cretarea(@RequestParam(name="id", required = false) Long id, @RequestParam(name="nameShort", required = false) String nameShort){ - boolean exists = false; - if(id != null && repo.existsById(id)){ - return new ResponseEntity<>(repo.findCretareaById(id), HttpStatus.OK); + public Page cretarea(@RequestParam(name="id", defaultValue = "0") Long id, + @RequestParam(name="nameShort", defaultValue = "") String nameShort, + @RequestParam(name="name", defaultValue = "") String name, + @RequestParam(name="page", defaultValue = "0") Integer pageNo, + @RequestParam(name="size", defaultValue = "10") Integer pageSize, + @RequestParam(name="sortBy", defaultValue = "id") String sortBy){ + + // проверка на некоректные параметры сортировки + if (!Base.CRETAREAS.contains(sortBy)) sortBy = "id"; + //если id указан в запосе, то ищем по id + if (id != 0) { + return repo.findById(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), id); + } + //если nameShort не пустой, то ищем по nameShort + if (!nameShort.isEmpty()) { + return repo.findByNameShort(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), nameShort); } - if (nameShort != null && repo.existsByNameShort(nameShort)){ - return new ResponseEntity<>(repo.findCretareaByNameShort(nameShort), HttpStatus.OK); + //если name не пустой, то ищем по name + if (!name.isEmpty()) { + return repo.findByName(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), name); } - return new ResponseEntity<>(exists, HttpStatus.OK); + return new PageImpl<>(new ArrayList(), PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), 0); } /** diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/TeacherController.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/TeacherController.java index 8ba14f8..b09f895 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/TeacherController.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/TeacherController.java @@ -1,8 +1,14 @@ package ru.molokoin.resourceserviceapi.controllers.api; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -10,10 +16,13 @@ import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import ru.molokoin.resourceserviceapi.entities.Teacher; -import ru.molokoin.resourceserviceapi.repositories.TeachersRepositoryFace; +import ru.molokoin.resourceserviceapi.enums.Base; +import ru.molokoin.resourceserviceapi.services.TeacherService; + import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -22,27 +31,131 @@ import org.springframework.web.bind.annotation.RequestBody; * - запросы к страницам по id, которых нет в базе */ @RestController -@RequestMapping(path = "/", consumes = {"*/*"}) +@RequestMapping(path = "/api/teacher", consumes = {"*/*"}) public class TeacherController { @Autowired - private TeachersRepositoryFace repo; + private TeacherService repo; + + public TeacherController(TeacherService repo) { + this.repo = repo; + } + + + @GetMapping("/pages") + public Page page(@RequestParam(name = "page", defaultValue = "0") int pageNo, + @RequestParam(name = "size", defaultValue = "10") int pageSize, + @RequestParam(name = "sortBy", defaultValue = "id") String sortBy) { + + //проверка на некоректные параметры сортировки + if (!Base.TEACHERS.contains(sortBy)) sortBy = "id"; + return repo.findAll(PageRequest.of(pageNo, pageSize, Sort.by(sortBy))); + } + + @GetMapping("/count") + public ResponseEntity count(){ + return new ResponseEntity<>(repo.count(), HttpStatus.OK); + } + + /** + * Получение из базы объектов Преподаватель в виде страницы для отображения (page) + * @param id + * @param employeeId + * @param snils + * @param fio + * @param secondName + * @param firstName + * @param lastName + * @return Page + */ + @GetMapping("") + public Page teacher(@RequestParam(name="id", defaultValue = "0") long id, + @RequestParam(name="employeeId", required = false, defaultValue = "") String employeeId, + @RequestParam(name="snils", required = false, defaultValue = "") String snils, + @RequestParam(name="fio", required = false, defaultValue = "") String fio, + @RequestParam(name="secondName", required = false, defaultValue = "") String secondName, + @RequestParam(name="firstName", required = false, defaultValue = "") String firstName, + @RequestParam(name="lastName", required = false, defaultValue = "") String lastName, + @RequestParam(name="page", required = false, defaultValue = "0") Integer pageNo, + @RequestParam(name="size", required = false, defaultValue = "10") Integer pageSize, + @RequestParam(name="sortBy", required = false, defaultValue = "id") String sortBy) { + + if (!Base.TEACHERS.contains(sortBy)) sortBy = "id"; + + //если id указан в запросе, ищем преподавателя по id, игнорируя остальные поля + if (id != 0){ + return repo.findById(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), id); + } + + // Если СНИЛС указан в запросе, ищем преподавателя по СНИЛС, игнорируя остальные поля + if (!snils.isEmpty()){ + return repo.findBySnils(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), snils); + } + + // если employeeId указан в запросе, ищем преподавателя по employeeId, игнорируя остальные поля + if (!employeeId.isEmpty()){ + return repo.findByEmployeeId(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), employeeId); + } + + // если ФИО указан в запросе, ищем преподавателя по ФИО, игнорируя остальные поля + if (!fio.isEmpty()){ + return repo.findByFio(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), fio); + } + + // если указана фамилия и отсутствуют имя и отчество, ищем преподавателя по фамилии, игнорируя остальные поля + if (!secondName.isEmpty() && firstName.isEmpty() && lastName.isEmpty()){ + return repo.findBySecondName(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), secondName); + } + + //если указаны фамилия и имя, при этом отсутствует отчество, ищем преподавателя по фамилии и имени, игнорируя остальные поля + if (!secondName.isEmpty() && !firstName.isEmpty() && lastName.isEmpty()){ + return repo.findBySecondNameAndFirstName(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), secondName, firstName); + } + + //если указаны фамилия, имя и отчество, ищем преподавателя по фамилии, имени и отчеству, игнорируя остальные поля + if (!secondName.isEmpty() && !firstName.isEmpty() && !lastName.isEmpty()){ + return repo.findBySecondNameAndFirstNameAndLastName(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), secondName, firstName, lastName); + } + + //если никакие другие ответы не отправлены, возвращаем пустую страницу + return new PageImpl<>(new ArrayList(), PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), 0); + } - @GetMapping("/teacher/list") - public ResponseEntity> getTeachers(){ - return new ResponseEntity<>(repo.findAll(), HttpStatus.OK); + /** + * Проверка наличия записи о преподавателе в базе + * - по ФИО + * - по СНИЛС + * - по ID сотрудника + * + * @param teacher + * @return + */ + @GetMapping("/exists") + public ResponseEntity exists(@RequestBody Teacher teacher) { + return new ResponseEntity<>(repo.exists(teacher), HttpStatus.OK); } - @GetMapping("/teacher/{id}") - public ResponseEntity getTeacherByID(@PathVariable Integer id){ - return new ResponseEntity<>(repo.findTeacherById(id), HttpStatus.OK); + @GetMapping("/absent") + public Page absent(@RequestBody List teachers) { + List absent = new ArrayList<>(); + //проверяем наличие преподавателя в базе + for (Teacher teacher : teachers) { + if (!repo.exists(teacher)) { + //если не найден - добавляем в список + absent.add(teacher); + } + } + //сортируем краткие наименования по алфавиту + absent.sort(Comparator.comparing(Teacher::getSecondName)); + Page absentPage = new PageImpl<>(absent); + return absentPage; } /** - * Создание запис о новом преподавателе + * Создание записи о новом преподавателе * @param teacher * @return */ - @PostMapping(path = "/teacher/create", + @PostMapping(path = "/create", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity saveTeacher(@RequestBody Teacher teacher) { @@ -50,25 +163,67 @@ public class TeacherController { return new ResponseEntity<>(teacher, HttpStatus.CREATED); } - @PostMapping(path = "/teacher/update/{id}", + @PostMapping(path = "/update/{id}", + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity updateTeacher(@PathVariable Integer id, @RequestBody Teacher teacher) { + Teacher t = repo.findById(id); + t.setFirstName(teacher.getFirstName()); + t.setSecondName(teacher.getSecondName()); + t.setLastName(teacher.getLastName()); + t.setEmployeeId(teacher.getEmployeeId()); + t.setSnils(teacher.getSnils()); + repo.save(t); + return new ResponseEntity<>(repo.findById(id), HttpStatus.CREATED); + } + + @PostMapping(path = "/update", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity updateTeacher(@PathVariable Integer id, @RequestBody Teacher teacher) { - Teacher t = repo.findTeacherById(id); + public ResponseEntity update(@RequestParam(name="id", required = true) Integer id, @RequestBody Teacher teacher) { + Teacher t = repo.findById(id); t.setFirstName(teacher.getFirstName()); t.setSecondName(teacher.getSecondName()); t.setLastName(teacher.getLastName()); t.setEmployeeId(teacher.getEmployeeId()); t.setSnils(teacher.getSnils()); repo.save(t); - return new ResponseEntity<>(repo.findTeacherById(id), HttpStatus.CREATED); + return new ResponseEntity<>(repo.findById(id), HttpStatus.CREATED); + } + + @DeleteMapping("/delete/{id}") + public ResponseEntity deleteTecher(@PathVariable Long id){ + Boolean success = false; + Teacher t = repo.findById(id); + try{ + repo.delete(t); + success = true; + } catch (Exception e){ + success = false; + } + return new ResponseEntity<>(success, HttpStatus.OK); } - @DeleteMapping("/teacher/delete/{id}") - public ResponseEntity deleteTecher(@PathVariable Long id){ - Teacher t = repo.findTeacherById(id); - repo.delete(t); - return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK); + @DeleteMapping("/delete") + public ResponseEntity delete(@RequestParam(name="id", required = true) Long id){ + Boolean success = false; + Teacher t = repo.findById(id); + try{ + repo.delete(t); + success = true; + } catch (Exception e){ + success = false; + } + return new ResponseEntity<>(success, HttpStatus.OK); } + // @GetMapping("/list") + // public ResponseEntity> getTeachers(){ + // return new ResponseEntity<>(repo.findAll(), HttpStatus.OK); + // } + + // @GetMapping("/{id}") + // public ResponseEntity getTeacherByID(@PathVariable Integer id){ + // return new ResponseEntity<>(repo.findById(id), HttpStatus.OK); + // } } diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/ProgramCretarea.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/ProgramCretarea.java index 5041800..dd873a9 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/ProgramCretarea.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/ProgramCretarea.java @@ -26,9 +26,7 @@ public class ProgramCretarea { @Id @GeneratedValue(strategy=GenerationType.AUTO) private long id; - // @Column(length=500) private String name;//Наименование - // @Column(length=5) private String nameShort;//Наименование : сокращенно /** diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/Teacher.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/Teacher.java index c908109..34c0af4 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/Teacher.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/Teacher.java @@ -1,6 +1,5 @@ package ru.molokoin.resourceserviceapi.entities; -import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -8,6 +7,7 @@ import jakarta.persistence.Id; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import ru.molokoin.resourceserviceapi.teh.strings.Naimer; /** * Сущьность преподавателя @@ -34,8 +34,38 @@ public class Teacher{ // подготовить конструкторы на все варианты внесения информации о преподавателях public Teacher(String second_name, String first_name, String last_name){ - this.secondName = second_name; - this.firstName = first_name; - this.lastName = last_name; + setSecondName(second_name); + setFirstName(first_name); + setLastName(last_name); + } + + public Teacher(String fio){ + setSecondName(Naimer.getSecondNameOf(fio)); + setFirstName(Naimer.getFirstNameOf(fio)); + setLastName(Naimer.getLastNameOf(fio)); + } + + public String fio(){ + return Naimer.getFioOf(this); + } + + /** + * проверка совпадения ФИО + * @param teacher + * @return + */ + public boolean like(Teacher teacher) { + return this.fio().equals(teacher.fio()); + } + + /** + * проверка совпадения всех полей кроме id + * @param teacher + * @return + */ + public boolean isSimilar(Teacher teacher) { + return this.fio().equals(teacher.fio())&& + this.getEmployeeId().equals(teacher.getEmployeeId())&& + this.getSnils().equals(teacher.getSnils()); } } diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Base.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Base.java new file mode 100644 index 0000000..51a7f15 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Base.java @@ -0,0 +1,27 @@ +package ru.molokoin.resourceserviceapi.enums; + +import java.util.List; + +public enum Base { + + TEACHERS (Teachers.getTitles()), + PROGRAMS (Programs.getTitles()), + // STUDENTS (Students.getTitles()), + ORGANIZATIONS (Organizations.getTitles()), + // EDUCATIONS (Educations.getTitles()), + BUILDINGS (Buildings.getTitles()), + CRETAREAS (Cretareas.getTitles()); + // COURSES (Courses.getTitles()), + // POSTS (Posts.getTitles()), + // STORES (Stores.getTitles()); + + + private List titles; + + Base(List titles) { + this.titles = titles; + } + public boolean contains(String title) { + return titles.contains(title); + } +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Buildings.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Buildings.java new file mode 100644 index 0000000..ee498e6 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Buildings.java @@ -0,0 +1,30 @@ +package ru.molokoin.resourceserviceapi.enums; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public enum Buildings { + ID("id"), + CODE_FULL("codeFull"), + CODE_SHORT("codeShort"), + NAME_FULL("nameFull"), + NAME_SHORT("nameShort"); + + private String column; + + Buildings(String column) { + this.column = column; + } + + public String column() { + return column; + } + + public static List getTitles() { + return Arrays.stream(Buildings.values()) + .map(Buildings::column) + .collect(Collectors.toList()); + } + +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Cretareas.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Cretareas.java new file mode 100644 index 0000000..e846811 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Cretareas.java @@ -0,0 +1,27 @@ +package ru.molokoin.resourceserviceapi.enums; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public enum Cretareas { + ID("id"), + NAME("name"), + NAME_SHORT("nameShort"); + + private String column; + + Cretareas(String column) { + this.column = column; + } + public static List getTitles() { + return Arrays.stream(Cretareas.values()) + .map(Cretareas::column) + .collect(Collectors.toList()); + } + + public String column() { + return column; + } + +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Organizations.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Organizations.java new file mode 100644 index 0000000..6f71a25 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Organizations.java @@ -0,0 +1,32 @@ +package ru.molokoin.resourceserviceapi.enums; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public enum Organizations { + ID("id"), + OWNERSHIP("ownership"), + NAME_SHORT("nameShort"), + NAME_FULL("nameFull"), + TYPE("type"), + INN("inn"); + + private String title; + Organizations(String title) { + this.title = title; + } + public String getTitle() { + return title; + } + public static List getTitles() { + return Arrays.stream(Organizations.values()) + .map(Organizations::column) + .collect(Collectors.toList()); + } + + public String column() { + return title; + } + +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Programs.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Programs.java new file mode 100644 index 0000000..4665b0f --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Programs.java @@ -0,0 +1,30 @@ +package ru.molokoin.resourceserviceapi.enums; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public enum Programs { + ID("id"), + LENGHT("lenght"), + NAME("name"), + PRICE("price"), + STUDY_DIRECTION("studyDirection"), + CRETAREA("cretarea"); + + private String column; + + Programs(String column) { + this.column = column; + } + public String column() { + return column; + } + + public static List getTitles() { + return Arrays.stream(Programs.values()) + .map(Programs::column) + .collect(Collectors.toList()); + } + +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Teachers.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Teachers.java new file mode 100644 index 0000000..97d1458 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Teachers.java @@ -0,0 +1,30 @@ +package ru.molokoin.resourceserviceapi.enums; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public enum Teachers { + ID("id"), + SECOND_NAME("secondName"), + FIRST_NAME("firstName"), + LAST_NAME("lastName"), + EMPLOYEE_ID("employeeId"), + SNILS("snils"), + FIO("fio"); + + private String column; + + Teachers(String column) { + this.column = column; + } + public static List getTitles() { + return Arrays.stream(Teachers.values()) + .map(Teachers::column) + .collect(Collectors.toList()); + } + + public String column() { + return column; + } +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/BuildingRepository.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/BuildingRepository.java index 9797876..9ad1efe 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/BuildingRepository.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/BuildingRepository.java @@ -1,5 +1,7 @@ package ru.molokoin.resourceserviceapi.repositories; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -10,4 +12,9 @@ public interface BuildingRepository extends JpaRepository{ Building findById(long id); Building findByNameShort(String nameShort); Boolean existsByNameShort(String nameShort); + Page findById(PageRequest of, Long id); + Page findByNameShort(PageRequest of, String nameShort); + Page findByNameFull(PageRequest of, String nameFull); + Page findByCodeShort(PageRequest of, String codeShort); + Page findByCodeFull(PageRequest of, String codeFull); } diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/CourseRepositoryFace.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/CourseRepositoryFace.java index 1afdf4c..9120014 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/CourseRepositoryFace.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/CourseRepositoryFace.java @@ -8,5 +8,5 @@ import ru.molokoin.resourceserviceapi.entities.Course; public interface CourseRepositoryFace extends ListCrudRepository{ List findAll(); - Course findCourseById(long id); + Course findById(long id); } diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/OrganizationFace.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/OrganizationFace.java deleted file mode 100644 index a020b71..0000000 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/OrganizationFace.java +++ /dev/null @@ -1,15 +0,0 @@ -package ru.molokoin.resourceserviceapi.repositories; - -import java.util.List; - -import org.springframework.data.repository.ListCrudRepository; -import org.springframework.stereotype.Repository; - - -import ru.molokoin.resourceserviceapi.entities.Organization; - -@Repository -public interface OrganizationFace extends ListCrudRepository{ - List findAll(); - Organization findOrganizationById(long id); -} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/OrganizationRepository.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/OrganizationRepository.java new file mode 100644 index 0000000..d2cb0fe --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/OrganizationRepository.java @@ -0,0 +1,82 @@ +package ru.molokoin.resourceserviceapi.repositories; + +import java.util.List; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import ru.molokoin.resourceserviceapi.entities.Organization; + +@Repository +public interface OrganizationRepository extends JpaRepository{ + /** + * Найти все организации + */ + List findAll(); + + /** + * Найти организацию по id + * @param id + * @return + */ + Organization findById(long id); + Boolean existsById(long id); + + /** + * Найти организацию по форме собственности (АО/ООО/итд ...) + * @param ownership + * @return + */ + List findByOwnership(String ownership); + Boolean existsByOwnership(String ownership); + + /** + * Найти организацию по сокращенному наименованию + * @param nameShort + * @return + */ + Organization findByNameShort(String nameShort); + Boolean existsByNameShort(String nameShort); + + /** + * Найти организацию по полному наименованию + * @param nameFull + * @return + */ + Organization findByNameFull(String nameFull); + Boolean existsByNameFull(String nameFull); + + /** + * Найти организацию по типу (производственная/сервисная) + * @param type + * @return + */ + List findByType(String type); + Boolean existsByType(String type); + + /** + * Найти организацию по ИНН + * @param inn + * @return + */ + Organization findByInn(String inn); + Boolean existsByInn(String inn); + + Page findById(PageRequest of, long id); + + Page findByInn(PageRequest of, String inn); + + Page findByNameFull(PageRequest of, String nameFull); + + Page findByNameShort(PageRequest of, String nameShort); + + Page findByType(PageRequest of, String type); + + Page findByOwnership(PageRequest of, String ownership); + + // Boolean exists(Organization organization); + + +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramCretareaRepository.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramCretareaRepository.java index d832e7a..22fcf1b 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramCretareaRepository.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramCretareaRepository.java @@ -1,8 +1,11 @@ package ru.molokoin.resourceserviceapi.repositories; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import ru.molokoin.resourceserviceapi.entities.Program; import ru.molokoin.resourceserviceapi.entities.ProgramCretarea; @Repository @@ -10,4 +13,7 @@ public interface ProgramCretareaRepository extends JpaRepository findById(PageRequest of, Long id); + Page findByNameShort(PageRequest of, String nameShort); + Page findByName(PageRequest of, String name); } diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramRepository.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramRepository.java new file mode 100644 index 0000000..fcc33c9 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramRepository.java @@ -0,0 +1,23 @@ +package ru.molokoin.resourceserviceapi.repositories; + +import java.util.List; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import ru.molokoin.resourceserviceapi.entities.Program; +import ru.molokoin.resourceserviceapi.entities.ProgramCretarea; + +@Repository +public interface ProgramRepository extends JpaRepository{ + List findAll(); + Program findById(long id); + Page findById(PageRequest of, Long id); + Page findByName(PageRequest of, String name); + Page findByLenght(PageRequest of, Integer lenght); + Page findByStudyDirection(PageRequest of, String studyDirection); + Page findByPrice(PageRequest of, Integer price); + Page findByCretarea(PageRequest of, ProgramCretarea pc); +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramRepositoryFace.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramRepositoryFace.java deleted file mode 100644 index 0ac2dcf..0000000 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramRepositoryFace.java +++ /dev/null @@ -1,12 +0,0 @@ -package ru.molokoin.resourceserviceapi.repositories; - -import java.util.List; - -import org.springframework.data.repository.ListCrudRepository; - -import ru.molokoin.resourceserviceapi.entities.Program; - -public interface ProgramRepositoryFace extends ListCrudRepository{ - List findAll(); - Program findProgramById(long id); -} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/TeacherRepository.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/TeacherRepository.java new file mode 100644 index 0000000..1bc3bcd --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/TeacherRepository.java @@ -0,0 +1,35 @@ +package ru.molokoin.resourceserviceapi.repositories; + +import java.util.List; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import ru.molokoin.resourceserviceapi.entities.Teacher; + +@Repository +public interface TeacherRepository extends JpaRepository{ + List findAll(); + Teacher findById(long id); + Boolean existsById(long id); + List findBySecondNameAndFirstNameAndLastName(String firstName, String secondName, String lastName); + Boolean existsBySecondNameAndFirstNameAndLastName(String secondName, String firstName, String lastName); + List findBySecondName(String secondName); + Boolean existsBySecondName(String secondName); + List findByEmployeeId(String employeeId); + Boolean existsByEmployeeId(String employeeId); + List findBySnils(String snils); + Boolean existsBySnils(String snils); + // boolean existsByFIO(String secondName, String firstName, String lastName); + Page findById(PageRequest of, long id); + Page findByIdAndSecondNameAndFirstNameAndLastNameAndEmployeeIdAndSnils(PageRequest of, long id, String secondName, + String firstName, String lastName, String employeeId, String snils, String fio); + Page findBySnils(PageRequest of, String snils); + Page findByEmployeeId(PageRequest of, String employeeId); + Page findBySecondNameAndFirstNameAndLastName(PageRequest of, String secondNameOf, String firstNameOf, + String lastNameOf); + Page findBySecondName(PageRequest of, String secondName); + Page findBySecondNameAndFirstName(PageRequest of, String secondName, String firstName); +} \ No newline at end of file diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/TeachersRepositoryFace.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/TeachersRepositoryFace.java deleted file mode 100644 index 8917329..0000000 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/TeachersRepositoryFace.java +++ /dev/null @@ -1,14 +0,0 @@ -package ru.molokoin.resourceserviceapi.repositories; - -import java.util.List; - -import org.springframework.data.repository.ListCrudRepository; -import org.springframework.stereotype.Repository; - -import ru.molokoin.resourceserviceapi.entities.Teacher; - -@Repository -public interface TeachersRepositoryFace extends ListCrudRepository{ - List findAll(); - Teacher findTeacherById(long id); -} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/BuildingService.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/BuildingService.java index 519449d..e37543b 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/BuildingService.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/BuildingService.java @@ -3,11 +3,14 @@ package ru.molokoin.resourceserviceapi.services; import java.util.List; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; import ru.molokoin.resourceserviceapi.entities.Building; import ru.molokoin.resourceserviceapi.repositories.BuildingRepository; +@Service public class BuildingService { private final BuildingRepository repo; @@ -34,4 +37,40 @@ public class BuildingService { public Boolean existsByNameShort(String nameShort) { return repo.existsByNameShort(nameShort); } + + public Long count() { + return repo.count(); + } + + public Page findById(PageRequest of, Long id) { + return repo.findById(of, id); + } + + public Page findByNameShort(PageRequest of, String nameShort) { + return repo.findByNameShort(of, nameShort); + } + + public Page findByNameFull(PageRequest of, String nameFull) { + return repo.findByNameFull(of, nameFull); + } + + public Page findByCodeShort(PageRequest of, String codeShort) { + return repo.findByCodeShort(of, codeShort); + } + + public Page findByCodeFull(PageRequest of, String codeFull) { + return repo.findByCodeFull(of, codeFull); + } + + public void save(Building building) { + repo.save(building); + } + + public void deleteById(Long id) { + repo.deleteById(id); + } + + public void delete(Building building) { + repo.delete(building); + } } \ No newline at end of file diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/OrganizationService.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/OrganizationService.java new file mode 100644 index 0000000..2d38034 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/OrganizationService.java @@ -0,0 +1,128 @@ +package ru.molokoin.resourceserviceapi.services; + +import java.util.List; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import ru.molokoin.resourceserviceapi.entities.Organization; +import ru.molokoin.resourceserviceapi.repositories.OrganizationRepository; + +@Service +public class OrganizationService { + private final OrganizationRepository repo; + + public OrganizationService(OrganizationRepository repo) { + this.repo = repo; + } + + public List findAll() { + return repo.findAll(); + } + + public Organization findById(long id) { + return repo.findById(id); + } + + public Boolean existsById(long id) { + return repo.existsById(id); + } + + public List findByType(String type) { + return repo.findByType(type); + } + + public List findByOwnership(String ownership) { + return repo.findByOwnership(ownership); + } + + public Organization findByInn(String inn) { + return repo.findByInn(inn); + } + + public Boolean existsByInn(String inn) { + return repo.existsByInn(inn); + } + + public Boolean existsByType(String type) { + return repo.existsByType(type); + } + + public Boolean existsByOwnership(String ownership) { + return repo.existsByOwnership(ownership); + } + + public Boolean existsByNameShort(String nameShort) { + return repo.existsByNameShort(nameShort); + } + + public Boolean existsByNameFull(String nameFull) { + return repo.existsByNameFull(nameFull); + } + + public void save(Organization organization) { + repo.save(organization); + } + + public void deleteById(long id) { + repo.deleteById(id); + } + + /** + * Проверка наличия организации в базе. + * организацию можно считать присутствующей в базе, если полное наименование организаций одинаковы + * + * @param organization + * @return + */ + public boolean exists(Organization organization) { + return repo.existsByNameFull(organization.getNameFull()); + } + + public void delete(Organization organization) { + repo.delete(organization); + } + + public Long count() { + return repo.count(); + } + + public Page findAll(Pageable pageable) { + return repo.findAll(pageable); + } + + public Organization findByNameShort(String nameShort) { + return repo.findByNameShort(nameShort); + } + + public Organization findByNameFull(String nameFull) { + return repo.findByNameFull(nameFull); + } + + public Page findById(PageRequest of, long id) { + return repo.findById(of, id); + } + + public Page findByInn(PageRequest of, String inn) { + return repo.findByInn(of, inn); + } + + public Page findByNameFull(PageRequest of, String nameFull) { + return repo.findByNameFull(of, nameFull); + } + + public Page findByNameShort(PageRequest of, String nameShort) { + return repo.findByNameShort(of, nameShort); + } + + public Page findByType(PageRequest of, String type) { + return repo.findByType(of, type); + } + + public Page findByOwnership(PageRequest of, String ownership) { + return repo.findByOwnership(of, ownership); + } + +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/ProgramCretareaService.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/ProgramCretareaService.java index efc00e2..8a39323 100644 --- a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/ProgramCretareaService.java +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/ProgramCretareaService.java @@ -4,10 +4,12 @@ import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; import ru.molokoin.resourceserviceapi.entities.ProgramCretarea; import ru.molokoin.resourceserviceapi.repositories.ProgramCretareaRepository; +@Service public class ProgramCretareaService { private final ProgramCretareaRepository repo; @@ -35,4 +37,16 @@ public class ProgramCretareaService { return repo.existsByNameShort(nameShort); } + public boolean existsById(long id) { + return repo.existsById(id); + } + + public ProgramCretarea findById(long id) { + return repo.findById(id).get(); + } + + public ProgramCretarea findByNameShort(String cretareaNameShort) { + return repo.findCretareaByNameShort(cretareaNameShort); + } + } diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/ProgramService.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/ProgramService.java new file mode 100644 index 0000000..5f91a04 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/ProgramService.java @@ -0,0 +1,82 @@ +package ru.molokoin.resourceserviceapi.services; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; + +import ru.molokoin.resourceserviceapi.entities.Program; +import ru.molokoin.resourceserviceapi.entities.ProgramCretarea; +import ru.molokoin.resourceserviceapi.repositories.ProgramCretareaRepository; +import ru.molokoin.resourceserviceapi.repositories.ProgramRepository; + +@Service +public class ProgramService { + + private final ProgramCretareaRepository pcRepo; + private final ProgramRepository repo; + + public ProgramService(ProgramRepository repo, ProgramCretareaRepository pcRepo) { + this.repo = repo; + this.pcRepo = pcRepo; + } + + public Page findAll(PageRequest of) { + return repo.findAll(of); + } + + public Long count() { + return repo.count(); + } + + public Page findById(PageRequest of, Long id) { + return repo.findById(of, id); + } + + public Page findByName(PageRequest of, String name) { + return repo.findByName(of, name); + } + + public Page findByLenght(PageRequest of, Integer lenght) { + return repo.findByLenght(of, lenght); + } + + public Page findByStudyDirection(PageRequest of, String studyDirection) { + return repo.findByStudyDirection(of, studyDirection); + } + + public void save(Program program) { + repo.save(program); + } + + public Program findById(Long id) { + return repo.findById(id).get(); + } + + public void delete(Program program) { + repo.delete(program); + } + + public Page findByPrice(PageRequest of, Integer price) { + return repo.findByPrice(of, price); + } + + public Page findByCretarea(PageRequest of, Long cretareaId) { + ProgramCretarea pc = pcRepo.findById(cretareaId).get(); + return repo.findByCretarea(of, pc); + } + + public Page findByCretarea(PageRequest of, ProgramCretarea pc) { + return repo.findByCretarea(of, pc); + } + + public Page findByCretareaId(PageRequest of, String cretareaId) { + ProgramCretarea pc = pcRepo.findCretareaById(Long.parseLong(cretareaId)); + return repo.findByCretarea(of, pc); + } + + public Page findByCretareaNameShort(PageRequest of, String cretareaNameShort) { + ProgramCretarea pc = pcRepo.findCretareaByNameShort(cretareaNameShort); + return repo.findByCretarea(of, pc); + } + +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/TeacherService.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/TeacherService.java new file mode 100644 index 0000000..99a2a08 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/TeacherService.java @@ -0,0 +1,186 @@ +package ru.molokoin.resourceserviceapi.services; + +import java.util.List; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import ru.molokoin.resourceserviceapi.entities.Teacher; +import ru.molokoin.resourceserviceapi.repositories.TeacherRepository; +import ru.molokoin.resourceserviceapi.teh.strings.Naimer; + +@Service +public class TeacherService { + private final TeacherRepository repo; + + public TeacherService(TeacherRepository repo) { + this.repo = repo; + } + + public Page findAll(Pageable pageable) { + return repo.findAll(pageable); + } + + public List findAll() { + return repo.findAll(); + } + + public Teacher findById(long id) { + return repo.findById(id); + } + + public Boolean existsById(long id) { + return repo.existsById(id); + } + + /** + * Получить из базы объект преопдавателя по фамилии, имени и отчеству + * в одной строке + * @param fio + * @return + */ + public List findByFIO(String fio) { + String firstName = Naimer.getFirstNameOf(fio); + String secondName = Naimer.getSecondNameOf(fio); + String lastName = Naimer.getLastNameOf(fio); + return repo.findBySecondNameAndFirstNameAndLastName(secondName, firstName, lastName); + } + + /** + * Получить из базы объект преопдавателя по фамилии, имени и отчеству + * + * @param secondName + * @param firstName + * @param lastName + * @return + */ + public List findByFIO(String secondName, String firstName, String lastName) { + return repo.findBySecondNameAndFirstNameAndLastName(secondName, firstName, lastName); + } + + /** + * Проверка существования преподавателя по фамилии, имени и отчеству + * в одной строке + * @param fio + * @return + */ + public Boolean existsByFIO(String fio) { + return repo.existsBySecondNameAndFirstNameAndLastName(Naimer.getSecondNameOf(fio), + Naimer.getFirstNameOf(fio), + Naimer.getLastNameOf(fio)); + } + + /** + * Проверка существования преподавателя по фамилии, имени и отчеству + * + * @param secondName + * @param firstName + * @param lastName + * @return + */ + public Boolean existsByFIO(String secondName, String firstName, String lastName) { + boolean exists = repo.existsBySecondNameAndFirstNameAndLastName(secondName, firstName, lastName); + return exists; + + } + + public List findBySecondName(String secondName) { + return repo.findBySecondName(secondName); + } + + public Boolean existsBySecondName(String secondName) { + return repo.existsBySecondName(secondName); + } + + public void save(Teacher teacher) { + repo.save(teacher); + } + + public void delete(Teacher teacher) { + repo.delete(teacher); + } + + public Long count() { + return repo.count(); + } + + public List findByEmployeeId(String employeeId) { + return repo.findByEmployeeId(employeeId); + } + + public List findBySnils(String snils) { + return repo.findBySnils(snils); + } + + public Boolean existsBySnils(String snils) { + return repo.existsBySnils(snils); + } + + public Boolean existsByEmployeeId(String employeeId) { + return repo.existsByEmployeeId(employeeId); + } + + /** + * Проверка наличия записи о преподавателе в базе + * @param teacher + * @return + */ + public Boolean exists(Teacher teacher) { + Boolean exists = false; + //если есть id, то проверяем существование + if (teacher.getId() != 0L && repo.existsById(teacher.getId())) { + exists = true; + } else { + //если нет id, то проверяем существование по снилс + if (teacher.getSnils() != null && repo.existsBySnils(teacher.getSnils())) { + exists = true; + } else { + //если нет id и нет снилс, то проверяем существование по ФИО + if (teacher.getSecondName() != null + && repo.existsBySecondNameAndFirstNameAndLastName(teacher.getSecondName(), teacher.getFirstName(), teacher.getLastName())) { + exists = true; + } + } + } + return exists; + } + + public Page findById(PageRequest of, long id) { + return repo.findById(of, id); + } + + public Page findBySnils(PageRequest of, String snils) { + return repo.findBySnils(of, snils); + } + + public Page findByEmployeeId(PageRequest of, String employeeId) { + return repo.findByEmployeeId(of, employeeId); + } + + public Page findByFio(PageRequest of, String fio) { + return repo.findBySecondNameAndFirstNameAndLastName( + of, + Naimer.getSecondNameOf(fio), + Naimer.getFirstNameOf(fio), + Naimer.getLastNameOf(fio)); + } + + public Page findBySecondName(PageRequest of, String secondName) { + return repo.findBySecondName(of, secondName); + } + + public Page findBySecondNameAndFirstName(PageRequest of, String secondName, String firstName) { + return repo.findBySecondNameAndFirstName(of, secondName, firstName); + } + + public Page findBySecondNameAndFirstNameAndLastName(PageRequest of, String secondName, String firstName, + String lastName) { + return repo.findBySecondNameAndFirstNameAndLastName(of, secondName, firstName, lastName); + } + + + + +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Arrayer.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Arrayer.java new file mode 100644 index 0000000..7dd2c5c --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Arrayer.java @@ -0,0 +1,51 @@ +package ru.molokoin.resourceserviceapi.teh.strings; + +import java.util.List; + +public class Arrayer { + + /** + * Удаляет все пустые строки из массива строк и возвращает новый массив с оставшимися строками. + * + * @param strings Массив строк из которогу удаляются пустые строки. + * @return Новый массив с оставшимися строками. + */ + public static String[] removeEmptyStrings(String[] strings) { + + // Подсчет количества непустых строк в входном массиве + int count = 0; + for (String string : strings) { + if (!string.equals("")) { + count++; + } + } + + // Новый массив для хранения непустых строк + String[] result = new String[count]; + + // Копирование непустых строк из входного массива в новый массив + int index = 0; + for (String string : strings) { + if (!string.equals("")) { + result[index] = string; + index++; + } + } + + // Возвращение нового массива с непустыми строками + return result; + } + + /** + * Удаление повторяющихся элементов списка строк + * Получение списка уникальных строк + * + */ + public static List uniqueList(List list) { + // Удаление повторяющихся элементов списка + List result = list.stream().distinct().toList(); + return result; + } + + +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Dater.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Dater.java new file mode 100644 index 0000000..18c8405 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Dater.java @@ -0,0 +1,16 @@ +package ru.molokoin.resourceserviceapi.teh.strings; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * Обработка строк с датами + */ +public class Dater { + private Long longDate; + private String stringDate; + private Date date; + private LocalDate localDate; + private LocalDateTime localDateTime; +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Naimer.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Naimer.java new file mode 100644 index 0000000..19d0fb4 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Naimer.java @@ -0,0 +1,237 @@ +package ru.molokoin.resourceserviceapi.teh.strings; + +import ru.molokoin.resourceserviceapi.entities.Teacher; + +/** + * Обработка строк, содержащих сведения о ФИО + * - Teacher + * - Student + * - Person + */ +public class Naimer { + private static String not = "Нет"; + /** + * Объединяет фамилию, имя и отчество в одну строку. + * Возможые ситуации: + * - фамилия, имя или отчество могут содержать нулевые значения + * - отчество может содержать приписки + * + * @param second_name - фамилия + * @param first_name - имя + * @param last_name - отчество + * @return объединенную строку или пустую строку, + * если все входящие параметры являются нулевыми значениями + */ + public static String getFioOf(String second_name, String first_name, String last_name) { + // Инициализируем StringBuilder для хранения результата. + StringBuilder result = new StringBuilder(); + + // Проверяем, является ли фамилия нулевым значением. + if (!Stringer.checkForEmpty(second_name)) { + // Если фамилия не является нулевым значением, то добавляем ее в строку. + result.append(second_name); + } else { + // Если фамилия является нулевым значением, то добавляем "Нет" в строку. + result.append(not); + } + + // Проверяем, является ли имя нулевым значением. + if (!Stringer.checkForEmpty(first_name)) { + // Если имя не является нулевым значением, то добавляем пробел и имя в строку. + result.append(" " + first_name); + } else { + // Если имя является нулевым значением, то добавляем "Нет" в строку. + result.append(" " + not); + } + + // Проверяем, является ли отчество нулевым значением. + if (!Stringer.checkForEmpty(last_name)) { + // Если отчество не является нулевым значением, то добавляем пробел и отчество в строку. + result.append(" " + last_name); + } else { + // Если отчество является нулевым значением, то добавляем "Нет" в строку. + result.append(" " + not); + } + + // Возвращаем объединенную строку или строку "Нет Нет Нет", + //если все входящие параметры являются нулевыми значениями. + return result.toString().trim(); + } + + + /** + * Объединяет фамилию, имя и отчество из объекта преподавателя в одну строку. + * Возможные ситуации: + * - фамилия, имя или отчество могут содержать нулевые значения + * - отчество может содержать приписки + * + * @param teacher - объект преподавателя + * @return объединенная строка или строка "Нет Нет Нет", + * если все входящие параметры являются нулевыми значениями + */ + public static String getFioOf(Teacher teacher) { + // Инициализируем StringBuilder для хранения результата. + StringBuilder result = new StringBuilder(); + + // Проверяем, является ли фамилия нулевым значением. + if (!Stringer.checkForEmpty(teacher.getSecondName())) { + // Если фамилия не является нулевым значением, то добавляем ее в строку. + result.append(teacher.getSecondName()); + } else { + // Если фамилия является нулевым значением, то добавляем "Нет" в строку. + result.append(not); + } + + // Проверяем, является ли имя нулевым значением. + if (!Stringer.checkForEmpty(teacher.getFirstName())) { + // Если имя не является нулевым значением, то добавляем пробел и имя в строку. + result.append(" " + teacher.getFirstName()); + } else { + // Если имя является нулевым значением, то добавляем "Нет" в строку. + result.append(" " + not); + } + + // Проверяем, является ли отчество нулевым значением. + if (!Stringer.checkForEmpty(teacher.getLastName())) { + // Если отчество не является нулевым значением, то добавляем пробел и отчество в строку. + result.append(" " + teacher.getLastName()); + } else { + // Если отчество является нулевым значением, то добавляем "Нет" в строку. + result.append(" " + not); + } + + // Возвращаем объединенную строку или строку "Нет Нет Нет", если все входящие параметры + // являются нулевыми значениями. + return result.toString().trim(); + } + + /** + * Извлекает фамилию из строки, содержащей полное имя (ФИО). + * Строка ФИО может содержать: + * - пустую строку (null, empty, "") + * - одно слово (фамилия, "Нет", односложный комментарий) + * - два слова (фамилия, имя, "Нет") + * - три слова (фамилия, имя, отчество, "Нет") + * - четыре слова (фамилия, имя, отчество, постфикс отчества, комментарии) + * - и более. + * + * Все слова начиная с пятого однозначно являются бесполезным наполнением, однако + * такие слова должны включены в строку отчества, если они есть. + * + * Строка может быть извлечена из xlsx файла + * или сгенерирована из данныых содержащихся в базе данных + * + * @param fio строка, содержащая ФИО + * @return строка, содержащая первое слово из fio которое является фамилией или содержит слово "Нет" + */ + public static String getSecondNameOf(String fio) { + // Инициализируем StringBuilder для хранения результата. + StringBuilder result = new StringBuilder(); + + // Проверяем, является ли строка null, пустой строкой или состоит только из пробелов. + if (Stringer.checkForEmpty(fio)) { + // Если строка является нулевым значением, то добавляем "Нет" в строку. + result.append(not); + } else { + //убираем пробелы в начале и в конце строки + fio = fio.trim(); + + // Разделяем строку на пробелы и возвращаем первую часть, которая как ожидается является фамилией + result.append(fio.split(" ")[0]); + } + + // Возвращаем первое слово в строке или строку "Нет" + return result.toString().trim(); + } + + /** + * Извлекает имя (фамилия, имя или отчество) из строки, предположительно содержащей только одно слово. + * - проверяет не пустая ли строка, если нет, то добавляет "Нет" + * - очищает строку от лишних пробельных символов + * - возвращает имя или "Нет" + * + * @param name + * @return name + */ + public static String getNameOf(String name) { + // Проверяем, является ли строка null, пустой строкой или состоит только из пробелов. + if (Stringer.checkForEmpty(name)) { + // Если строка является нулевым значением, то добавляем "Нет" в строку. + return not; + } else { + //очищаем строку + name = Stringer.clear(name); + // возвращаем имя + return name; + } + } + + /** + * Извлекает имя из строки, содержащей полное имя (ФИО). + * + * @param fio строка, содержащая ФИО + * @return строка, содержащая второе слово из fio которое является именем или содержит слово "Нет" + */ + public static String getFirstNameOf(String fio) { + // Создаем StringBuilder для хранения результата + StringBuilder result = new StringBuilder(); + + // Проверяем, является ли строка null, пустой строкой или состоит только из пробелов. + if (Stringer.checkForEmpty(fio)) { + // Если строка является нулевым значением, то добавляем "Нет" в строку. + result.append(not); + } else { + //убираем излишние пробельные символы + fio = Stringer.clear(fio); + + // Разбиваем строку по пробелам и пишем слова в массив + String[] strings = fio.split(" "); + + // Если массив содержит два или более слов, то второе слово является именем. + if (strings.length > 1) { + // Пишем второе слово в результат + result.append(strings[1].trim()); + }else { + // Если массив содержит только одно слово, то добавляем "Нет" в строку. + result.append(not); + } + } + // Возвращаем второе слово в строке или строку "Нет" + return result.toString().trim(); + } + + /** + * Извлекает отчество из строки, содержащей полное имя (ФИО). + * @param fio строка, содержащая ФИО + * @return строка, содержащая третье слово из fio которое является отчеством\ + * или содержит слово "Нет" + * или содержит все слова, содержащиеся в ФИО, за исключением первых двух + */ + public static String getLastNameOf(String fio) { + // Создаем StringBuilder для хранения результата + StringBuilder result = new StringBuilder(); + + // Проверяем, является ли строка null, пустой строкой или состоит только из пробелов. + if (Stringer.checkForEmpty(fio)) { + // Если строка является нулевым значением, то добавляем "Нет" в строку. + result.append(not); + } else { + //убираем пробелы в начале и в конце строки + fio = fio.trim(); + fio = Stringer.clear(fio); + + String[] strings = fio.split(" "); + if (strings.length > 2) { + // Пишем третье и последующие слова в результат + for (int i = 2; i < strings.length; i++) { + result.append(strings[i]).append(" "); + } + } else { + // Если массив содержит только два или менее слов, то добавляем "Нет" в строку. + result.append(not); + } + } + // Возвращаем строку ФИО без первых двух слов с удаленными лишними пробелами + return result.toString().trim(); + } +} diff --git a/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Stringer.java b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Stringer.java new file mode 100644 index 0000000..5005594 --- /dev/null +++ b/resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Stringer.java @@ -0,0 +1,54 @@ +package ru.molokoin.resourceserviceapi.teh.strings; + +/** + * Класс для работы со строками + */ +public class Stringer { + + /** + * Проверяет, является ли переданная строка null, пустой строкой или состоит только из пробелов. + * + * @param str Строка для проверки + * @return True если строка является null, пустой строкой или состоит только из пробелов + * False в противном случае + */ + public static Boolean checkForEmpty(String str) { + // Check if the string is null + if (str == null) { + return true; + } + // Check if the string is empty or consists only of whitespace characters + if (str.isEmpty() || str.trim().isEmpty()) { + return true; + } + // The string is not null, not empty and does not consist only of whitespace characters + return false; + } + + /** + * Удаляет регулярным выражением лишние пробельные символы из строки. + * + * Заменяет знаки переноса строки на пробелы с помощью использования регулярного выражения + * \s+ - пробелы (и все ниже приведенные пробельные символы) + * \t - табуляция + * \v - вертикальная табуляция + * \r - перенос в начало строки + * \n - перенос строки + * \f - форматированный перенос строки + * + * Осавляет по одному пробелу между словами, если слов больше одного + * Возвращает пустую строку, если получена строка null + * + * @param string строка для обработки + * @return строку без лишних пробелов или пустую строку + */ + public static String clear(String string) { + // Проверяем, не является ли строка null. Если строка null, возвращаем пустую строку. + if (string == null) { + return ""; + } + + // Удаляем лишние пробелы из строки. + return string.replaceAll("\\s+", " ").trim(); + } +}