diff --git a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/AdminService.java b/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/AdminService.java deleted file mode 100644 index 18c69c7..0000000 --- a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/AdminService.java +++ /dev/null @@ -1,21 +0,0 @@ -package ru.itmo.kotiki.service; - -import java.util.List; -import ru.itmo.kotiki.dto.UserDto; - -public interface AdminService { - void registrationUser(UserDto userDto); - - UserDto findByUserId(int id); - - UserDto findByOwnerId(int id); - - UserDto findByUsername(String username); - - void deleteByUserId (int id); - - void deleteByOwnerId (int id); - - List getUsers(); - -} diff --git a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/CatService.java b/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/CatService.java deleted file mode 100644 index 4c843be..0000000 --- a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/CatService.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.itmo.kotiki.service; - -import java.util.List; -import ru.itmo.kotiki.dto.CatDto; -import ru.itmo.kotiki.exception.ValidationException; - -public interface CatService { - - CatDto save(String username, CatDto catDto) throws ValidationException; - - void deleteById(String username, int id); - - CatDto findById(String username, int id); - - List findAllByOwner(String username); -} diff --git a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/CatServiceImpl.java b/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/CatServiceImpl.java deleted file mode 100644 index f944293..0000000 --- a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/CatServiceImpl.java +++ /dev/null @@ -1,77 +0,0 @@ -package ru.itmo.kotiki.service; - -import static java.util.Objects.isNull; - -import java.util.ArrayList; -import java.util.List; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import ru.itmo.kotiki.dto.CatDto; -import ru.itmo.kotiki.model.Cat; -import ru.itmo.kotiki.model.accessory.Color; -import ru.itmo.kotiki.exception.ValidationException; -import ru.itmo.kotiki.repository.CatRepository; -import ru.itmo.kotiki.repository.UserRepository; - -@Service -public class CatServiceImpl implements CatService { - - @Autowired - private CatRepository catRepository; - - @Autowired - private UserRepository userRepository; - - @Override - public CatDto save(String username, CatDto catDto) throws ValidationException { - validateCatDto(catDto); - Cat cat = catDto.toCat(); - cat.setOwner(userRepository.findByUsername(username).getOwner()); - return new CatDto(catRepository.save(cat)); - } - - @Override - public void deleteById(String username, int id) { - if (userRepository.findByUsername(username).getOwner().getId() != catRepository.getById(id).getOwner().getId()){ - throw new ValidationException("Cat " + id + " not found"); - } - catRepository.deleteById(id); - } - - @Override - public CatDto findById(String username, int id) { - Cat cat = catRepository.getById(id); - if (userRepository.findByUsername(username).getOwner().getId() != cat.getOwner().getId()){ - throw new ValidationException("Cat " + id + " not found"); - } - return new CatDto(cat); - } - - @Override - public List findAllByOwner(String username) { - List catsDto = new ArrayList<>(); - for(Cat cat : catRepository.findAllByOwnerId(userRepository.findByUsername(username).getOwner().getId())) { - catsDto.add(new CatDto(cat)); - } - return catsDto; - } - - private boolean checkColor(String color) { - for (Color c : Color.values()) { - if (c.name().equals(color)) { - return true; - } - } - return false; - } - - private void validateCatDto(CatDto catDto) throws ValidationException { - if (isNull(catDto)) { - throw new ValidationException("Object cat is null"); - } - if (!checkColor(catDto.getColor())) { - throw new ValidationException("Color not found"); - } - } - -} diff --git a/kotiki-java/cats/core/pom.xml b/kotiki-java/cats/core/pom.xml new file mode 100644 index 0000000..152204a --- /dev/null +++ b/kotiki-java/cats/core/pom.xml @@ -0,0 +1,29 @@ + + + + cats + ru.itmo.kotiki.cats + 1.0-SNAPSHOT + + + 4.0.0 + ru.itmo.kotiki.cats.core + cats-core + pom + + + + ru.itmo.kotiki.cats.data + cats-data + 1.0-SNAPSHOT + + + org.springframework.amqp + spring-rabbit + 2.4.4 + + + + \ No newline at end of file diff --git a/kotiki-java/cats/core/src/main/java/ru/itmo/kotiki/cats/config/RabbitConfig.java b/kotiki-java/cats/core/src/main/java/ru/itmo/kotiki/cats/config/RabbitConfig.java new file mode 100644 index 0000000..5953ab3 --- /dev/null +++ b/kotiki-java/cats/core/src/main/java/ru/itmo/kotiki/cats/config/RabbitConfig.java @@ -0,0 +1,57 @@ +package ru.itmo.kotiki.cats.config; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class RabbitConfig { + + @Bean + public DirectExchange catsDirectExchange() { + return new DirectExchange("cats-exchange"); + } + + @Bean + public Queue saveCat() { + return new Queue("saveCatQueue"); + } + + @Bean + public Queue deleteCatById() { + return new Queue("deleteByIdQueue"); + } + + @Bean + public Queue findCatById() { + return new Queue("findByIdQueue"); + } + + @Bean + public Queue findAllCatsByOwner() { + return new Queue("findAllByOwnerQueue"); + } + + @Bean + public Binding bindSaveCat() { + return BindingBuilder.bind(saveCat()).to(catsDirectExchange()).with("saveCat"); + } + + @Bean + public Binding bindDeleteCatById() { + return BindingBuilder.bind(deleteCatById()).to(catsDirectExchange()).with("deleteCatById"); + } + + @Bean + public Binding bindFindCatById() { + return BindingBuilder.bind(findCatById()).to(catsDirectExchange()).with("findCatById"); + } + + @Bean + public Binding bindFindAllCatsByOwner() { + return BindingBuilder.bind(findAllCatsByOwner()).to(catsDirectExchange()).with("findAllCatsByOwner"); + } +} diff --git a/kotiki-java/cats/core/src/main/java/ru/itmo/kotiki/cats/service/CatService.java b/kotiki-java/cats/core/src/main/java/ru/itmo/kotiki/cats/service/CatService.java new file mode 100644 index 0000000..fa5015d --- /dev/null +++ b/kotiki-java/cats/core/src/main/java/ru/itmo/kotiki/cats/service/CatService.java @@ -0,0 +1,18 @@ +package ru.itmo.kotiki.cats.service; + +import java.util.List; +import ru.itmo.kotiki.dto.CatDto; +import ru.itmo.kotiki.entity.CatDtoOwnerId; +import ru.itmo.kotiki.entity.OwnerIdCatId; +import ru.itmo.kotiki.exception.ValidationException; + +public interface CatService { + + CatDto save(CatDtoOwnerId catDto) throws ValidationException; + + void deleteById(OwnerIdCatId ids); + + CatDto findById(OwnerIdCatId ids); + + List findAllByOwner(int ownerId); +} diff --git a/kotiki-java/cats/core/src/main/java/ru/itmo/kotiki/cats/service/CatServiceImpl.java b/kotiki-java/cats/core/src/main/java/ru/itmo/kotiki/cats/service/CatServiceImpl.java new file mode 100644 index 0000000..cdabc21 --- /dev/null +++ b/kotiki-java/cats/core/src/main/java/ru/itmo/kotiki/cats/service/CatServiceImpl.java @@ -0,0 +1,89 @@ +package ru.itmo.kotiki.cats.service; + +import static java.util.Objects.isNull; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import org.springframework.amqp.rabbit.annotation.EnableRabbit; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.itmo.kotiki.dto.CatDto; +import ru.itmo.kotiki.dto.OwnerDto; +import ru.itmo.kotiki.entity.CatDtoOwnerId; +import ru.itmo.kotiki.entity.CatOwnerId; +import ru.itmo.kotiki.entity.OwnerIdCatId; +import ru.itmo.kotiki.model.Cat; +import ru.itmo.kotiki.model.accessory.Color; +import ru.itmo.kotiki.exception.ValidationException; +import ru.itmo.kotiki.cats.repository.CatRepository; + +@EnableRabbit +@Service +public class CatServiceImpl implements CatService { + + @Autowired + private CatRepository catRepository; + + @Autowired + private RabbitTemplate rabbitTemplate; + + @Override + @RabbitListener(queues = "saveCatQueue") + public CatDto save(CatDtoOwnerId catDto) throws ValidationException { + validateCatDto(catDto.getCatDto()); + Cat cat = catDto.getCatDto().toCat(); + rabbitTemplate.convertSendAndReceive("addCat", new CatOwnerId(cat, catDto.getOwnerId())); + return new CatDto(catRepository.save(cat)); + } + + @Override + @RabbitListener(queues = "deleteByIdQueue") + public void deleteById(OwnerIdCatId ids) { + if (ids.getOwnerId() != catRepository.getById(ids.getCatId()).getOwner().getId()){ + throw new ValidationException("Cat " + ids.getCatId() + " not found"); + } + catRepository.deleteById(ids.getCatId()); + } + + @Override + @RabbitListener(queues = "findByIdQueue") + public CatDto findById(OwnerIdCatId ids) { + Cat cat = catRepository.getById(ids.getCatId()); + if (ids.getOwnerId() != cat.getOwner().getId()){ + throw new ValidationException("Cat " + ids.getCatId() + " not found"); + } + return new CatDto(cat); + } + + @Override + @RabbitListener(queues = "findAllByOwnerQueue") + public List findAllByOwner(int ownerId) { + List catsDto = new ArrayList<>(); + for(Cat cat : catRepository.findAllByOwnerId(ownerId)) { + catsDto.add(new CatDto(cat)); + } + return catsDto; + } + + private boolean checkColor(String color) { + for (Color c : Color.values()) { + if (c.name().equals(color)) { + return true; + } + } + return false; + } + + private void validateCatDto(CatDto catDto) throws ValidationException { + if (isNull(catDto)) { + throw new ValidationException("Object cat is null"); + } + if (!checkColor(catDto.getColor())) { + throw new ValidationException("Color not found"); + } + } + +} diff --git a/kotiki-java/cats/core/src/main/resources/application.yml b/kotiki-java/cats/core/src/main/resources/application.yml new file mode 100644 index 0000000..05a178d --- /dev/null +++ b/kotiki-java/cats/core/src/main/resources/application.yml @@ -0,0 +1,8 @@ +server: + port: 8081 +spring: + rabbitmq: + host: localhost + password: guest + port: 15672 + username: guest \ No newline at end of file diff --git a/kotiki-java/cats/data/pom.xml b/kotiki-java/cats/data/pom.xml new file mode 100644 index 0000000..e24cce8 --- /dev/null +++ b/kotiki-java/cats/data/pom.xml @@ -0,0 +1,24 @@ + + + + cats + ru.itmo.kotiki.cats + 1.0-SNAPSHOT + + + 4.0.0 + ru.itmo.kotiki.cats.data + cats-data + pom + + + + org.springframework.boot + spring-boot-starter-data-jpa + 2.6.7 + + + + \ No newline at end of file diff --git a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/CatRepository.java b/kotiki-java/cats/data/src/main/java/ru/itmo/kotiki/cats/repository/CatRepository.java similarity index 87% rename from kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/CatRepository.java rename to kotiki-java/cats/data/src/main/java/ru/itmo/kotiki/cats/repository/CatRepository.java index 624a8ad..1a6bb35 100644 --- a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/CatRepository.java +++ b/kotiki-java/cats/data/src/main/java/ru/itmo/kotiki/cats/repository/CatRepository.java @@ -1,11 +1,11 @@ -package ru.itmo.kotiki.repository; +package ru.itmo.kotiki.cats.repository; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import ru.itmo.kotiki.model.Cat; + @Repository public interface CatRepository extends JpaRepository { - List findAllByOwnerId(int ownerId); -} +} \ No newline at end of file diff --git a/kotiki-java/cats/data/target/classes/ru/itmo/kotiki/cats/repository/CatRepository.class b/kotiki-java/cats/data/target/classes/ru/itmo/kotiki/cats/repository/CatRepository.class new file mode 100644 index 0000000..fdaf735 Binary files /dev/null and b/kotiki-java/cats/data/target/classes/ru/itmo/kotiki/cats/repository/CatRepository.class differ diff --git a/kotiki-java/cats/pom.xml b/kotiki-java/cats/pom.xml new file mode 100644 index 0000000..9a6c3e7 --- /dev/null +++ b/kotiki-java/cats/pom.xml @@ -0,0 +1,34 @@ + + + + kotiki-java + ru.itmo.kotiki + 1.0-SNAPSHOT + + + 4.0.0 + ru.itmo.kotiki.cats + cats + pom + + + core + data + + + + + ru.itmo.kotiki.models + models + 1.0-SNAPSHOT + + + ru.itmo.kotiki.owners + owners + 1.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/kotiki-java/docker-compose.yml b/kotiki-java/docker-compose.yml new file mode 100644 index 0000000..2abe2c2 --- /dev/null +++ b/kotiki-java/docker-compose.yml @@ -0,0 +1,8 @@ +version: '3.8' +services: + rabbitmq: + container_name: rabbitmq + image: rabbitmq:management + ports: + - "5672:5672" + - "15672:15672" \ No newline at end of file diff --git a/kotiki-java/DAL/pom.xml b/kotiki-java/models/pom.xml similarity index 64% rename from kotiki-java/DAL/pom.xml rename to kotiki-java/models/pom.xml index 4d0b3af..a20143f 100644 --- a/kotiki-java/DAL/pom.xml +++ b/kotiki-java/models/pom.xml @@ -2,31 +2,22 @@ - 4.0.0 kotiki-java ru.itmo.kotiki 1.0-SNAPSHOT - ru.itmo.kotiki.dal - dal - 1.0-SNAPSHOT - - - 42.3.4 - + 4.0.0 + ru.itmo.kotiki.models + models + pom org.postgresql postgresql - ${postgresql.version} - - - org.springframework.boot - spring-boot-starter-data-jpa - 2.6.7 + 42.3.4 org.hibernate @@ -34,4 +25,5 @@ 5.6.8.Final + \ No newline at end of file diff --git a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/dto/CatDto.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/dto/CatDto.java similarity index 80% rename from kotiki-java/BLL/src/main/java/ru/itmo/kotiki/dto/CatDto.java rename to kotiki-java/models/src/main/java/ru/itmo/kotiki/dto/CatDto.java index 4f19132..da84ec1 100644 --- a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/dto/CatDto.java +++ b/kotiki-java/models/src/main/java/ru/itmo/kotiki/dto/CatDto.java @@ -17,6 +17,13 @@ public CatDto(Cat cat) { this.color = cat.getColor().toString(); } + public CatDto(String name, Date dateOfBirth, String breed, String color) { + this.name = name; + this.dateOfBirth = dateOfBirth; + this.breed = breed; + this.color = color; + } + public Cat toCat() { return new Cat(name, dateOfBirth, breed, Color.valueOf(color)); } diff --git a/kotiki-java/models/src/main/java/ru/itmo/kotiki/dto/OwnerDto.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/dto/OwnerDto.java new file mode 100644 index 0000000..9ad1d77 --- /dev/null +++ b/kotiki-java/models/src/main/java/ru/itmo/kotiki/dto/OwnerDto.java @@ -0,0 +1,32 @@ +package ru.itmo.kotiki.dto; + +import java.util.Date; +import java.util.List; +import ru.itmo.kotiki.model.Owner; + +public final class OwnerDto { + private final String name; + private final Date dateOfBirth; + + public OwnerDto(Owner owner) { + this.name = owner.getName(); + this.dateOfBirth = owner.getDateOfBirth(); + } + + public OwnerDto(String name, Date dateOfBirth, List cats) { + this.name = name; + this.dateOfBirth = dateOfBirth; + } + + public Owner toOwner() { + return new Owner(name, dateOfBirth); + } + + public String getName() { + return name; + } + + public Date getDateOfBirth() { + return dateOfBirth; + } +} diff --git a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/dto/UserDto.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/dto/UserDto.java similarity index 54% rename from kotiki-java/BLL/src/main/java/ru/itmo/kotiki/dto/UserDto.java rename to kotiki-java/models/src/main/java/ru/itmo/kotiki/dto/UserDto.java index 07e148d..ad38124 100644 --- a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/dto/UserDto.java +++ b/kotiki-java/models/src/main/java/ru/itmo/kotiki/dto/UserDto.java @@ -1,9 +1,7 @@ package ru.itmo.kotiki.dto; import java.util.ArrayList; -import java.util.Date; import java.util.List; -import ru.itmo.kotiki.model.Owner; import ru.itmo.kotiki.model.Role; import ru.itmo.kotiki.model.User; @@ -13,19 +11,22 @@ public final class UserDto { private final boolean enabled; private final List roles; - private final String name; - private final Date dateOfBirth; - - public UserDto(User user, Owner owner) { - username = user.getUsername(); - password = user.getPassword(); - enabled = user.isEnabled(); - roles = new ArrayList<>(); + public UserDto(User user) { + this.username = user.getUsername(); + this.password = user.getPassword(); + this.enabled = user.isEnabled(); + this.roles = new ArrayList<>(); for(Role role : user.getRoles()) { - roles.add(role.getRole()); + this.roles.add(role.getRole()); } - name = owner.getName(); - dateOfBirth = owner.getDateOfBirth(); + } + + public UserDto(String username, String password, boolean enabled, + List roles) { + this.username = username; + this.password = password; + this.enabled = enabled; + this.roles = roles; } public String getUsername() { @@ -43,12 +44,4 @@ public boolean isEnabled() { public List getRoles() { return roles; } - - public String getName() { - return name; - } - - public Date getDateOfBirth() { - return dateOfBirth; - } } diff --git a/kotiki-java/models/src/main/java/ru/itmo/kotiki/entity/CatDtoOwnerId.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/entity/CatDtoOwnerId.java new file mode 100644 index 0000000..584fc64 --- /dev/null +++ b/kotiki-java/models/src/main/java/ru/itmo/kotiki/entity/CatDtoOwnerId.java @@ -0,0 +1,21 @@ +package ru.itmo.kotiki.entity; + +import ru.itmo.kotiki.dto.CatDto; + +public class CatDtoOwnerId { + private final CatDto catDto; + private final int ownerId; + + public CatDtoOwnerId(CatDto catDto, int ownerId) { + this.catDto = catDto; + this.ownerId = ownerId; + } + + public CatDto getCatDto() { + return catDto; + } + + public int getOwnerId() { + return ownerId; + } +} diff --git a/kotiki-java/models/src/main/java/ru/itmo/kotiki/entity/CatOwnerId.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/entity/CatOwnerId.java new file mode 100644 index 0000000..2bf9311 --- /dev/null +++ b/kotiki-java/models/src/main/java/ru/itmo/kotiki/entity/CatOwnerId.java @@ -0,0 +1,21 @@ +package ru.itmo.kotiki.entity; + +import ru.itmo.kotiki.model.Cat; + +public class CatOwnerId { + private final Cat cat; + private final int ownerId; + + public CatOwnerId(Cat cat, int ownerId) { + this.cat = cat; + this.ownerId = ownerId; + } + + public Cat getCat() { + return cat; + } + + public int getOwnerId() { + return ownerId; + } +} diff --git a/kotiki-java/models/src/main/java/ru/itmo/kotiki/entity/OwnerIdCatId.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/entity/OwnerIdCatId.java new file mode 100644 index 0000000..9a27c3e --- /dev/null +++ b/kotiki-java/models/src/main/java/ru/itmo/kotiki/entity/OwnerIdCatId.java @@ -0,0 +1,19 @@ +package ru.itmo.kotiki.entity; + +public class OwnerIdCatId { + private final int ownerId; + private final int catId; + + public OwnerIdCatId(int ownerId, int catId) { + this.ownerId = ownerId; + this.catId = catId; + } + + public int getOwnerId() { + return ownerId; + } + + public int getCatId() { + return catId; + } +} diff --git a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/exception/ValidationException.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/exception/ValidationException.java similarity index 99% rename from kotiki-java/BLL/src/main/java/ru/itmo/kotiki/exception/ValidationException.java rename to kotiki-java/models/src/main/java/ru/itmo/kotiki/exception/ValidationException.java index 1f710ce..9c6e1f3 100644 --- a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/exception/ValidationException.java +++ b/kotiki-java/models/src/main/java/ru/itmo/kotiki/exception/ValidationException.java @@ -10,4 +10,4 @@ public ValidationException(String message) { public String getMessage() { return message; } -} \ No newline at end of file +} diff --git a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/model/Cat.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/model/Cat.java similarity index 100% rename from kotiki-java/DAL/src/main/java/ru/itmo/kotiki/model/Cat.java rename to kotiki-java/models/src/main/java/ru/itmo/kotiki/model/Cat.java diff --git a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/model/Owner.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/model/Owner.java similarity index 96% rename from kotiki-java/DAL/src/main/java/ru/itmo/kotiki/model/Owner.java rename to kotiki-java/models/src/main/java/ru/itmo/kotiki/model/Owner.java index 8a6c883..b5afac5 100644 --- a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/model/Owner.java +++ b/kotiki-java/models/src/main/java/ru/itmo/kotiki/model/Owner.java @@ -75,6 +75,10 @@ public void setCats(List cats) { this.cats = cats; } + public void addCat(Cat cat) { + this.cats.add(cat); + } + public User getUser() { return user; } diff --git a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/model/Role.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/model/Role.java similarity index 100% rename from kotiki-java/DAL/src/main/java/ru/itmo/kotiki/model/Role.java rename to kotiki-java/models/src/main/java/ru/itmo/kotiki/model/Role.java diff --git a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/model/User.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/model/User.java similarity index 100% rename from kotiki-java/DAL/src/main/java/ru/itmo/kotiki/model/User.java rename to kotiki-java/models/src/main/java/ru/itmo/kotiki/model/User.java diff --git a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/model/accessory/Color.java b/kotiki-java/models/src/main/java/ru/itmo/kotiki/model/accessory/Color.java similarity index 100% rename from kotiki-java/DAL/src/main/java/ru/itmo/kotiki/model/accessory/Color.java rename to kotiki-java/models/src/main/java/ru/itmo/kotiki/model/accessory/Color.java diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/dto/CatDto.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/dto/CatDto.class new file mode 100644 index 0000000..d486bef Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/dto/CatDto.class differ diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/dto/OwnerDto.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/dto/OwnerDto.class new file mode 100644 index 0000000..92f784d Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/dto/OwnerDto.class differ diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/dto/UserDto.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/dto/UserDto.class new file mode 100644 index 0000000..efb2d5e Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/dto/UserDto.class differ diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/entity/CatDtoOwnerId.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/entity/CatDtoOwnerId.class new file mode 100644 index 0000000..90ab8dd Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/entity/CatDtoOwnerId.class differ diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/entity/CatOwnerId.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/entity/CatOwnerId.class new file mode 100644 index 0000000..ab4f5a7 Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/entity/CatOwnerId.class differ diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/entity/OwnerIdCatId.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/entity/OwnerIdCatId.class new file mode 100644 index 0000000..d2798e5 Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/entity/OwnerIdCatId.class differ diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/exception/ValidationException.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/exception/ValidationException.class new file mode 100644 index 0000000..5216172 Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/exception/ValidationException.class differ diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/model/Cat.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/model/Cat.class new file mode 100644 index 0000000..0f73e33 Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/model/Cat.class differ diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/model/Owner.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/model/Owner.class new file mode 100644 index 0000000..bd067af Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/model/Owner.class differ diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/model/Role.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/model/Role.class new file mode 100644 index 0000000..7653a3c Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/model/Role.class differ diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/model/User.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/model/User.class new file mode 100644 index 0000000..e891f53 Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/model/User.class differ diff --git a/kotiki-java/models/target/classes/ru/itmo/kotiki/model/accessory/Color.class b/kotiki-java/models/target/classes/ru/itmo/kotiki/model/accessory/Color.class new file mode 100644 index 0000000..6c9eb50 Binary files /dev/null and b/kotiki-java/models/target/classes/ru/itmo/kotiki/model/accessory/Color.class differ diff --git a/kotiki-java/owners/core/pom.xml b/kotiki-java/owners/core/pom.xml new file mode 100644 index 0000000..da6ca81 --- /dev/null +++ b/kotiki-java/owners/core/pom.xml @@ -0,0 +1,29 @@ + + + + owners + ru.itmo.kotiki.owners + 1.0-SNAPSHOT + + + 4.0.0 + ru.itmo.kotiki.owners.core + owners-core + pom + + + + ru.itmo.kotiki.owners.data + owners-data + 1.0-SNAPSHOT + + + org.springframework.amqp + spring-rabbit + 2.4.4 + + + + \ No newline at end of file diff --git a/kotiki-java/owners/core/src/main/java/ru/itmo/kotiki/owners/config/RabbitConfig.java b/kotiki-java/owners/core/src/main/java/ru/itmo/kotiki/owners/config/RabbitConfig.java new file mode 100644 index 0000000..7cdb1b2 --- /dev/null +++ b/kotiki-java/owners/core/src/main/java/ru/itmo/kotiki/owners/config/RabbitConfig.java @@ -0,0 +1,46 @@ +package ru.itmo.kotiki.owners.config; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class RabbitConfig { + @Bean + public DirectExchange ownersDirectExchange() { + return new DirectExchange("owners-exchange"); + } + + @Bean + public Queue saveOwner() { + return new Queue("saveOwnerQueue"); + } + + @Bean + public Queue findOwnerById() { + return new Queue("findOwnerByIdQueue"); + } + + @Bean + public Queue addCat() { + return new Queue("addCatQueue"); + } + + @Bean + public Binding bindSave() { + return BindingBuilder.bind(saveOwner()).to(ownersDirectExchange()).with("saveOwner"); + } + + @Bean + public Binding bindFindOwnerById() { + return BindingBuilder.bind(findOwnerById()).to(ownersDirectExchange()).with("findOwnerById"); + } + + @Bean + public Binding bindAddCat() { + return BindingBuilder.bind(addCat()).to(ownersDirectExchange()).with("addCat"); + } +} diff --git a/kotiki-java/owners/core/src/main/java/ru/itmo/kotiki/owners/service/OwnerService.java b/kotiki-java/owners/core/src/main/java/ru/itmo/kotiki/owners/service/OwnerService.java new file mode 100644 index 0000000..538a83a --- /dev/null +++ b/kotiki-java/owners/core/src/main/java/ru/itmo/kotiki/owners/service/OwnerService.java @@ -0,0 +1,13 @@ +package ru.itmo.kotiki.owners.service; + +import ru.itmo.kotiki.dto.OwnerDto; +import ru.itmo.kotiki.entity.CatOwnerId; + +public interface OwnerService { + + OwnerDto save(OwnerDto ownerDto); + + OwnerDto findById(int ownerId); + + void addCat(CatOwnerId catOwnerId); +} diff --git a/kotiki-java/owners/core/src/main/java/ru/itmo/kotiki/owners/service/OwnerServiceImpl.java b/kotiki-java/owners/core/src/main/java/ru/itmo/kotiki/owners/service/OwnerServiceImpl.java new file mode 100644 index 0000000..14aad6b --- /dev/null +++ b/kotiki-java/owners/core/src/main/java/ru/itmo/kotiki/owners/service/OwnerServiceImpl.java @@ -0,0 +1,38 @@ +package ru.itmo.kotiki.owners.service; + +import org.springframework.amqp.rabbit.annotation.EnableRabbit; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.itmo.kotiki.dto.OwnerDto; +import ru.itmo.kotiki.entity.CatOwnerId; +import ru.itmo.kotiki.model.Owner; +import ru.itmo.kotiki.owners.repository.OwnerRepository; + +@EnableRabbit +@Service +public class OwnerServiceImpl implements OwnerService { + + @Autowired + public OwnerRepository ownerRepository; + + @Override + @RabbitListener(queues = "saveOwner") + public OwnerDto save(OwnerDto ownerDto) { + Owner owner = ownerDto.toOwner(); + return new OwnerDto(ownerRepository.save(owner)); + } + + @Override + @RabbitListener(queues = "findOwnerByIdQueue") + public OwnerDto findById(int ownerId) { + return new OwnerDto(ownerRepository.getById(ownerId)); + } + + @Override + @RabbitListener(queues = "addCatQueue") + public void addCat(CatOwnerId catOwnerId) { + ownerRepository.getById(catOwnerId.getOwnerId()).addCat(catOwnerId.getCat()); + } + +} diff --git a/kotiki-java/owners/core/src/main/resources/application.yml b/kotiki-java/owners/core/src/main/resources/application.yml new file mode 100644 index 0000000..1d134cf --- /dev/null +++ b/kotiki-java/owners/core/src/main/resources/application.yml @@ -0,0 +1,8 @@ +server: + port: 8082 +spring: + rabbitmq: + host: localhost + password: guest + port: 15672 + username: guest \ No newline at end of file diff --git a/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/config/RabbitConfig.class b/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/config/RabbitConfig.class new file mode 100644 index 0000000..16728e1 Binary files /dev/null and b/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/config/RabbitConfig.class differ diff --git a/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/rabbitmq/RabbitMqReceiver.class b/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/rabbitmq/RabbitMqReceiver.class new file mode 100644 index 0000000..60aeff9 Binary files /dev/null and b/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/rabbitmq/RabbitMqReceiver.class differ diff --git a/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/service/OwnerService.class b/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/service/OwnerService.class new file mode 100644 index 0000000..92061fb Binary files /dev/null and b/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/service/OwnerService.class differ diff --git a/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/service/OwnerServiceImpl.class b/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/service/OwnerServiceImpl.class new file mode 100644 index 0000000..8f70b66 Binary files /dev/null and b/kotiki-java/owners/core/target/classes/ru/itmo/kotiki/owners/service/OwnerServiceImpl.class differ diff --git a/kotiki-java/owners/data/pom.xml b/kotiki-java/owners/data/pom.xml new file mode 100644 index 0000000..e63b331 --- /dev/null +++ b/kotiki-java/owners/data/pom.xml @@ -0,0 +1,24 @@ + + + + owners + ru.itmo.kotiki.owners + 1.0-SNAPSHOT + + + 4.0.0 + ru.itmo.kotiki.owners.data + owners-data + pom + + + + org.springframework.boot + spring-boot-starter-data-jpa + 2.6.7 + + + + \ No newline at end of file diff --git a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/OwnerRepository.java b/kotiki-java/owners/data/src/main/java/ru/itmo/kotiki/owners/repository/OwnerRepository.java similarity index 84% rename from kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/OwnerRepository.java rename to kotiki-java/owners/data/src/main/java/ru/itmo/kotiki/owners/repository/OwnerRepository.java index 7c4b2aa..16c4bfb 100644 --- a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/OwnerRepository.java +++ b/kotiki-java/owners/data/src/main/java/ru/itmo/kotiki/owners/repository/OwnerRepository.java @@ -1,4 +1,4 @@ -package ru.itmo.kotiki.repository; +package ru.itmo.kotiki.owners.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/kotiki-java/owners/data/target/classes/ru/itmo/kotiki/owners/repository/OwnerRepository.class b/kotiki-java/owners/data/target/classes/ru/itmo/kotiki/owners/repository/OwnerRepository.class new file mode 100644 index 0000000..13f40ac Binary files /dev/null and b/kotiki-java/owners/data/target/classes/ru/itmo/kotiki/owners/repository/OwnerRepository.class differ diff --git a/kotiki-java/owners/pom.xml b/kotiki-java/owners/pom.xml new file mode 100644 index 0000000..61bdb63 --- /dev/null +++ b/kotiki-java/owners/pom.xml @@ -0,0 +1,30 @@ + + + + kotiki-java + ru.itmo.kotiki + 1.0-SNAPSHOT + + + 4.0.0 + ru.itmo.kotiki.owners + owners + pom + + + + core + data + + + + + ru.itmo.kotiki.models + models + 1.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/kotiki-java/pom.xml b/kotiki-java/pom.xml index 5c81432..1abe560 100644 --- a/kotiki-java/pom.xml +++ b/kotiki-java/pom.xml @@ -10,13 +10,15 @@ 1.0-SNAPSHOT - bll - dal - web + models + cats + owners + user-interface 17 17 + \ No newline at end of file diff --git a/kotiki-java/user-interface/core/pom.xml b/kotiki-java/user-interface/core/pom.xml new file mode 100644 index 0000000..07fda7f --- /dev/null +++ b/kotiki-java/user-interface/core/pom.xml @@ -0,0 +1,29 @@ + + + + user-interface + ru.itmo.kotiki.ui + 1.0-SNAPSHOT + + + 4.0.0 + ru.itmo.kotiki.ui.core + ui-core + pom + + + + ru.itmo.kotiki.ui.data + ui-data + 1.0-SNAPSHOT + + + org.springframework.amqp + spring-rabbit + 2.4.4 + + + + \ No newline at end of file diff --git a/kotiki-java/user-interface/core/src/main/java/ru/itmo/kotiki/ui/config/RabbitConfig.java b/kotiki-java/user-interface/core/src/main/java/ru/itmo/kotiki/ui/config/RabbitConfig.java new file mode 100644 index 0000000..ef5cfd5 --- /dev/null +++ b/kotiki-java/user-interface/core/src/main/java/ru/itmo/kotiki/ui/config/RabbitConfig.java @@ -0,0 +1,43 @@ +package ru.itmo.kotiki.ui.config; + +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class RabbitConfig { + + @Value("${spring.rabbitmq.host}") + String host; + + @Value("${spring.rabbitmq.username}") + String username; + + @Value("${spring.rabbitmq.password}") + String password; + + @Bean + CachingConnectionFactory connectionFactory() { + CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(host); + cachingConnectionFactory.setUsername(username); + cachingConnectionFactory.setPassword(password); + return cachingConnectionFactory; + } + + @Bean + public MessageConverter jsonMessageConverter() { + return new Jackson2JsonMessageConverter(); + } + + @Bean + public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { + final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); + rabbitTemplate.setMessageConverter(jsonMessageConverter()); + return rabbitTemplate; + } +} diff --git a/kotiki-java/user-interface/core/src/main/java/ru/itmo/kotiki/ui/service/UserService.java b/kotiki-java/user-interface/core/src/main/java/ru/itmo/kotiki/ui/service/UserService.java new file mode 100644 index 0000000..e548a6f --- /dev/null +++ b/kotiki-java/user-interface/core/src/main/java/ru/itmo/kotiki/ui/service/UserService.java @@ -0,0 +1,17 @@ +package ru.itmo.kotiki.ui.service; + +import java.util.List; +import ru.itmo.kotiki.dto.OwnerDto; +import ru.itmo.kotiki.dto.UserDto; + +public interface UserService { + void registrationUser(UserDto userDto, OwnerDto ownerDto); + + UserDto findById(int id); + + UserDto findByUsername(String username); + + void deleteById(int id); + + List getUsers(); +} diff --git a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/AdminServiceImpl.java b/kotiki-java/user-interface/core/src/main/java/ru/itmo/kotiki/ui/service/UserServiceImpl.java similarity index 55% rename from kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/AdminServiceImpl.java rename to kotiki-java/user-interface/core/src/main/java/ru/itmo/kotiki/ui/service/UserServiceImpl.java index 57e56a8..2582ea8 100644 --- a/kotiki-java/BLL/src/main/java/ru/itmo/kotiki/service/AdminServiceImpl.java +++ b/kotiki-java/user-interface/core/src/main/java/ru/itmo/kotiki/ui/service/UserServiceImpl.java @@ -1,23 +1,23 @@ -package ru.itmo.kotiki.service; +package ru.itmo.kotiki.ui.service; import java.util.ArrayList; import java.util.List; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import ru.itmo.kotiki.dto.OwnerDto; import ru.itmo.kotiki.dto.UserDto; import ru.itmo.kotiki.model.Owner; import ru.itmo.kotiki.model.Role; import ru.itmo.kotiki.model.User; -import ru.itmo.kotiki.repository.OwnerRepository; -import ru.itmo.kotiki.repository.RoleRepository; -import ru.itmo.kotiki.repository.UserRepository; -import ru.itmo.kotiki.service.AdminService; +import ru.itmo.kotiki.ui.repository.RoleRepository; +import ru.itmo.kotiki.ui.repository.UserRepository; @Service -public class AdminServiceImpl implements AdminService { +public class UserServiceImpl implements UserService{ @Autowired - private OwnerRepository ownerRepository; + private RabbitTemplate rabbitTemplate; @Autowired private UserRepository userRepository; @@ -26,9 +26,8 @@ public class AdminServiceImpl implements AdminService { private RoleRepository roleRepository; @Override - public void registrationUser(UserDto userDto) { - Owner owner = ownerRepository.save(new Owner(userDto.getName(), userDto.getDateOfBirth())); - + public void registrationUser(UserDto userDto, OwnerDto ownerDto) { + Owner owner = (Owner) rabbitTemplate.convertSendAndReceive("saveOwner", ownerDto); List roles = new ArrayList<>(); for(String role : userDto.getRoles()) { roles.add(roleRepository.findByRole(role)); @@ -42,40 +41,28 @@ public void registrationUser(UserDto userDto) { } @Override - public UserDto findByUserId(int id) { + public UserDto findById(int id) { User user = userRepository.getById(id); - return new UserDto(user, user.getOwner()); - } - - @Override - public UserDto findByOwnerId(int id) { - Owner owner = ownerRepository.getById(id); - return new UserDto(owner.getUser(), owner); + return new UserDto(user); } @Override public UserDto findByUsername(String username) { User user = userRepository.findByUsername(username); - return new UserDto(user, user.getOwner()); + return new UserDto(user); } @Override - public void deleteByUserId(int id) { + public void deleteById(int id) { userRepository.deleteById(id); } - @Override - public void deleteByOwnerId(int id) { - ownerRepository.getById(id); - } - - @Override public List getUsers() { List users = userRepository.findAll(); List usersDto = new ArrayList<>(); for(User user : users) { - usersDto.add(new UserDto(user, user.getOwner())); + usersDto.add(new UserDto(user)); } return usersDto; diff --git a/kotiki-java/user-interface/core/src/main/resources/application.yml b/kotiki-java/user-interface/core/src/main/resources/application.yml new file mode 100644 index 0000000..b179e1a --- /dev/null +++ b/kotiki-java/user-interface/core/src/main/resources/application.yml @@ -0,0 +1,8 @@ +server: + port: 8083 +spring: + rabbitmq: + host: localhost + password: guest + port: 15672 + username: guest \ No newline at end of file diff --git a/kotiki-java/user-interface/core/target/classes/ru/itmo/kotiki/ui/config/RabbitConfig.class b/kotiki-java/user-interface/core/target/classes/ru/itmo/kotiki/ui/config/RabbitConfig.class new file mode 100644 index 0000000..2c7979b Binary files /dev/null and b/kotiki-java/user-interface/core/target/classes/ru/itmo/kotiki/ui/config/RabbitConfig.class differ diff --git a/kotiki-java/user-interface/core/target/classes/ru/itmo/kotiki/ui/service/UserService.class b/kotiki-java/user-interface/core/target/classes/ru/itmo/kotiki/ui/service/UserService.class new file mode 100644 index 0000000..f5542cd Binary files /dev/null and b/kotiki-java/user-interface/core/target/classes/ru/itmo/kotiki/ui/service/UserService.class differ diff --git a/kotiki-java/user-interface/core/target/classes/ru/itmo/kotiki/ui/service/UserServiceImpl.class b/kotiki-java/user-interface/core/target/classes/ru/itmo/kotiki/ui/service/UserServiceImpl.class new file mode 100644 index 0000000..0abbf31 Binary files /dev/null and b/kotiki-java/user-interface/core/target/classes/ru/itmo/kotiki/ui/service/UserServiceImpl.class differ diff --git a/kotiki-java/user-interface/data/pom.xml b/kotiki-java/user-interface/data/pom.xml new file mode 100644 index 0000000..633bf8b --- /dev/null +++ b/kotiki-java/user-interface/data/pom.xml @@ -0,0 +1,24 @@ + + + + user-interface + ru.itmo.kotiki.ui + 1.0-SNAPSHOT + + + 4.0.0 + ru.itmo.kotiki.ui.data + ui-data + pom + + + + org.springframework.boot + spring-boot-starter-data-jpa + 2.6.7 + + + + \ No newline at end of file diff --git a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/RoleRepository.java b/kotiki-java/user-interface/data/src/main/java/ru/itmo/kotiki/ui/repository/RoleRepository.java similarity index 84% rename from kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/RoleRepository.java rename to kotiki-java/user-interface/data/src/main/java/ru/itmo/kotiki/ui/repository/RoleRepository.java index c69488d..36e6c35 100644 --- a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/RoleRepository.java +++ b/kotiki-java/user-interface/data/src/main/java/ru/itmo/kotiki/ui/repository/RoleRepository.java @@ -1,4 +1,4 @@ -package ru.itmo.kotiki.repository; +package ru.itmo.kotiki.ui.repository; import org.springframework.data.jpa.repository.JpaRepository; import ru.itmo.kotiki.model.Role; diff --git a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/UserRepository.java b/kotiki-java/user-interface/data/src/main/java/ru/itmo/kotiki/ui/repository/UserRepository.java similarity index 87% rename from kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/UserRepository.java rename to kotiki-java/user-interface/data/src/main/java/ru/itmo/kotiki/ui/repository/UserRepository.java index 632e0f0..b8d8fe7 100644 --- a/kotiki-java/DAL/src/main/java/ru/itmo/kotiki/repository/UserRepository.java +++ b/kotiki-java/user-interface/data/src/main/java/ru/itmo/kotiki/ui/repository/UserRepository.java @@ -1,4 +1,4 @@ -package ru.itmo.kotiki.repository; +package ru.itmo.kotiki.ui.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -8,4 +8,4 @@ public interface UserRepository extends JpaRepository { User findByUsername(String username); -} +} \ No newline at end of file diff --git a/kotiki-java/user-interface/data/target/classes/ru/itmo/kotiki/ui/repository/RoleRepository.class b/kotiki-java/user-interface/data/target/classes/ru/itmo/kotiki/ui/repository/RoleRepository.class new file mode 100644 index 0000000..294558b Binary files /dev/null and b/kotiki-java/user-interface/data/target/classes/ru/itmo/kotiki/ui/repository/RoleRepository.class differ diff --git a/kotiki-java/user-interface/data/target/classes/ru/itmo/kotiki/ui/repository/UserRepository.class b/kotiki-java/user-interface/data/target/classes/ru/itmo/kotiki/ui/repository/UserRepository.class new file mode 100644 index 0000000..02b832c Binary files /dev/null and b/kotiki-java/user-interface/data/target/classes/ru/itmo/kotiki/ui/repository/UserRepository.class differ diff --git a/kotiki-java/BLL/pom.xml b/kotiki-java/user-interface/pom.xml similarity index 53% rename from kotiki-java/BLL/pom.xml rename to kotiki-java/user-interface/pom.xml index afc497d..22cb8b9 100644 --- a/kotiki-java/BLL/pom.xml +++ b/kotiki-java/user-interface/pom.xml @@ -2,35 +2,39 @@ - 4.0.0 kotiki-java ru.itmo.kotiki 1.0-SNAPSHOT - ru.itmo.kotiki.bll - bll - 1.0-SNAPSHOT + 4.0.0 + ru.itmo.kotiki.ui + user-interface + pom - - + + web + core + data + - ru.itmo.kotiki.dal - dal + ru.itmo.kotiki.models + models 1.0-SNAPSHOT - org.springframework.boot - spring-boot-starter-data-jpa - 2.6.7 + ru.itmo.kotiki.owners + owners + 1.0-SNAPSHOT - org.springframework.boot - spring-boot-starter-security - 2.6.7 + ru.itmo.kotiki.cats + cats + 1.0-SNAPSHOT + \ No newline at end of file diff --git a/kotiki-java/web/.gitignore b/kotiki-java/user-interface/web/.gitignore similarity index 100% rename from kotiki-java/web/.gitignore rename to kotiki-java/user-interface/web/.gitignore diff --git a/kotiki-java/web/.mvn/wrapper/maven-wrapper.jar b/kotiki-java/user-interface/web/.mvn/wrapper/maven-wrapper.jar similarity index 100% rename from kotiki-java/web/.mvn/wrapper/maven-wrapper.jar rename to kotiki-java/user-interface/web/.mvn/wrapper/maven-wrapper.jar diff --git a/kotiki-java/web/.mvn/wrapper/maven-wrapper.properties b/kotiki-java/user-interface/web/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from kotiki-java/web/.mvn/wrapper/maven-wrapper.properties rename to kotiki-java/user-interface/web/.mvn/wrapper/maven-wrapper.properties diff --git a/kotiki-java/web/mvnw b/kotiki-java/user-interface/web/mvnw similarity index 100% rename from kotiki-java/web/mvnw rename to kotiki-java/user-interface/web/mvnw diff --git a/kotiki-java/web/mvnw.cmd b/kotiki-java/user-interface/web/mvnw.cmd similarity index 100% rename from kotiki-java/web/mvnw.cmd rename to kotiki-java/user-interface/web/mvnw.cmd diff --git a/kotiki-java/web/pom.xml b/kotiki-java/user-interface/web/pom.xml similarity index 84% rename from kotiki-java/web/pom.xml rename to kotiki-java/user-interface/web/pom.xml index 92e2721..7a1c9d6 100644 --- a/kotiki-java/web/pom.xml +++ b/kotiki-java/user-interface/web/pom.xml @@ -9,7 +9,7 @@ - ru.itmo.kotiki.web + ru.itmo.kotiki.ui.web web 0.0.1-SNAPSHOT @@ -19,13 +19,13 @@ - ru.itmo.kotiki.bll - bll + ru.itmo.kotiki.ui.core + ui-core 1.0-SNAPSHOT - ru.itmo.kotiki.dal - dal + ru.itmo.kotiki.ui.data + ui-data 1.0-SNAPSHOT @@ -58,6 +58,11 @@ org.springframework.boot spring-boot-starter-security + + org.springframework.amqp + spring-rabbit + 2.4.4 + diff --git a/kotiki-java/web/src/main/java/ru/itmo/kotiki/WebApplication.java b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/WebApplication.java similarity index 61% rename from kotiki-java/web/src/main/java/ru/itmo/kotiki/WebApplication.java rename to kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/WebApplication.java index 98d5ebb..509bb5e 100644 --- a/kotiki-java/web/src/main/java/ru/itmo/kotiki/WebApplication.java +++ b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/WebApplication.java @@ -1,4 +1,4 @@ -package ru.itmo.kotiki; +package ru.itmo.kotiki.ui; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -7,14 +7,14 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @SpringBootApplication -@EnableJpaRepositories(basePackages = {"ru.itmo.kotiki.repository"}) -@EntityScan(basePackages = {"ru.itmo.kotiki"}) +@EnableJpaRepositories(basePackages = {"ru.itmo.kotiki.ui.repository"}) +@EntityScan(basePackages = {"ru.itmo.kotiki.ui"}) @ComponentScan({ - "ru.itmo.kotiki.repository", - "ru.itmo.kotiki.service", - "ru.itmo.kotiki.controller", - "ru.itmo.kotiki.security", - "ru.itmo.kotiki.config"}) + "ru.itmo.kotiki.ui.repository", + "ru.itmo.kotiki.ui.service", + "ru.itmo.kotiki.ui.controller", + "ru.itmo.kotiki.ui.security", + "ru.itmo.kotiki.ui.config"}) public class WebApplication { public static void main(String[] args) { diff --git a/kotiki-java/web/src/main/java/ru/itmo/kotiki/config/WebSecurityConfig.java b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/config/WebSecurityConfig.java similarity index 94% rename from kotiki-java/web/src/main/java/ru/itmo/kotiki/config/WebSecurityConfig.java rename to kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/config/WebSecurityConfig.java index b8de712..084287c 100644 --- a/kotiki-java/web/src/main/java/ru/itmo/kotiki/config/WebSecurityConfig.java +++ b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/config/WebSecurityConfig.java @@ -1,4 +1,4 @@ -package ru.itmo.kotiki.config; +package ru.itmo.kotiki.ui.config; import javax.sql.DataSource; @@ -37,7 +37,7 @@ protected void configure(HttpSecurity http) throws Exception { .csrf().disable() .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") - .antMatchers("/myCat/**").hasRole("USER") + .antMatchers("/myCat/**", "/myAccount/**").hasRole("USER") .anyRequest().authenticated() .and() .formLogin().permitAll() diff --git a/kotiki-java/web/src/main/java/ru/itmo/kotiki/controller/AdminController.java b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/controller/AdminController.java similarity index 71% rename from kotiki-java/web/src/main/java/ru/itmo/kotiki/controller/AdminController.java rename to kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/controller/AdminController.java index 92fad5f..e4f955f 100644 --- a/kotiki-java/web/src/main/java/ru/itmo/kotiki/controller/AdminController.java +++ b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/controller/AdminController.java @@ -1,8 +1,7 @@ -package ru.itmo.kotiki.controller; +package ru.itmo.kotiki.ui.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -10,48 +9,49 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import ru.itmo.kotiki.dto.OwnerDto; import ru.itmo.kotiki.dto.UserDto; -import ru.itmo.kotiki.service.AdminService; +import ru.itmo.kotiki.ui.service.UserService; @RestController @RequestMapping("/admin") public class AdminController { @Autowired - private AdminService adminService; + private UserService userService; @PostMapping("/registrationUser") - public void registrationUser(@RequestBody UserDto userDto) { - adminService.registrationUser(userDto); + public void registrationUser(@RequestBody UserDto userDto, @RequestBody OwnerDto ownerDto) { + userService.registrationUser(userDto, ownerDto); } @GetMapping(value = "/byUserId/{id}") public UserDto getOwner(@PathVariable int id) { - return adminService.findByUserId(id); + return userService.findById(id); } @GetMapping(value = "/byOwnerId/{id}") public UserDto findByOwnerId(@PathVariable int id) { - return adminService.findByOwnerId(id); + return userService.findById(id); } @GetMapping(value = "/byUsername/{username}") public UserDto findByUsername(@PathVariable String username) { - return adminService.findByUsername(username); + return userService.findByUsername(username); } @DeleteMapping("/byUserId/{id}") public void deleteByUserId(@PathVariable int id) { - adminService.deleteByUserId(id); + userService.deleteById(id); } @DeleteMapping("/byOwnerId/{id}") public void deleteByOwnerId(@PathVariable int id) { - adminService.deleteByOwnerId(id); + userService.deleteById(id); } @GetMapping(value = "/getAll", produces = "application/json") public List getOwners() { - return adminService.getUsers(); + return userService.getUsers(); } } diff --git a/kotiki-java/web/src/main/java/ru/itmo/kotiki/controller/CatController.java b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/controller/CatController.java similarity index 59% rename from kotiki-java/web/src/main/java/ru/itmo/kotiki/controller/CatController.java rename to kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/controller/CatController.java index c1f5f5b..4e68035 100644 --- a/kotiki-java/web/src/main/java/ru/itmo/kotiki/controller/CatController.java +++ b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/controller/CatController.java @@ -1,7 +1,7 @@ -package ru.itmo.kotiki.controller; +package ru.itmo.kotiki.ui.controller; -import java.util.List; import org.h2.security.auth.AuthenticationException; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.core.Authentication; @@ -14,54 +14,60 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import ru.itmo.kotiki.dto.CatDto; +import ru.itmo.kotiki.entity.CatDtoOwnerId; +import ru.itmo.kotiki.entity.OwnerIdCatId; import ru.itmo.kotiki.exception.ValidationException; -import ru.itmo.kotiki.security.JwtUserDetails; -import ru.itmo.kotiki.service.CatService; +import ru.itmo.kotiki.ui.security.JwtUserDetails; @RestController -@RequestMapping("/myCat") +@RequestMapping("/myCats") public class CatController { @Autowired - private CatService catService; + private RabbitTemplate rabbitTemplate; @PostMapping("/save") public CatDto save(@RequestBody CatDto catDto) throws ValidationException, AuthenticationException { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (!(authentication instanceof AnonymousAuthenticationToken)) { - String currentUsername = authentication.getName(); - return catService.save(currentUsername, catDto); + JwtUserDetails jwtUserDetails = (JwtUserDetails) authentication.getPrincipal(); + int ownerId = jwtUserDetails.getOwnerId(); + return (CatDto) rabbitTemplate.convertSendAndReceive("saveCat", new CatDtoOwnerId(catDto, ownerId)); } throw new AuthenticationException("403"); } @DeleteMapping("/byId/{id}") - public void deleteById(@PathVariable Integer id) { + public void deleteById(@PathVariable Integer id) throws AuthenticationException { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (!(authentication instanceof AnonymousAuthenticationToken)) { - String currentUsername = authentication.getName(); - catService.deleteById(currentUsername, id); + JwtUserDetails jwtUserDetails = (JwtUserDetails) authentication.getPrincipal(); + int ownerId = jwtUserDetails.getOwnerId(); + rabbitTemplate.convertSendAndReceive("deleteCatById", new OwnerIdCatId(ownerId, id)); } + throw new AuthenticationException("403"); } @GetMapping(value = "/getById/{id}") public CatDto findById(@PathVariable int id) throws AuthenticationException { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (!(authentication instanceof AnonymousAuthenticationToken)) { - String currentUsername = authentication.getName(); - return catService.findById(currentUsername, id); + JwtUserDetails jwtUserDetails = (JwtUserDetails) authentication.getPrincipal(); + int ownerId = jwtUserDetails.getOwnerId(); + return (CatDto) rabbitTemplate.convertSendAndReceive("findCatById", new OwnerIdCatId(ownerId, id)); } throw new AuthenticationException("403"); } @GetMapping(value = "/getAll", produces = "application/json") - public List findAll() throws AuthenticationException { + public Object findAll() throws AuthenticationException { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (!(authentication instanceof AnonymousAuthenticationToken)) { - String currentUsername = authentication.getName(); - return catService.findAllByOwner(currentUsername); + JwtUserDetails jwtUserDetails = (JwtUserDetails) authentication.getPrincipal(); + int ownerId = jwtUserDetails.getOwnerId(); + return rabbitTemplate.convertSendAndReceive("findAllCatsByOwner", ownerId); } throw new AuthenticationException("403"); } diff --git a/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/controller/OwnerController.java b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/controller/OwnerController.java new file mode 100644 index 0000000..2f6ef39 --- /dev/null +++ b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/controller/OwnerController.java @@ -0,0 +1,33 @@ +package ru.itmo.kotiki.ui.controller; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.h2.security.auth.AuthenticationException; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AnonymousAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import ru.itmo.kotiki.dto.OwnerDto; +import ru.itmo.kotiki.ui.security.JwtUserDetails; + +@RestController +@RequestMapping("/myAccount") +public class OwnerController { + + @Autowired + private RabbitTemplate rabbitTemplate; + + @GetMapping(value = "/getMyInfo") + public OwnerDto findOwner() throws AuthenticationException, JsonProcessingException { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (!(authentication instanceof AnonymousAuthenticationToken)) { + JwtUserDetails jwtUserDetails = (JwtUserDetails) authentication.getPrincipal(); + int ownerId = jwtUserDetails.getOwnerId(); + return (OwnerDto) rabbitTemplate.convertSendAndReceive("findOwnerById", ownerId); + } + throw new AuthenticationException("403"); + } +} diff --git a/kotiki-java/web/src/main/java/ru/itmo/kotiki/security/JwtUserDetails.java b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/security/JwtUserDetails.java similarity index 97% rename from kotiki-java/web/src/main/java/ru/itmo/kotiki/security/JwtUserDetails.java rename to kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/security/JwtUserDetails.java index bfc99fb..050504f 100644 --- a/kotiki-java/web/src/main/java/ru/itmo/kotiki/security/JwtUserDetails.java +++ b/kotiki-java/user-interface/web/src/main/java/ru/itmo/kotiki/ui/security/JwtUserDetails.java @@ -1,4 +1,4 @@ -package ru.itmo.kotiki.security; +package ru.itmo.kotiki.ui.security; import java.util.ArrayList; import java.util.Collection; diff --git a/kotiki-java/web/src/main/resources/application.properties b/kotiki-java/user-interface/web/src/main/resources/application.properties similarity index 100% rename from kotiki-java/web/src/main/resources/application.properties rename to kotiki-java/user-interface/web/src/main/resources/application.properties diff --git a/kotiki-java/web/src/test/java/ru/itmo/kotiki/WebApplicationTests.java b/kotiki-java/web/src/test/java/ru/itmo/kotiki/WebApplicationTests.java deleted file mode 100644 index b7c76c4..0000000 --- a/kotiki-java/web/src/test/java/ru/itmo/kotiki/WebApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.itmo.kotiki; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class WebApplicationTests { - - @Test - void contextLoads() { - } - -}