Browse Source

api and simpleFace done

master
esoe 6 months ago
parent
commit
080ceedc25
  1. 196
      client-service-teachers/src/main/java/ru/molokoin/clientserviceteachers/controllers/EducationEntryController.java
  2. 38
      client-service-teachers/src/main/java/ru/molokoin/clientserviceteachers/entities/EducatonEntry.java
  3. 59
      client-service-teachers/src/main/resources/templates/education-add.html
  4. 59
      client-service-teachers/src/main/resources/templates/education-edit.html
  5. 76
      client-service-teachers/src/main/resources/templates/educations.html
  6. 67
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/EducationEntryController.java
  7. 36
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/EducationEntry.java
  8. 12
      resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/repositories/EducationEntryFace.java

196
client-service-teachers/src/main/java/ru/molokoin/clientserviceteachers/controllers/EducationEntryController.java

@ -0,0 +1,196 @@
package ru.molokoin.clientserviceteachers.controllers;
import java.time.Duration;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.reactive.function.client.WebClient;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import reactor.core.publisher.Mono;
import ru.molokoin.clientserviceteachers.entities.Course;
import ru.molokoin.clientserviceteachers.entities.EducatonEntry;
import ru.molokoin.clientserviceteachers.entities.Program;
import ru.molokoin.clientserviceteachers.entities.ProgramCretarea;
import ru.molokoin.clientserviceteachers.entities.Student;
@Controller
@RequestMapping(path = "/")
public class EducationEntryController {
@Autowired
private WebClient client;
@GetMapping("/educations")
public String educationEntryList(Model model) throws JsonMappingException, JsonProcessingException{
List<EducatonEntry> educations = client.method(HttpMethod.GET)
.uri("/education/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<EducatonEntry>>(){})
.block();
model.addAttribute("educations", educations);
model.addAttribute("edu", new EducatonEntry());
System.out.println("EDUCATIONS:" + educations.toString());
return "educations";
}
@GetMapping("/education-edit/{id}")
public String educationEntryById(Model model, @PathVariable Long id) {
/**
* получение списка студентов из ресурсов
* - для select поля формы
*/
List<Student> students = client.get()
.uri("/student/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Student>>(){})
.timeout(Duration.ofSeconds(1))
.block();
model.addAttribute("students", students);
/**
* получение списка курсов из ресурсов
* - для select поля формы
*/
List<Course> courses = client.get()
.uri("/course/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Course>>(){})
.timeout(Duration.ofSeconds(1))
.block();
model.addAttribute("courses", courses);
/**
* Получение данных об обучении из ресурсов
* - для отображения в форме редактирования
*/
EducatonEntry ee = client.get()
.uri("/education/" + id)
.retrieve()
.bodyToMono(EducatonEntry.class)
.timeout(Duration.ofSeconds(1))
.block();
model.addAttribute("education", ee);
return "education-edit";
}
@PostMapping(
path = "/education/add",
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
produces = {
MediaType.APPLICATION_JSON_VALUE
})
public String addEducationEntry(Model model, @ModelAttribute("education") @Validated EducatonEntry ee) throws JsonMappingException, JsonProcessingException{
/**
* получение списка студентов из ресурсов
* - для select поля формы
*/
List<Student> students = client.get()
.uri("/student/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Student>>(){})
.timeout(Duration.ofSeconds(1))
.block();
model.addAttribute("students", students);
/**
* получение списка курсов из ресурсов
* - для select поля формы
*/
List<Course> courses = client.get()
.uri("/course/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Course>>(){})
.timeout(Duration.ofSeconds(1))
.block();
model.addAttribute("courses", courses);
client.post()
.uri("/education/create")
.body(Mono.just(ee), EducatonEntry.class)
.retrieve()
.toBodilessEntity()
.timeout(Duration.ofSeconds(1))
.block();
return "redirect:/educations";
}
@GetMapping(path = "/education/add")
public String addProgramFrame(Model model){
/**
* получение списка студентов из ресурсов
* - для select поля формы
*/
List<Student> students = client.get()
.uri("/student/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Student>>(){})
.timeout(Duration.ofSeconds(1))
.block();
model.addAttribute("students", students);
/**
* получение списка курсов из ресурсов
* - для select поля формы
*/
List<Course> courses = client.get()
.uri("/course/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Course>>(){})
.timeout(Duration.ofSeconds(1))
.block();
model.addAttribute("courses", courses);
/**
* Создание пустого объекта, для передачи в форму для заполнения
*/
EducatonEntry education = new EducatonEntry();
model.addAttribute("newEducation", education);
return "education-add";
}
@GetMapping(path = "/education/delete/{id}")
public String deleteProgram(@PathVariable Long id) throws JsonMappingException, JsonProcessingException{
client.delete()
.uri("/education/delete/" + id)
.retrieve()
.bodyToMono(String.class)
.timeout(Duration.ofSeconds(1))
.block();
return "redirect:/educations";
}
@PostMapping(
path = "/education/update/{id}",
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
produces = {
MediaType.APPLICATION_JSON_VALUE
})
public String updateProgram(@PathVariable Long id
, @ModelAttribute("edu") @Validated EducatonEntry education) throws JsonMappingException, JsonProcessingException{
client.post()
.uri("/education/update/" + education.getId())
.body(Mono.just(education), EducatonEntry.class)
.retrieve()
.toBodilessEntity()
.timeout(Duration.ofSeconds(1))
.block();
return "redirect:/educations";
}
}

38
client-service-teachers/src/main/java/ru/molokoin/clientserviceteachers/entities/EducatonEntry.java

@ -0,0 +1,38 @@
package ru.molokoin.clientserviceteachers.entities;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class EducatonEntry {
private long id;
private String sertificate_number;//номер удостоверения
private String frdo_number;//ФРДО номер по реестру
private String eisot_number;//ЕИСОТ номер по реестру
private String ones;//единички (вспомогатльный столбец)
private Course course;//сведения о курсе
private Student student;//сведения о студенте
/**
* Конструктор без id
* @param sertificate_number
* @param frdo_number
* @param eisot_number
* @param ones
* @param course
* @param student
*/
public EducatonEntry(String sertificate_number, String frdo_number, String eisot_number, String ones,
Course course, Student student) {
this.sertificate_number = sertificate_number;
this.frdo_number = frdo_number;
this.eisot_number = eisot_number;
this.ones = ones;
this.course = course;
this.student = student;
}
}

59
client-service-teachers/src/main/resources/templates/education-add.html

@ -0,0 +1,59 @@
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>Education-add</title>
<script src="https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs@2/webcomponents-loader.min.js"></script>
<script type="module" src="https://cdn.jsdelivr.net/gh/zerodevx/zero-md@1/src/zero-md.min.js"></script>
</head>
<body>
<header>
add : Education
</header>
<main>
<h2>Добавление обучения:</h2>
<form th:action="@{/education/add}" method="post" th:object="${newEducation}">
<div>
<label>id: </label>
<input type="text" th:field="${newEducation.id}" placeholder="" readonly />
</div>
<div>
<label>Номер удостоверения: </label>
<input type="text" th:field="${newEducation.sertificate_number}" placeholder="" />
</div>
<div>
<label>ФРДО номер по реестру: </label>
<input type="text" th:field="${newEducation.frdo_number}" placeholder="" />
</div>
<div>
<label>ЕИСОТ номер по реестру: </label>
<input type="text" th:field="${newEducation.eisot_number}" placeholder="" />
</div>
<div>
<label>Единички (вспомогатльный столбец): </label>
<input type="text" th:field="${newEducation.ones}" placeholder="" />
</div>
<div>
<label>Сведения о курсе: </label>
<select th:field="${newEducation.course.id}">
<option value="0" disabled >выберите курс</option>
<option th:each="option : ${courses}" th:value="${option.id}" th:text="${option.id}"></option>
</select>
</div>
<div>
<label>Сведения о студенте: </label>
<select th:field="${newEducation.student.id}">
<option value="0" disabled >выберите курс</option>
<option th:each="option : ${students}" th:value="${option.id}" th:text="${option.id}"></option>
</select>
</div>
<br>
<input type="submit" value="СОХРАНИТЬ И ВЕРНУТЬСЯ"/>
</form>
<br>
<form th:action="@{/educations}" th:method="get">
<input type="submit" value="ВЕРНУТЬСЯ"/>
</form>
</main>
</body>

59
client-service-teachers/src/main/resources/templates/education-edit.html

@ -0,0 +1,59 @@
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>Education-edit</title>
<script src="https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs@2/webcomponents-loader.min.js"></script>
<script type="module" src="https://cdn.jsdelivr.net/gh/zerodevx/zero-md@1/src/zero-md.min.js"></script>
</head>
<body>
<header>
edit : Education
</header>
<main>
<h2>Редактирование сведений об обучении:</h2>
<form th:action="@{/education/add}" method="post" th:object="${education}">
<div>
<label>id: </label>
<input type="text" th:field="${education.id}" placeholder="" readonly />
</div>
<div>
<label>Номер удостоверения: </label>
<input type="text" th:field="${education.sertificate_number}" placeholder="" />
</div>
<div>
<label>ФРДО номер по реестру: </label>
<input type="text" th:field="${education.frdo_number}" placeholder="" />
</div>
<div>
<label>ЕИСОТ номер по реестру: </label>
<input type="text" th:field="${education.eisot_number}" placeholder="" />
</div>
<div>
<label>Единички (вспомогатльный столбец): </label>
<input type="text" th:field="${education.ones}" placeholder="" />
</div>
<div>
<label>Сведения о курсе: </label>
<select th:field="${education.course.id}">
<option value="0" disabled >выберите курс</option>
<option th:each="option : ${courses}" th:value="${option.id}" th:text="${option.name_short}"></option>
</select>
</div>
<div>
<label>Сведения о студенте: </label>
<select th:field="${education.student.id}">
<option value="0" disabled >выберите курс</option>
<option th:each="option : ${students}" th:value="${option.id}" th:text="${option.first_name}"></option>
</select>
</div>
<br>
<input type="submit" value="СОХРАНИТЬ И ВЕРНУТЬСЯ"/>
</form>
<br>
<form th:action="@{/educations}" th:method="get">
<input type="submit" value="ВЕРНУТЬСЯ"/>
</form>
</main>
</body>

76
client-service-teachers/src/main/resources/templates/educations.html

@ -0,0 +1,76 @@
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>Educations</title>
<script src="https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs@2/webcomponents-loader.min.js"></script>
<script type="module" src="https://cdn.jsdelivr.net/gh/zerodevx/zero-md@1/src/zero-md.min.js"></script>
</head>
<body>
<header>
<h1>EDUCATIONS</h1>
menu : auth : Educations
<br>
</header>
<main>
<div class="main-wraper">
<h2>Перечень обучений:</h2>
<form th:action="@{/educations}" method="get" th:object="${edu}"></form>
<table>
<thead>
<tr>
<th>id</th>
<th>sertificate_number</th>
<th>frdo_number</th>
<th>eisot_number</th>
<th>ones</th>
<th>course</th>
<th>student</th>
<th>
<form th:action="@{/education/add}" th:method="get">
<input type="submit" value="ADD --|>"/>
</form>
</th>
</tr>
</thead>
<tbody>
<tr th:each="edu: ${educations}">
<td>
<input type="text" id="id" name="id" th:value="${edu.id}" readonly />
</td>
<td>
<input type="text" id="sertificate_number" name="sertificate_number" th:value="${edu.sertificate_number}" readonly />
</td>
<td>
<input type="text" id="frdo_number" name="frdo_number" th:value="${edu.frdo_number}" readonly />
</td>
<td>
<input type="text" id="eisot_number" name="eisot_number" th:value="${edu.eisot_number}" readonly />
</td>
<td>
<input type="text" id="ones" name="ones" th:value="${edu.ones}" readonly />
</td>
<td>
<input type="text" id="course" name="course" th:value="${edu.course.id}" readonly />
</td>
<td>
<input type="text" id="student" name="student" th:value="${edu.student.id}" readonly />
</td>
<td>
<form th:action="@{education-edit/{id}(id=${edu.id})}" th:method="get">
<input type="submit" value="--|>"/>
</form>
<form th:action="@{/education/delete/{id}(id=${edu.id})}" th:method="get">
<input type="submit" value="X"/>
</form>
</td>
</tr>
</tbody>
</table>
</table>
</div>
</main>
</body>
</html>

67
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/controllers/EducationEntryController.java

@ -0,0 +1,67 @@
package ru.molokoin.resourceserviceapi.controllers;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
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.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.RestController;
import ru.molokoin.resourceserviceapi.entities.EducationEntry;
import ru.molokoin.resourceserviceapi.repositories.EducationEntryFace;
@RestController
@RequestMapping(path = "/", consumes = {"*/*"})
public class EducationEntryController {
@Autowired
private EducationEntryFace repo;
@GetMapping("/education/list")
public ResponseEntity<List<EducationEntry>> getEducationEntries(){
return new ResponseEntity<>(repo.findAll(), HttpStatus.OK);
}
@GetMapping("/education/{id}")
public ResponseEntity<?> getEducationEntryByID(@PathVariable Integer id){
return new ResponseEntity<>(repo.findEducationEntryById(id), HttpStatus.OK);
}
@PostMapping(path = "/education/create",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> saveEducationEntry(@RequestBody EducationEntry educationEntry) {
repo.save(educationEntry);
return new ResponseEntity<>(educationEntry, HttpStatus.CREATED);
}
@PutMapping(path = "/education/update/{id}",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> updateProgram(@PathVariable Integer id, @RequestBody EducationEntry educationEntry) {
EducationEntry ee = repo.findEducationEntryById(id);
ee.setSertificate_number(educationEntry.getSertificate_number());
ee.setFrdo_number(educationEntry.getFrdo_number());
ee.setEisot_number(educationEntry.getEisot_number());
ee.setOnes(educationEntry.getOnes());
ee.setCourse(educationEntry.getCourse());
ee.setStudent(educationEntry.getStudent());
repo.save(ee);
return new ResponseEntity<>(repo.findEducationEntryById(id), HttpStatus.CREATED);
}
@DeleteMapping("/education/delete/{id}")
public ResponseEntity<String> deleteProgram(@PathVariable Long id){
EducationEntry ee = repo.findEducationEntryById(id);
System.out.println(ee.toString());
repo.delete(ee);
return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK);
}
}

36
resource-service-api/src/main/java/ru/molokoin/resourceserviceapi/entities/EducationEntry.java

@ -0,0 +1,36 @@
package ru.molokoin.resourceserviceapi.entities;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Data
public class EducationEntry {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String sertificate_number;//Номер удостоверения
private String frdo_number;//ФРДО номер по реестру
private String eisot_number;//ЕИСОТ номер по реестру
private String ones;//Единички (вспомогатльный столбец)
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@OnDelete(action = OnDeleteAction.SET_NULL)
private Course course;//Сведения о курсе
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@OnDelete(action = OnDeleteAction.SET_NULL)
private Student student;//Сведения о студенте
}

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

@ -0,0 +1,12 @@
package ru.molokoin.resourceserviceapi.repositories;
import java.util.List;
import org.springframework.data.repository.ListCrudRepository;
import ru.molokoin.resourceserviceapi.entities.EducationEntry;
public interface EducationEntryFace extends ListCrudRepository<EducationEntry, Long>{
List<EducationEntry> findAll();
EducationEntry findEducationEntryById(long id);
}
Loading…
Cancel
Save