Browse Source

api in work

master
esoe 2 months ago
parent
commit
5961362ead
  1. 70
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/BuildingController.java
  2. 8
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/CourseController.java
  3. 163
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/OrganizationController.java
  4. 138
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramController.java
  5. 64
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramCretareaController.java
  6. 195
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/TeacherController.java
  7. 2
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/ProgramCretarea.java
  8. 38
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/Teacher.java
  9. 27
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Base.java
  10. 30
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Buildings.java
  11. 27
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Cretareas.java
  12. 32
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Organizations.java
  13. 30
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Programs.java
  14. 30
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/enums/Teachers.java
  15. 7
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/BuildingRepository.java
  16. 2
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/CourseRepositoryFace.java
  17. 15
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/OrganizationFace.java
  18. 82
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/OrganizationRepository.java
  19. 6
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramCretareaRepository.java
  20. 23
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramRepository.java
  21. 12
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramRepositoryFace.java
  22. 35
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/TeacherRepository.java
  23. 14
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/TeachersRepositoryFace.java
  24. 39
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/BuildingService.java
  25. 128
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/OrganizationService.java
  26. 14
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/ProgramCretareaService.java
  27. 82
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/ProgramService.java
  28. 186
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/services/TeacherService.java
  29. 51
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Arrayer.java
  30. 16
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Dater.java
  31. 237
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Naimer.java
  32. 54
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/teh/strings/Stringer.java

70
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.Page;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.data.mapping.PropertyReferenceException;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@ -23,56 +21,62 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import ru.molokoin.resourceserviceapi.entities.Building; 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; import org.springframework.web.bind.annotation.RequestParam;
@RestController @RestController
@RequestMapping(path = "/building", consumes = {"*/*"}) @RequestMapping(path = "/api/building", consumes = {"*/*"})
public class BuildingController { public class BuildingController {
@Autowired @Autowired
private BuildingRepository repo; private BuildingService repo;
public BuildingController(BuildingRepository repo) { public BuildingController(BuildingService repo) {
this.repo = repo; this.repo = repo;
} }
@GetMapping("/pages") @GetMapping("/pages")
public Page<Building> page(@RequestParam(name = "page", required = false) Integer pageNo, public Page<Building> page(@RequestParam(name = "page", defaultValue = "0") Integer pageNo,
@RequestParam(name = "size", required = false) Long pageSize, @RequestParam(name = "size", defaultValue = "10") Integer pageSize,
@RequestParam(name = "sortBy", required = false) String sortBy) { @RequestParam(name = "sortBy", defaultValue = "id") String sortBy) {
if (pageNo == null || pageNo < 0) pageNo = 0; if (!Base.BUILDINGS.contains(sortBy)) sortBy = "id";
if (pageSize == null || pageSize < 0) pageSize = repo.count(); return repo.findAll(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)));
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);
}
} }
@GetMapping("/count") @GetMapping("/count")
public ResponseEntity<Long> getСretareasCount(){ public ResponseEntity<Long> count(){
return new ResponseEntity<>(repo.count(), HttpStatus.OK); return new ResponseEntity<>(repo.count(), HttpStatus.OK);
} }
@GetMapping("") @GetMapping("")
public ResponseEntity<?> building(@RequestParam(name="id", required = false) Long id, public Page<Building> building(@RequestParam(name="id", defaultValue = "0", required = false) Long id,
@RequestParam(name="nameShort", required = false) String nameShort){ @RequestParam(name="nameShort", defaultValue = "", required = false) String nameShort,
boolean exists = false; @RequestParam(name="nameFull", defaultValue = "", required = false) String nameFull,
if(id != null && repo.existsById(id)){ @RequestParam(name="codeShort", defaultValue = "", required = false) String codeShort,
return new ResponseEntity<>(repo.findById(id), HttpStatus.OK); @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)){ if (codeFull != null) {
return new ResponseEntity<>(repo.findByNameShort(nameShort), HttpStatus.OK); 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") @GetMapping("/exists")
@ -152,7 +156,7 @@ public class BuildingController {
@DeleteMapping("/delete") @DeleteMapping("/delete")
public ResponseEntity<Boolean> delete(@RequestParam(name="id", required = true) Long id){ public ResponseEntity<Boolean> delete(@RequestParam(name="id", required = true) Long id){
Boolean success = false; Boolean success = false;
Building pc = repo.findById(id).get(); Building pc = repo.findById(id);
try{ try{
repo.delete(pc); repo.delete(pc);
success = true; success = true;

8
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/CourseController.java

@ -31,7 +31,7 @@ public class CourseController {
@GetMapping("/course/{id}") @GetMapping("/course/{id}")
public ResponseEntity<?> getCourseByID(@PathVariable Integer 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", @PostMapping(path = "/course/create",
@ -46,7 +46,7 @@ public class CourseController {
consumes = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE) produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> updateCourse(@PathVariable Integer id, @RequestBody Course course) { public ResponseEntity<?> updateCourse(@PathVariable Integer id, @RequestBody Course course) {
Course c = repo.findCourseById(id); Course c = repo.findById(id);
c.setPlace(course.getPlace()); c.setPlace(course.getPlace());
c.setStartDate(course.getStartDate()); c.setStartDate(course.getStartDate());
c.setProtocolDate(course.getProtocolDate()); c.setProtocolDate(course.getProtocolDate());
@ -56,12 +56,12 @@ public class CourseController {
c.setProgram(course.getProgram()); c.setProgram(course.getProgram());
c.setBuilding(course.getBuilding()); c.setBuilding(course.getBuilding());
repo.save(c); repo.save(c);
return new ResponseEntity<>(repo.findCourseById(id), HttpStatus.CREATED); return new ResponseEntity<>(repo.findById(id), HttpStatus.CREATED);
} }
@DeleteMapping("/course/delete/{id}") @DeleteMapping("/course/delete/{id}")
public ResponseEntity<String> deleteCourse(@PathVariable Long id){ public ResponseEntity<String> deleteCourse(@PathVariable Long id){
Course c = repo.findCourseById(id); Course c = repo.findById(id).get();
System.out.println(c.toString()); System.out.println(c.toString());
repo.delete(c); repo.delete(c);
return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK); return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK);

163
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/OrganizationController.java

@ -1,8 +1,16 @@
package ru.molokoin.resourceserviceapi.controllers.api; package ru.molokoin.resourceserviceapi.controllers.api;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; 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.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@ -15,31 +23,76 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import ru.molokoin.resourceserviceapi.entities.Organization; 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 @RestController
@RequestMapping(path = "/", consumes = {"*/*"}) @RequestMapping(path = "/api/organization", consumes = {"*/*"})
public class OrganizationController { public class OrganizationController {
@Autowired @Autowired
private OrganizationFace repo; private OrganizationService repo;
/** public OrganizationController(OrganizationService repo) {
* Получение списа организаций this.repo = repo;
* @return
*/
@GetMapping("/organization/list")
public ResponseEntity<List<Organization>> getOrganizations(){
return new ResponseEntity<>(repo.findAll(), HttpStatus.OK);
} }
/** @GetMapping("/pages")
* Получение сведений об организации по id public Page<Organization> page(
* @param id @RequestParam(name = "page", defaultValue = "0") Integer pageNo,
* @return @RequestParam(name = "size", defaultValue = "10") Integer pageSize,
*/ @RequestParam(name = "sortBy", defaultValue = "id") String sortBy) {
@GetMapping("/organization/{id}")
public ResponseEntity<?> getOrganizationByID(@PathVariable Integer id){ //проверка на некорректные параметры сортировки
return new ResponseEntity<>(repo.findOrganizationById(id), HttpStatus.OK); if (!Base.ORGANIZATIONS.contains(sortBy)) sortBy = "id";
return repo.findAll(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)));
}
@GetMapping("/count")
public ResponseEntity<Long> count(){
return new ResponseEntity<>(repo.count(), HttpStatus.OK);
}
@GetMapping("")
public Page<Organization> 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<Boolean> exists(@RequestBody Organization organization) {
return new ResponseEntity<>(repo.exists(organization), HttpStatus.OK);
}
@GetMapping("/absent")
public Page<Organization> absent(@RequestBody List<Organization> organizations) {
List<Organization> absent = new ArrayList<>();
//проверяем наличие организации в базе
for (Organization organization : organizations) {
if (!repo.exists(organization)) {
//если не найдена - добавляем в список
absent.add(organization);
}
}
//сортируем наименования по алфавиту
absent.sort(Comparator.comparing(Organization::getNameFull));
Page<Organization> absentPage = new PageImpl<>(absent);
return absentPage;
} }
/** /**
@ -47,7 +100,7 @@ public class OrganizationController {
* @param organization * @param organization
* @return * @return
*/ */
@PostMapping(path = "/organization/create", @PostMapping(path = "/create",
consumes = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE) produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> saveOrganization(@RequestBody Organization organization) { public ResponseEntity<?> saveOrganization(@RequestBody Organization organization) {
@ -61,29 +114,85 @@ public class OrganizationController {
* @param organization * @param organization
* @return * @return
*/ */
@PostMapping(path = "/organization/update/{id}", @PostMapping(path = "/update/{id}",
consumes = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE) produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> updateOrganization(@PathVariable Integer id, @RequestBody Organization organization) { public ResponseEntity<?> updateOrganization(@PathVariable Integer id, @RequestBody Organization organization) {
Organization org = repo.findOrganizationById(id); Organization org = repo.findById(id);
org.setOwnership(organization.getOwnership()); org.setOwnership(organization.getOwnership());
org.setNameShort(organization.getNameShort()); org.setNameShort(organization.getNameShort());
org.setNameFull(organization.getNameFull()); org.setNameFull(organization.getNameFull());
org.setType(organization.getType()); org.setType(organization.getType());
org.setInn(organization.getInn()); org.setInn(organization.getInn());
repo.save(org); repo.save(org);
return new ResponseEntity<>(repo.findOrganizationById(id), HttpStatus.CREATED); 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.findById(id), HttpStatus.CREATED);
}
/** /**
* Удаление записи об организации * Удаление записи об организации
* @param id * @param id
* @return * @return
*/ */
@DeleteMapping("/organization/delete/{id}") @DeleteMapping("/delete/{id}")
public ResponseEntity<String> deleteOrganization(@PathVariable Long id){ public ResponseEntity<Boolean> deleteOrganization(@PathVariable Long id){
Organization org = repo.findOrganizationById(id); Boolean success = false;
repo.delete(org); Organization t = repo.findById(id);
return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK); try{
repo.delete(t);
success = true;
} catch (Exception e){
success = false;
}
return new ResponseEntity<>(success, HttpStatus.OK);
}
@DeleteMapping("/delete")
public ResponseEntity<Boolean> 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<List<Organization>> 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);
// }
} }

138
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramController.java

@ -1,8 +1,13 @@
package ru.molokoin.resourceserviceapi.controllers.api; package ru.molokoin.resourceserviceapi.controllers.api;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; 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.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; 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.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import ru.molokoin.resourceserviceapi.entities.Program; 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 @RestController
@RequestMapping(path = "/", consumes = {"*/*"}) @RequestMapping(path = "/api/program", consumes = {"*/*"})
public class ProgramController { public class ProgramController {
@Autowired @Autowired
private ProgramRepositoryFace repo; private ProgramService repo;
@GetMapping("/program/list") public ProgramController(ProgramService repo) {
public ResponseEntity<List<Program>> getPrograms(){ this.repo = repo;
return new ResponseEntity<>(repo.findAll(), HttpStatus.OK);
} }
@GetMapping("/program/{id}") @GetMapping("/pages")
public ResponseEntity<?> getProgramByID(@PathVariable Integer id){ public Page<Program> page(@RequestParam(name = "page", defaultValue = "0") int pageNo,
return new ResponseEntity<>(repo.findProgramById(id), HttpStatus.OK); @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)));
}
@GetMapping("/count")
public ResponseEntity<Long> count(){
return new ResponseEntity<>(repo.count(), HttpStatus.OK);
}
@GetMapping("")
public Page<Program> 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<Program>(), PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), 0);
} }
@PostMapping(path = "/program/create",
@PostMapping(path = "/create",
consumes = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE) produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> saveProgram(@RequestBody Program program) { public ResponseEntity<?> saveProgram(@RequestBody Program program) {
@ -42,25 +116,57 @@ public class ProgramController {
return new ResponseEntity<>(program, HttpStatus.CREATED); return new ResponseEntity<>(program, HttpStatus.CREATED);
} }
@PutMapping(path = "/program/update/{id}", @PutMapping(path = "/update/{id}",
consumes = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE) produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> updateProgram(@PathVariable Integer id, @RequestBody Program program) { public ResponseEntity<?> updateProgram(@PathVariable Long id, @RequestBody Program program) {
Program p = repo.findProgramById(id); Program p = repo.findById(id);
p.setName(program.getName()); p.setName(program.getName());
p.setLenght(program.getLenght()); p.setLenght(program.getLenght());
p.setStudyDirection(program.getStudyDirection()); p.setStudyDirection(program.getStudyDirection());
p.setPrice(program.getPrice()); p.setPrice(program.getPrice());
p.setCretarea(program.getCretarea()); p.setCretarea(program.getCretarea());
repo.save(p); repo.save(p);
return new ResponseEntity<>(repo.findProgramById(id), HttpStatus.CREATED); return new ResponseEntity<>(repo.findById(id), HttpStatus.CREATED);
} }
@DeleteMapping("/program/delete/{id}") @PutMapping(path = "/update",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
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.findById(id), HttpStatus.CREATED);
}
@DeleteMapping("/delete/{id}")
public ResponseEntity<String> deleteProgram(@PathVariable Long id){ public ResponseEntity<String> deleteProgram(@PathVariable Long id){
Program p = repo.findProgramById(id); Program p = repo.findById(id);
System.out.println(p.toString()); System.out.println(p.toString());
repo.delete(p); repo.delete(p);
return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK); return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK);
} }
@DeleteMapping("/delete")
public ResponseEntity<String> 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<List<Program>> getPrograms(){
// return new ResponseEntity<>(repo.findAll(), HttpStatus.OK);
// }
@GetMapping("/{id}")
public ResponseEntity<?> getProgramByID(@PathVariable Long id){
return new ResponseEntity<>(repo.findById(id), HttpStatus.OK);
}
} }

64
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/ProgramCretareaController.java

@ -1,11 +1,11 @@
package ru.molokoin.resourceserviceapi.controllers.api; package ru.molokoin.resourceserviceapi.controllers.api;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest; 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 org.springframework.web.bind.annotation.RestController;
import ru.molokoin.resourceserviceapi.entities.ProgramCretarea; import ru.molokoin.resourceserviceapi.entities.ProgramCretarea;
import ru.molokoin.resourceserviceapi.enums.Base;
import ru.molokoin.resourceserviceapi.repositories.ProgramCretareaRepository; import ru.molokoin.resourceserviceapi.repositories.ProgramCretareaRepository;
@RestController @RestController
@RequestMapping(path = "/cretarea", consumes = {"*/*"}) @RequestMapping(path = "/api/cretarea", consumes = {"*/*"})
public class ProgramCretareaController { public class ProgramCretareaController {
@Autowired @Autowired
private final ProgramCretareaRepository repo; private final ProgramCretareaRepository repo;
@ -53,25 +54,14 @@ public class ProgramCretareaController {
*/ */
@GetMapping("/pages") @GetMapping("/pages")
public Page<ProgramCretarea> public Page<ProgramCretarea>
page(@RequestParam(name = "page", required = false) Integer pageNo, page(@RequestParam(name = "page", defaultValue = "0") Integer pageNo,
@RequestParam(name = "size", required = false) Long pageSize, @RequestParam(name = "size", defaultValue = "10") Integer pageSize,
@RequestParam(name = "sortBy", required = false) String sortBy){ @RequestParam(name = "sortBy", defaultValue = "id") String sortBy){
//проверка на некоректные параметры сортировки
if (!Base.CRETAREAS.contains(sortBy)) sortBy = "id";
if (pageNo == null || pageNo < 0) pageNo = 0; return repo.findAll(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)));
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);
}
} }
/** /**
@ -85,29 +75,39 @@ public class ProgramCretareaController {
} }
/** /**
* Получение объекта * Получение страницы с критериями, удовлетворяющими запросу
* - по id (приоритетный параметр) * - по id (приоритетный параметр)
* - по nameShort (проверяет при отсутствии id в запросе) * - по nameShort (проверяет при отсутствии id в запросе)
* - по name
* *
* При вызове запроса нужно быть готовым получить либо булевый ответ, либо объект Критерия
* Метод может быть использован для проверки наличия Критерия в базе
* *
* @param id * @param id
* @param nameShort * @param nameShort
* @return false * @return Page<ProgramCretarea>
* - В случае указания отсутствующих/не верных параметров
* - в случае отсутствия параметров
*/ */
@GetMapping("") @GetMapping("")
public ResponseEntity<?> cretarea(@RequestParam(name="id", required = false) Long id, @RequestParam(name="nameShort", required = false) String nameShort){ public Page<ProgramCretarea> cretarea(@RequestParam(name="id", defaultValue = "0") Long id,
boolean exists = false; @RequestParam(name="nameShort", defaultValue = "") String nameShort,
if(id != null && repo.existsById(id)){ @RequestParam(name="name", defaultValue = "") String name,
return new ResponseEntity<>(repo.findCretareaById(id), HttpStatus.OK); @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)){ //если name не пустой, то ищем по name
return new ResponseEntity<>(repo.findCretareaByNameShort(nameShort), HttpStatus.OK); 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<ProgramCretarea>(), PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), 0);
} }
/** /**

195
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/api/TeacherController.java

@ -1,8 +1,14 @@
package ru.molokoin.resourceserviceapi.controllers.api; package ru.molokoin.resourceserviceapi.controllers.api;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; 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.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; 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.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import ru.molokoin.resourceserviceapi.entities.Teacher; 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.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -22,27 +31,131 @@ import org.springframework.web.bind.annotation.RequestBody;
* - запросы к страницам по id, которых нет в базе * - запросы к страницам по id, которых нет в базе
*/ */
@RestController @RestController
@RequestMapping(path = "/", consumes = {"*/*"}) @RequestMapping(path = "/api/teacher", consumes = {"*/*"})
public class TeacherController { public class TeacherController {
@Autowired @Autowired
private TeachersRepositoryFace repo; private TeacherService repo;
public TeacherController(TeacherService repo) {
this.repo = repo;
}
@GetMapping("/pages")
public Page<Teacher> page(@RequestParam(name = "page", defaultValue = "0") int pageNo,
@RequestParam(name = "size", defaultValue = "10") int pageSize,
@RequestParam(name = "sortBy", defaultValue = "id") String sortBy) {
@GetMapping("/teacher/list") //проверка на некоректные параметры сортировки
public ResponseEntity<List<Teacher>> getTeachers(){ if (!Base.TEACHERS.contains(sortBy)) sortBy = "id";
return new ResponseEntity<>(repo.findAll(), HttpStatus.OK); return repo.findAll(PageRequest.of(pageNo, pageSize, Sort.by(sortBy)));
} }
@GetMapping("/teacher/{id}") @GetMapping("/count")
public ResponseEntity<?> getTeacherByID(@PathVariable Integer id){ public ResponseEntity<Long> count(){
return new ResponseEntity<>(repo.findTeacherById(id), HttpStatus.OK); return new ResponseEntity<>(repo.count(), HttpStatus.OK);
}
/**
* Получение из базы объектов Преподаватель в виде страницы для отображения (page)
* @param id
* @param employeeId
* @param snils
* @param fio
* @param secondName
* @param firstName
* @param lastName
* @return Page<Teacher>
*/
@GetMapping("")
public Page<Teacher> 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<Teacher>(), PageRequest.of(pageNo, pageSize, Sort.by(sortBy)), 0);
} }
/** /**
* Создание запис о новом преподавателе * Проверка наличия записи о преподавателе в базе
* - по ФИО
* - по СНИЛС
* - по ID сотрудника
*
* @param teacher * @param teacher
* @return * @return
*/ */
@PostMapping(path = "/teacher/create", @GetMapping("/exists")
public ResponseEntity<Boolean> exists(@RequestBody Teacher teacher) {
return new ResponseEntity<>(repo.exists(teacher), HttpStatus.OK);
}
@GetMapping("/absent")
public Page<Teacher> absent(@RequestBody List<Teacher> teachers) {
List<Teacher> absent = new ArrayList<>();
//проверяем наличие преподавателя в базе
for (Teacher teacher : teachers) {
if (!repo.exists(teacher)) {
//если не найден - добавляем в список
absent.add(teacher);
}
}
//сортируем краткие наименования по алфавиту
absent.sort(Comparator.comparing(Teacher::getSecondName));
Page<Teacher> absentPage = new PageImpl<>(absent);
return absentPage;
}
/**
* Создание записи о новом преподавателе
* @param teacher
* @return
*/
@PostMapping(path = "/create",
consumes = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE) produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> saveTeacher(@RequestBody Teacher teacher) { public ResponseEntity<?> saveTeacher(@RequestBody Teacher teacher) {
@ -50,25 +163,67 @@ public class TeacherController {
return new ResponseEntity<>(teacher, HttpStatus.CREATED); return new ResponseEntity<>(teacher, HttpStatus.CREATED);
} }
@PostMapping(path = "/teacher/update/{id}", @PostMapping(path = "/update/{id}",
consumes = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE) produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> updateTeacher(@PathVariable Integer id, @RequestBody Teacher teacher) { public ResponseEntity<Teacher> updateTeacher(@PathVariable Integer id, @RequestBody Teacher teacher) {
Teacher t = repo.findTeacherById(id); Teacher t = repo.findById(id);
t.setFirstName(teacher.getFirstName()); t.setFirstName(teacher.getFirstName());
t.setSecondName(teacher.getSecondName()); t.setSecondName(teacher.getSecondName());
t.setLastName(teacher.getLastName()); t.setLastName(teacher.getLastName());
t.setEmployeeId(teacher.getEmployeeId()); t.setEmployeeId(teacher.getEmployeeId());
t.setSnils(teacher.getSnils()); t.setSnils(teacher.getSnils());
repo.save(t); repo.save(t);
return new ResponseEntity<>(repo.findTeacherById(id), HttpStatus.CREATED); return new ResponseEntity<>(repo.findById(id), HttpStatus.CREATED);
} }
@DeleteMapping("/teacher/delete/{id}") @PostMapping(path = "/update",
public ResponseEntity<String> deleteTecher(@PathVariable Long id){ consumes = MediaType.APPLICATION_JSON_VALUE,
Teacher t = repo.findTeacherById(id); produces = MediaType.APPLICATION_JSON_VALUE)
repo.delete(t); public ResponseEntity<Teacher> update(@RequestParam(name="id", required = true) Integer id, @RequestBody Teacher teacher) {
return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK); 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);
} }
@DeleteMapping("/delete/{id}")
public ResponseEntity<Boolean> 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("/delete")
public ResponseEntity<Boolean> 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<List<Teacher>> getTeachers(){
// return new ResponseEntity<>(repo.findAll(), HttpStatus.OK);
// }
// @GetMapping("/{id}")
// public ResponseEntity<?> getTeacherByID(@PathVariable Integer id){
// return new ResponseEntity<>(repo.findById(id), HttpStatus.OK);
// }
} }

2
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/ProgramCretarea.java

@ -26,9 +26,7 @@ public class ProgramCretarea {
@Id @Id
@GeneratedValue(strategy=GenerationType.AUTO) @GeneratedValue(strategy=GenerationType.AUTO)
private long id; private long id;
// @Column(length=500)
private String name;//Наименование private String name;//Наименование
// @Column(length=5)
private String nameShort;//Наименование : сокращенно private String nameShort;//Наименование : сокращенно
/** /**

38
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/Teacher.java

@ -1,6 +1,5 @@
package ru.molokoin.resourceserviceapi.entities; package ru.molokoin.resourceserviceapi.entities;
import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType; import jakarta.persistence.GenerationType;
@ -8,6 +7,7 @@ import jakarta.persistence.Id;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; 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){ public Teacher(String second_name, String first_name, String last_name){
this.secondName = second_name; setSecondName(second_name);
this.firstName = first_name; setFirstName(first_name);
this.lastName = last_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());
} }
} }

27
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<String> titles;
Base(List<String> titles) {
this.titles = titles;
}
public boolean contains(String title) {
return titles.contains(title);
}
}

30
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<String> getTitles() {
return Arrays.stream(Buildings.values())
.map(Buildings::column)
.collect(Collectors.toList());
}
}

27
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<String> getTitles() {
return Arrays.stream(Cretareas.values())
.map(Cretareas::column)
.collect(Collectors.toList());
}
public String column() {
return column;
}
}

32
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<String> getTitles() {
return Arrays.stream(Organizations.values())
.map(Organizations::column)
.collect(Collectors.toList());
}
public String column() {
return title;
}
}

30
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<String> getTitles() {
return Arrays.stream(Programs.values())
.map(Programs::column)
.collect(Collectors.toList());
}
}

30
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<String> getTitles() {
return Arrays.stream(Teachers.values())
.map(Teachers::column)
.collect(Collectors.toList());
}
public String column() {
return column;
}
}

7
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/BuildingRepository.java

@ -1,5 +1,7 @@
package ru.molokoin.resourceserviceapi.repositories; 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.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@ -10,4 +12,9 @@ public interface BuildingRepository extends JpaRepository<Building, Long>{
Building findById(long id); Building findById(long id);
Building findByNameShort(String nameShort); Building findByNameShort(String nameShort);
Boolean existsByNameShort(String nameShort); Boolean existsByNameShort(String nameShort);
Page<Building> findById(PageRequest of, Long id);
Page<Building> findByNameShort(PageRequest of, String nameShort);
Page<Building> findByNameFull(PageRequest of, String nameFull);
Page<Building> findByCodeShort(PageRequest of, String codeShort);
Page<Building> findByCodeFull(PageRequest of, String codeFull);
} }

2
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<Course, Long>{ public interface CourseRepositoryFace extends ListCrudRepository<Course, Long>{
List<Course> findAll(); List<Course> findAll();
Course findCourseById(long id); Course findById(long id);
} }

15
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/OrganizationFace.java

@ -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<Organization, Long>{
List<Organization> findAll();
Organization findOrganizationById(long id);
}

82
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<Organization, Long>{
/**
* Найти все организации
*/
List<Organization> findAll();
/**
* Найти организацию по id
* @param id
* @return
*/
Organization findById(long id);
Boolean existsById(long id);
/**
* Найти организацию по форме собственности (АО/ООО/итд ...)
* @param ownership
* @return
*/
List <Organization> 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 <Organization> findByType(String type);
Boolean existsByType(String type);
/**
* Найти организацию по ИНН
* @param inn
* @return
*/
Organization findByInn(String inn);
Boolean existsByInn(String inn);
Page<Organization> findById(PageRequest of, long id);
Page<Organization> findByInn(PageRequest of, String inn);
Page<Organization> findByNameFull(PageRequest of, String nameFull);
Page<Organization> findByNameShort(PageRequest of, String nameShort);
Page<Organization> findByType(PageRequest of, String type);
Page<Organization> findByOwnership(PageRequest of, String ownership);
// Boolean exists(Organization organization);
}

6
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramCretareaRepository.java

@ -1,8 +1,11 @@
package ru.molokoin.resourceserviceapi.repositories; 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.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import ru.molokoin.resourceserviceapi.entities.Program;
import ru.molokoin.resourceserviceapi.entities.ProgramCretarea; import ru.molokoin.resourceserviceapi.entities.ProgramCretarea;
@Repository @Repository
@ -10,4 +13,7 @@ public interface ProgramCretareaRepository extends JpaRepository<ProgramCretarea
ProgramCretarea findCretareaById(long id); ProgramCretarea findCretareaById(long id);
ProgramCretarea findCretareaByNameShort(String nameShort); ProgramCretarea findCretareaByNameShort(String nameShort);
Boolean existsByNameShort(String nameShort); Boolean existsByNameShort(String nameShort);
Page<ProgramCretarea> findById(PageRequest of, Long id);
Page<ProgramCretarea> findByNameShort(PageRequest of, String nameShort);
Page<ProgramCretarea> findByName(PageRequest of, String name);
} }

23
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<Program, Long>{
List<Program> findAll();
Program findById(long id);
Page<Program> findById(PageRequest of, Long id);
Page<Program> findByName(PageRequest of, String name);
Page<Program> findByLenght(PageRequest of, Integer lenght);
Page<Program> findByStudyDirection(PageRequest of, String studyDirection);
Page<Program> findByPrice(PageRequest of, Integer price);
Page<Program> findByCretarea(PageRequest of, ProgramCretarea pc);
}

12
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/ProgramRepositoryFace.java

@ -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<Program, Long>{
List<Program> findAll();
Program findProgramById(long id);
}

35
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<Teacher, Long>{
List<Teacher> findAll();
Teacher findById(long id);
Boolean existsById(long id);
List <Teacher> findBySecondNameAndFirstNameAndLastName(String firstName, String secondName, String lastName);
Boolean existsBySecondNameAndFirstNameAndLastName(String secondName, String firstName, String lastName);
List<Teacher> findBySecondName(String secondName);
Boolean existsBySecondName(String secondName);
List<Teacher> findByEmployeeId(String employeeId);
Boolean existsByEmployeeId(String employeeId);
List<Teacher> findBySnils(String snils);
Boolean existsBySnils(String snils);
// boolean existsByFIO(String secondName, String firstName, String lastName);
Page<Teacher> findById(PageRequest of, long id);
Page<Teacher> findByIdAndSecondNameAndFirstNameAndLastNameAndEmployeeIdAndSnils(PageRequest of, long id, String secondName,
String firstName, String lastName, String employeeId, String snils, String fio);
Page<Teacher> findBySnils(PageRequest of, String snils);
Page<Teacher> findByEmployeeId(PageRequest of, String employeeId);
Page<Teacher> findBySecondNameAndFirstNameAndLastName(PageRequest of, String secondNameOf, String firstNameOf,
String lastNameOf);
Page<Teacher> findBySecondName(PageRequest of, String secondName);
Page<Teacher> findBySecondNameAndFirstName(PageRequest of, String secondName, String firstName);
}

14
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/TeachersRepositoryFace.java

@ -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<Teacher, Long>{
List<Teacher> findAll();
Teacher findTeacherById(long id);
}

39
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 java.util.List;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import ru.molokoin.resourceserviceapi.entities.Building; import ru.molokoin.resourceserviceapi.entities.Building;
import ru.molokoin.resourceserviceapi.repositories.BuildingRepository; import ru.molokoin.resourceserviceapi.repositories.BuildingRepository;
@Service
public class BuildingService { public class BuildingService {
private final BuildingRepository repo; private final BuildingRepository repo;
@ -34,4 +37,40 @@ public class BuildingService {
public Boolean existsByNameShort(String nameShort) { public Boolean existsByNameShort(String nameShort) {
return repo.existsByNameShort(nameShort); return repo.existsByNameShort(nameShort);
} }
public Long count() {
return repo.count();
}
public Page<Building> findById(PageRequest of, Long id) {
return repo.findById(of, id);
}
public Page<Building> findByNameShort(PageRequest of, String nameShort) {
return repo.findByNameShort(of, nameShort);
}
public Page<Building> findByNameFull(PageRequest of, String nameFull) {
return repo.findByNameFull(of, nameFull);
}
public Page<Building> findByCodeShort(PageRequest of, String codeShort) {
return repo.findByCodeShort(of, codeShort);
}
public Page<Building> 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);
}
} }

128
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<Organization> findAll() {
return repo.findAll();
}
public Organization findById(long id) {
return repo.findById(id);
}
public Boolean existsById(long id) {
return repo.existsById(id);
}
public List<Organization> findByType(String type) {
return repo.findByType(type);
}
public List<Organization> 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<Organization> 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<Organization> findById(PageRequest of, long id) {
return repo.findById(of, id);
}
public Page<Organization> findByInn(PageRequest of, String inn) {
return repo.findByInn(of, inn);
}
public Page<Organization> findByNameFull(PageRequest of, String nameFull) {
return repo.findByNameFull(of, nameFull);
}
public Page<Organization> findByNameShort(PageRequest of, String nameShort) {
return repo.findByNameShort(of, nameShort);
}
public Page<Organization> findByType(PageRequest of, String type) {
return repo.findByType(of, type);
}
public Page<Organization> findByOwnership(PageRequest of, String ownership) {
return repo.findByOwnership(of, ownership);
}
}

14
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.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import ru.molokoin.resourceserviceapi.entities.ProgramCretarea; import ru.molokoin.resourceserviceapi.entities.ProgramCretarea;
import ru.molokoin.resourceserviceapi.repositories.ProgramCretareaRepository; import ru.molokoin.resourceserviceapi.repositories.ProgramCretareaRepository;
@Service
public class ProgramCretareaService { public class ProgramCretareaService {
private final ProgramCretareaRepository repo; private final ProgramCretareaRepository repo;
@ -35,4 +37,16 @@ public class ProgramCretareaService {
return repo.existsByNameShort(nameShort); 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);
}
} }

82
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<Program> findAll(PageRequest of) {
return repo.findAll(of);
}
public Long count() {
return repo.count();
}
public Page<Program> findById(PageRequest of, Long id) {
return repo.findById(of, id);
}
public Page<Program> findByName(PageRequest of, String name) {
return repo.findByName(of, name);
}
public Page<Program> findByLenght(PageRequest of, Integer lenght) {
return repo.findByLenght(of, lenght);
}
public Page<Program> 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<Program> findByPrice(PageRequest of, Integer price) {
return repo.findByPrice(of, price);
}
public Page<Program> findByCretarea(PageRequest of, Long cretareaId) {
ProgramCretarea pc = pcRepo.findById(cretareaId).get();
return repo.findByCretarea(of, pc);
}
public Page<Program> findByCretarea(PageRequest of, ProgramCretarea pc) {
return repo.findByCretarea(of, pc);
}
public Page<Program> findByCretareaId(PageRequest of, String cretareaId) {
ProgramCretarea pc = pcRepo.findCretareaById(Long.parseLong(cretareaId));
return repo.findByCretarea(of, pc);
}
public Page<Program> findByCretareaNameShort(PageRequest of, String cretareaNameShort) {
ProgramCretarea pc = pcRepo.findCretareaByNameShort(cretareaNameShort);
return repo.findByCretarea(of, pc);
}
}

186
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<Teacher> findAll(Pageable pageable) {
return repo.findAll(pageable);
}
public List<Teacher> 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<Teacher> 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<Teacher> 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<Teacher> 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<Teacher> findByEmployeeId(String employeeId) {
return repo.findByEmployeeId(employeeId);
}
public List<Teacher> 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<Teacher> findById(PageRequest of, long id) {
return repo.findById(of, id);
}
public Page<Teacher> findBySnils(PageRequest of, String snils) {
return repo.findBySnils(of, snils);
}
public Page<Teacher> findByEmployeeId(PageRequest of, String employeeId) {
return repo.findByEmployeeId(of, employeeId);
}
public Page<Teacher> findByFio(PageRequest of, String fio) {
return repo.findBySecondNameAndFirstNameAndLastName(
of,
Naimer.getSecondNameOf(fio),
Naimer.getFirstNameOf(fio),
Naimer.getLastNameOf(fio));
}
public Page<Teacher> findBySecondName(PageRequest of, String secondName) {
return repo.findBySecondName(of, secondName);
}
public Page<Teacher> findBySecondNameAndFirstName(PageRequest of, String secondName, String firstName) {
return repo.findBySecondNameAndFirstName(of, secondName, firstName);
}
public Page<Teacher> findBySecondNameAndFirstNameAndLastName(PageRequest of, String secondName, String firstName,
String lastName) {
return repo.findBySecondNameAndFirstNameAndLastName(of, secondName, firstName, lastName);
}
}

51
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<String> uniqueList(List<String> list) {
// Удаление повторяющихся элементов списка
List<String> result = list.stream().distinct().toList();
return result;
}
}

16
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;
}

237
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();
}
}

54
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();
}
}
Loading…
Cancel
Save