From 3e3f33bebb85314ee262b09d1858193aecbd41fa Mon Sep 17 00:00:00 2001 From: "Kayashov.SM" Date: Mon, 28 Apr 2025 17:56:37 +0400 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D1=8B=D0=B5=20=D1=81=D1=83?= =?UTF-8?q?=D1=89=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=B1=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/kayashov/bar/config/KafkaConfig.java | 39 ---- .../bar/controller/BarController.java | 95 ++------- .../bar/controller/CocktailController.java | 18 +- .../bar/controller/OrderController.java | 86 -------- .../bar/controller/VisitorController.java | 36 ---- .../bar/controller/dto/OrderResponseDto.java | 24 --- .../controller/dto/SessionResponseDto.java | 21 -- .../dto/bar/CategoryResponseDto.java | 19 -- .../controller/dto/bar/GlassResponseDto.java | 19 -- .../controller/dto/bar/TagResponseDto.java | 19 -- .../cocktail/CocktailForListResponseDto.java | 38 +--- .../kayashov/bar/mapper/CocktailMapper.java | 112 +++-------- .../bar/model/AbstractSendMessage.java | 11 - .../kayashov/bar/model/entity/Alcoholic.java | 24 +++ .../bar/model/entity/AlcoholicEntity.java | 27 --- .../kayashov/bar/model/entity/BarEntity.java | 9 - .../model/entity/BarIngredientStorage.java | 3 - .../bar/model/entity/BarResident.java | 36 ---- .../kayashov/bar/model/entity/Category.java | 31 +++ .../bar/model/entity/CategoryEntity.java | 26 --- .../bar/model/entity/CocktailEntity.java | 40 ++-- .../ru/kayashov/bar/model/entity/Glass.java | 36 ++++ .../bar/model/entity/GlassEntity.java | 29 --- .../bar/model/entity/OrderStatus.java | 5 - .../ru/kayashov/bar/model/entity/Pay.java | 37 ---- .../ru/kayashov/bar/model/entity/Rating.java | 30 --- .../bar/model/entity/SessionEntity.java | 30 --- .../kayashov/bar/model/entity/StopList.java | 26 --- .../kayashov/bar/model/entity/TagEntity.java | 38 ---- .../ru/kayashov/bar/model/entity/Visitor.java | 20 +- .../bar/repository/AlcoholicRepository.java | 11 - .../bar/repository/BarResidentRepository.java | 7 - .../bar/repository/CategoryRepository.java | 11 - .../bar/repository/CocktailRepository.java | 13 ++ .../bar/repository/GlassRepository.java | 11 - .../bar/repository/OrdersRepository.java | 7 - .../bar/repository/RatingRepository.java | 11 - .../bar/repository/SessionRepository.java | 9 - .../bar/repository/StopListRepository.java | 7 - .../bar/repository/TagRepository.java | 11 - .../entity => repository}/UnitRepository.java | 5 +- .../bar/security/CustomUserDetailService.java | 19 +- .../service/AbstractMessageSerializer.java | 42 ---- .../kayashov/bar/service/CocktailService.java | 189 ++---------------- .../bar/service/IngredientService.java | 40 ++-- .../ru/kayashov/bar/service/KafkaSender.java | 28 --- .../ru/kayashov/bar/service/OrderService.java | 103 ---------- .../kayashov/bar/service/SessionService.java | 149 +------------- .../kayashov/bar/service/VisitorService.java | 61 +----- .../cocktail/CocktailApiService.java | 47 ----- src/main/resources/application.properties | 5 - 51 files changed, 233 insertions(+), 1537 deletions(-) delete mode 100644 src/main/java/ru/kayashov/bar/config/KafkaConfig.java delete mode 100644 src/main/java/ru/kayashov/bar/controller/OrderController.java delete mode 100644 src/main/java/ru/kayashov/bar/controller/VisitorController.java delete mode 100644 src/main/java/ru/kayashov/bar/controller/dto/OrderResponseDto.java delete mode 100644 src/main/java/ru/kayashov/bar/controller/dto/SessionResponseDto.java delete mode 100644 src/main/java/ru/kayashov/bar/controller/dto/bar/CategoryResponseDto.java delete mode 100644 src/main/java/ru/kayashov/bar/controller/dto/bar/GlassResponseDto.java delete mode 100644 src/main/java/ru/kayashov/bar/controller/dto/bar/TagResponseDto.java delete mode 100644 src/main/java/ru/kayashov/bar/model/AbstractSendMessage.java create mode 100644 src/main/java/ru/kayashov/bar/model/entity/Alcoholic.java delete mode 100644 src/main/java/ru/kayashov/bar/model/entity/AlcoholicEntity.java delete mode 100644 src/main/java/ru/kayashov/bar/model/entity/BarResident.java create mode 100644 src/main/java/ru/kayashov/bar/model/entity/Category.java delete mode 100644 src/main/java/ru/kayashov/bar/model/entity/CategoryEntity.java create mode 100644 src/main/java/ru/kayashov/bar/model/entity/Glass.java delete mode 100644 src/main/java/ru/kayashov/bar/model/entity/GlassEntity.java delete mode 100644 src/main/java/ru/kayashov/bar/model/entity/OrderStatus.java delete mode 100644 src/main/java/ru/kayashov/bar/model/entity/Pay.java delete mode 100644 src/main/java/ru/kayashov/bar/model/entity/Rating.java delete mode 100644 src/main/java/ru/kayashov/bar/model/entity/SessionEntity.java delete mode 100644 src/main/java/ru/kayashov/bar/model/entity/StopList.java delete mode 100644 src/main/java/ru/kayashov/bar/model/entity/TagEntity.java delete mode 100644 src/main/java/ru/kayashov/bar/repository/AlcoholicRepository.java delete mode 100644 src/main/java/ru/kayashov/bar/repository/BarResidentRepository.java delete mode 100644 src/main/java/ru/kayashov/bar/repository/CategoryRepository.java delete mode 100644 src/main/java/ru/kayashov/bar/repository/GlassRepository.java delete mode 100644 src/main/java/ru/kayashov/bar/repository/OrdersRepository.java delete mode 100644 src/main/java/ru/kayashov/bar/repository/RatingRepository.java delete mode 100644 src/main/java/ru/kayashov/bar/repository/SessionRepository.java delete mode 100644 src/main/java/ru/kayashov/bar/repository/StopListRepository.java delete mode 100644 src/main/java/ru/kayashov/bar/repository/TagRepository.java rename src/main/java/ru/kayashov/bar/{model/entity => repository}/UnitRepository.java (63%) delete mode 100644 src/main/java/ru/kayashov/bar/service/AbstractMessageSerializer.java delete mode 100644 src/main/java/ru/kayashov/bar/service/KafkaSender.java delete mode 100644 src/main/java/ru/kayashov/bar/service/OrderService.java delete mode 100644 src/main/java/ru/kayashov/bar/service/integration/cocktail/CocktailApiService.java diff --git a/src/main/java/ru/kayashov/bar/config/KafkaConfig.java b/src/main/java/ru/kayashov/bar/config/KafkaConfig.java deleted file mode 100644 index 4d06a56..0000000 --- a/src/main/java/ru/kayashov/bar/config/KafkaConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package ru.kayashov.bar.config; - -import org.apache.kafka.clients.producer.ProducerConfig; -import org.apache.kafka.common.serialization.StringSerializer; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.kafka.core.DefaultKafkaProducerFactory; -import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.core.ProducerFactory; -import ru.kayashov.bar.model.AbstractSendMessage; -import ru.kayashov.bar.service.AbstractMessageSerializer; - -import java.util.HashMap; -import java.util.Map; - -@Configuration -public class KafkaConfig { - - @Value("${spring.kafka.bootstrap-servers}") - private String bootstrapServers; - - @Bean - public ProducerFactory producerFactory() { - Map configProps = new HashMap<>(); - configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); - configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); - configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, AbstractMessageSerializer.class); - configProps.put(ProducerConfig.MAX_REQUEST_SIZE_CONFIG, 31457280); - return new DefaultKafkaProducerFactory<>(configProps); - } - - @Bean - public KafkaTemplate kafkaTemplate(ProducerFactory factory) { - KafkaTemplate broker = new KafkaTemplate<>(factory); - broker.flush(); - return broker; - } -} diff --git a/src/main/java/ru/kayashov/bar/controller/BarController.java b/src/main/java/ru/kayashov/bar/controller/BarController.java index fd52cda..da81439 100644 --- a/src/main/java/ru/kayashov/bar/controller/BarController.java +++ b/src/main/java/ru/kayashov/bar/controller/BarController.java @@ -2,33 +2,23 @@ package ru.kayashov.bar.controller; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.hibernate.Session; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import ru.kayashov.bar.controller.dto.SessionResponseDto; import ru.kayashov.bar.controller.dto.VisitorResponseDto; -import ru.kayashov.bar.controller.dto.bar.BarResponseDto; -import ru.kayashov.bar.controller.dto.bar.CategoryResponseDto; -import ru.kayashov.bar.controller.dto.bar.GlassResponseDto; -import ru.kayashov.bar.controller.dto.bar.TagResponseDto; import ru.kayashov.bar.controller.dto.cocktail.ReceiptResponseDto; -import ru.kayashov.bar.model.entity.BarResident; -import ru.kayashov.bar.model.entity.SessionEntity; +import ru.kayashov.bar.model.entity.Category; +import ru.kayashov.bar.model.entity.Glass; import ru.kayashov.bar.model.entity.Unit; -import ru.kayashov.bar.model.entity.UnitRepository; import ru.kayashov.bar.model.entity.UserRole; import ru.kayashov.bar.model.entity.Visitor; -import ru.kayashov.bar.repository.SessionRepository; -import ru.kayashov.bar.repository.TagRepository; +import ru.kayashov.bar.repository.UnitRepository; import ru.kayashov.bar.service.SessionService; import ru.kayashov.bar.service.VisitorService; +import java.util.Arrays; import java.util.List; @Slf4j @@ -39,51 +29,22 @@ import java.util.List; public class BarController { private final SessionService sessionService; - private final TagRepository tagRepository; - private final SessionRepository sessionRepository; private final VisitorService visitorService; private final UnitRepository unitRepository; - @GetMapping("/list") - public List getBarList(@RequestParam Boolean my) { - return sessionService.getBarList(my); - } - @GetMapping("/units") public List getUnitList() { return unitRepository.findAll(); } - @PostMapping("/addToMyList") - public void addToMyList(@RequestBody BarResponseDto dto) { - sessionService.addToMyList(dto); - } - - @PatchMapping("/enter") - public void enterChange(@RequestParam Long id, @RequestParam Boolean value) { - sessionService.enterChange(id, value); - } - - @GetMapping("tags") - public List getTags() { - return tagRepository.findAll() - .stream() - .map(TagResponseDto::mapToDto) - .toList(); - } - @GetMapping("glass") - public List getGlass() { - return sessionService.getGlassList().stream() - .map(GlassResponseDto::mapToDto) - .toList(); + public List getGlass() { + return Arrays.stream(Glass.values()).map(Glass::getName).toList(); } @GetMapping("category") - public List getCategory() { - return sessionService.getCategoryList().stream() - .map(CategoryResponseDto::mapToDto) - .toList(); + public List getCategory() { + return Arrays.stream(Category.values()).map(Category::getName).toList(); } @GetMapping("receipt") @@ -91,53 +52,21 @@ public class BarController { return sessionService.getReceiptList(id); } - @GetMapping("session") - public Long getSession() { - return sessionService.findActiveSession().getId(); - } - - @GetMapping("session/info") - public SessionResponseDto getSessionInfo() { - SessionEntity session = sessionService.findActiveSession(); - return SessionResponseDto.mapToDto(session); - } - - @PostMapping("session") - public void changeSessionStatus(@RequestParam Boolean value) { - if (value) { - SessionEntity entity = sessionService.createEmptySession(); - log.info("Открыта смена {}", entity.getId()); - return; - } - SessionEntity session = sessionService.findActiveSession(); - session.setIsActive(false); - sessionRepository.save(session); - log.info("Закрыта смена {}", session.getId()); - } - @GetMapping("/getMe") public VisitorResponseDto getMe() { Visitor visitor = visitorService.getCurrentVisitor(); - BarResident resident = visitor.getResidents().stream().filter(BarResident::getActive).findFirst().orElse(null); String role; Boolean invited; boolean active; - if(resident != null) { - role = resident.getRole().toString(); - invited = resident.getInvited(); - active = resident.getBar().getSessions().stream().anyMatch(SessionEntity::getIsActive); - } else { - role = UserRole.USER.toString(); - invited = false; - active = false; - } + role = UserRole.ADMIN.toString(); + invited = true; + active = true; VisitorResponseDto dto = VisitorResponseDto.mapToDto(visitor, invited, role, active); - log.info("Запрос информации о пользователе: {}-{} {}, {}вошел в бар{},в роли {}", + log.info("Запрос информации о пользователе: {}-{} {}, вошел в бар{},в роли {}", dto.getId(), dto.getName().strip(), dto.getLastName() != null ? dto.getLastName().strip() : "", invited ? "" : "не ", - resident != null ? " " + resident.getBar().getId() + "-" + resident.getBar().getName() : "", role); return dto; } diff --git a/src/main/java/ru/kayashov/bar/controller/CocktailController.java b/src/main/java/ru/kayashov/bar/controller/CocktailController.java index 3a63980..fd1f792 100644 --- a/src/main/java/ru/kayashov/bar/controller/CocktailController.java +++ b/src/main/java/ru/kayashov/bar/controller/CocktailController.java @@ -77,16 +77,6 @@ public class CocktailController { return cocktailService.getReceipts(id); } - @PostMapping("menuEdit") - public ResponseEntity inMenuEdit(@RequestParam Long id, @RequestParam Boolean value) { - try { - cocktailService.inMenuEdit(id, value); - return ResponseEntity.ok(new ErrorDto(null)); - } catch (Exception e) { - return ResponseEntity.ok(new ErrorDto(e.getMessage())); - } - } - @GetMapping("/modal") public CocktailModalDto getForModal(@RequestParam Long id) { return cocktailService.getForModal(id); @@ -110,16 +100,12 @@ public class CocktailController { @PutMapping("/favourite") public void addInFavourite(@RequestParam("id") Long id) { - Long visitorId = ((Visitor) SecurityContextHolder.getContext().getAuthentication().getPrincipal()) - .getId(); - cocktailService.editFavourite(id, visitorId, true); + cocktailService.editFavourite(id, true); } @DeleteMapping("/favourite") public void deleteFromFavourite(@RequestParam("id") Long id) { - Long visitorId = ((Visitor) SecurityContextHolder.getContext().getAuthentication().getPrincipal()) - .getId(); - cocktailService.editFavourite(id, visitorId, false); + cocktailService.editFavourite(id, false); } @PostMapping("/rating") diff --git a/src/main/java/ru/kayashov/bar/controller/OrderController.java b/src/main/java/ru/kayashov/bar/controller/OrderController.java deleted file mode 100644 index 06b9a9d..0000000 --- a/src/main/java/ru/kayashov/bar/controller/OrderController.java +++ /dev/null @@ -1,86 +0,0 @@ -package ru.kayashov.bar.controller; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import ru.kayashov.bar.controller.dto.OrderResponseDto; -import ru.kayashov.bar.model.AbstractSendMessage; -import ru.kayashov.bar.model.entity.BarEntity; -import ru.kayashov.bar.model.entity.BarResident; -import ru.kayashov.bar.model.entity.SessionEntity; -import ru.kayashov.bar.model.entity.Visitor; -import ru.kayashov.bar.service.KafkaSender; -import ru.kayashov.bar.service.OrderService; -import ru.kayashov.bar.service.VisitorService; - -import java.util.List; -import java.util.Objects; -import java.util.concurrent.ExecutorService; - -@Slf4j -@CrossOrigin(origins = {"*"}) -@RestController -@RequestMapping("/api/order") -@RequiredArgsConstructor -public class OrderController { - - @Value("${kafka-topic}") - private String topic; - - private final ExecutorService executor; - private final OrderService orderService; - private final KafkaSender kafkaSender; - private final VisitorService visitorService; - - @PostMapping - public void pay(@RequestParam Long cocktail) { - Long id = ((Visitor) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId(); - List messages = orderService.createOrder(id, cocktail); - executor.submit(() -> messages.forEach(m -> kafkaSender.send(topic, m))); - } - - @DeleteMapping - public void cancelOrder(@RequestParam Long id) { - AbstractSendMessage message = orderService.updateOrder(false, id); - executor.submit(() -> kafkaSender.send(topic, message)); - } - - @PutMapping - public void doneOrder(@RequestParam Long id) { - AbstractSendMessage message = orderService.updateOrder(true, id); - executor.submit(() -> kafkaSender.send(topic, message)); - } - - @GetMapping - public List getOrders() { - return orderService.getOrders() - .stream() - .map(OrderResponseDto::new) - .toList(); - } - - @GetMapping("/my") - public List getMyOrders() { - Visitor visitor = visitorService.getCurrentVisitor(); - return visitor.getResidents().stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .map(BarEntity::getSessions) - .flatMap(List::stream) - .filter(SessionEntity::getIsActive) - .map(SessionEntity::getOrders) - .flatMap(List::stream) - .filter(o -> Objects.equals(o.getVisitor().getId(), visitor.getId())) - .map(OrderResponseDto::new) - .toList(); - } -} diff --git a/src/main/java/ru/kayashov/bar/controller/VisitorController.java b/src/main/java/ru/kayashov/bar/controller/VisitorController.java deleted file mode 100644 index 10b3f11..0000000 --- a/src/main/java/ru/kayashov/bar/controller/VisitorController.java +++ /dev/null @@ -1,36 +0,0 @@ -package ru.kayashov.bar.controller; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import ru.kayashov.bar.controller.dto.VisitorResponseDto; -import ru.kayashov.bar.repository.VisitorsRepository; -import ru.kayashov.bar.service.VisitorService; - -import java.util.List; -import java.util.stream.Stream; - -@Slf4j -@CrossOrigin(origins = {"*"}) -@RestController -@RequestMapping("/api/visitors") -@RequiredArgsConstructor -public class VisitorController { - - private final VisitorService visitorService; - - @GetMapping - public List getVisitors() { - return visitorService.findAll(); - } - - @PostMapping("/invite") - public void invite(@RequestParam Boolean value, @RequestParam Long id) { - visitorService.invited(value, id); - } -} diff --git a/src/main/java/ru/kayashov/bar/controller/dto/OrderResponseDto.java b/src/main/java/ru/kayashov/bar/controller/dto/OrderResponseDto.java deleted file mode 100644 index 6bbb15b..0000000 --- a/src/main/java/ru/kayashov/bar/controller/dto/OrderResponseDto.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.kayashov.bar.controller.dto; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import ru.kayashov.bar.controller.dto.cocktail.CocktailSimpleResponseDto; -import ru.kayashov.bar.model.entity.Pay; - -@Getter -@Setter -@NoArgsConstructor -public class OrderResponseDto { - private Long id; - private CocktailSimpleResponseDto cocktail; - private VisitorResponseDto visitor; - private String status; - - public OrderResponseDto(Pay pay) { - id = pay.getId(); - cocktail = CocktailSimpleResponseDto.mapToDto(pay.getCocktail()); - visitor = VisitorResponseDto.mapToDto(pay.getVisitor()); - status = pay.getStatus().toString(); - } -} diff --git a/src/main/java/ru/kayashov/bar/controller/dto/SessionResponseDto.java b/src/main/java/ru/kayashov/bar/controller/dto/SessionResponseDto.java deleted file mode 100644 index 85b48c1..0000000 --- a/src/main/java/ru/kayashov/bar/controller/dto/SessionResponseDto.java +++ /dev/null @@ -1,21 +0,0 @@ -package ru.kayashov.bar.controller.dto; - -import lombok.Getter; -import lombok.Setter; -import ru.kayashov.bar.model.entity.SessionEntity; - -@Getter -@Setter -public class SessionResponseDto { - - private Long id; - private Boolean isActive; - - - public static SessionResponseDto mapToDto(SessionEntity session) { - SessionResponseDto dto = new SessionResponseDto(); - dto.setId(session.getId()); - dto.setIsActive(session.getIsActive()); - return dto; - } -} diff --git a/src/main/java/ru/kayashov/bar/controller/dto/bar/CategoryResponseDto.java b/src/main/java/ru/kayashov/bar/controller/dto/bar/CategoryResponseDto.java deleted file mode 100644 index d51c10e..0000000 --- a/src/main/java/ru/kayashov/bar/controller/dto/bar/CategoryResponseDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.kayashov.bar.controller.dto.bar; - -import lombok.Getter; -import lombok.Setter; -import ru.kayashov.bar.model.entity.CategoryEntity; - -@Getter -@Setter -public class CategoryResponseDto { - private int id; - private String name; - - public static CategoryResponseDto mapToDto(CategoryEntity entity) { - CategoryResponseDto dto = new CategoryResponseDto(); - dto.setId(entity.getId()); - dto.setName(entity.getName()); - return dto; - } -} diff --git a/src/main/java/ru/kayashov/bar/controller/dto/bar/GlassResponseDto.java b/src/main/java/ru/kayashov/bar/controller/dto/bar/GlassResponseDto.java deleted file mode 100644 index fe55cd8..0000000 --- a/src/main/java/ru/kayashov/bar/controller/dto/bar/GlassResponseDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.kayashov.bar.controller.dto.bar; - -import lombok.Getter; -import lombok.Setter; -import ru.kayashov.bar.model.entity.GlassEntity; - -@Getter -@Setter -public class GlassResponseDto { - private int id; - private String name; - - public static GlassResponseDto mapToDto(GlassEntity entity) { - GlassResponseDto dto = new GlassResponseDto(); - dto.setId(entity.getId()); - dto.setName(entity.getName()); - return dto; - } -} diff --git a/src/main/java/ru/kayashov/bar/controller/dto/bar/TagResponseDto.java b/src/main/java/ru/kayashov/bar/controller/dto/bar/TagResponseDto.java deleted file mode 100644 index 4e12b0a..0000000 --- a/src/main/java/ru/kayashov/bar/controller/dto/bar/TagResponseDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.kayashov.bar.controller.dto.bar; - -import lombok.Getter; -import lombok.Setter; -import ru.kayashov.bar.model.entity.TagEntity; - -@Getter -@Setter -public class TagResponseDto { - private Long id; - private String name; - - public static TagResponseDto mapToDto(TagEntity e) { - TagResponseDto dto = new TagResponseDto(); - dto.setId(e.getId()); - dto.setName(e.getName()); - return dto; - } -} diff --git a/src/main/java/ru/kayashov/bar/controller/dto/cocktail/CocktailForListResponseDto.java b/src/main/java/ru/kayashov/bar/controller/dto/cocktail/CocktailForListResponseDto.java index eb98c5d..e6d1a37 100644 --- a/src/main/java/ru/kayashov/bar/controller/dto/cocktail/CocktailForListResponseDto.java +++ b/src/main/java/ru/kayashov/bar/controller/dto/cocktail/CocktailForListResponseDto.java @@ -6,8 +6,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import ru.kayashov.bar.model.entity.CocktailEntity; -import ru.kayashov.bar.model.entity.Rating; -import ru.kayashov.bar.model.entity.TagEntity; import java.util.List; import java.util.stream.Collectors; @@ -48,43 +46,17 @@ public class CocktailForListResponseDto { d.setVideo(e.getVideo()); d.setInstructions(e.getInstructions()); - d.setCategory(e.getCategoryEntity().getName()); - d.setAlcoholic(e.getAlcoholicEntity().getName()); - d.setGlass(e.getGlassEntity().getName()); - -// d.setIsAllowed(e.getIsAllowed()); - - d.setTags(e.getTags().stream().map(TagEntity::getName).collect(Collectors.joining(","))); + d.setCategory(e.getCategory().getName()); + d.setAlcoholic(e.getAlcoholic().getValue()); + d.setGlass(e.getGlass().getName()); String components = e.getReceipt().stream().map(r -> r.getIngredient().getName()).collect(Collectors.joining(", ")); d.setComponents(components); d.setReceipt(e.getReceipt().stream().map(ReceiptResponseDto::mapToDto).toList()); RatingResponseDto rating = new RatingResponseDto(); - int sum = 0; - int count = 0; - for (Rating current : e.getRating()) { - //если у данного пользователя есть рейтинг для этого коктейля - if (current.getVisitor().getId().equals(visitorId)) { - //присваиваем избранное для конкретного пользователя - rating.setFavourite(current.isFavorite()); - //проверяем, ставил данный пользователь свою оценку этому коктейлю, если да, берем ее и возвращаем рейтинг - if (current.getRating() != 0) { - rating.setRating(current.getRating()); - d.setRating(rating); - return d; - } - } - //если пользователь ставил оценку, добавляем ее к сумме остальных оценок и увеличиваем количество оценивших - if (current.getRating() > 0) { - sum += current.getRating(); - count++; - } - } - //если после всех итераций есть какая-то сумма оценок - вычисляем среднюю - if (sum > 0) { - rating.setRating(sum / count); - } + rating.setFavourite(e.getIsFavorite()); + rating.setRating(e.getRating()); d.setRating(rating); return d; } diff --git a/src/main/java/ru/kayashov/bar/mapper/CocktailMapper.java b/src/main/java/ru/kayashov/bar/mapper/CocktailMapper.java index 975a546..8536c7f 100644 --- a/src/main/java/ru/kayashov/bar/mapper/CocktailMapper.java +++ b/src/main/java/ru/kayashov/bar/mapper/CocktailMapper.java @@ -5,20 +5,14 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import ru.kayashov.bar.controller.dto.cocktail.CocktailForIngredientModalDto; -import ru.kayashov.bar.controller.dto.cocktail.CocktailModalDto; import ru.kayashov.bar.controller.dto.cocktail.CocktailForListResponseDto; -import ru.kayashov.bar.controller.dto.ingredient.IngredientSimpleResponseDto; +import ru.kayashov.bar.controller.dto.cocktail.CocktailModalDto; import ru.kayashov.bar.controller.dto.cocktail.RatingResponseDto; import ru.kayashov.bar.controller.dto.cocktail.ReceiptResponseDto; -import ru.kayashov.bar.model.entity.BarEntity; -import ru.kayashov.bar.model.entity.BarIngredientStorage; -import ru.kayashov.bar.model.entity.BarResident; +import ru.kayashov.bar.controller.dto.ingredient.IngredientSimpleResponseDto; import ru.kayashov.bar.model.entity.CocktailEntity; import ru.kayashov.bar.model.entity.IngredientEntity; -import ru.kayashov.bar.model.entity.Rating; import ru.kayashov.bar.model.entity.ReceiptEntity; -import ru.kayashov.bar.model.entity.StopList; -import ru.kayashov.bar.model.entity.TagEntity; import ru.kayashov.bar.model.entity.Visitor; import ru.kayashov.bar.repository.VisitorsRepository; @@ -38,7 +32,7 @@ public class CocktailMapper { // if(checkUserNotInBar(visitor)) { // return new ArrayList<>(); // } - List barStopList = getStopList(visitor); + List barStopList = new ArrayList<>(); List allowedIngredients = getAllowedIngredients(visitor); return cocktails.stream() .map(c -> cocktailToDto(c, visitor, allowedIngredients, barStopList)) @@ -53,55 +47,46 @@ public class CocktailMapper { .id(e.getId()) .name(e.getName()) .image(e.getImage()) - .category(e.getCategoryEntity().getName()) - .alcoholic(e.getAlcoholicEntity().getName()) - .glass(e.getGlassEntity().getName()) - .tags(containCocktailTags(e.getTags())) + .category(e.getCategory().getName()) + .alcoholic(e.getAlcoholic().getValue()) + .glass(e.getGlass().getName()) .instructions(e.getInstructions()) .video(e.getVideo()) .receipt(createReceiptDtoList(e.getReceipt(), allowed)) .build(); } - private boolean checkUserNotInBar(Visitor visitor) { - return visitor.getResidents().stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .toList() - .isEmpty(); - } - private CocktailForListResponseDto cocktailToDto(CocktailEntity e, Visitor visitor, List allowedIngredients, List barStopList) { boolean hasError = false; int volume = 0; Float abv = 0f; Integer p = null; - for(ReceiptEntity receipt : e.getReceipt()) { - if(receipt.getCount() == null) { + for (ReceiptEntity receipt : e.getReceipt()) { + if (receipt.getCount() == null) { hasError = true; break; } - if(receipt.getUnit() == null) { + if (receipt.getUnit() == null) { hasError = true; break; } - if(!receipt.getUnit().getId().equals(74L) && abv != null) { + if (!receipt.getUnit().getId().equals(74L) && abv != null) { abv = null; } - if(abv != null) { + if (abv != null) { IngredientEntity ingredient = receipt.getIngredient(); - if(ingredient.getAlcohol() && ingredient.getAbv() == null) { + if (ingredient.getAlcohol() && ingredient.getAbv() == null) { hasError = true; break; } - if(ingredient.getAlcohol()) { + if (ingredient.getAlcohol()) { abv += ingredient.getAbv() * receipt.getCount(); } volume += receipt.getCount(); } } - if(!hasError && abv != null) { + if (!hasError && abv != null) { p = Math.round(abv / volume); } @@ -111,38 +96,27 @@ public class CocktailMapper { .image(e.getImage()) .hasError(hasError) .volume(p) - .category(e.getCategoryEntity().getName()) - .alcoholic(e.getAlcoholicEntity().getName()) - .glass(e.getGlassEntity().getName()) - .tags(containCocktailTags(e.getTags())) + .category(e.getCategory().getName()) + .alcoholic(e.getAlcoholic().getValue()) + .glass(e.getGlass().getName()) .components(containCocktailComponents(e.getReceipt())) - .rating(createRatingDto(e.getRating(), visitor)) + .rating(createRatingDto(e)) .isAllowed(calculateAllowed(e.getReceipt(), allowedIngredients)) .inMenu(!barStopList.contains(e.getId())) .build(); // d.setReceipt(e.getReceipt().stream().map(ReceiptResponseDto::mapToDto).toList()); } - private List getStopList(Visitor visitor) { - return visitor.getResidents().stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .map(BarEntity::getStops) - .flatMap(List::stream) - .map(StopList::getCocktail) - .map(CocktailEntity::getId) - .toList(); - } - private List getAllowedIngredients(Visitor visitor) { - return visitor.getResidents().stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .map(BarEntity::getIngredients) - .flatMap(List::stream) - .map(BarIngredientStorage::getIngredient) - .map(IngredientEntity::getId) - .toList(); + return new ArrayList<>(); +// return visitor.getResidents().stream() +// .filter(BarResident::getActive) +// .map(BarResident::getBar) +// .map(BarEntity::getIngredients) +// .flatMap(List::stream) +// .map(BarIngredientStorage::getIngredient) +// .map(IngredientEntity::getId) +// .toList(); } private Boolean calculateAllowed(List e, List allowedIngredients) { @@ -151,25 +125,10 @@ public class CocktailMapper { .allMatch(i -> allowedIngredients.contains(i.getId())); } - private RatingResponseDto createRatingDto(List rating, Visitor visitor) { + private RatingResponseDto createRatingDto(CocktailEntity entity) { RatingResponseDto result = new RatingResponseDto(); - int sum = 0; - int count = 0; - for (Rating current : rating) { - if (current.getVisitor().getId().equals(visitor.getId())) { - result.setFavourite(current.isFavorite()); - if (current.getRating() != 0) { - result.setRating(current.getRating()); - return result; - } - } else if (current.getRating() > 0) { - sum += current.getRating(); - count++; - } - } - if (sum > 0) { - result.setRating(sum / count); - } + result.setRating(entity.getRating()); + result.setFavourite(entity.getIsFavorite()); return result; } @@ -180,12 +139,6 @@ public class CocktailMapper { .collect(Collectors.joining(", ")); } - private String containCocktailTags(List tags) { - return tags.stream() - .map(TagEntity::getName) - .collect(Collectors.joining(",")); - } - private Visitor getCurrentVisitor() { Long visitorId = ((Visitor) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId(); return visitorsRepository.findById(visitorId).orElseThrow(RuntimeException::new); @@ -199,7 +152,7 @@ public class CocktailMapper { .name(e.getName()) .image(e.getImage()) .instructions(e.getInstructions()) - .rating(createRatingDto(e.getRating(), visitor)) + .rating(createRatingDto(e)) .receipt(createReceiptDtoList(e.getReceipt(), allowedIngredients)) .build(); } @@ -226,12 +179,11 @@ public class CocktailMapper { public CocktailForIngredientModalDto cocktailToIngredientDtoList(CocktailEntity e) { - Visitor visitor = getCurrentVisitor(); return CocktailForIngredientModalDto.builder() .id(e.getId()) .name(e.getName()) .image(e.getImage()) - .rating(createRatingDto(e.getRating(), visitor)) + .rating(createRatingDto(e)) .build(); } } diff --git a/src/main/java/ru/kayashov/bar/model/AbstractSendMessage.java b/src/main/java/ru/kayashov/bar/model/AbstractSendMessage.java deleted file mode 100644 index e498031..0000000 --- a/src/main/java/ru/kayashov/bar/model/AbstractSendMessage.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.kayashov.bar.model; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class AbstractSendMessage { - private Long chatId; - private String message; -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/model/entity/Alcoholic.java b/src/main/java/ru/kayashov/bar/model/entity/Alcoholic.java new file mode 100644 index 0000000..e72255c --- /dev/null +++ b/src/main/java/ru/kayashov/bar/model/entity/Alcoholic.java @@ -0,0 +1,24 @@ +package ru.kayashov.bar.model.entity; + + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum Alcoholic { + ALCOHOLIC("Алкогольный"), + NON_ALCOHOLIC("Безалкогольный"); + + private final String value; + + public static Alcoholic findValue(String value) { + for (Alcoholic alcoholic : Alcoholic.values()) { + if (alcoholic.getValue().equals(value)) { + return alcoholic; + } + } + throw new RuntimeException("Не существует значения " + value); + } + +} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/model/entity/AlcoholicEntity.java b/src/main/java/ru/kayashov/bar/model/entity/AlcoholicEntity.java deleted file mode 100644 index 70a9612..0000000 --- a/src/main/java/ru/kayashov/bar/model/entity/AlcoholicEntity.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.kayashov.bar.model.entity; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import lombok.Getter; -import lombok.Setter; - -import java.util.List; - -@Getter -@Setter -@Entity -@Table(name = "alcoholic") -public class AlcoholicEntity { - @Id - private Integer id; - @Column(name = "en_name") - private String enName; - private String name; - - @OneToMany(mappedBy = "alcoholicEntity") - private List cocktails; - -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/model/entity/BarEntity.java b/src/main/java/ru/kayashov/bar/model/entity/BarEntity.java index 5fc4f92..689150c 100644 --- a/src/main/java/ru/kayashov/bar/model/entity/BarEntity.java +++ b/src/main/java/ru/kayashov/bar/model/entity/BarEntity.java @@ -21,15 +21,6 @@ public class BarEntity { private Long id; private String name; - @OneToMany(mappedBy = "bar") - private List sessions; - @OneToMany(mappedBy = "bar") private List ingredients; - - @OneToMany(mappedBy = "bar") - private List visitors; - - @OneToMany(mappedBy = "bar") - private List stops; } diff --git a/src/main/java/ru/kayashov/bar/model/entity/BarIngredientStorage.java b/src/main/java/ru/kayashov/bar/model/entity/BarIngredientStorage.java index 839cfd5..952f204 100644 --- a/src/main/java/ru/kayashov/bar/model/entity/BarIngredientStorage.java +++ b/src/main/java/ru/kayashov/bar/model/entity/BarIngredientStorage.java @@ -22,7 +22,4 @@ public class BarIngredientStorage { @ManyToOne private BarEntity bar; - - //todo: с заделом на будущее - private String measure; } diff --git a/src/main/java/ru/kayashov/bar/model/entity/BarResident.java b/src/main/java/ru/kayashov/bar/model/entity/BarResident.java deleted file mode 100644 index 73be48e..0000000 --- a/src/main/java/ru/kayashov/bar/model/entity/BarResident.java +++ /dev/null @@ -1,36 +0,0 @@ -package ru.kayashov.bar.model.entity; - -import lombok.Getter; -import lombok.Setter; - -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToOne; - -import static ru.kayashov.bar.model.entity.UserRole.USER; - -@Entity -@Getter -@Setter -public class BarResident { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @ManyToOne - private Visitor visitor; - - @ManyToOne - private BarEntity bar; - - private Boolean invited = true; - private Boolean active = true; - - @Enumerated(value = EnumType.STRING) - private UserRole role = USER; -} diff --git a/src/main/java/ru/kayashov/bar/model/entity/Category.java b/src/main/java/ru/kayashov/bar/model/entity/Category.java new file mode 100644 index 0000000..e7b53fc --- /dev/null +++ b/src/main/java/ru/kayashov/bar/model/entity/Category.java @@ -0,0 +1,31 @@ +package ru.kayashov.bar.model.entity; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum Category { + COCKTAIL("Коктейль"), + PUNCH("Пунш"), + SHAKE("Шейк"), + OTHER("Другие"), + BEER("Пиво"), + HOMEMADE_LIQUEUR("Домашний ликер"), + SHOT("Шот"), + COCOA("Какао"), + COFFEE_TEA("Кофе-Чай"), + SOFT("Безалкогольный напиток"), + ORDINARY("Обычный напиток"); + + private final String name; + + public static Category findValue(String name) { + for (Category category : Category.values()) { + if (category.getName().equals(name)) { + return category; + } + } + throw new IllegalArgumentException(); + } +} diff --git a/src/main/java/ru/kayashov/bar/model/entity/CategoryEntity.java b/src/main/java/ru/kayashov/bar/model/entity/CategoryEntity.java deleted file mode 100644 index d8e84bf..0000000 --- a/src/main/java/ru/kayashov/bar/model/entity/CategoryEntity.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.kayashov.bar.model.entity; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import lombok.Getter; -import lombok.Setter; - -import java.util.List; - -@Getter -@Setter -@Entity -@Table(name = "category") -public class CategoryEntity { - @Id - private Integer id; - @Column(name = "en_name") - private String enName; - private String name; - - @OneToMany(mappedBy = "categoryEntity") - private List cocktails; -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/model/entity/CocktailEntity.java b/src/main/java/ru/kayashov/bar/model/entity/CocktailEntity.java index cbb497c..ed1bd46 100644 --- a/src/main/java/ru/kayashov/bar/model/entity/CocktailEntity.java +++ b/src/main/java/ru/kayashov/bar/model/entity/CocktailEntity.java @@ -9,12 +9,11 @@ import lombok.Setter; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; @@ -35,35 +34,28 @@ public class CocktailEntity { private String image; private String video; - @OneToMany(mappedBy = "cocktail", cascade = CascadeType.REMOVE) - private List stopLists; - @Column(columnDefinition = "text") private String instructions; - @ManyToOne - private CategoryEntity categoryEntity; - @ManyToOne - private AlcoholicEntity alcoholicEntity; - @ManyToOne - private GlassEntity glassEntity; + @Enumerated(EnumType.STRING) + private Category category; + + @Enumerated(EnumType.STRING) + private Alcoholic alcoholic; + + @Enumerated(EnumType.STRING) + private Glass glass; + + private Integer rating; + + @Column(name = "favourite") + private Boolean isFavorite; @OneToMany(mappedBy = "cocktail", cascade = CascadeType.REMOVE) private List receipt; - @ManyToMany - @JoinTable( - name = "cocktail_tags", - joinColumns = @JoinColumn(name = "cocktail_id"), - inverseJoinColumns = @JoinColumn(name = "tag_id") - ) - private List tags; - - @OneToMany(mappedBy = "cocktail", cascade = {CascadeType.PERSIST, CascadeType.REMOVE}) - private List rating; - @Override public String toString() { - return id + "-" + name + "-" + alcoholicEntity.getId(); + return id + "-" + name + "-" + alcoholic.getValue(); } } diff --git a/src/main/java/ru/kayashov/bar/model/entity/Glass.java b/src/main/java/ru/kayashov/bar/model/entity/Glass.java new file mode 100644 index 0000000..ae9cb61 --- /dev/null +++ b/src/main/java/ru/kayashov/bar/model/entity/Glass.java @@ -0,0 +1,36 @@ +package ru.kayashov.bar.model.entity; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum Glass { + HIGHBALL("Хайболл"), + COCKTAIL("Коктейльный бокал"), + COLLINS("Стакан"), + POUSSE("Рюмка на ножке"), + CHAMPAGNE("Бокал флюте"), + BRANDY("Коньячный бокал"), + HURRICANE("Ураган"), + COFFEE("Кофейная кружка"), + SHOT("Рюмка"), + JAR("Банка"), + PITCHER("Кувшин"), + CORDIAL("Ликерная рюмка"), + BEER("Пивной бокал"), + WINE("Бокал для вина"), + MARGARITA("Бокал Маргарита"); + + private final String name; + + public static Glass findValue(String name) { + for (Glass glass : Glass.values()) { + if (glass.name.equals(name)) { + return glass; + } + } + throw new RuntimeException("Не существует значение " + name); + } + +} diff --git a/src/main/java/ru/kayashov/bar/model/entity/GlassEntity.java b/src/main/java/ru/kayashov/bar/model/entity/GlassEntity.java deleted file mode 100644 index 0691b1a..0000000 --- a/src/main/java/ru/kayashov/bar/model/entity/GlassEntity.java +++ /dev/null @@ -1,29 +0,0 @@ -package ru.kayashov.bar.model.entity; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import lombok.Getter; -import lombok.Setter; - -import java.util.List; - -@Getter -@Setter -@Entity -@Table(name = "glass") -public class GlassEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Integer id; - @Column(name = "en_name", nullable = false, length = Integer.MAX_VALUE) - private String enName; - private String name; - - @OneToMany(mappedBy = "glassEntity") - private List cocktails; -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/model/entity/OrderStatus.java b/src/main/java/ru/kayashov/bar/model/entity/OrderStatus.java deleted file mode 100644 index 08df636..0000000 --- a/src/main/java/ru/kayashov/bar/model/entity/OrderStatus.java +++ /dev/null @@ -1,5 +0,0 @@ -package ru.kayashov.bar.model.entity; - -public enum OrderStatus { - NEW, PROCESS, DONE, CANCEL -} diff --git a/src/main/java/ru/kayashov/bar/model/entity/Pay.java b/src/main/java/ru/kayashov/bar/model/entity/Pay.java deleted file mode 100644 index f0a45db..0000000 --- a/src/main/java/ru/kayashov/bar/model/entity/Pay.java +++ /dev/null @@ -1,37 +0,0 @@ -package ru.kayashov.bar.model.entity; - -import lombok.Getter; -import lombok.Setter; - -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToOne; -import java.time.LocalDateTime; - -@Entity -@Getter -@Setter -public class Pay { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @ManyToOne - private CocktailEntity cocktail; - - @ManyToOne - private Visitor visitor; - - @Enumerated(EnumType.STRING) - private OrderStatus status; - - @ManyToOne - private SessionEntity session; - - private LocalDateTime createdAt; - private LocalDateTime closedAt; -} diff --git a/src/main/java/ru/kayashov/bar/model/entity/Rating.java b/src/main/java/ru/kayashov/bar/model/entity/Rating.java deleted file mode 100644 index 9110273..0000000 --- a/src/main/java/ru/kayashov/bar/model/entity/Rating.java +++ /dev/null @@ -1,30 +0,0 @@ -package ru.kayashov.bar.model.entity; - -import lombok.Getter; -import lombok.Setter; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToOne; - -@Entity -@Getter -@Setter -public class Rating { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - private int rating; - - private boolean isFavorite; - - @ManyToOne - private CocktailEntity cocktail; - - @ManyToOne - private Visitor visitor; -} diff --git a/src/main/java/ru/kayashov/bar/model/entity/SessionEntity.java b/src/main/java/ru/kayashov/bar/model/entity/SessionEntity.java deleted file mode 100644 index d771e18..0000000 --- a/src/main/java/ru/kayashov/bar/model/entity/SessionEntity.java +++ /dev/null @@ -1,30 +0,0 @@ -package ru.kayashov.bar.model.entity; - -import lombok.Getter; -import lombok.Setter; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import java.util.List; - -@Entity -@Getter -@Setter -@Table(name = "session") -public class SessionEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - private Boolean isActive; - - @ManyToOne - private BarEntity bar; - - @OneToMany(mappedBy = "session") - private List orders; -} diff --git a/src/main/java/ru/kayashov/bar/model/entity/StopList.java b/src/main/java/ru/kayashov/bar/model/entity/StopList.java deleted file mode 100644 index 236d207..0000000 --- a/src/main/java/ru/kayashov/bar/model/entity/StopList.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.kayashov.bar.model.entity; - -import lombok.Getter; -import lombok.Setter; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToOne; - -@Entity -@Getter -@Setter -public class StopList { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @ManyToOne - private BarEntity bar; - - @ManyToOne - private CocktailEntity cocktail; -} diff --git a/src/main/java/ru/kayashov/bar/model/entity/TagEntity.java b/src/main/java/ru/kayashov/bar/model/entity/TagEntity.java deleted file mode 100644 index 3c8281b..0000000 --- a/src/main/java/ru/kayashov/bar/model/entity/TagEntity.java +++ /dev/null @@ -1,38 +0,0 @@ -package ru.kayashov.bar.model.entity; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.Table; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import java.util.List; - -@Entity -@Table(name = "tag") -@Getter -@Setter -@NoArgsConstructor -public class TagEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - private String name; - @Column(name = "en_name") - private String enName; - - @ManyToMany() - @JoinTable( - name = "cocktail_tags", - inverseJoinColumns = @JoinColumn(name = "cocktail_id"), - joinColumns = @JoinColumn(name = "tag_id") - ) - private List cocktails; -} diff --git a/src/main/java/ru/kayashov/bar/model/entity/Visitor.java b/src/main/java/ru/kayashov/bar/model/entity/Visitor.java index 5204173..1519670 100644 --- a/src/main/java/ru/kayashov/bar/model/entity/Visitor.java +++ b/src/main/java/ru/kayashov/bar/model/entity/Visitor.java @@ -12,7 +12,6 @@ import javax.persistence.OneToMany; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; -import java.util.stream.Collectors; @Entity @Getter @@ -27,20 +26,15 @@ public class Visitor implements UserDetails { private String password; private LocalDateTime expired; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "visitor") - private List rating; - - @OneToMany(mappedBy = "visitor") - private List residents; - @Override public Collection getAuthorities() { - return residents.stream() - .filter(BarResident::getActive) - .map(BarResident::getRole) - .map(UserRole::getAuthorities) - .flatMap(Collection::stream) - .collect(Collectors.toSet()); + return UserRole.ADMIN.getAuthorities(); +// return residents.stream() +// .filter(BarResident::getActive) +// .map(BarResident::getRole) +// .map(UserRole::getAuthorities) +// .flatMap(Collection::stream) +// .collect(Collectors.toSet()); } @Override diff --git a/src/main/java/ru/kayashov/bar/repository/AlcoholicRepository.java b/src/main/java/ru/kayashov/bar/repository/AlcoholicRepository.java deleted file mode 100644 index fd9d5ef..0000000 --- a/src/main/java/ru/kayashov/bar/repository/AlcoholicRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.kayashov.bar.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.kayashov.bar.model.entity.AlcoholicEntity; - -import java.util.Optional; - -public interface AlcoholicRepository extends JpaRepository { - - Optional findByName(String name); -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/repository/BarResidentRepository.java b/src/main/java/ru/kayashov/bar/repository/BarResidentRepository.java deleted file mode 100644 index aa45f53..0000000 --- a/src/main/java/ru/kayashov/bar/repository/BarResidentRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.kayashov.bar.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.kayashov.bar.model.entity.BarResident; - -public interface BarResidentRepository extends JpaRepository { -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/repository/CategoryRepository.java b/src/main/java/ru/kayashov/bar/repository/CategoryRepository.java deleted file mode 100644 index df44e0c..0000000 --- a/src/main/java/ru/kayashov/bar/repository/CategoryRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.kayashov.bar.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.kayashov.bar.model.entity.CategoryEntity; - -import java.util.Optional; - -public interface CategoryRepository extends JpaRepository { - - Optional findByNameIgnoreCase(String name); -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/repository/CocktailRepository.java b/src/main/java/ru/kayashov/bar/repository/CocktailRepository.java index 82642c4..66ef64b 100644 --- a/src/main/java/ru/kayashov/bar/repository/CocktailRepository.java +++ b/src/main/java/ru/kayashov/bar/repository/CocktailRepository.java @@ -1,7 +1,20 @@ package ru.kayashov.bar.repository; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; import ru.kayashov.bar.model.entity.CocktailEntity; public interface CocktailRepository extends JpaRepository { + @Modifying + @Transactional + @Query("UPDATE CocktailEntity c SET c.isFavorite = :favorite WHERE c.id = :id") + void updateFavouriteById(@Param("id") Long id, @Param("favorite") Boolean favorite); + + @Modifying + @Transactional + @Query("UPDATE CocktailEntity c SET c.rating = :rating WHERE c.id = :id") + void updateRatingById(@Param("id") Long id, @Param("rating") Integer rating); } \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/repository/GlassRepository.java b/src/main/java/ru/kayashov/bar/repository/GlassRepository.java deleted file mode 100644 index b8d7cec..0000000 --- a/src/main/java/ru/kayashov/bar/repository/GlassRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.kayashov.bar.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.kayashov.bar.model.entity.GlassEntity; - -import java.util.Optional; - -public interface GlassRepository extends JpaRepository { - - Optional findByNameIgnoreCase(String enName); -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/repository/OrdersRepository.java b/src/main/java/ru/kayashov/bar/repository/OrdersRepository.java deleted file mode 100644 index 5cb1ab0..0000000 --- a/src/main/java/ru/kayashov/bar/repository/OrdersRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.kayashov.bar.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.kayashov.bar.model.entity.Pay; - -public interface OrdersRepository extends JpaRepository { -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/repository/RatingRepository.java b/src/main/java/ru/kayashov/bar/repository/RatingRepository.java deleted file mode 100644 index 67097cc..0000000 --- a/src/main/java/ru/kayashov/bar/repository/RatingRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.kayashov.bar.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.kayashov.bar.model.entity.Rating; - -import java.util.Optional; - -public interface RatingRepository extends JpaRepository { - - Optional findRatingByCocktailIdAndVisitorId(Long cocktailId, Long visitorId); -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/repository/SessionRepository.java b/src/main/java/ru/kayashov/bar/repository/SessionRepository.java deleted file mode 100644 index 97c7f8a..0000000 --- a/src/main/java/ru/kayashov/bar/repository/SessionRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package ru.kayashov.bar.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.kayashov.bar.model.entity.SessionEntity; - -import java.util.List; - -public interface SessionRepository extends JpaRepository { -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/repository/StopListRepository.java b/src/main/java/ru/kayashov/bar/repository/StopListRepository.java deleted file mode 100644 index 3b008db..0000000 --- a/src/main/java/ru/kayashov/bar/repository/StopListRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.kayashov.bar.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.kayashov.bar.model.entity.StopList; - -public interface StopListRepository extends JpaRepository { -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/repository/TagRepository.java b/src/main/java/ru/kayashov/bar/repository/TagRepository.java deleted file mode 100644 index f99f439..0000000 --- a/src/main/java/ru/kayashov/bar/repository/TagRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.kayashov.bar.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.kayashov.bar.model.entity.TagEntity; - -import java.util.Optional; - -public interface TagRepository extends JpaRepository { - - Optional findByName(String names); -} \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/model/entity/UnitRepository.java b/src/main/java/ru/kayashov/bar/repository/UnitRepository.java similarity index 63% rename from src/main/java/ru/kayashov/bar/model/entity/UnitRepository.java rename to src/main/java/ru/kayashov/bar/repository/UnitRepository.java index 9440ff9..d0464f2 100644 --- a/src/main/java/ru/kayashov/bar/model/entity/UnitRepository.java +++ b/src/main/java/ru/kayashov/bar/repository/UnitRepository.java @@ -1,8 +1,7 @@ -package ru.kayashov.bar.model.entity; +package ru.kayashov.bar.repository; import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.Optional; +import ru.kayashov.bar.model.entity.Unit; public interface UnitRepository extends JpaRepository { } \ No newline at end of file diff --git a/src/main/java/ru/kayashov/bar/security/CustomUserDetailService.java b/src/main/java/ru/kayashov/bar/security/CustomUserDetailService.java index 2a2f7c5..a7ceecd 100644 --- a/src/main/java/ru/kayashov/bar/security/CustomUserDetailService.java +++ b/src/main/java/ru/kayashov/bar/security/CustomUserDetailService.java @@ -7,14 +7,10 @@ import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import ru.kayashov.bar.model.entity.BarResident; import ru.kayashov.bar.model.entity.UserRole; -import ru.kayashov.bar.model.entity.Visitor; import ru.kayashov.bar.repository.VisitorsRepository; -import java.util.Collection; import java.util.Set; -import java.util.stream.Collectors; @Component @RequiredArgsConstructor @@ -29,12 +25,13 @@ public class CustomUserDetailService implements UserDetailsService { @Transactional public Set getAuthorities(long userId) { - Visitor visitor = repository.findById(userId).orElseThrow(RuntimeException::new); - return visitor.getResidents().stream() - .filter(BarResident::getActive) - .map(BarResident::getRole) - .map(UserRole::getAuthorities) - .flatMap(Collection::stream) - .collect(Collectors.toSet()); +// Visitor visitor = repository.findById(userId).orElseThrow(RuntimeException::new); + return UserRole.ADMIN.getAuthorities(); +// return visitor.getResidents().stream() +// .filter(BarResident::getActive) +// .map(BarResident::getRole) +// .map(UserRole::getAuthorities) +// .flatMap(Collection::stream) +// .collect(Collectors.toSet()); } } diff --git a/src/main/java/ru/kayashov/bar/service/AbstractMessageSerializer.java b/src/main/java/ru/kayashov/bar/service/AbstractMessageSerializer.java deleted file mode 100644 index c602dc3..0000000 --- a/src/main/java/ru/kayashov/bar/service/AbstractMessageSerializer.java +++ /dev/null @@ -1,42 +0,0 @@ -package ru.kayashov.bar.service; - -import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.extern.slf4j.Slf4j; -import org.apache.kafka.common.errors.SerializationException; -import org.apache.kafka.common.header.Headers; -import org.apache.kafka.common.serialization.Serializer; -import ru.kayashov.bar.model.AbstractSendMessage; - -import java.util.Map; - -@Slf4j -public class AbstractMessageSerializer implements Serializer { - - private final ObjectMapper objectMapper = new ObjectMapper(); - - @Override - public void configure(Map configs, boolean isKey) { - } - - @Override - public byte[] serialize(String topic, AbstractSendMessage data) { - try { - if (data == null){ - log.warn("Отсутствует объект для отправки сообщения"); - return null; - } - return objectMapper.writeValueAsBytes(data); - } catch (Exception e) { - throw new SerializationException("Ошибка сериализации объекта"); - } - } - - @Override - public byte[] serialize(String topic, Headers headers, AbstractSendMessage data) { - return Serializer.super.serialize(topic, headers, data); - } - - @Override - public void close() { - } -} diff --git a/src/main/java/ru/kayashov/bar/service/CocktailService.java b/src/main/java/ru/kayashov/bar/service/CocktailService.java index 7475d0d..3e872ed 100644 --- a/src/main/java/ru/kayashov/bar/service/CocktailService.java +++ b/src/main/java/ru/kayashov/bar/service/CocktailService.java @@ -5,7 +5,6 @@ import lombok.extern.slf4j.Slf4j; import org.hibernate.Session; import org.hibernate.query.Query; import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -16,29 +15,17 @@ import ru.kayashov.bar.controller.dto.cocktail.CocktailModalDto; import ru.kayashov.bar.controller.dto.cocktail.CocktailSimpleResponseDto; import ru.kayashov.bar.controller.dto.cocktail.ReceiptResponseDto; import ru.kayashov.bar.mapper.CocktailMapper; -import ru.kayashov.bar.model.entity.AlcoholicEntity; -import ru.kayashov.bar.model.entity.BarEntity; +import ru.kayashov.bar.model.entity.Alcoholic; import ru.kayashov.bar.model.entity.BarIngredientStorage; -import ru.kayashov.bar.model.entity.BarResident; -import ru.kayashov.bar.model.entity.CategoryEntity; +import ru.kayashov.bar.model.entity.Category; import ru.kayashov.bar.model.entity.CocktailEntity; -import ru.kayashov.bar.model.entity.GlassEntity; +import ru.kayashov.bar.model.entity.Glass; import ru.kayashov.bar.model.entity.IngredientEntity; -import ru.kayashov.bar.model.entity.Rating; import ru.kayashov.bar.model.entity.ReceiptEntity; -import ru.kayashov.bar.model.entity.StopList; -import ru.kayashov.bar.model.entity.TagEntity; import ru.kayashov.bar.model.entity.Visitor; -import ru.kayashov.bar.repository.AlcoholicRepository; -import ru.kayashov.bar.repository.CategoryRepository; import ru.kayashov.bar.repository.CocktailRepository; -import ru.kayashov.bar.repository.GlassRepository; import ru.kayashov.bar.repository.IngredientRepository; -import ru.kayashov.bar.repository.RatingRepository; import ru.kayashov.bar.repository.ReceiptRepository; -import ru.kayashov.bar.repository.StopListRepository; -import ru.kayashov.bar.repository.TagRepository; -import ru.kayashov.bar.repository.VisitorsRepository; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; @@ -55,7 +42,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; -import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -64,23 +50,15 @@ import java.util.stream.Stream; @RequiredArgsConstructor public class CocktailService { + private final CocktailRepository cocktailRepository; @Value("${cocktail.photo.path}") private String photoFolder; - private final StopListRepository stopListRepository; - private final CocktailMapper mapper; private final CocktailRepository repository; - private final AlcoholicRepository alcoholicRepository; - private final CategoryRepository categoryRepository; - private final GlassRepository glassRepository; - private final TagRepository tagRepository; - private final ReceiptRepository receiptRepository; private final IngredientRepository ingredientRepository; - private final VisitorsRepository visitorsRepository; - private final RatingRepository ratingRepository; private final VisitorService visitorService; private final EntityManager entityManager; @@ -104,18 +82,16 @@ public class CocktailService { criteriaQuery.distinct(true); if (!dto.getAll()) { - Long barId = visitor.getResidents().stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .map(BarEntity::getId) - .toList() - .get(0); +// Long barId = visitor.getResidents().stream() +// .filter(BarResident::getActive) +// .map(BarResident::getBar) +// .map(BarEntity::getId) +// .toList() +// .get(0); + Long barId = 1L; List cocktailIds = getAllowedCocktailIds(barId); Predicate pr = root.get("id").in(cocktailIds); predicates.add(pr); - - List stopListIds = getStopListIds(visitor); - predicates.add(cb.not(root.get("id").in(stopListIds))); } if (!dto.getSearch().isEmpty()) { @@ -130,12 +106,7 @@ public class CocktailService { } if (dto.getOnlyFavourite()) { - List favouriteCocktailsId = visitor.getRating().stream() - .filter(Rating::isFavorite) - .map(Rating::getCocktail) - .map(CocktailEntity::getId) - .toList(); - predicates.add(root.get("id").in(favouriteCocktailsId)); + predicates.add(cb.isTrue(root.get("favourite"))); } if (dto.getGlass() != null && !dto.getGlass().isEmpty()) { @@ -150,19 +121,6 @@ public class CocktailService { predicates.add(root.get("alcoholicEntity").get("name").in(dto.getAlcohol())); } - if (!dto.getTags().isEmpty()) { - Join tagJoin = root.join("tags", JoinType.LEFT); - predicates.add(tagJoin.get("name").in(dto.getTags())); - } - - if (dto.getInMenu() != null) { - List stopListIds = getStopListIds(visitor); - switch (dto.getInMenu()) { - case "Есть в меню" -> predicates.add(cb.not(root.get("id").in(stopListIds))); - case "Нет в меню" -> predicates.add(root.get("id").in(stopListIds)); - } - } - if (dto.getNotHaveCount() != null) { List approveCocktail = findICountCocktailIds(dto.getNotHaveCount(), visitor, dto.getIngredient()); predicates.add(root.get("id").in(approveCocktail)); @@ -195,14 +153,7 @@ public class CocktailService { } private List findICountCocktailIds(Integer iCount, Visitor visitor, List ingredientFilter) { - List allowedIngredient = visitor.getResidents().stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .map(BarEntity::getIngredients) - .flatMap(List::stream) - .map(BarIngredientStorage::getIngredient) - .map(IngredientEntity::getId) - .toList(); + List allowedIngredient = new ArrayList<>(); Stream> receiptStream = receiptRepository.findAll() .stream() @@ -231,18 +182,6 @@ public class CocktailService { .count()); } - private List getStopListIds(Visitor visitor) { - return visitor.getResidents() - .stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .map(BarEntity::getStops) - .flatMap(List::stream) - .map(StopList::getCocktail) - .map(CocktailEntity::getId) - .toList(); - } - private List getAllowedCocktailIds(Long barId) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery query = cb.createQuery(Long.class); @@ -303,72 +242,26 @@ public class CocktailService { cocktail = repository.findById(dto.getId()) .orElseThrow(() -> new RuntimeException("Не удалось найти коктейль с id " + dto.getId())); } - CategoryEntity category = categoryRepository.findByNameIgnoreCase(dto.getCategory()) - .orElseThrow(() -> new RuntimeException("Не удалось найти категорию " + dto.getCategory())); - GlassEntity glassEntity = glassRepository.findByNameIgnoreCase(dto.getGlass()) - .orElseThrow(() -> new RuntimeException("Не удалось найти посуду" + dto.getGlass())); - AlcoholicEntity alcoholicEntity = alcoholicRepository.findByName(dto.getAlcoholic()) - .orElseThrow(() -> new RuntimeException("Не удалось найти алкогольность" + dto.getAlcoholic())); cocktail.setName(dto.getName()); cocktail.setInstructions(dto.getInstructions()); cocktail.setImage(dto.getImage()); cocktail.setVideo(cocktail.getVideo()); - cocktail.setCategoryEntity(category); - cocktail.setGlassEntity(glassEntity); - cocktail.setAlcoholicEntity(alcoholicEntity); - cocktail.setTags(findTags(dto.getTags())); + cocktail.setCategory(Category.findValue(dto.getCategory())); + cocktail.setGlass(Glass.findValue(dto.getGlass())); + cocktail.setAlcoholic(Alcoholic.findValue(dto.getAlcoholic())); cocktail.setRating(cocktail.getRating()); repository.save(cocktail); editCocktailReceipts(cocktail.getReceipt(), dto.getReceipt(), cocktail); } - public void editFavourite(Long cocktailId, Long visitorId, boolean put) { - Visitor visitor = visitorsRepository.findById(visitorId).orElseThrow(); - - Optional ratingOpt = ratingRepository.findRatingByCocktailIdAndVisitorId(cocktailId, visitorId); - - Rating rating; - if (put) { - CocktailEntity cocktail = repository.findById(cocktailId) - .orElseThrow(); - if (ratingOpt.isEmpty()) { - rating = new Rating(); - rating.setCocktail(cocktail); - rating.setVisitor(visitor); - } else { - rating = ratingOpt.get(); - } - rating.setFavorite(true); - ratingRepository.save(rating); - } else { - if (ratingOpt.isPresent()) { - rating = ratingOpt.get(); - rating.setFavorite(false); - ratingRepository.save(rating); - } - } + public void editFavourite(Long cocktailId, boolean put) { + cocktailRepository.updateFavouriteById(cocktailId, put); } public void setRating(Long cocktailId, Integer rating) { - Long id = ((Visitor) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId(); - Visitor visitor = visitorsRepository.findById(id) - .orElseThrow(); - - Rating rate; - Optional rateOpt = ratingRepository.findRatingByCocktailIdAndVisitorId(cocktailId, id); - if (rateOpt.isEmpty()) { - rate = new Rating(); - rate.setVisitor(visitor); - rate.setCocktail(repository.findById(cocktailId).orElseThrow()); - rate.setFavorite(false); - } else { - rate = rateOpt.get(); - } - - rate.setRating(rating); - ratingRepository.save(rate); + cocktailRepository.updateRatingById(cocktailId, rating); } private void editCocktailReceipts(List old, List actual, CocktailEntity cocktail) { @@ -419,50 +312,6 @@ public class CocktailService { receiptRepository.save(receiptEntity); } - private List findTags(String tagString) { - if (tagString == null || tagString.isEmpty()) { - return new ArrayList<>(); - } - List tags = new ArrayList<>(); - for (String name : tagString.split(",")) { - if (name.isEmpty()) { - continue; - } - TagEntity tagEntity = tagRepository.findByName(name) - .orElseThrow(() -> new RuntimeException("Не удалось найти тег " + name)); - tags.add(tagEntity); - } - return tags; - } - - public void inMenuEdit(Long id, Boolean value) { - Visitor visitor = visitorService.getCurrentVisitor(); - CocktailEntity entity = repository.findById(id) - .orElseThrow(() -> new RuntimeException("Не удалось найти коктейль с id " + id)); - - BarEntity bar = visitor.getResidents().stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .toList() - .get(0); - - Optional stop = bar.getStops().stream() - .filter(s -> Objects.equals(s.getCocktail().getId(), id)) - .findFirst(); - - if (value && stop.isPresent()) { - stopListRepository.deleteById(stop.get().getId()); - return; - } - - if (!value && stop.isEmpty()) { - StopList stopList = new StopList(); - stopList.setCocktail(entity); - stopList.setBar(bar); - stopListRepository.save(stopList); - } - } - public CocktailModalDto getForModal(Long id) { CocktailEntity cocktail = repository.findById(id).orElseThrow(RuntimeException::new); return mapper.cocktailToModalDto(cocktail); diff --git a/src/main/java/ru/kayashov/bar/service/IngredientService.java b/src/main/java/ru/kayashov/bar/service/IngredientService.java index 7653653..b47bf50 100644 --- a/src/main/java/ru/kayashov/bar/service/IngredientService.java +++ b/src/main/java/ru/kayashov/bar/service/IngredientService.java @@ -6,18 +6,13 @@ import org.springframework.stereotype.Service; import ru.kayashov.bar.controller.dto.ingredient.IngredientResponseDto; import ru.kayashov.bar.controller.dto.ingredient.IngredientSimpleResponseDto; import ru.kayashov.bar.mapper.IngredientMapper; -import ru.kayashov.bar.model.entity.BarEntity; -import ru.kayashov.bar.model.entity.BarIngredientStorage; import ru.kayashov.bar.repository.BarIngredientStorageRepository; -import ru.kayashov.bar.model.entity.BarResident; import ru.kayashov.bar.model.entity.IngredientEntity; import ru.kayashov.bar.model.entity.TypeEntity; -import ru.kayashov.bar.model.entity.Visitor; import ru.kayashov.bar.repository.IngredientRepository; import ru.kayashov.bar.repository.TypeRepository; import java.util.List; -import java.util.Objects; @Slf4j @Service @@ -58,27 +53,20 @@ public class IngredientService { } public void changeBarIngredient(Long id, boolean isHave) { - Visitor visitor = visitorService.getCurrentVisitor(); - BarEntity bar = visitor.getResidents() - .stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .toList() - .get(0); - List storage = bar.getIngredients(); - IngredientEntity ingredientEntity = getIngredientById(id); - if (isHave) { - BarIngredientStorage entity = new BarIngredientStorage(); - entity.setBar(bar); - entity.setIngredient(ingredientEntity); - //todo: прикрутить позже entity.setMeasure(); - entity = barIngredientStorageRepository.save(entity); - storage.add(entity); - } else { - storage.stream() - .filter(s -> Objects.equals(s.getIngredient().getId(), ingredientEntity.getId())) - .forEach(s -> barIngredientStorageRepository.deleteById(s.getId())); - } +// Visitor visitor = visitorService.getCurrentVisitor(); +// List storage = bar.getIngredients(); +// IngredientEntity ingredientEntity = getIngredientById(id); +// if (isHave) { +// BarIngredientStorage entity = new BarIngredientStorage(); +// entity.setBar(bar); +// entity.setIngredient(ingredientEntity); +// entity = barIngredientStorageRepository.save(entity); +// storage.add(entity); +// } else { +// storage.stream() +// .filter(s -> Objects.equals(s.getIngredient().getId(), ingredientEntity.getId())) +// .forEach(s -> barIngredientStorageRepository.deleteById(s.getId())); +// } } public boolean saveChange(IngredientResponseDto dto) { diff --git a/src/main/java/ru/kayashov/bar/service/KafkaSender.java b/src/main/java/ru/kayashov/bar/service/KafkaSender.java deleted file mode 100644 index 0decc24..0000000 --- a/src/main/java/ru/kayashov/bar/service/KafkaSender.java +++ /dev/null @@ -1,28 +0,0 @@ -package ru.kayashov.bar.service; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.stereotype.Component; -import ru.kayashov.bar.model.AbstractSendMessage; - -import java.util.Arrays; - -@Slf4j -@Component -@RequiredArgsConstructor -public class KafkaSender { - - private final KafkaTemplate kafkaTemplate; - - public String send(String topic, AbstractSendMessage message) { - try { - kafkaTemplate.send(topic, message); - log.info("отправлено сообщение в топик {}, сообщение {}", topic, message.getMessage()); - return null; - } catch (Exception e) { - log.error(e.getMessage(), Arrays.toString(e.getStackTrace())); - return e.getMessage(); - } - } -} diff --git a/src/main/java/ru/kayashov/bar/service/OrderService.java b/src/main/java/ru/kayashov/bar/service/OrderService.java deleted file mode 100644 index 53b5f52..0000000 --- a/src/main/java/ru/kayashov/bar/service/OrderService.java +++ /dev/null @@ -1,103 +0,0 @@ -package ru.kayashov.bar.service; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import ru.kayashov.bar.model.AbstractSendMessage; -import ru.kayashov.bar.model.entity.BarEntity; -import ru.kayashov.bar.model.entity.BarResident; -import ru.kayashov.bar.model.entity.CocktailEntity; -import ru.kayashov.bar.model.entity.Pay; -import ru.kayashov.bar.model.entity.SessionEntity; -import ru.kayashov.bar.model.entity.Visitor; -import ru.kayashov.bar.repository.CocktailRepository; -import ru.kayashov.bar.repository.OrdersRepository; - -import java.time.LocalDateTime; -import java.util.List; - -import static ru.kayashov.bar.model.entity.OrderStatus.CANCEL; -import static ru.kayashov.bar.model.entity.OrderStatus.DONE; -import static ru.kayashov.bar.model.entity.OrderStatus.NEW; -import static ru.kayashov.bar.model.entity.UserRole.ADMIN; -import static ru.kayashov.bar.model.entity.UserRole.BARMEN; - -@Service -@RequiredArgsConstructor -public class OrderService { - - private final VisitorService visitorService; - private final CocktailRepository cocktailRepository; - private final OrdersRepository ordersRepository; - - /** - * Новый заказ - */ - public List createOrder(Long visitorId, Long cocktailId) { - Visitor visitor = visitorService.findById(visitorId); - BarEntity bar = visitor.getResidents().stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .toList() - .get(0); - SessionEntity session = bar.getSessions().stream() - .filter(SessionEntity::getIsActive) - .toList() - .get(0); - - CocktailEntity cocktail = cocktailRepository.findById(cocktailId).orElseThrow(); - - Pay pay = new Pay(); - pay.setStatus(NEW); - pay.setVisitor(visitor); - pay.setCocktail(cocktail); - pay.setSession(session); - pay.setCreatedAt(LocalDateTime.now()); - ordersRepository.save(pay); - - return bar.getVisitors().stream() - .filter(BarResident::getActive) - .filter(BarResident::getInvited) - .filter(b -> b.getRole() == ADMIN || b.getRole() == BARMEN) - .map(BarResident::getVisitor) - .map(admin -> createOrderMessage(admin, visitor, cocktail)) - .toList(); - } - - private AbstractSendMessage createOrderMessage(Visitor admin, Visitor client, CocktailEntity cocktail) { - return AbstractSendMessage.builder() - .chatId(admin.getId()) - .message(client.getName() + " " + client.getLastName() + " заказал(а) коктейль " + cocktail.getName()) - .build(); - } - - /** - * Обновить статус заказа - */ - public AbstractSendMessage updateOrder(boolean check, long l) { - Pay pay = ordersRepository.findById(l).orElseThrow(); - pay.setStatus(check ? DONE : CANCEL); - pay.setClosedAt(LocalDateTime.now()); - ordersRepository.save(pay); - - return AbstractSendMessage.builder() - .chatId(pay.getVisitor().getId()) - .message("Коктейль " + pay.getCocktail().getName() + (check ? " готов" : " отменен")) - .build(); - } - - /** - * Получить заказ из очереди - */ - public List getOrders() { - Visitor visitor = visitorService.getCurrentVisitor(); - return visitor.getResidents().stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .map(BarEntity::getSessions) - .flatMap(List::stream) - .filter(SessionEntity::getIsActive) - .map(SessionEntity::getOrders) - .flatMap(List::stream) - .toList(); - } -} diff --git a/src/main/java/ru/kayashov/bar/service/SessionService.java b/src/main/java/ru/kayashov/bar/service/SessionService.java index 438d090..ce1d8a3 100644 --- a/src/main/java/ru/kayashov/bar/service/SessionService.java +++ b/src/main/java/ru/kayashov/bar/service/SessionService.java @@ -4,27 +4,13 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; -import ru.kayashov.bar.controller.dto.bar.BarResponseDto; -import ru.kayashov.bar.controller.dto.ingredient.IngredientSimpleResponseDto; import ru.kayashov.bar.controller.dto.cocktail.ReceiptResponseDto; -import ru.kayashov.bar.model.entity.BarEntity; -import ru.kayashov.bar.model.entity.BarResident; -import ru.kayashov.bar.repository.BarResidentRepository; -import ru.kayashov.bar.model.entity.CategoryEntity; +import ru.kayashov.bar.controller.dto.ingredient.IngredientSimpleResponseDto; import ru.kayashov.bar.model.entity.CocktailEntity; -import ru.kayashov.bar.model.entity.GlassEntity; -import ru.kayashov.bar.model.entity.SessionEntity; -import ru.kayashov.bar.model.entity.UserRole; import ru.kayashov.bar.model.entity.Visitor; -import ru.kayashov.bar.repository.BarEntityRepository; -import ru.kayashov.bar.repository.CategoryRepository; import ru.kayashov.bar.repository.CocktailRepository; -import ru.kayashov.bar.repository.GlassRepository; -import ru.kayashov.bar.repository.RatingRepository; -import ru.kayashov.bar.repository.SessionRepository; import ru.kayashov.bar.repository.VisitorsRepository; -import java.util.Comparator; import java.util.List; @Slf4j @@ -32,39 +18,8 @@ import java.util.List; @RequiredArgsConstructor public class SessionService { - private final SessionRepository sessionRepository; private final VisitorsRepository visitorsRepository; - private final GlassRepository glassRepository; - private final CategoryRepository categoryRepository; private final CocktailRepository cocktailRepository; - private final RatingRepository ratingRepository; - private final VisitorService visitorService; - private final BarEntityRepository barEntityRepository; - private final BarResidentRepository barResidentRepository; - - /** - * Поиск матрицы коктейлей - * Справочник состоит из количества недостающих компонентов и списка коктейлей - */ -// public Map> getCocktailMatrix() { -// return cocktailRepository.findAll().stream() -// .collect(Collectors.groupingBy(this::getRemainingIngredient)); -// } - - /** - * Поиск активной сессии - */ - public SessionEntity findActiveSession() { - List sessions = sessionRepository.findAll() - .stream() - .sorted(Comparator.comparingLong(SessionEntity::getId).reversed()) - .limit(1) - .toList(); - if (!sessions.isEmpty()) { - return sessions.get(0); - } - return createEmptySession(); - } public Visitor getVisitor() { Long id = ((Visitor) SecurityContextHolder.getContext() @@ -75,35 +30,6 @@ public class SessionService { .orElseThrow(); } - public SessionEntity createEmptySession() { - BarEntity bar = visitorService.getCurrentVisitor().getResidents() - .stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .toList() - .get(0); - SessionEntity session = new SessionEntity(); - session.setBar(bar); - session.setIsActive(true); - return sessionRepository.save(session); - } - -// private long getRemainingIngredient(CocktailEntity cocktail) { -// return cocktail.getReceipt() -// .stream() -// .map(ReceiptEntity::getIngredient) -//// .map(IngredientEntity::getIsHave) -// .filter(b -> !b).count(); -// } - - public List getGlassList() { - return glassRepository.findAll(); - } - - public List getCategoryList() { - return categoryRepository.findAll(); - } - public List getReceiptList(Long cocktailId) { CocktailEntity cocktail = cocktailRepository.findById(cocktailId).orElseThrow(); return cocktail.getReceipt().stream() @@ -114,77 +40,4 @@ public class SessionService { .build()) .toList(); } - - public List getBarList(Boolean my) { - List residents = visitorService.getCurrentVisitor().getResidents(); - if (my) { - return residents.stream() - .map(r -> mapBarToDto(r.getBar(), r, true)) - .toList(); - } - List myBar = residents.stream() - .map(BarResident::getBar) - .map(BarEntity::getId) - .toList(); - return barEntityRepository.findAll().stream() - .filter(b -> !myBar.contains(b.getId())) - .map(b -> mapBarToDto(b, null, false)) - .toList(); - } - - public void addToMyList(BarResponseDto dto) { - Visitor visitor = visitorService.getCurrentVisitor(); - BarEntity bar = barEntityRepository.findById(dto.getId()).orElseThrow(); - - boolean noEnter = visitor.getResidents().stream().filter(BarResident::getActive).toList().isEmpty(); - - BarResident resident = new BarResident(); - resident.setBar(bar); - resident.setInvited(true); - resident.setRole(UserRole.USER); - resident.setVisitor(visitor); - resident.setActive(noEnter); - barResidentRepository.save(resident); - } - - - public void enterChange(Long id, Boolean value) { - Visitor visitor = visitorService.getCurrentVisitor(); - List residents = visitor.getResidents() - .stream() - .filter(r -> r.getBar().getId().equals(id)) - .toList(); - if(residents.isEmpty()) { - throw new RuntimeException("Бар с id " + id + " отсутствует в списке баров пользователя с id " + visitor.getId()); - } - residents.stream() - .peek(r -> r.setActive(value)) - .forEach(barResidentRepository::save); - - log.info("Пользователь {}-{} {} {} c id {}", - visitor.getId(), - visitor.getName().strip(), - visitor.getLastName().strip(), - value ? "вошел в бар" : "вышел из бара", - id); - } - - private BarResponseDto mapBarToDto(BarEntity bar, BarResident resident, Boolean my) { - BarResponseDto dto = new BarResponseDto(); - dto.setId(bar.getId()); - dto.setName(bar.getName()); - boolean barOpen = !bar.getSessions().stream().filter(SessionEntity::getIsActive).toList().isEmpty(); - if (my) { - boolean invited = resident.getInvited(); - dto.setOpen(barOpen && invited); - dto.setEnter(resident.getActive()); - dto.setMyRole(resident.getRole().toString()); - } else { - dto.setOpen(barOpen); - dto.setEnter(false); - dto.setMyRole(UserRole.USER.toString()); - } - - return dto; - } } diff --git a/src/main/java/ru/kayashov/bar/service/VisitorService.java b/src/main/java/ru/kayashov/bar/service/VisitorService.java index 4a5ddb1..b58a96e 100644 --- a/src/main/java/ru/kayashov/bar/service/VisitorService.java +++ b/src/main/java/ru/kayashov/bar/service/VisitorService.java @@ -3,24 +3,17 @@ package ru.kayashov.bar.service; import lombok.RequiredArgsConstructor; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; -import ru.kayashov.bar.controller.dto.VisitorResponseDto; -import ru.kayashov.bar.model.entity.BarEntity; -import ru.kayashov.bar.model.entity.BarIngredientStorage; -import ru.kayashov.bar.model.entity.BarResident; -import ru.kayashov.bar.repository.BarResidentRepository; -import ru.kayashov.bar.model.entity.IngredientEntity; import ru.kayashov.bar.model.entity.Visitor; import ru.kayashov.bar.repository.VisitorsRepository; +import java.util.ArrayList; import java.util.List; -import java.util.Objects; @Service @RequiredArgsConstructor public class VisitorService { private final VisitorsRepository visitorsRepository; - private final BarResidentRepository barResidentRepository; public Visitor getCurrentVisitor() { Long id = ((Visitor) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId(); @@ -32,47 +25,15 @@ public class VisitorService { } public List getAllowedIngredients() { - return getCurrentVisitor().getResidents() - .stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .map(BarEntity::getIngredients) - .flatMap(List::stream) - .map(BarIngredientStorage::getIngredient) - .map(IngredientEntity::getId) - .toList(); - } - - public List findAll() { - return getCurrentVisitor().getResidents().stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .map(BarEntity::getVisitors) - .flatMap(List::stream) - .map(this::mapBarResidentToDto) - .toList(); - } - - private VisitorResponseDto mapBarResidentToDto(BarResident resident) { - VisitorResponseDto dto = new VisitorResponseDto(); - dto.setId(resident.getVisitor().getId()); - dto.setName(resident.getVisitor().getName()); - dto.setLastName(resident.getVisitor().getLastName()); - dto.setInvited(resident.getInvited()); - dto.setRole(resident.getRole().toString()); - dto.setIsActive(resident.getActive()); - return dto; - } - - public void invited(Boolean value, Long id) { - getCurrentVisitor().getResidents() - .stream() - .filter(BarResident::getActive) - .map(BarResident::getBar) - .map(BarEntity::getVisitors) - .flatMap(List::stream) - .filter(v -> Objects.equals(v.getVisitor().getId(), id)) - .peek(v -> v.setInvited(value)) - .forEach(barResidentRepository::save); + return new ArrayList<>(); +// return getCurrentVisitor().getResidents() +// .stream() +// .filter(BarResident::getActive) +// .map(BarResident::getBar) +// .map(BarEntity::getIngredients) +// .flatMap(List::stream) +// .map(BarIngredientStorage::getIngredient) +// .map(IngredientEntity::getId) +// .toList(); } } diff --git a/src/main/java/ru/kayashov/bar/service/integration/cocktail/CocktailApiService.java b/src/main/java/ru/kayashov/bar/service/integration/cocktail/CocktailApiService.java deleted file mode 100644 index 8d8e3a9..0000000 --- a/src/main/java/ru/kayashov/bar/service/integration/cocktail/CocktailApiService.java +++ /dev/null @@ -1,47 +0,0 @@ -package ru.kayashov.bar.service.integration.cocktail; - -import org.springframework.http.HttpEntity; -import org.springframework.http.RequestEntity; -import org.springframework.stereotype.Service; -import ru.kayashov.bar.model.Cocktail; -import ru.kayashov.bar.model.Ingredient; -import ru.kayashov.bar.model.api.cocktail.Cocktails; -import ru.kayashov.bar.model.api.cocktail.Ingredients; -import ru.kayashov.bar.service.RestUtil; - -import java.util.Collections; -import java.util.List; - -@Service -public class CocktailApiService { - - public Ingredient getIngredientById(long id) { - String url = "https://www.thecocktaildb.com/api/json/v1/1/lookup.php?iid="; - return RestUtil.sendRequest(Ingredients.class, - RequestEntity.get(url + id).build()) - .map(HttpEntity::getBody) - .map(Ingredients::getIngredients) - .map(i -> i.get(0)) - .orElse(null); - } - - public Cocktail getCocktailById(long id) { - String url = "https://www.thecocktaildb.com/api/json/v1/1/lookup.php?i="; - return RestUtil.sendRequest(Cocktails.class, - RequestEntity.get(url + id).build()) - .map(HttpEntity::getBody) - .map(Cocktails::getDrinks) - .map(i -> i.get(0)) - .orElse(null); - } - - public List getCocktailByLiteral(String literal) { - String url = "https://www.thecocktaildb.com/api/json/v1/1/search.php?f="; - return RestUtil.sendRequest(Cocktails.class, - RequestEntity.get(url + literal).build()) - .map(HttpEntity::getBody) - .map(Cocktails::getDrinks) - .orElse(Collections.emptyList()); - } - -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 2eca8dd..5f3f23c 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,4 @@ spring.application.name=myBar -spring.kafka.bootstrap-servers=192.168.1.100:29092 -kafka-topic=my-bar-bot-message cocktail.photo.path=${COCKTAIL_PHOTO_PATH:/mnt/sdb1/my-bar-front/build/assets/cocktails} @@ -15,9 +13,6 @@ spring.datasource.hikari.max-lifetime=600000 spring.jpa.generate-ddl=true -telegram.bot.username=${BOT_USERNAME:kayashovBarClientBot} -telegram.bot.bot-token=${BOT_TOKEN:7664353842:AAE8UzUQ3NsAYxXwmFUIpoulWEXARHT9Yuo} - token.signing.key=${SIGNING_KEY:ThisIsKayashovBarSecretKey-1.0.0Version} spring.jpa.show-sql=false \ No newline at end of file