так правильнее

This commit is contained in:
dasha 2023-04-24 16:16:32 +04:00
parent 9ce26952ae
commit 038911a784
7 changed files with 49 additions and 30 deletions

View File

@ -1,5 +1,6 @@
package com.labwork1.app.student.controller; package com.labwork1.app.student.controller;
import com.labwork1.app.student.model.SessionExtension;
import com.labwork1.app.student.service.CustomerService; import com.labwork1.app.student.service.CustomerService;
import com.labwork1.app.student.service.OrderService; import com.labwork1.app.student.service.OrderService;
import com.labwork1.app.student.service.SessionService; import com.labwork1.app.student.service.SessionService;

View File

@ -1,6 +1,7 @@
package com.labwork1.app.student.controller; package com.labwork1.app.student.controller;
import com.labwork1.app.student.model.Session; import com.labwork1.app.student.model.Session;
import com.labwork1.app.student.model.SessionExtension;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -17,7 +18,7 @@ public class SessionDto {
public SessionDto() { public SessionDto() {
} }
public SessionDto(Session session) { public SessionDto(SessionExtension session) {
this.id = session.getId(); this.id = session.getId();
this.price = session.getPrice(); this.price = session.getPrice();
this.timestamp = session.getTimestamp(); this.timestamp = session.getTimestamp();
@ -28,6 +29,16 @@ public class SessionDto {
} else this.cinema = null; } else this.cinema = null;
} }
public SessionDto(Session session) {
this.id = session.getId();
this.price = session.getPrice();
this.timestamp = session.getTimestamp();
this.maxCount = session.getMaxCount();
if (session.getCinema() != null) {
this.cinema = new CinemaDto(session.getCinema());
} else this.cinema = null;
}
public CinemaDto getCinema() { public CinemaDto getCinema() {
return cinema; return cinema;
} }

View File

@ -14,24 +14,22 @@ import java.util.Objects;
public class Session { public class Session {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.AUTO)
private Long id; protected Long id;
@NotNull(message = "price can't be null or empty") @NotNull(message = "price can't be null or empty")
private Double price; protected Double price;
@NotNull(message = "timestamp can't be null or empty") @NotNull(message = "timestamp can't be null or empty")
@Column @Column
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm")
private LocalDateTime timestamp; protected LocalDateTime timestamp;
@OneToMany(mappedBy = "session", fetch = FetchType.EAGER) @OneToMany(mappedBy = "session", fetch = FetchType.EAGER)
private List<OrderSession> orders; private List<OrderSession> orders;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "cinema_fk") @JoinColumn(name = "cinema_fk")
private Cinema cinema; protected Cinema cinema;
@NotNull(message = "maxCount can't be null or empty") @NotNull(message = "maxCount can't be null or empty")
@Column @Column
private Integer maxCount; protected Integer maxCount;
@Transient
private Long capacity;
public Session() { public Session() {
} }
@ -46,14 +44,13 @@ public class Session {
this.maxCount = maxCount; this.maxCount = maxCount;
} }
public Session(Session session, Long capacity) { public Session(Session session) {
this.id = session.getId(); this.id = session.getId();
this.price = session.getPrice(); this.price = session.getPrice();
this.timestamp = session.getTimestamp(); this.timestamp = session.getTimestamp();
this.orders = session.getOrders(); this.orders = session.getOrders();
this.cinema = session.getCinema(); this.cinema = session.getCinema();
this.maxCount = session.getMaxCount(); this.maxCount = session.getMaxCount();
this.capacity = capacity;
} }
public Cinema getCinema() { public Cinema getCinema() {
@ -98,7 +95,6 @@ public class Session {
"id=" + id + "id=" + id +
", price='" + price + '\'' + ", price='" + price + '\'' +
", timestamp='" + timestamp.toString() + '\'' + ", timestamp='" + timestamp.toString() + '\'' +
", capacity='" + capacity + '\'' +
", maxCount='" + maxCount.toString() + '\'' + ", maxCount='" + maxCount.toString() + '\'' +
", cinema='" + cinema.toString() + '\'' + ", cinema='" + cinema.toString() + '\'' +
'}'; '}';
@ -139,12 +135,4 @@ public class Session {
public List<OrderSession> getOrders() { public List<OrderSession> getOrders() {
return orders; return orders;
} }
public Long getCapacity() {
return capacity;
}
public void setCapacity(Long capacity) {
this.capacity = capacity;
}
} }

View File

@ -0,0 +1,17 @@
package com.labwork1.app.student.model;
public class SessionExtension extends Session {
private Long capacity;
public SessionExtension(Session session, Long capacity) {
super(session);
this.capacity = capacity;
}
public Long getCapacity() {
return capacity;
}
public void setCapacity(Long capacity) {
this.capacity = capacity;
}
}

View File

@ -1,6 +1,7 @@
package com.labwork1.app.student.repository; package com.labwork1.app.student.repository;
import com.labwork1.app.student.model.Session; import com.labwork1.app.student.model.Session;
import com.labwork1.app.student.model.SessionExtension;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
@ -11,13 +12,13 @@ import java.util.Optional;
public interface SessionRepository extends JpaRepository<Session, Long> { public interface SessionRepository extends JpaRepository<Session, Long> {
@Query("Select sum(os.count) from OrderSession os where os.session.id = :sessionId") @Query("Select sum(os.count) from OrderSession os where os.session.id = :sessionId")
Optional<Integer> getCapacity(@Param("sessionId") Long sessionId); Optional<Integer> getCapacity(@Param("sessionId") Long sessionId);
@Query("Select new com.labwork1.app.student.model.Session(s, sum(os.count)) from Session s " + @Query("Select new com.labwork1.app.student.model.SessionExtension(s, sum(os.count)) from Session s " +
"left join OrderSession os on s.id = os.session.id " + "left join OrderSession os on s.id = os.session.id " +
"group by s") "group by s")
List<Session> getSessionsWithCapacity(); List<SessionExtension> getSessionsWithCapacity();
@Query("Select new com.labwork1.app.student.model.Session(s, sum(os.count)) from Session s " + @Query("Select new com.labwork1.app.student.model.SessionExtension(s, sum(os.count)) from Session s " +
"left join OrderSession os on s.id = os.session.id " + "left join OrderSession os on s.id = os.session.id " +
"where s.id = :sessionId " + "where s.id = :sessionId " +
"group by s") "group by s")
Optional<Session> getSessionWithCapacity(@Param("sessionId") Long sessionId); Optional<SessionExtension> getSessionWithCapacity(@Param("sessionId") Long sessionId);
} }

View File

@ -2,6 +2,7 @@ package com.labwork1.app.student.service;
import com.labwork1.app.student.model.Cinema; import com.labwork1.app.student.model.Cinema;
import com.labwork1.app.student.model.Session; import com.labwork1.app.student.model.Session;
import com.labwork1.app.student.model.SessionExtension;
import com.labwork1.app.student.repository.SessionRepository; import com.labwork1.app.student.repository.SessionRepository;
import com.labwork1.app.util.validation.ValidatorUtil; import com.labwork1.app.util.validation.ValidatorUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -33,13 +34,13 @@ public class SessionService {
} }
@Transactional(readOnly = true) @Transactional(readOnly = true)
public Session findSession(Long id) { public SessionExtension findSession(Long id) {
return sessionRepository.getSessionWithCapacity(id) return sessionRepository.getSessionWithCapacity(id)
.orElseThrow(() -> new SessionNotFoundException(id)); .orElseThrow(() -> new SessionNotFoundException(id));
} }
@Transactional(readOnly = true) @Transactional(readOnly = true)
public List<Session> findAllSessions() { public List<SessionExtension> findAllSessions() {
return sessionRepository.getSessionsWithCapacity(); return sessionRepository.getSessionsWithCapacity();
} }

View File

@ -9,7 +9,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import java.sql.Timestamp; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@SpringBootTest @SpringBootTest
@ -36,9 +36,9 @@ public class JpaCustomerTests {
// 2 сеанса // 2 сеанса
final Session session1 = sessionService.addSession(300.0, final Session session1 = sessionService.addSession(300.0,
new Timestamp(System.currentTimeMillis()), cinema1.getId(), 10); LocalDateTime.now(), cinema1.getId(), 10);
final Session session2 = sessionService.addSession( 200.0, final Session session2 = sessionService.addSession( 200.0,
new Timestamp(System.currentTimeMillis()), cinema1.getId(), 10); LocalDateTime.now(), cinema1.getId(), 10);
// проверка 2 сеанса у 1 кино // проверка 2 сеанса у 1 кино
Assertions.assertEquals(cinemaService Assertions.assertEquals(cinemaService
@ -67,7 +67,7 @@ public class JpaCustomerTests {
// у заказа 2 сеанса // у заказа 2 сеанса
orderService.addSession(order2.getId(), session1.getId(), 2); orderService.addSession(order2.getId(), session1.getId(), 2);
List<Session> result = sessionService.findAllSessions(); List<SessionExtension> result = sessionService.findAllSessions();
Assertions.assertEquals(sessionService.getCapacity(session1.getId()), 2); Assertions.assertEquals(sessionService.getCapacity(session1.getId()), 2);
@ -96,7 +96,7 @@ public class JpaCustomerTests {
// у заказа 1 сеанс // у заказа 1 сеанс
// 3 сеанса всего // 3 сеанса всего
final Session session3 = sessionService.addSession(300.0, final Session session3 = sessionService.addSession(300.0,
new Timestamp(System.currentTimeMillis()), cinema2.getId(), 10); LocalDateTime.now(), cinema2.getId(), 10);
// удалили заказ2, у которого был сеанс1 // удалили заказ2, у которого был сеанс1
orderService.deleteOrder(order2.getId()); orderService.deleteOrder(order2.getId());
Assertions.assertEquals(orderService.findAllOrders().size(), 0); Assertions.assertEquals(orderService.findAllOrders().size(), 0);