potom dodelaetsya
This commit is contained in:
parent
e2a29f4b65
commit
0fafffd509
3342
front/package-lock.json
generated
3342
front/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -140,7 +140,7 @@ export default function Orders() {
|
|||||||
.catch(e => { console.log('Error get orders') })
|
.catch(e => { console.log('Error get orders') })
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleDeleteOrderSession(id, sessionId) {
|
async function handleDeleteOrderSession(e, id, sessionId) {
|
||||||
console.info('Start delete session');
|
console.info('Start delete session');
|
||||||
console.info(id+'-order, session-'+sessionId)
|
console.info(id+'-order, session-'+sessionId)
|
||||||
const requestParams = {
|
const requestParams = {
|
||||||
@ -233,7 +233,7 @@ export default function Orders() {
|
|||||||
<OrderSessionItem
|
<OrderSessionItem
|
||||||
item={item}
|
item={item}
|
||||||
key={parseInt(item.sessionId+''+item.orderId)}
|
key={parseInt(item.sessionId+''+item.orderId)}
|
||||||
removeFunc={(e) => handleDeleteOrderSession(e, currEditItem, item.sessionId)}
|
removeFunc={e => handleDeleteOrderSession(e, currEditItem, item.sessionId)}
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -13,12 +13,12 @@ export default function SearchSame() {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let temp = JSON.stringify(searchResult);
|
let temp = JSON.stringify(searchResult);
|
||||||
temp = JSON.parse(temp);
|
temp = JSON.parse(temp);
|
||||||
setItems(temp.filter(elem => elem.name.toLowerCase().includes(params.request.toLowerCase())));
|
setItems(temp);
|
||||||
}, [searchResult, params]);
|
}, [searchResult, params]);
|
||||||
|
|
||||||
useState(() => {
|
useEffect(() => {
|
||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
const url = new URL('http://localhost:8080/cinema')
|
const url = new URL(`http://localhost:8080/cinema/search?request=${params.request}`)
|
||||||
try {
|
try {
|
||||||
const response = await fetch(url.href);
|
const response = await fetch(url.href);
|
||||||
const json = await response.json();
|
const json = await response.json();
|
||||||
|
@ -27,6 +27,13 @@ public class CinemaController {
|
|||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/search")
|
||||||
|
public List<CinemaDto> getCinemas(@RequestParam("request") String request) {
|
||||||
|
return cinemaService.findAllCinemas(request).stream()
|
||||||
|
.map(CinemaDto::new)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public CinemaDto createCinema(@RequestBody @Valid CinemaDto cinemaDto) {
|
public CinemaDto createCinema(@RequestBody @Valid CinemaDto cinemaDto) {
|
||||||
return new CinemaDto(cinemaService.addCinema(cinemaDto));
|
return new CinemaDto(cinemaService.addCinema(cinemaDto));
|
||||||
|
@ -45,7 +45,7 @@ public class SessionController {
|
|||||||
@PutMapping("/{id}")
|
@PutMapping("/{id}")
|
||||||
public SessionDto updateSession(@PathVariable Long id,
|
public SessionDto updateSession(@PathVariable Long id,
|
||||||
@RequestParam("price") String price) {
|
@RequestParam("price") String price) {
|
||||||
return new SessionDto(sessionService.updateSession(id, Double.parseDouble(price)));
|
return new SessionDto(sessionService.updateSession(id, Double.parseDouble(price), -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/{id}")
|
@DeleteMapping("/{id}")
|
||||||
|
@ -2,6 +2,12 @@ package com.labwork1.app.student.repository;
|
|||||||
|
|
||||||
import com.labwork1.app.student.model.Cinema;
|
import com.labwork1.app.student.model.Cinema;
|
||||||
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.repository.query.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface CinemaRepository extends JpaRepository<Cinema, Long> {
|
public interface CinemaRepository extends JpaRepository<Cinema, Long> {
|
||||||
|
@Query("select p from Cinema p where p.name like CONCAT('%',:search,'%')")
|
||||||
|
List<Cinema> findAll(@Param("search") String search);
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,14 @@ package com.labwork1.app.student.repository;
|
|||||||
|
|
||||||
import com.labwork1.app.student.model.Customer;
|
import com.labwork1.app.student.model.Customer;
|
||||||
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.repository.query.Param;
|
||||||
|
|
||||||
public interface CustomerRepository extends JpaRepository<Customer, Long>, CustomerRepositoryExtension {
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface CustomerRepository extends JpaRepository<Customer, Long> {
|
||||||
|
@Query("delete from Order p where p.customer.id = :id")
|
||||||
|
Optional<Customer> deleteCustomerOrders(@Param("id") Long id);
|
||||||
|
@Query()
|
||||||
|
void deleteAllCustomers();
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,23 @@ package com.labwork1.app.student.repository;
|
|||||||
|
|
||||||
import com.labwork1.app.student.model.Order;
|
import com.labwork1.app.student.model.Order;
|
||||||
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.repository.query.Param;
|
||||||
|
|
||||||
public interface OrderRepository extends JpaRepository<Order, Long>, OrderRepositoryExtension {
|
public interface OrderRepository extends JpaRepository<Order, Long> {
|
||||||
}
|
@Query("insert into OrderSession values (orderId, sessionId, count) values (:sessionId, :orderId, :count)")
|
||||||
|
Order addSession(@Param("orderId") Long orderId, @Param("sessionId") Long sessionId,
|
||||||
|
@Param("count") Integer count);
|
||||||
|
|
||||||
|
@Query(value = "Select count from OrderSession where orderId = :orderId and sessionId = :sessionId",
|
||||||
|
nativeQuery = true)
|
||||||
|
Integer getCountOrderSession(@Param("orderId") Long orderId, @Param("sessionId") Long sessionId);
|
||||||
|
|
||||||
|
@Query(value = "delete from OrderSession where orderId = :orderId and sessionId = :sessionId",
|
||||||
|
nativeQuery = true)
|
||||||
|
void deleteSessionInOrder(@Param("orderId") Long orderId, @Param("sessionId") Long sessionId);
|
||||||
|
|
||||||
|
@Query(value = "update OrderSession set count = :count where orderId = :orderId and sessionId = :sessionId",
|
||||||
|
nativeQuery = true)
|
||||||
|
void updateSessionInOrder(@Param("orderId") Long orderId, @Param("sessionId") Long sessionId, @Param("count") Integer count);
|
||||||
|
}
|
@ -2,6 +2,7 @@ package com.labwork1.app.student.service;
|
|||||||
|
|
||||||
import com.labwork1.app.student.controller.CinemaDto;
|
import com.labwork1.app.student.controller.CinemaDto;
|
||||||
import com.labwork1.app.student.model.Cinema;
|
import com.labwork1.app.student.model.Cinema;
|
||||||
|
import com.labwork1.app.student.model.Order;
|
||||||
import com.labwork1.app.student.repository.CinemaRepository;
|
import com.labwork1.app.student.repository.CinemaRepository;
|
||||||
import com.labwork1.app.util.validation.ValidatorUtil;
|
import com.labwork1.app.util.validation.ValidatorUtil;
|
||||||
import jakarta.transaction.Transactional;
|
import jakarta.transaction.Transactional;
|
||||||
@ -40,6 +41,11 @@ public class CinemaService {
|
|||||||
return cinema.orElseThrow(() -> new CinemaNotFoundException(id));
|
return cinema.orElseThrow(() -> new CinemaNotFoundException(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public List<Cinema> findAllCinemas(String search) {
|
||||||
|
return cinemaRepository.findAll(search);
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<Cinema> findAllCinemas() {
|
public List<Cinema> findAllCinemas() {
|
||||||
return cinemaRepository.findAll();
|
return cinemaRepository.findAll();
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.labwork1.app.student.service;
|
package com.labwork1.app.student.service;
|
||||||
|
|
||||||
import com.labwork1.app.student.model.Order;
|
import com.labwork1.app.student.model.*;
|
||||||
import com.labwork1.app.student.repository.OrderRepository;
|
import com.labwork1.app.student.repository.OrderRepository;
|
||||||
import com.labwork1.app.util.validation.ValidatorUtil;
|
import com.labwork1.app.util.validation.ValidatorUtil;
|
||||||
import jakarta.persistence.EntityNotFoundException;
|
import jakarta.persistence.EntityNotFoundException;
|
||||||
@ -14,24 +14,51 @@ import java.util.Optional;
|
|||||||
@Service
|
@Service
|
||||||
public class OrderService {
|
public class OrderService {
|
||||||
private final OrderRepository orderRepository;
|
private final OrderRepository orderRepository;
|
||||||
|
private final CustomerService customerService;
|
||||||
|
private final SessionService sessionService;
|
||||||
private final ValidatorUtil validatorUtil;
|
private final ValidatorUtil validatorUtil;
|
||||||
|
|
||||||
public OrderService(OrderRepository orderRepository, ValidatorUtil validatorUtil) {
|
public OrderService(OrderRepository orderRepository, CustomerService customerService, SessionService sessionService, ValidatorUtil validatorUtil) {
|
||||||
this.orderRepository = orderRepository;
|
this.orderRepository = orderRepository;
|
||||||
|
this.customerService = customerService;
|
||||||
|
this.sessionService = sessionService;
|
||||||
this.validatorUtil = validatorUtil;
|
this.validatorUtil = validatorUtil;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Order addOrder(Long customer_id) {
|
public Order addOrder(Long customerId) {
|
||||||
final Order order = new Order(new Date(System.currentTimeMillis()));
|
final Order order = new Order(new Date(System.currentTimeMillis()));
|
||||||
|
final Customer customer = customerService.findCustomer(customerId);
|
||||||
|
order.setCustomer(customer);
|
||||||
validatorUtil.validate(order);
|
validatorUtil.validate(order);
|
||||||
return orderRepository.addOrder(order, customer_id);
|
return orderRepository.save(order);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Order addSession(Long id, Long session, Integer count) {
|
public Order addSession(Long id, Long sessionId, Integer count) {
|
||||||
final Optional<Order> order = orderRepository.addSession(id, session, count);
|
Optional<Order> optionalOrder = orderRepository.findById(id);
|
||||||
return order.orElseThrow(() -> new EntityNotFoundException("orderId: " + id + ", sessionId: " + session));
|
final Session currentSession = sessionService.findSession(sessionId);
|
||||||
|
if (optionalOrder.isEmpty()) {
|
||||||
|
throw new OrderNotFoundException(id);
|
||||||
|
}
|
||||||
|
Order currentOrder = optionalOrder.get();
|
||||||
|
final Integer countOrderSession = orderRepository.getCountOrderSession(id, sessionId);
|
||||||
|
if (currentSession.getCapacity() < count ||
|
||||||
|
(countOrderSession != null && countOrderSession + count > currentSession.getMaxCount())) {
|
||||||
|
throw new IllegalArgumentException(String.format("No more tickets in sessionId. Capacity: %1$s. Count: %2$s",
|
||||||
|
currentSession.getCapacity(), count));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (countOrderSession == null) {
|
||||||
|
currentOrder.addSession(new OrderSession(currentOrder, currentSession, count));
|
||||||
|
return orderRepository.save(currentOrder);
|
||||||
|
}
|
||||||
|
else if (countOrderSession + count <= currentSession.getMaxCount()) {
|
||||||
|
orderRepository.delete(currentOrder);
|
||||||
|
orderRepository.addSession(id, sessionId, countOrderSession + count);
|
||||||
|
}
|
||||||
|
|
||||||
|
return optionalOrder.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
@ -53,9 +80,19 @@ public class OrderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Order deleteSessionInOrder(Long id, Long session, Integer count) {
|
public void deleteSessionInOrder(Long id, Long session, Integer count) {
|
||||||
final Optional<Order> order = orderRepository.deleteSessionInOrder(id, session, count);
|
final Order currentOrder = findOrder(id);
|
||||||
return order.orElseThrow(() -> new EntityNotFoundException("orderId: " + id + ", sessionId: " + session));
|
final Session currentSession = sessionService.findSession(session);
|
||||||
|
Integer countOrderSession = orderRepository.getCountOrderSession(id, session);
|
||||||
|
if (countOrderSession == null)
|
||||||
|
throw new EntityNotFoundException();
|
||||||
|
if (count >= countOrderSession) {
|
||||||
|
orderRepository.deleteSessionInOrder(id, session);
|
||||||
|
sessionService.updateSession(session, currentSession.getPrice(),
|
||||||
|
currentSession.getCapacity() + countOrderSession);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
orderRepository.updateSessionInOrder(id, session, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
|
@ -39,9 +39,11 @@ public class SessionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Session updateSession(Long id, Double price) {
|
public Session updateSession(Long id, Double price, Integer capacity) {
|
||||||
final Session currentSession = findSession(id);
|
final Session currentSession = findSession(id);
|
||||||
currentSession.setPrice(price);
|
currentSession.setPrice(price);
|
||||||
|
if (capacity != -1)
|
||||||
|
currentSession.setCapacity(capacity);
|
||||||
validatorUtil.validate(currentSession);
|
validatorUtil.validate(currentSession);
|
||||||
return sessionRepository.save(currentSession);
|
return sessionRepository.save(currentSession);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user