так правильнее
This commit is contained in:
parent
9ce26952ae
commit
038911a784
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user