From 6703a935bb5b44cde252bec1b7f91878f71e651a Mon Sep 17 00:00:00 2001 From: lynxwq2 Date: Wed, 3 Dec 2025 19:02:59 +0300 Subject: [PATCH] 1st without errors --- .../nto/controller/BookingController.java | 18 ++++-------- .../nto/controller/EmployeeController.java | 13 ++------- .../java/com/example/nto/entity/Booking.java | 5 +++- .../java/com/example/nto/entity/Employee.java | 7 ++++- .../nto/repository/BookingRepository.java | 3 ++ .../nto/repository/EmployeeRepository.java | 2 +- .../example/nto/service/EmployeeService.java | 3 ++ .../nto/service/impl/EmployeeServiceImpl.java | 28 +++++++++++++++++++ 8 files changed, 54 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/example/nto/controller/BookingController.java b/src/main/java/com/example/nto/controller/BookingController.java index 6eb13a0..106db06 100644 --- a/src/main/java/com/example/nto/controller/BookingController.java +++ b/src/main/java/com/example/nto/controller/BookingController.java @@ -12,15 +12,9 @@ import java.time.LocalDate; * МОЖНО: Добавлять методы, аннотации, зависимости * НЕЛЬЗЯ: Изменять название класса и пакета */ -@RestController -@RequestMapping("/api") -public class BookingController { - - private final BookingService bookingService; - - @GetMapping("/{code}/info") - public ResponseEntity getEmployeeInfo(@PathVariable String code) { - EmployeeInfoResponse response = employeeService.getEmployeeInfo(code); - return ResponseEntity.ok(response); - } -} +//@RestController +//@RequestMapping("/api") +//public class BookingController { +// +// +//} diff --git a/src/main/java/com/example/nto/controller/EmployeeController.java b/src/main/java/com/example/nto/controller/EmployeeController.java index db02108..7a0514c 100644 --- a/src/main/java/com/example/nto/controller/EmployeeController.java +++ b/src/main/java/com/example/nto/controller/EmployeeController.java @@ -45,15 +45,8 @@ public class EmployeeController { } @GetMapping("/{code}/info") - public ResponseEntity getInfo(@PathVariable String code){ - - Optional employee = employeeService.getByCode(code); - - if (employee.isPresent()) { - return ResponseEntity.ok(employee.get()); - } else { - return ResponseEntity.notFound().build(); - } - + public ResponseEntity> getEmployeeInfo(@PathVariable String code) { + Map response = employeeService.getEmployeeInfo(code); + return ResponseEntity.ok(response); } } diff --git a/src/main/java/com/example/nto/entity/Booking.java b/src/main/java/com/example/nto/entity/Booking.java index d7b56c0..045592b 100644 --- a/src/main/java/com/example/nto/entity/Booking.java +++ b/src/main/java/com/example/nto/entity/Booking.java @@ -1,5 +1,7 @@ package com.example.nto.entity; +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; @@ -31,7 +33,8 @@ public class Booking { @JoinColumn(name = "place_id") private Place place; - @ManyToOne(targetEntity = Employee.class, fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "employee_id") + @JsonBackReference private Employee employee; } diff --git a/src/main/java/com/example/nto/entity/Employee.java b/src/main/java/com/example/nto/entity/Employee.java index 387b6b8..3ac4e3a 100644 --- a/src/main/java/com/example/nto/entity/Employee.java +++ b/src/main/java/com/example/nto/entity/Employee.java @@ -1,5 +1,7 @@ package com.example.nto.entity; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; @@ -20,6 +22,7 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor @Entity +@JsonSerialize public class Employee { @Id @@ -32,7 +35,9 @@ public class Employee { private String photoUrl; - @OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, fetch = FetchType.LAZY, + targetEntity = Booking.class) + @JsonManagedReference private List bookingList; public Employee(long id, String name, String code, String photoUrl) { diff --git a/src/main/java/com/example/nto/repository/BookingRepository.java b/src/main/java/com/example/nto/repository/BookingRepository.java index edf53ea..2a264b7 100644 --- a/src/main/java/com/example/nto/repository/BookingRepository.java +++ b/src/main/java/com/example/nto/repository/BookingRepository.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; import java.sql.Date; +import java.util.List; import java.util.Optional; /** @@ -18,4 +19,6 @@ import java.util.Optional; @Repository public interface BookingRepository extends JpaRepository { Optional findById(long id); + + List findByEmployee_Code(String code); } diff --git a/src/main/java/com/example/nto/repository/EmployeeRepository.java b/src/main/java/com/example/nto/repository/EmployeeRepository.java index e6ecbcb..725ab28 100644 --- a/src/main/java/com/example/nto/repository/EmployeeRepository.java +++ b/src/main/java/com/example/nto/repository/EmployeeRepository.java @@ -16,6 +16,6 @@ import java.util.Optional; @Service @Repository -public interface EmployeeRepository extends JpaRepository { +public interface EmployeeRepository extends JpaRepository { Optional findByCode(String code); } diff --git a/src/main/java/com/example/nto/service/EmployeeService.java b/src/main/java/com/example/nto/service/EmployeeService.java index a949b95..32e6980 100644 --- a/src/main/java/com/example/nto/service/EmployeeService.java +++ b/src/main/java/com/example/nto/service/EmployeeService.java @@ -3,6 +3,7 @@ package com.example.nto.service; import com.example.nto.entity.Employee; import java.util.List; +import java.util.Map; import java.util.Optional; /** @@ -18,4 +19,6 @@ public interface EmployeeService { boolean isCodeValid(String code); + + Map getEmployeeInfo(String code); } diff --git a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java index c1c752b..4a4c7e3 100644 --- a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java @@ -1,14 +1,20 @@ package com.example.nto.service.impl; +import com.example.nto.entity.Booking; import com.example.nto.entity.Employee; import com.example.nto.repository.EmployeeRepository; import com.example.nto.service.EmployeeService; +import jakarta.transaction.Transactional; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.util.HashMap; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; /** * TODO: ДОРАБОТАТЬ в рамках задания @@ -36,9 +42,31 @@ public class EmployeeServiceImpl implements EmployeeService { return employeeRepository.findByCode(code); } + @Override public boolean isCodeValid(String code){ return employeeRepository.findByCode(code).isPresent(); } + public Map getEmployeeInfo(String code) { + Employee employee = getByCode(code) + .orElseThrow(() -> new RuntimeException("Employee not found")); + Map> bookingMap = employee.getBookingList().stream() + .collect(Collectors.toMap( + Booking::getDate, + booking -> { + Map info = new HashMap<>(); + info.put("id", booking.getId()); + info.put("place", booking.getPlace().getPlace()); + return info; + } + )); + + Map result = new HashMap<>(); + result.put("name", employee.getName()); + result.put("photoUrl", employee.getPhotoUrl()); + result.put("booking", bookingMap); + + return result; + } }