From 60013698de9a0f51a4c4016c892aa9fcc5f3e1e0 Mon Sep 17 00:00:00 2001 From: Vladik Date: Tue, 7 May 2024 10:28:14 +0300 Subject: [PATCH 01/44] Added image CategoryEntity and schema.graphqls --- .../example/backend/web/Category/CategoryController.java | 8 ++++---- .../com/example/backend/web/Category/CategoryDTO.java | 4 +++- .../com/example/backend/web/Category/CategoryEntity.java | 4 ++++ .../com/example/backend/web/Category/CategoryFactory.java | 1 + .../example/backend/web/Category/CategoryServiceImpl.java | 1 + src/main/resources/graphql/schema.graphqls | 8 +++++--- 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/example/backend/web/Category/CategoryController.java b/src/main/java/com/example/backend/web/Category/CategoryController.java index 16940480..5957df20 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryController.java +++ b/src/main/java/com/example/backend/web/Category/CategoryController.java @@ -19,13 +19,13 @@ public class CategoryController { private static final String URI_CATEGORIES_FILTER = "/filter/{categoryName}"; @GetMapping - public List getAll() { + @QueryMapping + public List getAllCategory() { return categoryService.getAll(); } - @GetMapping(URI_CATEGORIES_ID) - @QueryMapping(name = "getByIdCategory") - public CategoryDTO getOneById(@PathVariable @Argument final Long id) { + @QueryMapping + public CategoryDTO getByIdCategory(@PathVariable @Argument final Long id) { return categoryService.getOneById(id); } diff --git a/src/main/java/com/example/backend/web/Category/CategoryDTO.java b/src/main/java/com/example/backend/web/Category/CategoryDTO.java index 4178d5ce..79f7335e 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryDTO.java +++ b/src/main/java/com/example/backend/web/Category/CategoryDTO.java @@ -1,6 +1,7 @@ package com.example.backend.web.Category; +import com.example.backend.web.File.ImageEntity; import com.example.backend.web.Product.ProductDTO; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -12,4 +13,5 @@ @Builder public record CategoryDTO(Long id, @NotNull @NotBlank @Size(min = 5, max = 20) String categoryName, - List products) { } \ No newline at end of file + List products, + ImageEntity image) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryEntity.java b/src/main/java/com/example/backend/web/Category/CategoryEntity.java index 61fb12f8..a88d03dc 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryEntity.java +++ b/src/main/java/com/example/backend/web/Category/CategoryEntity.java @@ -1,5 +1,6 @@ package com.example.backend.web.Category; +import com.example.backend.web.File.ImageEntity; import com.example.backend.web.Product.ProductEntity; import jakarta.persistence.*; import lombok.*; @@ -25,4 +26,7 @@ public class CategoryEntity { @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "category", fetch = FetchType.LAZY) private List products; + + @OneToOne + private ImageEntity image; } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryFactory.java b/src/main/java/com/example/backend/web/Category/CategoryFactory.java index 1965f334..a7502f3d 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryFactory.java +++ b/src/main/java/com/example/backend/web/Category/CategoryFactory.java @@ -15,6 +15,7 @@ public CategoryDTO makeCategory(final CategoryEntity category) { .id(category.getId()) .categoryName(category.getCategoryName()) .products(webIsNullFactory.isNullProductCategory(category)) + .image(category.getImage()) .build(); } } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java index 8a990ce4..f56606d6 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java +++ b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java @@ -44,6 +44,7 @@ public CategoryDTO getOneById(final Long id) { public CategoryDTO create(final CategoryDTO categoryDTO) { CategoryEntity newCategory = CategoryEntity.builder() .categoryName(categoryDTO.categoryName()) + .image(categoryDTO.image()) .build(); return categoryFactory.makeCategory(categoryRepository.save(newCategory)); diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index 76005b1c..f6734806 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -1,10 +1,11 @@ scalar LocalTimeDate type Query { - getByIdUser(id: ID): UserDTO - getByIdCategory(id: ID): CategoryDTO getAllUsers: [UserDTO] getAllProducts: [ProductDTO] + getAllCategory: [CategoryDTO] + getByIdUser(id: ID): UserDTO + getByIdCategory(id: ID): CategoryDTO getByIdProduct(id: ID!): ProductDTO } @@ -28,7 +29,8 @@ input UserInput { type CategoryDTO { id: ID categoryName: String - product: [ProductDTO] + products: [ProductDTO] + image: [ImageDTO] } type ProductDTO { From e4f2faf9c07aed18798bc46becd90f8c4ed12a8b Mon Sep 17 00:00:00 2001 From: Vladik Date: Tue, 7 May 2024 10:31:01 +0300 Subject: [PATCH 02/44] Update Controllers fix graphql --- .../java/com/example/backend/web/Product/ProductController.java | 1 - src/main/java/com/example/backend/web/User/UserController.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/main/java/com/example/backend/web/Product/ProductController.java b/src/main/java/com/example/backend/web/Product/ProductController.java index a225189e..2fb8ccdb 100644 --- a/src/main/java/com/example/backend/web/Product/ProductController.java +++ b/src/main/java/com/example/backend/web/Product/ProductController.java @@ -30,7 +30,6 @@ public List getAllProducts() { return productService.getAllProduct(); } - @GetMapping(URI_PRODUCTS_ID) @QueryMapping public ProductDTO getByIdProduct(@PathVariable @Argument final Long id) { return productService.getOneProduct(id); diff --git a/src/main/java/com/example/backend/web/User/UserController.java b/src/main/java/com/example/backend/web/User/UserController.java index 8a48de33..9d0ca417 100644 --- a/src/main/java/com/example/backend/web/User/UserController.java +++ b/src/main/java/com/example/backend/web/User/UserController.java @@ -19,7 +19,6 @@ public class UserController { private static final String URI_USERS_ID = "/{id}"; - @GetMapping @QueryMapping public List getAllUsers() { return userService.getByAllUser(); @@ -32,7 +31,6 @@ public UserDTO updateByIdUser(@PathVariable @Argument final Long id, return userService.updateByIdUser(id, user); } - @GetMapping(URI_USERS_ID) @QueryMapping public UserDTO getByIdUser(@PathVariable @Argument final Long id) { return userService.getByIdUser(id); From 61bf3339b2be21268fa9a6f814780f826e3b29dc Mon Sep 17 00:00:00 2001 From: Vladik Date: Tue, 7 May 2024 11:41:29 +0300 Subject: [PATCH 03/44] Update schema.graphqls --- .../java/com/example/backend/web/User/store/UserEntity.java | 2 +- src/main/resources/graphql/schema.graphqls | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/backend/web/User/store/UserEntity.java b/src/main/java/com/example/backend/web/User/store/UserEntity.java index 405f7d36..ab97ae9a 100644 --- a/src/main/java/com/example/backend/web/User/store/UserEntity.java +++ b/src/main/java/com/example/backend/web/User/store/UserEntity.java @@ -39,7 +39,7 @@ public class UserEntity { private String password; @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "user", fetch = FetchType.LAZY) - private List product; + private List products; @OneToOne private ImageEntity image; diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index f6734806..844ce386 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -54,9 +54,10 @@ type UserDTO { firstname: String phone: String email: String - product: [ProductDTO] status: RegisterAuthStatus role: Role + products: [ProductDTO] + image: [ImageDTO] } input ProductInput { From a86a79a203df0f8c787677808196154f9de45d5f Mon Sep 17 00:00:00 2001 From: Vladik Date: Tue, 7 May 2024 14:29:29 +0300 Subject: [PATCH 04/44] Update application.yaml --- src/main/resources/application.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 9acc4dc7..901b6a48 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -58,11 +58,8 @@ cloudinary: api_key: ${API_KEY} api_secret: ${API_SECRET} -google: - clientId: ${GOOGLE_CLIENT_ID} - jwt: key: ${JWT_KEY} jwtAccessExpiration: 10080m #7day jwtRefreshExpiration: 43200m #30day - jwtUserDataExpiration: 15m \ No newline at end of file + jwtUserDataExpiration: 1440m #1day \ No newline at end of file From f9cda0f3b815a81e621bf982ce15b43fea9eb430 Mon Sep 17 00:00:00 2001 From: Vladik Date: Tue, 7 May 2024 20:45:02 +0300 Subject: [PATCH 05/44] Fix WebIsNullFactory --- .../com/example/backend/utils/general/WebIsNullFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java b/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java index e187df61..0ba92778 100644 --- a/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java +++ b/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java @@ -28,7 +28,7 @@ public List isNullProductCategory(final CategoryEntity category) { } public List isNullProductUser(final UserEntity user) { - return Optional.ofNullable(user.getProduct()) + return Optional.ofNullable(user.getProducts()) .map(list -> list.stream() .map(productFactory::makeProduct) .collect(Collectors.toList())) From 83715f04271bf46df02e1e9c9663959f455a0a81 Mon Sep 17 00:00:00 2001 From: Vladik Date: Tue, 7 May 2024 20:51:05 +0300 Subject: [PATCH 06/44] Added annotation Transactional --- .../backend/security/service/impl/AuthServiceImpl.java | 6 +++++- .../java/com/example/backend/web/File/ImageServiceImpl.java | 2 ++ .../com/example/backend/web/Product/ProductServiceImpl.java | 4 +++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/backend/security/service/impl/AuthServiceImpl.java b/src/main/java/com/example/backend/security/service/impl/AuthServiceImpl.java index 5c98f60e..03900c1d 100644 --- a/src/main/java/com/example/backend/security/service/impl/AuthServiceImpl.java +++ b/src/main/java/com/example/backend/security/service/impl/AuthServiceImpl.java @@ -11,8 +11,8 @@ import com.example.backend.security.service.JwtService; import com.example.backend.security.service.JwtTokenService; import com.example.backend.utils.general.MyPasswordEncoder; -import com.example.backend.web.User.store.UserEntity; import com.example.backend.web.User.UserService; +import com.example.backend.web.User.store.UserEntity; import com.example.backend.web.User.store.dto.UserInfoDTO; import com.example.backend.web.User.store.factory.UserInfoFactory; import lombok.RequiredArgsConstructor; @@ -21,6 +21,7 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; +import jakarta.transaction.Transactional; import java.util.Properties; @@ -42,6 +43,7 @@ public class AuthServiceImpl implements AuthService { private final JwtService jwtService; @Override + @Transactional public void signup(final RegisterRequest registerRequest) { final var existUser = userService.getByEmail(registerRequest.email()); @@ -94,6 +96,7 @@ public AuthResponse login(final AuthRequest authRequest) { } @Override + @Transactional public void formUpdatePassword(final String jwt, final PasswordRequest passwordRequest) { final var token = jwtService.extractUserData(jwt.substring(7)); @@ -123,6 +126,7 @@ public void requestEmailUpdatePassword(final EmailRequest emailRequest) { } @Override + @Transactional public void activeUser(final String jwt) { final var token = jwtService.extractUserData(jwt.substring(7)); diff --git a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java index fc4b8183..0b40bb97 100644 --- a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java +++ b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java @@ -1,6 +1,7 @@ package com.example.backend.web.File; import com.example.backend.web.File.upload.FileUpload; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.springframework.stereotype.Service; @@ -25,6 +26,7 @@ public class ImageServiceImpl implements ImageService { @Override @SneakyThrows + @Transactional public ImageDTO uploadImage(final MultipartFile file) { final Optional imageOptional = Optional.ofNullable(ImageIO.read(file.getInputStream())); diff --git a/src/main/java/com/example/backend/web/Product/ProductServiceImpl.java b/src/main/java/com/example/backend/web/Product/ProductServiceImpl.java index 98b4f29f..6857402e 100644 --- a/src/main/java/com/example/backend/web/Product/ProductServiceImpl.java +++ b/src/main/java/com/example/backend/web/Product/ProductServiceImpl.java @@ -2,14 +2,15 @@ import com.example.backend.web.Category.CategoryEntity; import com.example.backend.web.Category.CategoryService; -import com.example.backend.web.User.store.UserEntity; import com.example.backend.web.User.UserService; +import com.example.backend.web.User.store.UserEntity; import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Root; +import jakarta.transaction.Transactional; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -28,6 +29,7 @@ public class ProductServiceImpl implements ProductService { private final EntityManager em; @Override + @Transactional public ProductDTO createProduct(final Long id, final ProductDTO product) { final UserEntity userId = userService.getById(id); final CategoryEntity categoryId = categoryService.getById(product.categoryId()); From 77438ca75d066173bfc314af83500c5bc9f0f99e Mon Sep 17 00:00:00 2001 From: Vladik Date: Tue, 7 May 2024 21:49:22 +0300 Subject: [PATCH 07/44] Update Advertisement All project --- documentation/API.http | 2 +- .../utils/general/WebIsNullFactory.java | 20 ++-- .../AdvertisementController.java | 57 +++++++++ .../web/Advertisement/AdvertisementDTO.java | 18 +++ .../AdvertisementEntity.java} | 10 +- .../AdvertisementFactory.java} | 12 +- .../AdvertisementRepository.java | 9 ++ .../Advertisement/AdvertisementService.java | 13 ++ .../AdvertisementServiceImpl.java | 111 ++++++++++++++++++ .../backend/web/Category/CategoryDTO.java | 4 +- .../backend/web/Category/CategoryEntity.java | 4 +- .../backend/web/Category/CategoryFactory.java | 2 +- .../web/Product/ProductController.java | 57 --------- .../backend/web/Product/ProductDTO.java | 18 --- .../web/Product/ProductRepository.java | 9 -- .../backend/web/Product/ProductService.java | 13 -- .../web/Product/ProductServiceImpl.java | 111 ------------------ .../backend/web/User/store/UserEntity.java | 4 +- .../backend/web/User/store/dto/UserDTO.java | 4 +- .../web/User/store/factory/UserFactory.java | 2 +- src/main/resources/graphql/schema.graphqls | 24 ++-- 21 files changed, 252 insertions(+), 252 deletions(-) create mode 100644 src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java create mode 100644 src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java rename src/main/java/com/example/backend/web/{Product/ProductEntity.java => Advertisement/AdvertisementEntity.java} (76%) rename src/main/java/com/example/backend/web/{Product/ProductFactory.java => Advertisement/AdvertisementFactory.java} (52%) create mode 100644 src/main/java/com/example/backend/web/Advertisement/AdvertisementRepository.java create mode 100644 src/main/java/com/example/backend/web/Advertisement/AdvertisementService.java create mode 100644 src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java delete mode 100644 src/main/java/com/example/backend/web/Product/ProductController.java delete mode 100644 src/main/java/com/example/backend/web/Product/ProductDTO.java delete mode 100644 src/main/java/com/example/backend/web/Product/ProductRepository.java delete mode 100644 src/main/java/com/example/backend/web/Product/ProductService.java delete mode 100644 src/main/java/com/example/backend/web/Product/ProductServiceImpl.java diff --git a/documentation/API.http b/documentation/API.http index b4c84058..485cf686 100644 --- a/documentation/API.http +++ b/documentation/API.http @@ -60,7 +60,7 @@ Content-Type: application/json GRAPHQL http://localhost:8080/graphql query { - getAllProducts { + getAllAdvertisement { name price location diff --git a/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java b/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java index 0ba92778..fec24ef3 100644 --- a/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java +++ b/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java @@ -2,8 +2,8 @@ import com.example.backend.web.Category.CategoryEntity; -import com.example.backend.web.Product.ProductDTO; -import com.example.backend.web.Product.ProductFactory; +import com.example.backend.web.Advertisement.AdvertisementDTO; +import com.example.backend.web.Advertisement.AdvertisementFactory; import com.example.backend.web.User.store.UserEntity; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; @@ -17,21 +17,21 @@ @AllArgsConstructor public class WebIsNullFactory { - private final ProductFactory productFactory; + private final AdvertisementFactory advertisementFactory; - public List isNullProductCategory(final CategoryEntity category) { - return Optional.ofNullable(category.getProducts()) + public List isNullAdvertisementCategory(final CategoryEntity category) { + return Optional.ofNullable(category.getAdvertisements()) .map(list -> list.stream() - .map(productFactory::makeProduct) + .map(advertisementFactory::makeAdvertisement) .collect(Collectors.toList())) .orElse(Collections.emptyList()); } - public List isNullProductUser(final UserEntity user) { - return Optional.ofNullable(user.getProducts()) + public List isNullAdvertisementUser(final UserEntity user) { + return Optional.ofNullable(user.getAdvertisements()) .map(list -> list.stream() - .map(productFactory::makeProduct) + .map(advertisementFactory::makeAdvertisement) .collect(Collectors.toList())) .orElse(Collections.emptyList()); } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java new file mode 100644 index 00000000..2076eb70 --- /dev/null +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java @@ -0,0 +1,57 @@ +package com.example.backend.web.Advertisement; + +import lombok.RequiredArgsConstructor; +import org.springframework.graphql.data.method.annotation.Argument; +import org.springframework.graphql.data.method.annotation.MutationMapping; +import org.springframework.graphql.data.method.annotation.QueryMapping; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/advertisement") +public class AdvertisementController { + + private final AdvertisementServiceImpl advertisementService; + private static final String URI_ADVERTISEMENT_ID = "/{id}"; + private static final String URI_ADVERTISEMENT_FILTER = "/filter/{name}"; + private static final String URL_DELETE_ALL = "/deleteAll"; + + @PostMapping(URI_ADVERTISEMENT_ID) + @MutationMapping + public AdvertisementDTO createAdvertisementIdByUser(@PathVariable(value = "id") @Argument final Long userId, + @RequestBody @Argument final AdvertisementDTO entity) { + return advertisementService.createAdvertisement(userId, entity); + } + + @QueryMapping + public List getAllAdvertisement() { + return advertisementService.getAllAdvertisement(); + } + + @QueryMapping + public AdvertisementDTO getByIdAdvertisement(@PathVariable @Argument final Long id) { + return advertisementService.getOneAdvertisement(id); + } + + @PutMapping(URI_ADVERTISEMENT_ID) + public AdvertisementDTO editAdvertisement(@PathVariable final Long id, @RequestBody final AdvertisementDTO entity) { + return advertisementService.editAdvertisement(id, entity); + } + + @DeleteMapping(URI_ADVERTISEMENT_ID) + public void deleteIdAdvertisement(@PathVariable final Long id) { + advertisementService.deleteIdAdvertisement(id); + } + + @GetMapping(URI_ADVERTISEMENT_FILTER) + public List getFilterName(@PathVariable final String name) { + return advertisementService.getFilterAdvertisementName(name); + } + + @DeleteMapping(URL_DELETE_ALL) + public void deleteAllAdvertisement() { + advertisementService.deleteAll(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java new file mode 100644 index 00000000..e559efd3 --- /dev/null +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java @@ -0,0 +1,18 @@ +package com.example.backend.web.Advertisement; + +import com.example.backend.web.File.ImageEntity; +import lombok.Builder; + +import java.time.LocalDateTime; +import java.util.List; + +@Builder +public record AdvertisementDTO(Long id, + String name, + String descriptionAdvertisement, + String characteristicAdvertisement, + double price, + LocalDateTime createDate, + List images, + String location, + Long categoryId) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Product/ProductEntity.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java similarity index 76% rename from src/main/java/com/example/backend/web/Product/ProductEntity.java rename to src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java index 3727264b..137af841 100644 --- a/src/main/java/com/example/backend/web/Product/ProductEntity.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java @@ -1,4 +1,4 @@ -package com.example.backend.web.Product; +package com.example.backend.web.Advertisement; import com.example.backend.web.Category.CategoryEntity; import com.example.backend.web.File.ImageEntity; @@ -10,13 +10,13 @@ import java.util.List; @Entity -@Table(name = "products") +@Table(name = "products") //TODO замінити назву БД коли Назар закінчить головну сторінку на advertisements @Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder -public class ProductEntity { +public class AdvertisementEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -26,10 +26,10 @@ public class ProductEntity { private String name; @Column(columnDefinition = "TEXT", nullable = false) - private String descriptionProduct; + private String descriptionAdvertisement; @Column(columnDefinition = "TEXT", nullable = false) - private String characteristicProduct; + private String characteristicAdvertisement; @Column(nullable = false) private double price; diff --git a/src/main/java/com/example/backend/web/Product/ProductFactory.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java similarity index 52% rename from src/main/java/com/example/backend/web/Product/ProductFactory.java rename to src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java index 282c0b5d..304227b2 100644 --- a/src/main/java/com/example/backend/web/Product/ProductFactory.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java @@ -1,14 +1,14 @@ -package com.example.backend.web.Product; +package com.example.backend.web.Advertisement; import org.springframework.stereotype.Component; @Component -public class ProductFactory { - public ProductDTO makeProduct(final ProductEntity entity) { - return ProductDTO.builder() +public class AdvertisementFactory { + public AdvertisementDTO makeAdvertisement(final AdvertisementEntity entity) { + return AdvertisementDTO.builder() .id(entity.getId()) - .descriptionProduct(entity.getDescriptionProduct()) - .characteristicProduct(entity.getCharacteristicProduct()) + .descriptionAdvertisement(entity.getDescriptionAdvertisement()) + .characteristicAdvertisement(entity.getCharacteristicAdvertisement()) .name(entity.getName()) .price(entity.getPrice()) .createDate(entity.getCreateDate()) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementRepository.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementRepository.java new file mode 100644 index 00000000..1fa10c5e --- /dev/null +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementRepository.java @@ -0,0 +1,9 @@ +package com.example.backend.web.Advertisement; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AdvertisementRepository extends JpaRepository { + +} \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementService.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementService.java new file mode 100644 index 00000000..351cd8a2 --- /dev/null +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementService.java @@ -0,0 +1,13 @@ +package com.example.backend.web.Advertisement; + +import java.util.List; + +public interface AdvertisementService { + AdvertisementDTO createAdvertisement(Long id, AdvertisementDTO entity); + List getAllAdvertisement(); + AdvertisementDTO getOneAdvertisement(Long id); + AdvertisementDTO editAdvertisement(Long id, AdvertisementDTO entity); + void deleteIdAdvertisement(Long id); + List getFilterAdvertisementName(String name); + void deleteAll(); +} \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java new file mode 100644 index 00000000..52e03cc1 --- /dev/null +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java @@ -0,0 +1,111 @@ +package com.example.backend.web.Advertisement; + +import com.example.backend.web.Category.CategoryEntity; +import com.example.backend.web.Category.CategoryService; +import com.example.backend.web.User.UserService; +import com.example.backend.web.User.store.UserEntity; +import jakarta.persistence.EntityManager; +import jakarta.persistence.TypedQuery; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; +import jakarta.transaction.Transactional; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +public class AdvertisementServiceImpl implements AdvertisementService { + + private final AdvertisementRepository advertisementRepository; + private final AdvertisementFactory advertisementFactory; + private final CategoryService categoryService; + private final UserService userService; + private final EntityManager em; + + @Override + @Transactional + public AdvertisementDTO createAdvertisement(final Long id, final AdvertisementDTO advertisement) { + final UserEntity userId = userService.getById(id); + final CategoryEntity categoryId = categoryService.getById(advertisement.categoryId()); + + final AdvertisementEntity newAdvertisement = AdvertisementEntity.builder() + .id(advertisement.id()) + .user(userId) + .name(advertisement.name()) + .characteristicAdvertisement(advertisement.characteristicAdvertisement()) + .descriptionAdvertisement(advertisement.descriptionAdvertisement()) + .price(advertisement.price()) + .images(advertisement.images()) + .location(advertisement.location()) + .createDate(LocalDateTime.now()) + .category(categoryId) + .build(); + + return advertisementFactory.makeAdvertisement(advertisementRepository.save(newAdvertisement)); + } + + @Override + public List getAllAdvertisement() { + return advertisementRepository.findAll().stream() + .map(advertisementFactory::makeAdvertisement) + .collect(Collectors.toList()); + } + + @Override + public AdvertisementDTO getOneAdvertisement(final Long id) { + final AdvertisementEntity entityId = getIdAdvertisement(id); + + return advertisementFactory.makeAdvertisement(entityId); + } + + @Override + public AdvertisementDTO editAdvertisement(final Long id, final AdvertisementDTO entity) { + final AdvertisementEntity entityId = getIdAdvertisement(id); + + entityId.setName(entity.name()); + entityId.setCharacteristicAdvertisement(entity.characteristicAdvertisement()); + entityId.setDescriptionAdvertisement(entity.descriptionAdvertisement()); + entityId.setCreateDate(entity.createDate()); + entityId.setPrice(entity.price()); + + return advertisementFactory.makeAdvertisement(advertisementRepository.save(entityId)); + } + + @Override + public void deleteIdAdvertisement(final Long id) { + advertisementRepository.deleteById(id); + } + + @Override + public void deleteAll() { + advertisementRepository.deleteAll(); + } + + @Override + public List getFilterAdvertisementName(final String name) { + + CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); + + CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(AdvertisementEntity.class); + + Root advertisementEntityRoot = criteriaQuery.from(AdvertisementEntity.class); + + Predicate nameAdvertisementPredicate = criteriaBuilder.equal(advertisementEntityRoot.get("name"), name); + + criteriaQuery.where(nameAdvertisementPredicate); + + TypedQuery typedQuery = em.createQuery(criteriaQuery); + + return typedQuery.getResultList(); + } + + private AdvertisementEntity getIdAdvertisement(final Long id) { + return advertisementRepository.getReferenceById(id); + } +} diff --git a/src/main/java/com/example/backend/web/Category/CategoryDTO.java b/src/main/java/com/example/backend/web/Category/CategoryDTO.java index 79f7335e..2a27d159 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryDTO.java +++ b/src/main/java/com/example/backend/web/Category/CategoryDTO.java @@ -2,7 +2,7 @@ import com.example.backend.web.File.ImageEntity; -import com.example.backend.web.Product.ProductDTO; +import com.example.backend.web.Advertisement.AdvertisementDTO; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; @@ -13,5 +13,5 @@ @Builder public record CategoryDTO(Long id, @NotNull @NotBlank @Size(min = 5, max = 20) String categoryName, - List products, + List advertisements, ImageEntity image) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryEntity.java b/src/main/java/com/example/backend/web/Category/CategoryEntity.java index a88d03dc..7ef97018 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryEntity.java +++ b/src/main/java/com/example/backend/web/Category/CategoryEntity.java @@ -1,7 +1,7 @@ package com.example.backend.web.Category; import com.example.backend.web.File.ImageEntity; -import com.example.backend.web.Product.ProductEntity; +import com.example.backend.web.Advertisement.AdvertisementEntity; import jakarta.persistence.*; import lombok.*; @@ -25,7 +25,7 @@ public class CategoryEntity { private String categoryName; @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "category", fetch = FetchType.LAZY) - private List products; + private List advertisements; @OneToOne private ImageEntity image; diff --git a/src/main/java/com/example/backend/web/Category/CategoryFactory.java b/src/main/java/com/example/backend/web/Category/CategoryFactory.java index a7502f3d..4cf966b8 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryFactory.java +++ b/src/main/java/com/example/backend/web/Category/CategoryFactory.java @@ -14,7 +14,7 @@ public CategoryDTO makeCategory(final CategoryEntity category) { return CategoryDTO.builder() .id(category.getId()) .categoryName(category.getCategoryName()) - .products(webIsNullFactory.isNullProductCategory(category)) + .advertisements(webIsNullFactory.isNullAdvertisementCategory(category)) .image(category.getImage()) .build(); } diff --git a/src/main/java/com/example/backend/web/Product/ProductController.java b/src/main/java/com/example/backend/web/Product/ProductController.java deleted file mode 100644 index 2fb8ccdb..00000000 --- a/src/main/java/com/example/backend/web/Product/ProductController.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.example.backend.web.Product; - -import lombok.RequiredArgsConstructor; -import org.springframework.graphql.data.method.annotation.Argument; -import org.springframework.graphql.data.method.annotation.MutationMapping; -import org.springframework.graphql.data.method.annotation.QueryMapping; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@RestController -@RequiredArgsConstructor -@RequestMapping("/api/products") -public class ProductController { - - private final ProductServiceImpl productService; - private static final String URI_PRODUCTS_ID = "/{id}"; - private static final String URI_PRODUCTS_FILTER = "/filter/{name}"; - private static final String URL_DELETE_ALL = "/deleteAll"; - - @PostMapping(URI_PRODUCTS_ID) - @MutationMapping - public ProductDTO createProductIdByUser(@PathVariable(value = "id") @Argument final Long userId, - @RequestBody @Argument final ProductDTO entity) { - return productService.createProduct(userId, entity); - } - - @QueryMapping - public List getAllProducts() { - return productService.getAllProduct(); - } - - @QueryMapping - public ProductDTO getByIdProduct(@PathVariable @Argument final Long id) { - return productService.getOneProduct(id); - } - - @PutMapping(URI_PRODUCTS_ID) - public ProductDTO editProduct(@PathVariable final Long id, @RequestBody final ProductDTO entity) { - return productService.editProduct(id, entity); - } - - @DeleteMapping(URI_PRODUCTS_ID) - public void deleteIdProduct(@PathVariable final Long id) { - productService.deleteIdProduct(id); - } - - @GetMapping(URI_PRODUCTS_FILTER) - public List getFilterName(@PathVariable final String name) { - return productService.getFilterProductName(name); - } - - @DeleteMapping(URL_DELETE_ALL) - public void deleteAllProduct() { - productService.deleteAll(); - } -} \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Product/ProductDTO.java b/src/main/java/com/example/backend/web/Product/ProductDTO.java deleted file mode 100644 index 566fc7cd..00000000 --- a/src/main/java/com/example/backend/web/Product/ProductDTO.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.example.backend.web.Product; - -import com.example.backend.web.File.ImageEntity; -import lombok.Builder; - -import java.time.LocalDateTime; -import java.util.List; - -@Builder -public record ProductDTO(Long id, - String name, - String descriptionProduct, - String characteristicProduct, - double price, - LocalDateTime createDate, - List images, - String location, - Long categoryId) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Product/ProductRepository.java b/src/main/java/com/example/backend/web/Product/ProductRepository.java deleted file mode 100644 index 9bcfcf7e..00000000 --- a/src/main/java/com/example/backend/web/Product/ProductRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.example.backend.web.Product; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ProductRepository extends JpaRepository { - -} \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Product/ProductService.java b/src/main/java/com/example/backend/web/Product/ProductService.java deleted file mode 100644 index be8f2a60..00000000 --- a/src/main/java/com/example/backend/web/Product/ProductService.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.backend.web.Product; - -import java.util.List; - -public interface ProductService { - ProductDTO createProduct(Long id, ProductDTO entity); - List getAllProduct(); - ProductDTO getOneProduct(Long id); - ProductDTO editProduct(Long id, ProductDTO entity); - void deleteIdProduct(Long id); - List getFilterProductName(String name); - void deleteAll(); -} \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Product/ProductServiceImpl.java b/src/main/java/com/example/backend/web/Product/ProductServiceImpl.java deleted file mode 100644 index 6857402e..00000000 --- a/src/main/java/com/example/backend/web/Product/ProductServiceImpl.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.example.backend.web.Product; - -import com.example.backend.web.Category.CategoryEntity; -import com.example.backend.web.Category.CategoryService; -import com.example.backend.web.User.UserService; -import com.example.backend.web.User.store.UserEntity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.TypedQuery; -import jakarta.persistence.criteria.CriteriaBuilder; -import jakarta.persistence.criteria.CriteriaQuery; -import jakarta.persistence.criteria.Predicate; -import jakarta.persistence.criteria.Root; -import jakarta.transaction.Transactional; -import lombok.AllArgsConstructor; -import org.springframework.stereotype.Service; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.stream.Collectors; - -@Service -@AllArgsConstructor -public class ProductServiceImpl implements ProductService { - - private final ProductRepository productRepository; - private final CategoryService categoryService; - private final ProductFactory productFactory; - private final UserService userService; - private final EntityManager em; - - @Override - @Transactional - public ProductDTO createProduct(final Long id, final ProductDTO product) { - final UserEntity userId = userService.getById(id); - final CategoryEntity categoryId = categoryService.getById(product.categoryId()); - - final ProductEntity newProduct = ProductEntity.builder() - .id(product.id()) - .user(userId) - .name(product.name()) - .characteristicProduct(product.characteristicProduct()) - .descriptionProduct(product.descriptionProduct()) - .price(product.price()) - .images(product.images()) - .location(product.location()) - .createDate(LocalDateTime.now()) - .category(categoryId) - .build(); - - return productFactory.makeProduct(productRepository.save(newProduct)); - } - - @Override - public List getAllProduct() { - return productRepository.findAll().stream() - .map(productFactory::makeProduct) - .collect(Collectors.toList()); - } - - @Override - public ProductDTO getOneProduct(final Long id) { - final ProductEntity entityId = getIdProduct(id); - - return productFactory.makeProduct(entityId); - } - - @Override - public ProductDTO editProduct(final Long id, final ProductDTO entity) { - final ProductEntity entityId = getIdProduct(id); - - entityId.setName(entity.name()); - entityId.setCharacteristicProduct(entity.characteristicProduct()); - entityId.setDescriptionProduct(entity.descriptionProduct()); - entityId.setCreateDate(entity.createDate()); - entityId.setPrice(entity.price()); - - return productFactory.makeProduct(productRepository.save(entityId)); - } - - @Override - public void deleteIdProduct(final Long id) { - productRepository.deleteById(id); - } - - @Override - public void deleteAll() { - productRepository.deleteAll(); - } - - @Override - public List getFilterProductName(final String name) { - - CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); - - CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(ProductEntity.class); - - Root productEntityRoot = criteriaQuery.from(ProductEntity.class); - - Predicate nameProductPredicate = criteriaBuilder.equal(productEntityRoot.get("name"), name); - - criteriaQuery.where(nameProductPredicate); - - TypedQuery typedQuery = em.createQuery(criteriaQuery); - - return typedQuery.getResultList(); - } - - private ProductEntity getIdProduct(final Long id) { - return productRepository.getReferenceById(id); - } -} diff --git a/src/main/java/com/example/backend/web/User/store/UserEntity.java b/src/main/java/com/example/backend/web/User/store/UserEntity.java index ab97ae9a..43c65cbe 100644 --- a/src/main/java/com/example/backend/web/User/store/UserEntity.java +++ b/src/main/java/com/example/backend/web/User/store/UserEntity.java @@ -3,7 +3,7 @@ import com.example.backend.utils.enums.RegisterAuthStatus; import com.example.backend.utils.enums.Role; import com.example.backend.web.File.ImageEntity; -import com.example.backend.web.Product.ProductEntity; +import com.example.backend.web.Advertisement.AdvertisementEntity; import jakarta.persistence.*; import lombok.*; import org.springframework.data.jpa.domain.support.AuditingEntityListener; @@ -39,7 +39,7 @@ public class UserEntity { private String password; @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "user", fetch = FetchType.LAZY) - private List products; + private List advertisements; @OneToOne private ImageEntity image; diff --git a/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java b/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java index ac7b8aef..d3c80679 100644 --- a/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java +++ b/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java @@ -1,6 +1,6 @@ package com.example.backend.web.User.store.dto; -import com.example.backend.web.Product.ProductDTO; +import com.example.backend.web.Advertisement.AdvertisementDTO; import com.example.backend.utils.enums.RegisterAuthStatus; import com.example.backend.utils.enums.Role; import lombok.Builder; @@ -14,6 +14,6 @@ public record UserDTO(Long id, String email, String phone, String password, - List product, + List advertisements, RegisterAuthStatus status, Role role) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java b/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java index 67e52f10..b91a7e3d 100644 --- a/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java +++ b/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java @@ -24,7 +24,7 @@ public UserDTO apply(final UserEntity user) { .phone(user.getPhone()) .password(user.getPassword()) .status(user.getRegisterAuthStatus()) - .product(webIsNullFactory.isNullProductUser(user)) + .advertisements(webIsNullFactory.isNullAdvertisementUser(user)) .role(user.getRole()) .build(); } diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index 844ce386..698f500f 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -2,15 +2,15 @@ scalar LocalTimeDate type Query { getAllUsers: [UserDTO] - getAllProducts: [ProductDTO] + getAllAdvertisement: [AdvertisementDTO] getAllCategory: [CategoryDTO] getByIdUser(id: ID): UserDTO getByIdCategory(id: ID): CategoryDTO - getByIdProduct(id: ID!): ProductDTO + getByIdAdvertisement(id: ID!): AdvertisementDTO } type Mutation { - createProductIdByUser(userId: ID!, entity: ProductInput): ProductDTO + createAdvertisementIdByUser(userId: ID!, entity: AdvertisementInput): AdvertisementDTO updateByIdUser(id: ID!, entity: UserInput): UserDTO } @@ -21,7 +21,7 @@ input UserInput { phone: String email: String password: String - product: [ProductInput] + advertisements: [AdvertisementInput] status: RegisterAuthStatus role: [Role] } @@ -29,15 +29,15 @@ input UserInput { type CategoryDTO { id: ID categoryName: String - products: [ProductDTO] + advertisements: [AdvertisementDTO] image: [ImageDTO] } -type ProductDTO { +type AdvertisementDTO { id: ID name: String - descriptionProduct: String - characteristicProduct: String + descriptionAdvertisement: String + characteristicAdvertisement: String price: Int date: LocalTimeDate location: String @@ -56,14 +56,14 @@ type UserDTO { email: String status: RegisterAuthStatus role: Role - products: [ProductDTO] + advertisements: [AdvertisementDTO] image: [ImageDTO] } -input ProductInput { +input AdvertisementInput { name: String! - descriptionProduct: String! - characteristicProduct: String + descriptionAdvertisement: String + characteristicAdvertisement: String price: Int! } From 41524ae40db8268320518f6d5136b219a3dc1e12 Mon Sep 17 00:00:00 2001 From: Vladik Date: Tue, 7 May 2024 22:19:00 +0300 Subject: [PATCH 08/44] Update AdvertisementEntity --- .../example/backend/web/Advertisement/AdvertisementEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java index 137af841..50cb9618 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java @@ -10,7 +10,7 @@ import java.util.List; @Entity -@Table(name = "products") //TODO замінити назву БД коли Назар закінчить головну сторінку на advertisements +@Table(name = "advertisements") @Getter @Setter @NoArgsConstructor From 9e4e4ccc551057b7e88ca4b016922c099a5e2c73 Mon Sep 17 00:00:00 2001 From: Vladik Date: Wed, 8 May 2024 09:36:30 +0300 Subject: [PATCH 09/44] Update project All and fix --- .../utils/general/WebIsNullFactory.java | 4 +- .../AdvertisementController.java | 2 +- .../Advertisement/AdvertisementFactory.java | 7 +++- .../AdvertisementServiceImpl.java | 38 ++++++++----------- .../web/Category/CategoryController.java | 3 +- .../backend/web/Category/CategoryFactory.java | 7 +++- .../backend/web/Category/CategoryService.java | 1 - .../web/Category/CategoryServiceImpl.java | 36 ++++++++---------- .../backend/web/File/ImageController.java | 4 +- .../backend/web/File/ImageFactory.java | 7 +++- .../backend/web/File/ImageServiceImpl.java | 18 ++++----- .../backend/web/User/UserController.java | 2 +- 12 files changed, 62 insertions(+), 67 deletions(-) diff --git a/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java b/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java index fec24ef3..9cf4e388 100644 --- a/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java +++ b/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java @@ -22,7 +22,7 @@ public class WebIsNullFactory { public List isNullAdvertisementCategory(final CategoryEntity category) { return Optional.ofNullable(category.getAdvertisements()) .map(list -> list.stream() - .map(advertisementFactory::makeAdvertisement) + .map(advertisementFactory) .collect(Collectors.toList())) .orElse(Collections.emptyList()); } @@ -30,7 +30,7 @@ public List isNullAdvertisementCategory(final CategoryEntity c public List isNullAdvertisementUser(final UserEntity user) { return Optional.ofNullable(user.getAdvertisements()) .map(list -> list.stream() - .map(advertisementFactory::makeAdvertisement) + .map(advertisementFactory) .collect(Collectors.toList())) .orElse(Collections.emptyList()); } diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java index 2076eb70..c89f8b11 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java @@ -31,7 +31,7 @@ public List getAllAdvertisement() { } @QueryMapping - public AdvertisementDTO getByIdAdvertisement(@PathVariable @Argument final Long id) { + public AdvertisementDTO getByIdAdvertisement(@Argument final Long id) { return advertisementService.getOneAdvertisement(id); } diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java index 304227b2..63125083 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java @@ -2,9 +2,12 @@ import org.springframework.stereotype.Component; +import java.util.function.Function; + @Component -public class AdvertisementFactory { - public AdvertisementDTO makeAdvertisement(final AdvertisementEntity entity) { +public class AdvertisementFactory implements Function { + @Override + public AdvertisementDTO apply(final AdvertisementEntity entity) { return AdvertisementDTO.builder() .id(entity.getId()) .descriptionAdvertisement(entity.getDescriptionAdvertisement()) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java index 52e03cc1..f3e1c1e5 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java @@ -1,15 +1,8 @@ package com.example.backend.web.Advertisement; -import com.example.backend.web.Category.CategoryEntity; import com.example.backend.web.Category.CategoryService; import com.example.backend.web.User.UserService; -import com.example.backend.web.User.store.UserEntity; import jakarta.persistence.EntityManager; -import jakarta.persistence.TypedQuery; -import jakarta.persistence.criteria.CriteriaBuilder; -import jakarta.persistence.criteria.CriteriaQuery; -import jakarta.persistence.criteria.Predicate; -import jakarta.persistence.criteria.Root; import jakarta.transaction.Transactional; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -31,10 +24,10 @@ public class AdvertisementServiceImpl implements AdvertisementService { @Override @Transactional public AdvertisementDTO createAdvertisement(final Long id, final AdvertisementDTO advertisement) { - final UserEntity userId = userService.getById(id); - final CategoryEntity categoryId = categoryService.getById(advertisement.categoryId()); + final var userId = userService.getById(id); + final var categoryId = categoryService.getById(advertisement.categoryId()); - final AdvertisementEntity newAdvertisement = AdvertisementEntity.builder() + final var newAdvertisement = AdvertisementEntity.builder() .id(advertisement.id()) .user(userId) .name(advertisement.name()) @@ -47,26 +40,26 @@ public AdvertisementDTO createAdvertisement(final Long id, final AdvertisementDT .category(categoryId) .build(); - return advertisementFactory.makeAdvertisement(advertisementRepository.save(newAdvertisement)); + return advertisementFactory.apply(advertisementRepository.save(newAdvertisement)); } @Override public List getAllAdvertisement() { return advertisementRepository.findAll().stream() - .map(advertisementFactory::makeAdvertisement) + .map(advertisementFactory) .collect(Collectors.toList()); } @Override public AdvertisementDTO getOneAdvertisement(final Long id) { - final AdvertisementEntity entityId = getIdAdvertisement(id); + final var entityId = getIdAdvertisement(id); - return advertisementFactory.makeAdvertisement(entityId); + return advertisementFactory.apply(entityId); } @Override public AdvertisementDTO editAdvertisement(final Long id, final AdvertisementDTO entity) { - final AdvertisementEntity entityId = getIdAdvertisement(id); + final var entityId = getIdAdvertisement(id); entityId.setName(entity.name()); entityId.setCharacteristicAdvertisement(entity.characteristicAdvertisement()); @@ -74,7 +67,7 @@ public AdvertisementDTO editAdvertisement(final Long id, final AdvertisementDTO entityId.setCreateDate(entity.createDate()); entityId.setPrice(entity.price()); - return advertisementFactory.makeAdvertisement(advertisementRepository.save(entityId)); + return advertisementFactory.apply(advertisementRepository.save(entityId)); } @Override @@ -89,19 +82,20 @@ public void deleteAll() { @Override public List getFilterAdvertisementName(final String name) { + final var criteriaBuilder = em.getCriteriaBuilder(); - CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); + final var criteriaQuery = criteriaBuilder.createQuery(AdvertisementEntity.class); - CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(AdvertisementEntity.class); + final var advertisementEntityRoot = criteriaQuery.from(AdvertisementEntity.class); - Root advertisementEntityRoot = criteriaQuery.from(AdvertisementEntity.class); + final var nameAdvertisementPredicate = criteriaBuilder.equal( + advertisementEntityRoot.get("name"), name + ); - Predicate nameAdvertisementPredicate = criteriaBuilder.equal(advertisementEntityRoot.get("name"), name); + final var typedQuery = em.createQuery(criteriaQuery); criteriaQuery.where(nameAdvertisementPredicate); - TypedQuery typedQuery = em.createQuery(criteriaQuery); - return typedQuery.getResultList(); } diff --git a/src/main/java/com/example/backend/web/Category/CategoryController.java b/src/main/java/com/example/backend/web/Category/CategoryController.java index 5957df20..ad0ba5bb 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryController.java +++ b/src/main/java/com/example/backend/web/Category/CategoryController.java @@ -10,7 +10,6 @@ @RestController @RequiredArgsConstructor -@Validated @RequestMapping("/api/categories") public class CategoryController { @@ -25,7 +24,7 @@ public List getAllCategory() { } @QueryMapping - public CategoryDTO getByIdCategory(@PathVariable @Argument final Long id) { + public CategoryDTO getByIdCategory(@Argument final Long id) { return categoryService.getOneById(id); } diff --git a/src/main/java/com/example/backend/web/Category/CategoryFactory.java b/src/main/java/com/example/backend/web/Category/CategoryFactory.java index 4cf966b8..cc7c2e4e 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryFactory.java +++ b/src/main/java/com/example/backend/web/Category/CategoryFactory.java @@ -4,13 +4,16 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import java.util.function.Function; + @Component @RequiredArgsConstructor -public class CategoryFactory { +public class CategoryFactory implements Function { private final WebIsNullFactory webIsNullFactory; - public CategoryDTO makeCategory(final CategoryEntity category) { + @Override + public CategoryDTO apply(final CategoryEntity category) { return CategoryDTO.builder() .id(category.getId()) .categoryName(category.getCategoryName()) diff --git a/src/main/java/com/example/backend/web/Category/CategoryService.java b/src/main/java/com/example/backend/web/Category/CategoryService.java index 14d3ae55..b86b8155 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryService.java +++ b/src/main/java/com/example/backend/web/Category/CategoryService.java @@ -2,7 +2,6 @@ import java.util.List; public interface CategoryService { - List getAll(); CategoryEntity getById(Long id); CategoryDTO getOneById(Long id); diff --git a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java index f56606d6..e2d62207 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java +++ b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java @@ -1,11 +1,6 @@ package com.example.backend.web.Category; import jakarta.persistence.EntityManager; -import jakarta.persistence.TypedQuery; -import jakarta.persistence.criteria.CriteriaBuilder; -import jakarta.persistence.criteria.CriteriaQuery; -import jakarta.persistence.criteria.Predicate; -import jakarta.persistence.criteria.Root; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -24,7 +19,7 @@ public class CategoryServiceImpl implements CategoryService { public List getAll() { return categoryRepository.findAll() .stream() - .map(categoryFactory::makeCategory) + .map(categoryFactory) .collect(Collectors.toList()); } @@ -35,28 +30,29 @@ public CategoryEntity getById(final Long id) { @Override public CategoryDTO getOneById(final Long id) { - CategoryEntity category = getIdCategory(id); + final var category = getIdCategory(id); - return categoryFactory.makeCategory(category); + return categoryFactory.apply(category); } @Override public CategoryDTO create(final CategoryDTO categoryDTO) { - CategoryEntity newCategory = CategoryEntity.builder() + final var newCategory = CategoryEntity.builder() .categoryName(categoryDTO.categoryName()) .image(categoryDTO.image()) .build(); - return categoryFactory.makeCategory(categoryRepository.save(newCategory)); + return categoryFactory.apply(categoryRepository.save(newCategory)); } @Override public CategoryDTO update(final Long categoryId, final CategoryDTO categoryDTO) { - CategoryEntity category = getIdCategory(categoryId); + final var category = getIdCategory(categoryId); - category.setCategoryName(category.getCategoryName()); + category.setCategoryName(categoryDTO.categoryName()); + category.setImage(categoryDTO.image()); - return categoryFactory.makeCategory(categoryRepository.save(category)); + return categoryFactory.apply(categoryRepository.save(category)); } @Override @@ -70,19 +66,19 @@ public CategoryEntity getIdCategory(final Long id) { @Override public List getFilterCategory(final String categoryName) { + final var criteriaBuilder = em.getCriteriaBuilder(); - CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); + final var criteriaQuery = criteriaBuilder.createQuery(CategoryEntity.class); - CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(CategoryEntity.class); + final var categoryEntityRootRoot = criteriaQuery.from(CategoryEntity.class); - Root categoryEntityRootRoot = criteriaQuery.from(CategoryEntity.class); - - Predicate categoryNamePredicate = criteriaBuilder.equal( - categoryEntityRootRoot.get("categoryName"), categoryName); + final var categoryNamePredicate = criteriaBuilder.equal( + categoryEntityRootRoot.get("categoryName"), categoryName + ); criteriaQuery.where(categoryNamePredicate); - TypedQuery typedQuery = em.createQuery(criteriaQuery); + final var typedQuery = em.createQuery(criteriaQuery); return typedQuery.getResultList(); } diff --git a/src/main/java/com/example/backend/web/File/ImageController.java b/src/main/java/com/example/backend/web/File/ImageController.java index 767f9c74..be336cbc 100644 --- a/src/main/java/com/example/backend/web/File/ImageController.java +++ b/src/main/java/com/example/backend/web/File/ImageController.java @@ -13,7 +13,7 @@ public class ImageController { private final ImageService imageService; - private static final String URI_IMAGES_ID = "/{id}"; + private static final String URI_IMAGES_ID = "/{imageId}"; @GetMapping public List getAllImage() { @@ -28,7 +28,7 @@ public ImageDTO upload(@RequestParam final MultipartFile file) { @GetMapping(URI_IMAGES_ID) @ResponseBody - public ImageDTO imageGetById(@RequestParam final Long imageId) { + public ImageDTO imageGetById(@PathVariable final Long imageId) { return imageService.imageById(imageId); } } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/File/ImageFactory.java b/src/main/java/com/example/backend/web/File/ImageFactory.java index 7f92ba79..92c28e94 100644 --- a/src/main/java/com/example/backend/web/File/ImageFactory.java +++ b/src/main/java/com/example/backend/web/File/ImageFactory.java @@ -3,9 +3,12 @@ import org.springframework.stereotype.Component; +import java.util.function.Function; + @Component -public class ImageFactory { - public ImageDTO makeImageFactory(final ImageEntity imageEntity) { +public class ImageFactory implements Function { + @Override + public ImageDTO apply(final ImageEntity imageEntity) { return ImageDTO.builder() .id(imageEntity.getId()) .imageUrl(imageEntity.getImageUrl()) diff --git a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java index 0b40bb97..b3ecf515 100644 --- a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java +++ b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java @@ -8,9 +8,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; @@ -21,32 +19,32 @@ public class ImageServiceImpl implements ImageService { private final ImageRepository imageRepository; - private final FileUpload fileUpload; private final ImageFactory imageFactory; + private final FileUpload fileUpload; @Override @SneakyThrows @Transactional public ImageDTO uploadImage(final MultipartFile file) { - final Optional imageOptional = Optional.ofNullable(ImageIO.read(file.getInputStream())); - - imageOptional.orElseThrow(() -> badRequestException("There is no uploaded image")); + final var imageOptional = Optional.ofNullable(ImageIO.read(file.getInputStream())); - Map result = fileUpload.uploadFile(file); + final var result = fileUpload.uploadFile(file); - ImageEntity image = new ImageEntity( + final var image = new ImageEntity( (String) result.get("original_filename"), (String) result.get("url"), (String) result.get("public_id") ); - return imageFactory.makeImageFactory(imageRepository.save(image)); + imageOptional.orElseThrow(() -> badRequestException("There is no uploaded image")); + + return imageFactory.apply(imageRepository.save(image)); } @Override public List getAllPhoto() { return imageRepository.findAll().stream() - .map(imageFactory::makeImageFactory) + .map(imageFactory) .collect(Collectors.toList()); } diff --git a/src/main/java/com/example/backend/web/User/UserController.java b/src/main/java/com/example/backend/web/User/UserController.java index 9d0ca417..0beafbf4 100644 --- a/src/main/java/com/example/backend/web/User/UserController.java +++ b/src/main/java/com/example/backend/web/User/UserController.java @@ -32,7 +32,7 @@ public UserDTO updateByIdUser(@PathVariable @Argument final Long id, } @QueryMapping - public UserDTO getByIdUser(@PathVariable @Argument final Long id) { + public UserDTO getByIdUser(@Argument final Long id) { return userService.getByIdUser(id); } From c736ee1ba8f57ef912666f4fdb08d882536211dd Mon Sep 17 00:00:00 2001 From: Vladik Date: Fri, 10 May 2024 10:36:48 +0300 Subject: [PATCH 10/44] Updated CategoryDTO to accept the picture as a term --- .../com/example/backend/web/Category/CategoryDTO.java | 3 +-- .../example/backend/web/Category/CategoryFactory.java | 2 +- .../backend/web/Category/CategoryServiceImpl.java | 10 ++++++++-- .../com/example/backend/web/File/ImageRepository.java | 1 + .../com/example/backend/web/File/ImageService.java | 1 + .../com/example/backend/web/File/ImageServiceImpl.java | 5 +++++ src/main/resources/graphql/schema.graphqls | 2 +- 7 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/backend/web/Category/CategoryDTO.java b/src/main/java/com/example/backend/web/Category/CategoryDTO.java index 2a27d159..82bd34de 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryDTO.java +++ b/src/main/java/com/example/backend/web/Category/CategoryDTO.java @@ -1,7 +1,6 @@ package com.example.backend.web.Category; -import com.example.backend.web.File.ImageEntity; import com.example.backend.web.Advertisement.AdvertisementDTO; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -14,4 +13,4 @@ public record CategoryDTO(Long id, @NotNull @NotBlank @Size(min = 5, max = 20) String categoryName, List advertisements, - ImageEntity image) { } \ No newline at end of file + String image) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryFactory.java b/src/main/java/com/example/backend/web/Category/CategoryFactory.java index cc7c2e4e..a8b48c5b 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryFactory.java +++ b/src/main/java/com/example/backend/web/Category/CategoryFactory.java @@ -18,7 +18,7 @@ public CategoryDTO apply(final CategoryEntity category) { .id(category.getId()) .categoryName(category.getCategoryName()) .advertisements(webIsNullFactory.isNullAdvertisementCategory(category)) - .image(category.getImage()) + .image(category.getImage().getImageUrl()) .build(); } } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java index e2d62207..21a1df21 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java +++ b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java @@ -1,5 +1,6 @@ package com.example.backend.web.Category; +import com.example.backend.web.File.ImageService; import jakarta.persistence.EntityManager; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -13,6 +14,7 @@ public class CategoryServiceImpl implements CategoryService { private final CategoryRepository categoryRepository; private final CategoryFactory categoryFactory; + private final ImageService imageService; private final EntityManager em; @Override @@ -37,9 +39,11 @@ public CategoryDTO getOneById(final Long id) { @Override public CategoryDTO create(final CategoryDTO categoryDTO) { + final var newImage = imageService.getByImage(categoryDTO.image()); + final var newCategory = CategoryEntity.builder() .categoryName(categoryDTO.categoryName()) - .image(categoryDTO.image()) + .image(newImage) .build(); return categoryFactory.apply(categoryRepository.save(newCategory)); @@ -47,10 +51,12 @@ public CategoryDTO create(final CategoryDTO categoryDTO) { @Override public CategoryDTO update(final Long categoryId, final CategoryDTO categoryDTO) { + final var updateImage = imageService.getByImage(categoryDTO.image()); + final var category = getIdCategory(categoryId); category.setCategoryName(categoryDTO.categoryName()); - category.setImage(categoryDTO.image()); + category.setImage(updateImage); return categoryFactory.apply(categoryRepository.save(category)); } diff --git a/src/main/java/com/example/backend/web/File/ImageRepository.java b/src/main/java/com/example/backend/web/File/ImageRepository.java index 110548c8..433506d2 100644 --- a/src/main/java/com/example/backend/web/File/ImageRepository.java +++ b/src/main/java/com/example/backend/web/File/ImageRepository.java @@ -6,4 +6,5 @@ @Repository public interface ImageRepository extends JpaRepository { ImageDTO getReferenceById(Long id); + ImageEntity getByImageUrl(String image); } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/File/ImageService.java b/src/main/java/com/example/backend/web/File/ImageService.java index 2fda0df6..2a5f29ea 100644 --- a/src/main/java/com/example/backend/web/File/ImageService.java +++ b/src/main/java/com/example/backend/web/File/ImageService.java @@ -8,5 +8,6 @@ public interface ImageService { ImageDTO uploadImage(MultipartFile file); List getAllPhoto(); + ImageEntity getByImage(String image); ImageDTO imageById(Long id); } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java index b3ecf515..7f6cbede 100644 --- a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java +++ b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java @@ -48,6 +48,11 @@ public List getAllPhoto() { .collect(Collectors.toList()); } + @Override + public ImageEntity getByImage(final String image) { + return imageRepository.getByImageUrl(image); + } + @Override public ImageDTO imageById(final Long id) { return imageRepository.getReferenceById(id); diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index 698f500f..e54475fe 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -30,7 +30,7 @@ type CategoryDTO { id: ID categoryName: String advertisements: [AdvertisementDTO] - image: [ImageDTO] + image: String } type AdvertisementDTO { From 119ef6c2607d414b796904e28ae1a2be84a2425a Mon Sep 17 00:00:00 2001 From: Vladik Date: Fri, 10 May 2024 10:45:29 +0300 Subject: [PATCH 11/44] Update ImageDTOAll --- .../java/com/example/backend/web/File/ImageDTO.java | 2 +- .../com/example/backend/web/File/ImageFactory.java | 5 +---- .../com/example/backend/web/File/ImageServiceImpl.java | 10 +++++----- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/example/backend/web/File/ImageDTO.java b/src/main/java/com/example/backend/web/File/ImageDTO.java index d467b7ff..075935a1 100644 --- a/src/main/java/com/example/backend/web/File/ImageDTO.java +++ b/src/main/java/com/example/backend/web/File/ImageDTO.java @@ -3,4 +3,4 @@ import lombok.Builder; @Builder -public record ImageDTO(Long id, String name, String imageUrl, String imageId) { } \ No newline at end of file +public record ImageDTO(String imageUrl) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/File/ImageFactory.java b/src/main/java/com/example/backend/web/File/ImageFactory.java index 92c28e94..5cab3d1a 100644 --- a/src/main/java/com/example/backend/web/File/ImageFactory.java +++ b/src/main/java/com/example/backend/web/File/ImageFactory.java @@ -10,10 +10,7 @@ public class ImageFactory implements Function { @Override public ImageDTO apply(final ImageEntity imageEntity) { return ImageDTO.builder() - .id(imageEntity.getId()) .imageUrl(imageEntity.getImageUrl()) - .imageId(imageEntity.getImageId()) - .name(imageEntity.getName()) .build(); } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java index 7f6cbede..3cc67bd8 100644 --- a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java +++ b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java @@ -30,11 +30,11 @@ public ImageDTO uploadImage(final MultipartFile file) { final var result = fileUpload.uploadFile(file); - final var image = new ImageEntity( - (String) result.get("original_filename"), - (String) result.get("url"), - (String) result.get("public_id") - ); + final var image = ImageEntity.builder() + .name((String) result.get("original_filename")) + .imageUrl((String) result.get("url")) + .imageId((String) result.get("public_id")) + .build(); imageOptional.orElseThrow(() -> badRequestException("There is no uploaded image")); From e7db1c97990ec19668099329644ec8e2b9f49194 Mon Sep 17 00:00:00 2001 From: Vladik Date: Fri, 10 May 2024 11:18:23 +0300 Subject: [PATCH 12/44] Updated AdvertisementDTO to accept the picture as a term --- .../example/backend/web/Advertisement/AdvertisementDTO.java | 2 +- .../backend/web/Advertisement/AdvertisementFactory.java | 2 +- .../backend/web/Advertisement/AdvertisementServiceImpl.java | 4 ++-- .../com/example/backend/web/Category/CategoryRepository.java | 2 +- .../com/example/backend/web/Category/CategoryService.java | 2 +- .../com/example/backend/web/Category/CategoryServiceImpl.java | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java index e559efd3..f7147644 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java @@ -15,4 +15,4 @@ public record AdvertisementDTO(Long id, LocalDateTime createDate, List images, String location, - Long categoryId) { } \ No newline at end of file + String category) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java index 63125083..8767f865 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java @@ -15,7 +15,7 @@ public AdvertisementDTO apply(final AdvertisementEntity entity) { .name(entity.getName()) .price(entity.getPrice()) .createDate(entity.getCreateDate()) - .categoryId(entity.getCategory().getId()) + .category(entity.getCategory().getCategoryName()) .images(entity.getImages()) .location(entity.getLocation()) .build(); diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java index f3e1c1e5..222ee4de 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java @@ -25,7 +25,7 @@ public class AdvertisementServiceImpl implements AdvertisementService { @Transactional public AdvertisementDTO createAdvertisement(final Long id, final AdvertisementDTO advertisement) { final var userId = userService.getById(id); - final var categoryId = categoryService.getById(advertisement.categoryId()); + final var categoryName = categoryService.getByCategoryName(advertisement.category()); final var newAdvertisement = AdvertisementEntity.builder() .id(advertisement.id()) @@ -37,7 +37,7 @@ public AdvertisementDTO createAdvertisement(final Long id, final AdvertisementDT .images(advertisement.images()) .location(advertisement.location()) .createDate(LocalDateTime.now()) - .category(categoryId) + .category(categoryName) .build(); return advertisementFactory.apply(advertisementRepository.save(newAdvertisement)); diff --git a/src/main/java/com/example/backend/web/Category/CategoryRepository.java b/src/main/java/com/example/backend/web/Category/CategoryRepository.java index 93d12e1d..152b39c2 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryRepository.java +++ b/src/main/java/com/example/backend/web/Category/CategoryRepository.java @@ -5,5 +5,5 @@ @Repository public interface CategoryRepository extends JpaRepository { - + CategoryEntity getByCategoryName(String categoryName); } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryService.java b/src/main/java/com/example/backend/web/Category/CategoryService.java index b86b8155..ce6a4940 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryService.java +++ b/src/main/java/com/example/backend/web/Category/CategoryService.java @@ -3,7 +3,7 @@ import java.util.List; public interface CategoryService { List getAll(); - CategoryEntity getById(Long id); + CategoryEntity getByCategoryName(String categoryName); CategoryDTO getOneById(Long id); CategoryDTO create(CategoryDTO categoryDTO); CategoryDTO update(Long categoryId, CategoryDTO categoryDTO); diff --git a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java index 21a1df21..8f325a13 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java +++ b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java @@ -26,8 +26,8 @@ public List getAll() { } @Override - public CategoryEntity getById(final Long id) { - return getIdCategory(id); + public CategoryEntity getByCategoryName(final String categoryName) { + return categoryRepository.getByCategoryName(categoryName); } @Override From 799ecf4b193c9e514cb3d027533b38a048440897 Mon Sep 17 00:00:00 2001 From: Vladik Date: Fri, 10 May 2024 21:06:56 +0300 Subject: [PATCH 13/44] Update method CategoryServiceImpl --- .../backend/web/Advertisement/AdvertisementServiceImpl.java | 2 +- .../java/com/example/backend/web/Category/CategoryService.java | 2 +- .../com/example/backend/web/Category/CategoryServiceImpl.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java index 222ee4de..bfefb095 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java @@ -25,7 +25,7 @@ public class AdvertisementServiceImpl implements AdvertisementService { @Transactional public AdvertisementDTO createAdvertisement(final Long id, final AdvertisementDTO advertisement) { final var userId = userService.getById(id); - final var categoryName = categoryService.getByCategoryName(advertisement.category()); + final var categoryName = categoryService.getCategoryName(advertisement.category()); final var newAdvertisement = AdvertisementEntity.builder() .id(advertisement.id()) diff --git a/src/main/java/com/example/backend/web/Category/CategoryService.java b/src/main/java/com/example/backend/web/Category/CategoryService.java index ce6a4940..cd2c3397 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryService.java +++ b/src/main/java/com/example/backend/web/Category/CategoryService.java @@ -3,7 +3,7 @@ import java.util.List; public interface CategoryService { List getAll(); - CategoryEntity getByCategoryName(String categoryName); + CategoryEntity getCategoryName(String categoryName); CategoryDTO getOneById(Long id); CategoryDTO create(CategoryDTO categoryDTO); CategoryDTO update(Long categoryId, CategoryDTO categoryDTO); diff --git a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java index 8f325a13..0bb856bb 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java +++ b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java @@ -26,7 +26,7 @@ public List getAll() { } @Override - public CategoryEntity getByCategoryName(final String categoryName) { + public CategoryEntity getCategoryName(final String categoryName) { return categoryRepository.getByCategoryName(categoryName); } From bfd8244e74e33d8c6b83bfbdf89857ada5c03c04 Mon Sep 17 00:00:00 2001 From: Vladik Date: Fri, 10 May 2024 21:09:24 +0300 Subject: [PATCH 14/44] fix ImageEntity --- .../java/com/example/backend/web/File/ImageEntity.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/com/example/backend/web/File/ImageEntity.java b/src/main/java/com/example/backend/web/File/ImageEntity.java index 19240bff..116cced7 100644 --- a/src/main/java/com/example/backend/web/File/ImageEntity.java +++ b/src/main/java/com/example/backend/web/File/ImageEntity.java @@ -12,17 +12,10 @@ @AllArgsConstructor @Builder public class ImageEntity { - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String imageUrl; private String imageId; - - public ImageEntity(final String name, final String imageUrl, final String imageId) { - this.name = name; - this.imageUrl = imageUrl; - this.imageId = imageId; - } -} +} \ No newline at end of file From ce3f26f0b0c2106d0e095909c5e90c2e8c1a2034 Mon Sep 17 00:00:00 2001 From: Vladik Date: Sat, 11 May 2024 12:08:15 +0300 Subject: [PATCH 15/44] Update image for UserEntity and schema.graphqls --- .../java/com/example/backend/web/User/store/UserEntity.java | 2 +- .../java/com/example/backend/web/User/store/dto/UserDTO.java | 1 + .../com/example/backend/web/User/store/dto/UserInfoDTO.java | 3 +-- .../example/backend/web/User/store/factory/UserFactory.java | 1 + .../backend/web/User/store/factory/UserInfoFactory.java | 2 +- src/main/resources/graphql/schema.graphqls | 2 +- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/example/backend/web/User/store/UserEntity.java b/src/main/java/com/example/backend/web/User/store/UserEntity.java index 43c65cbe..09b35c4b 100644 --- a/src/main/java/com/example/backend/web/User/store/UserEntity.java +++ b/src/main/java/com/example/backend/web/User/store/UserEntity.java @@ -2,8 +2,8 @@ import com.example.backend.utils.enums.RegisterAuthStatus; import com.example.backend.utils.enums.Role; -import com.example.backend.web.File.ImageEntity; import com.example.backend.web.Advertisement.AdvertisementEntity; +import com.example.backend.web.File.ImageEntity; import jakarta.persistence.*; import lombok.*; import org.springframework.data.jpa.domain.support.AuditingEntityListener; diff --git a/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java b/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java index d3c80679..ddc4f85d 100644 --- a/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java +++ b/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java @@ -9,6 +9,7 @@ @Builder public record UserDTO(Long id, + String image, String lastname, String firstname, String email, diff --git a/src/main/java/com/example/backend/web/User/store/dto/UserInfoDTO.java b/src/main/java/com/example/backend/web/User/store/dto/UserInfoDTO.java index a9420444..01bf6df7 100644 --- a/src/main/java/com/example/backend/web/User/store/dto/UserInfoDTO.java +++ b/src/main/java/com/example/backend/web/User/store/dto/UserInfoDTO.java @@ -1,11 +1,10 @@ package com.example.backend.web.User.store.dto; -import com.example.backend.web.File.ImageEntity; import lombok.Builder; @Builder public record UserInfoDTO(String lastname, - ImageEntity image, + String image, String firstname, String email, String phone) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java b/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java index b91a7e3d..194a6e52 100644 --- a/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java +++ b/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java @@ -19,6 +19,7 @@ public UserDTO apply(final UserEntity user) { return UserDTO.builder() .id(user.getId()) .firstname(user.getFirstname()) + .image(user.getImage().getImageUrl()) .email(user.getEmail()) .lastname(user.getLastname()) .phone(user.getPhone()) diff --git a/src/main/java/com/example/backend/web/User/store/factory/UserInfoFactory.java b/src/main/java/com/example/backend/web/User/store/factory/UserInfoFactory.java index bc464710..b78f2c0e 100644 --- a/src/main/java/com/example/backend/web/User/store/factory/UserInfoFactory.java +++ b/src/main/java/com/example/backend/web/User/store/factory/UserInfoFactory.java @@ -15,7 +15,7 @@ public UserInfoDTO apply(final UserEntity user) { return UserInfoDTO.builder() .firstname(user.getFirstname()) .email(user.getEmail()) - .image(user.getImage()) + .image(user.getImage().getImageUrl()) .lastname(user.getLastname()) .phone(user.getPhone()) .build(); diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index e54475fe..fa2ddfe0 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -57,7 +57,7 @@ type UserDTO { status: RegisterAuthStatus role: Role advertisements: [AdvertisementDTO] - image: [ImageDTO] + image: String } input AdvertisementInput { From dcabbcf38a4575561d51cbb1955d9c2ce0ac1ce4 Mon Sep 17 00:00:00 2001 From: Vladik Date: Sat, 11 May 2024 12:11:44 +0300 Subject: [PATCH 16/44] Update ImageController Link --- .../com/example/backend/web/File/ImageController.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/backend/web/File/ImageController.java b/src/main/java/com/example/backend/web/File/ImageController.java index be336cbc..82a5b9d6 100644 --- a/src/main/java/com/example/backend/web/File/ImageController.java +++ b/src/main/java/com/example/backend/web/File/ImageController.java @@ -9,18 +9,20 @@ @RestController @RequiredArgsConstructor -@RequestMapping("/api/images") +@RequestMapping("/api") public class ImageController { private final ImageService imageService; private static final String URI_IMAGES_ID = "/{imageId}"; + private static final String URI_IMAGE = "/upload"; + private static final String URI_IMAGES = "/images"; - @GetMapping + @GetMapping(URI_IMAGES) public List getAllImage() { return imageService.getAllPhoto(); } - @PostMapping + @PostMapping(URI_IMAGE) @ResponseBody public ImageDTO upload(@RequestParam final MultipartFile file) { return imageService.uploadImage(file); From 61730e8ef0ca45c5756997a673caa5d89a7a5dce Mon Sep 17 00:00:00 2001 From: Vladik Date: Sat, 11 May 2024 14:23:55 +0300 Subject: [PATCH 17/44] Update CategoryService method getCategoryDTOName and schema.graphqls --- .../web/Category/CategoryController.java | 10 ++----- .../backend/web/Category/CategoryDTO.java | 3 +-- .../backend/web/Category/CategoryFactory.java | 1 - .../backend/web/Category/CategoryService.java | 3 +-- .../web/Category/CategoryServiceImpl.java | 27 +++---------------- src/main/resources/graphql/schema.graphqls | 3 +-- 6 files changed, 8 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/example/backend/web/Category/CategoryController.java b/src/main/java/com/example/backend/web/Category/CategoryController.java index ad0ba5bb..1ff2be02 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryController.java +++ b/src/main/java/com/example/backend/web/Category/CategoryController.java @@ -15,7 +15,6 @@ public class CategoryController { private final CategoryServiceImpl categoryService; private static final String URI_CATEGORIES_ID = "/{id}"; - private static final String URI_CATEGORIES_FILTER = "/filter/{categoryName}"; @GetMapping @QueryMapping @@ -24,8 +23,8 @@ public List getAllCategory() { } @QueryMapping - public CategoryDTO getByIdCategory(@Argument final Long id) { - return categoryService.getOneById(id); + public CategoryDTO getByNameCategory(@Argument final String name) { + return categoryService.getCategoryDTOName(name); } @PostMapping @@ -38,11 +37,6 @@ public CategoryDTO update(@PathVariable final Long id, @RequestBody @Validated f return categoryService.update(id, categoryDTO); } - @GetMapping(URI_CATEGORIES_FILTER) - public List getFilterLatsName(@PathVariable final String categoryName) { - return categoryService.getFilterCategory(categoryName); - } - @DeleteMapping(URI_CATEGORIES_ID) public void delete(@PathVariable final Long id) { categoryService.deleteId(id); diff --git a/src/main/java/com/example/backend/web/Category/CategoryDTO.java b/src/main/java/com/example/backend/web/Category/CategoryDTO.java index 82bd34de..6cf19e69 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryDTO.java +++ b/src/main/java/com/example/backend/web/Category/CategoryDTO.java @@ -10,7 +10,6 @@ import java.util.List; @Builder -public record CategoryDTO(Long id, - @NotNull @NotBlank @Size(min = 5, max = 20) String categoryName, +public record CategoryDTO(@NotNull @NotBlank @Size(min = 5, max = 20) String categoryName, List advertisements, String image) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryFactory.java b/src/main/java/com/example/backend/web/Category/CategoryFactory.java index a8b48c5b..cdfe5d78 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryFactory.java +++ b/src/main/java/com/example/backend/web/Category/CategoryFactory.java @@ -15,7 +15,6 @@ public class CategoryFactory implements Function { @Override public CategoryDTO apply(final CategoryEntity category) { return CategoryDTO.builder() - .id(category.getId()) .categoryName(category.getCategoryName()) .advertisements(webIsNullFactory.isNullAdvertisementCategory(category)) .image(category.getImage().getImageUrl()) diff --git a/src/main/java/com/example/backend/web/Category/CategoryService.java b/src/main/java/com/example/backend/web/Category/CategoryService.java index cd2c3397..b3efeae7 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryService.java +++ b/src/main/java/com/example/backend/web/Category/CategoryService.java @@ -4,9 +4,8 @@ public interface CategoryService { List getAll(); CategoryEntity getCategoryName(String categoryName); - CategoryDTO getOneById(Long id); + CategoryDTO getCategoryDTOName(String categoryName); CategoryDTO create(CategoryDTO categoryDTO); CategoryDTO update(Long categoryId, CategoryDTO categoryDTO); void deleteId(Long id); - List getFilterCategory(String categoryName); } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java index 0bb856bb..a8c884c0 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java +++ b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java @@ -31,10 +31,8 @@ public CategoryEntity getCategoryName(final String categoryName) { } @Override - public CategoryDTO getOneById(final Long id) { - final var category = getIdCategory(id); - - return categoryFactory.apply(category); + public CategoryDTO getCategoryDTOName(final String categoryName) { + return categoryFactory.apply(categoryRepository.getByCategoryName(categoryName)); } @Override @@ -66,26 +64,7 @@ public void deleteId(final Long id) { categoryRepository.deleteById(id); } - public CategoryEntity getIdCategory(final Long id) { + private CategoryEntity getIdCategory(final Long id) { return categoryRepository.getReferenceById(id); } - - @Override - public List getFilterCategory(final String categoryName) { - final var criteriaBuilder = em.getCriteriaBuilder(); - - final var criteriaQuery = criteriaBuilder.createQuery(CategoryEntity.class); - - final var categoryEntityRootRoot = criteriaQuery.from(CategoryEntity.class); - - final var categoryNamePredicate = criteriaBuilder.equal( - categoryEntityRootRoot.get("categoryName"), categoryName - ); - - criteriaQuery.where(categoryNamePredicate); - - final var typedQuery = em.createQuery(criteriaQuery); - - return typedQuery.getResultList(); - } } \ No newline at end of file diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index fa2ddfe0..db87bfb8 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -5,7 +5,7 @@ type Query { getAllAdvertisement: [AdvertisementDTO] getAllCategory: [CategoryDTO] getByIdUser(id: ID): UserDTO - getByIdCategory(id: ID): CategoryDTO + getByNameCategory(name: String): CategoryDTO getByIdAdvertisement(id: ID!): AdvertisementDTO } @@ -27,7 +27,6 @@ input UserInput { } type CategoryDTO { - id: ID categoryName: String advertisements: [AdvertisementDTO] image: String From 01cee80ce2c146f834f27c3a7904255429150aa0 Mon Sep 17 00:00:00 2001 From: Vladik Date: Sat, 11 May 2024 14:25:33 +0300 Subject: [PATCH 18/44] Delete filter AdvertisementService and fix CategoryServiceImpl --- .../AdvertisementController.java | 6 ------ .../Advertisement/AdvertisementService.java | 1 - .../AdvertisementServiceImpl.java | 21 ------------------- .../web/Category/CategoryServiceImpl.java | 2 -- 4 files changed, 30 deletions(-) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java index c89f8b11..8bf6ce7e 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java @@ -15,7 +15,6 @@ public class AdvertisementController { private final AdvertisementServiceImpl advertisementService; private static final String URI_ADVERTISEMENT_ID = "/{id}"; - private static final String URI_ADVERTISEMENT_FILTER = "/filter/{name}"; private static final String URL_DELETE_ALL = "/deleteAll"; @PostMapping(URI_ADVERTISEMENT_ID) @@ -45,11 +44,6 @@ public void deleteIdAdvertisement(@PathVariable final Long id) { advertisementService.deleteIdAdvertisement(id); } - @GetMapping(URI_ADVERTISEMENT_FILTER) - public List getFilterName(@PathVariable final String name) { - return advertisementService.getFilterAdvertisementName(name); - } - @DeleteMapping(URL_DELETE_ALL) public void deleteAllAdvertisement() { advertisementService.deleteAll(); diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementService.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementService.java index 351cd8a2..7481f7a5 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementService.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementService.java @@ -8,6 +8,5 @@ public interface AdvertisementService { AdvertisementDTO getOneAdvertisement(Long id); AdvertisementDTO editAdvertisement(Long id, AdvertisementDTO entity); void deleteIdAdvertisement(Long id); - List getFilterAdvertisementName(String name); void deleteAll(); } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java index bfefb095..831aceae 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java @@ -2,7 +2,6 @@ import com.example.backend.web.Category.CategoryService; import com.example.backend.web.User.UserService; -import jakarta.persistence.EntityManager; import jakarta.transaction.Transactional; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -19,7 +18,6 @@ public class AdvertisementServiceImpl implements AdvertisementService { private final AdvertisementFactory advertisementFactory; private final CategoryService categoryService; private final UserService userService; - private final EntityManager em; @Override @Transactional @@ -80,25 +78,6 @@ public void deleteAll() { advertisementRepository.deleteAll(); } - @Override - public List getFilterAdvertisementName(final String name) { - final var criteriaBuilder = em.getCriteriaBuilder(); - - final var criteriaQuery = criteriaBuilder.createQuery(AdvertisementEntity.class); - - final var advertisementEntityRoot = criteriaQuery.from(AdvertisementEntity.class); - - final var nameAdvertisementPredicate = criteriaBuilder.equal( - advertisementEntityRoot.get("name"), name - ); - - final var typedQuery = em.createQuery(criteriaQuery); - - criteriaQuery.where(nameAdvertisementPredicate); - - return typedQuery.getResultList(); - } - private AdvertisementEntity getIdAdvertisement(final Long id) { return advertisementRepository.getReferenceById(id); } diff --git a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java index a8c884c0..acdab06b 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java +++ b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java @@ -1,7 +1,6 @@ package com.example.backend.web.Category; import com.example.backend.web.File.ImageService; -import jakarta.persistence.EntityManager; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -15,7 +14,6 @@ public class CategoryServiceImpl implements CategoryService { private final CategoryRepository categoryRepository; private final CategoryFactory categoryFactory; private final ImageService imageService; - private final EntityManager em; @Override public List getAll() { From c1357bffd7889730d32c117514e1fde2eefabc70 Mon Sep 17 00:00:00 2001 From: Vladik Date: Sat, 11 May 2024 14:27:55 +0300 Subject: [PATCH 19/44] Fix AdvertisementServiceImpl --- .../backend/web/Advertisement/AdvertisementServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java index 831aceae..3bae1c1a 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java @@ -26,7 +26,6 @@ public AdvertisementDTO createAdvertisement(final Long id, final AdvertisementDT final var categoryName = categoryService.getCategoryName(advertisement.category()); final var newAdvertisement = AdvertisementEntity.builder() - .id(advertisement.id()) .user(userId) .name(advertisement.name()) .characteristicAdvertisement(advertisement.characteristicAdvertisement()) From 912be77151ffbe0c74f936a27d543ca3ef99a690 Mon Sep 17 00:00:00 2001 From: Vladik Date: Sat, 11 May 2024 14:50:38 +0300 Subject: [PATCH 20/44] Update method and link for AuthController --- .../backend/security/controllers/AuthController.java | 8 ++++---- .../com/example/backend/security/service/AuthService.java | 2 +- .../backend/security/service/impl/AuthServiceImpl.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/backend/security/controllers/AuthController.java b/src/main/java/com/example/backend/security/controllers/AuthController.java index 30dbb9c9..f911c762 100644 --- a/src/main/java/com/example/backend/security/controllers/AuthController.java +++ b/src/main/java/com/example/backend/security/controllers/AuthController.java @@ -33,7 +33,7 @@ public class AuthController { private static final String FORM_CHANGE_PASSWORD_URI = "/change-password"; private static final String REQUEST_EMAIL_UPDATE_PASSWORD = "/request/email"; private static final String ACTIVE_USER = "/active"; - private static final String INFO = "/accouth"; + private static final String PROFILE_USER = "/profile"; private static final String SEND_MESSAGE_EMAIL_NOT_ACTIVE = "/sendMessageEmailActive"; @PostMapping(SIGNUP_URI) @@ -65,11 +65,11 @@ public void updatePassword(@RequestHeader(AUTHORIZATION) final String jwt, authService.formUpdatePassword(jwt, passwordRequest); } - @GetMapping(INFO) + @GetMapping(PROFILE_USER) @Operation(summary = "Information about the user who is authorized and logged into the system") @ApiResponseInfoOK - public UserInfoDTO info(@RequestHeader(AUTHORIZATION) final String accessToken) { - return authService.info(accessToken); + public UserInfoDTO profile(@RequestHeader(AUTHORIZATION) final String accessToken) { + return authService.profileUser(accessToken); } @PostMapping(REQUEST_EMAIL_UPDATE_PASSWORD) diff --git a/src/main/java/com/example/backend/security/service/AuthService.java b/src/main/java/com/example/backend/security/service/AuthService.java index addb38bc..bda0d6f4 100644 --- a/src/main/java/com/example/backend/security/service/AuthService.java +++ b/src/main/java/com/example/backend/security/service/AuthService.java @@ -62,5 +62,5 @@ public interface AuthService { * @return UserInfoDTO containing the user's information * @throws RuntimeException if a user with the extracted data is not found */ - UserInfoDTO info(String accessToken); + UserInfoDTO profileUser(String accessToken); } \ No newline at end of file diff --git a/src/main/java/com/example/backend/security/service/impl/AuthServiceImpl.java b/src/main/java/com/example/backend/security/service/impl/AuthServiceImpl.java index 03900c1d..91a63cc5 100644 --- a/src/main/java/com/example/backend/security/service/impl/AuthServiceImpl.java +++ b/src/main/java/com/example/backend/security/service/impl/AuthServiceImpl.java @@ -157,7 +157,7 @@ public void sendEmailActive(final EmailRequest emailRequest) { } @Override - public UserInfoDTO info(final String accessToken) { + public UserInfoDTO profileUser(final String accessToken) { final var token = jwtService.extractUserData(accessToken.substring(7)); final var user = userService.getByUserData(token); From 886c20e989c38746996905366650661f839a0b7c Mon Sep 17 00:00:00 2001 From: Vladik Date: Sat, 11 May 2024 14:54:02 +0300 Subject: [PATCH 21/44] Update schema.graphqls --- src/main/resources/graphql/schema.graphqls | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index db87bfb8..f85e0624 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -4,8 +4,8 @@ type Query { getAllUsers: [UserDTO] getAllAdvertisement: [AdvertisementDTO] getAllCategory: [CategoryDTO] - getByIdUser(id: ID): UserDTO - getByNameCategory(name: String): CategoryDTO + getByIdUser(id: ID!): UserDTO + getByNameCategory(name: String!): CategoryDTO getByIdAdvertisement(id: ID!): AdvertisementDTO } From 529fbb0760ca02ad87341cb30ccecc3abccbe3bb Mon Sep 17 00:00:00 2001 From: Vladik Date: Sat, 11 May 2024 15:34:27 +0300 Subject: [PATCH 22/44] Update schema.graphqls --- src/main/resources/graphql/schema.graphqls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index f85e0624..79975756 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -11,7 +11,7 @@ type Query { type Mutation { createAdvertisementIdByUser(userId: ID!, entity: AdvertisementInput): AdvertisementDTO - updateByIdUser(id: ID!, entity: UserInput): UserDTO + updateByIdUser(id: ID!, user: UserInput): UserDTO } input UserInput { From 1dee847087ba19603a82d46fee666d8a462ed24b Mon Sep 17 00:00:00 2001 From: Vladik Date: Sat, 11 May 2024 23:07:50 +0300 Subject: [PATCH 23/44] Update schema.graphqls --- src/main/resources/graphql/schema.graphqls | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index 79975756..09ecf45d 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -15,15 +15,11 @@ type Mutation { } input UserInput { - id: ID - lastname: String - firstname: String - phone: String - email: String + lastname: String! + firstname: String! + phone: String! + email: String! password: String - advertisements: [AdvertisementInput] - status: RegisterAuthStatus - role: [Role] } type CategoryDTO { @@ -61,8 +57,8 @@ type UserDTO { input AdvertisementInput { name: String! - descriptionAdvertisement: String - characteristicAdvertisement: String + descriptionAdvertisement: String! + characteristicAdvertisement: String! price: Int! } From d72fface3c567c99a5b951adc45377a17f013d0f Mon Sep 17 00:00:00 2001 From: Vladik Date: Sun, 12 May 2024 10:33:29 +0300 Subject: [PATCH 24/44] Added method uploadImageEntity and method updateImageUser --- .../backend/web/File/ImageService.java | 1 + .../backend/web/File/ImageServiceImpl.java | 17 +++++++++++++ .../backend/web/User/UserController.java | 17 +++++++++++-- .../example/backend/web/User/UserService.java | 3 +++ .../backend/web/User/UserServiceImpl.java | 24 ++++++++++++++++++- 5 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/backend/web/File/ImageService.java b/src/main/java/com/example/backend/web/File/ImageService.java index 2a5f29ea..211769cb 100644 --- a/src/main/java/com/example/backend/web/File/ImageService.java +++ b/src/main/java/com/example/backend/web/File/ImageService.java @@ -7,6 +7,7 @@ public interface ImageService { ImageDTO uploadImage(MultipartFile file); + ImageEntity uploadImageEntity(MultipartFile file); List getAllPhoto(); ImageEntity getByImage(String image); ImageDTO imageById(Long id); diff --git a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java index 3cc67bd8..25a033eb 100644 --- a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java +++ b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java @@ -41,6 +41,23 @@ public ImageDTO uploadImage(final MultipartFile file) { return imageFactory.apply(imageRepository.save(image)); } + @Override + @SneakyThrows + @Transactional + public ImageEntity uploadImageEntity(final MultipartFile file) { + final var imageOptional = Optional.ofNullable(ImageIO.read(file.getInputStream())); + + imageOptional.orElseThrow(() -> badRequestException("There is no uploaded image")); + + final var map = fileUpload.uploadFile(file); + + return ImageEntity.builder() + .name((String) map.get("original_filename")) + .imageUrl((String) map.get("url")) + .imageId((String) map.get("public_id")) + .build(); + } + @Override public List getAllPhoto() { return imageRepository.findAll().stream() diff --git a/src/main/java/com/example/backend/web/User/UserController.java b/src/main/java/com/example/backend/web/User/UserController.java index 0beafbf4..88066939 100644 --- a/src/main/java/com/example/backend/web/User/UserController.java +++ b/src/main/java/com/example/backend/web/User/UserController.java @@ -1,22 +1,30 @@ package com.example.backend.web.User; +import com.example.backend.utils.annotations.ApiResponseOK; import com.example.backend.web.User.store.dto.UserDTO; +import com.example.backend.web.User.store.dto.UserInfoDTO; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.graphql.data.method.annotation.Argument; import org.springframework.graphql.data.method.annotation.MutationMapping; import org.springframework.graphql.data.method.annotation.QueryMapping; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.List; +import static org.springframework.http.HttpHeaders.AUTHORIZATION; + @RestController @RequiredArgsConstructor +@Tag(name = "UserService") @RequestMapping("/api/users") public class UserController { private final UserService userService; + private static final String UPDATE_IMAGE_USER = "/updateImageUser"; private static final String URI_USERS_ID = "/{id}"; @QueryMapping @@ -26,8 +34,7 @@ public List getAllUsers() { @PatchMapping(URI_USERS_ID) @MutationMapping - public UserDTO updateByIdUser(@PathVariable @Argument final Long id, - @RequestBody @Argument final UserDTO user) { + public UserDTO updateByIdUser(@PathVariable @Argument final Long id, @RequestBody @Argument final UserDTO user) { return userService.updateByIdUser(id, user); } @@ -36,6 +43,12 @@ public UserDTO getByIdUser(@Argument final Long id) { return userService.getByIdUser(id); } + @PutMapping(UPDATE_IMAGE_USER) + @ApiResponseOK + public UserInfoDTO updateImage(@RequestHeader(AUTHORIZATION) final String jwt, @RequestParam MultipartFile image) { + return userService.updateImageUser(jwt, image); + } + @DeleteMapping(URI_USERS_ID) public String deleteId(@PathVariable final Long id) { userService.deleteByIdUser(id); diff --git a/src/main/java/com/example/backend/web/User/UserService.java b/src/main/java/com/example/backend/web/User/UserService.java index e289b3fa..66271c67 100644 --- a/src/main/java/com/example/backend/web/User/UserService.java +++ b/src/main/java/com/example/backend/web/User/UserService.java @@ -2,7 +2,9 @@ import com.example.backend.web.User.store.UserEntity; import com.example.backend.web.User.store.dto.UserDTO; +import com.example.backend.web.User.store.dto.UserInfoDTO; import com.example.backend.web.User.store.dto.UserSecurityDTO; +import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Optional; @@ -17,4 +19,5 @@ public interface UserService { UserDTO updateByIdUser(Long id, UserDTO user); void deleteByIdUser(Long id); UserSecurityDTO mySecuritySave(UserEntity user); + UserInfoDTO updateImageUser(String jwt, MultipartFile image); } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/User/UserServiceImpl.java b/src/main/java/com/example/backend/web/User/UserServiceImpl.java index aee49afc..9c4fe71c 100644 --- a/src/main/java/com/example/backend/web/User/UserServiceImpl.java +++ b/src/main/java/com/example/backend/web/User/UserServiceImpl.java @@ -1,26 +1,35 @@ package com.example.backend.web.User; +import com.example.backend.security.service.JwtService; +import com.example.backend.web.File.ImageService; import com.example.backend.web.User.store.UserEntity; import com.example.backend.web.User.store.dto.UserDTO; +import com.example.backend.web.User.store.dto.UserInfoDTO; import com.example.backend.web.User.store.dto.UserSecurityDTO; import com.example.backend.web.User.store.factory.UserFactory; +import com.example.backend.web.User.store.factory.UserInfoFactory; import com.example.backend.web.User.store.factory.UserSecurityFactory; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import static com.example.backend.utils.exception.RequestException.badRequestException; +import static java.util.Optional.ofNullable; @Service @RequiredArgsConstructor public class UserServiceImpl implements UserService { private final UserSecurityFactory userSecurityFactory; + private final UserInfoFactory userInfoFactory; private final UserRepository userRepository; + private final ImageService imageService; private final UserFactory userFactory; + private final JwtService jwtService; @Override public UserDTO getByIdUser(final Long id) { @@ -44,7 +53,7 @@ public Optional getBySecurityEmail(final String email) { () -> badRequestException("Not user") ); - return Optional.ofNullable(userSecurityFactory.apply(user)); + return ofNullable(userSecurityFactory.apply(user)); } @Override @@ -83,4 +92,17 @@ public void deleteByIdUser(final Long id) { public UserSecurityDTO mySecuritySave(final UserEntity user) { return userSecurityFactory.apply(userRepository.save(user)); } + + @Override + public UserInfoDTO updateImageUser(final String jwt, final MultipartFile image) { + final var token = jwtService.extractUserData(jwt).substring(7); + final var update = imageService.uploadImageEntity(image); + final var userData = getByUserData(token); + + userData.setImage(update); + + userRepository.save(userData); + + return userInfoFactory.apply(userData); + } } \ No newline at end of file From 225248cd419aed86938730d488c9e4b0fd81795d Mon Sep 17 00:00:00 2001 From: Vladik Date: Sun, 12 May 2024 10:36:35 +0300 Subject: [PATCH 25/44] Update TagControllers --- .../backend/web/Advertisement/AdvertisementController.java | 2 ++ .../com/example/backend/web/Category/CategoryController.java | 2 ++ src/main/java/com/example/backend/web/File/ImageController.java | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java index 8bf6ce7e..6ece2fba 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java @@ -1,5 +1,6 @@ package com.example.backend.web.Advertisement; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.graphql.data.method.annotation.Argument; import org.springframework.graphql.data.method.annotation.MutationMapping; @@ -10,6 +11,7 @@ @RestController @RequiredArgsConstructor +@Tag(name = "AdvertisementService") @RequestMapping("/api/advertisement") public class AdvertisementController { diff --git a/src/main/java/com/example/backend/web/Category/CategoryController.java b/src/main/java/com/example/backend/web/Category/CategoryController.java index 1ff2be02..675842e8 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryController.java +++ b/src/main/java/com/example/backend/web/Category/CategoryController.java @@ -1,5 +1,6 @@ package com.example.backend.web.Category; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.graphql.data.method.annotation.Argument; import org.springframework.graphql.data.method.annotation.QueryMapping; @@ -10,6 +11,7 @@ @RestController @RequiredArgsConstructor +@Tag(name = "CategoryService") @RequestMapping("/api/categories") public class CategoryController { diff --git a/src/main/java/com/example/backend/web/File/ImageController.java b/src/main/java/com/example/backend/web/File/ImageController.java index 82a5b9d6..dd9e6758 100644 --- a/src/main/java/com/example/backend/web/File/ImageController.java +++ b/src/main/java/com/example/backend/web/File/ImageController.java @@ -1,6 +1,7 @@ package com.example.backend.web.File; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -9,6 +10,7 @@ @RestController @RequiredArgsConstructor +@Tag(name = "ImageService") @RequestMapping("/api") public class ImageController { From 204514fe50fa4a4422c77404ea2d1564f3793453 Mon Sep 17 00:00:00 2001 From: Vladik Date: Sun, 12 May 2024 12:31:22 +0300 Subject: [PATCH 26/44] Update Mapping --- src/main/java/com/example/backend/web/User/UserController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/backend/web/User/UserController.java b/src/main/java/com/example/backend/web/User/UserController.java index 88066939..d2f13cde 100644 --- a/src/main/java/com/example/backend/web/User/UserController.java +++ b/src/main/java/com/example/backend/web/User/UserController.java @@ -43,7 +43,7 @@ public UserDTO getByIdUser(@Argument final Long id) { return userService.getByIdUser(id); } - @PutMapping(UPDATE_IMAGE_USER) + @PatchMapping(UPDATE_IMAGE_USER) @ApiResponseOK public UserInfoDTO updateImage(@RequestHeader(AUTHORIZATION) final String jwt, @RequestParam MultipartFile image) { return userService.updateImageUser(jwt, image); From 88518d8b9867cd11c247b6665a17580feb774105 Mon Sep 17 00:00:00 2001 From: Vladik Date: Sun, 12 May 2024 17:14:46 +0300 Subject: [PATCH 27/44] Update AdvertisementEntity --- .../example/backend/web/Advertisement/AdvertisementEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java index 50cb9618..59c41e87 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java @@ -44,7 +44,7 @@ public class AdvertisementEntity { @JoinColumn(name = "category_id") private CategoryEntity category; - @OneToMany + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) @JoinColumn(name = "photo_id") private List images; From 7732293c762804258073dfd0c62a5b3c9de4ba18 Mon Sep 17 00:00:00 2001 From: Vladik Date: Sun, 12 May 2024 17:20:09 +0300 Subject: [PATCH 28/44] Update UserDTO and UserFactory --- .../com/example/backend/web/User/store/dto/UserDTO.java | 6 +----- .../example/backend/web/User/store/factory/UserFactory.java | 2 -- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java b/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java index ddc4f85d..86a5789c 100644 --- a/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java +++ b/src/main/java/com/example/backend/web/User/store/dto/UserDTO.java @@ -1,8 +1,6 @@ package com.example.backend.web.User.store.dto; import com.example.backend.web.Advertisement.AdvertisementDTO; -import com.example.backend.utils.enums.RegisterAuthStatus; -import com.example.backend.utils.enums.Role; import lombok.Builder; import java.util.List; @@ -15,6 +13,4 @@ public record UserDTO(Long id, String email, String phone, String password, - List advertisements, - RegisterAuthStatus status, - Role role) { } \ No newline at end of file + List advertisements) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java b/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java index 194a6e52..ba38391c 100644 --- a/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java +++ b/src/main/java/com/example/backend/web/User/store/factory/UserFactory.java @@ -24,9 +24,7 @@ public UserDTO apply(final UserEntity user) { .lastname(user.getLastname()) .phone(user.getPhone()) .password(user.getPassword()) - .status(user.getRegisterAuthStatus()) .advertisements(webIsNullFactory.isNullAdvertisementUser(user)) - .role(user.getRole()) .build(); } } \ No newline at end of file From 88fff4bb80ebdb708d0883c29e3aa565e4aa17f3 Mon Sep 17 00:00:00 2001 From: Vladik Date: Sun, 12 May 2024 18:33:19 +0300 Subject: [PATCH 29/44] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c2065bc2..095f4882 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ bin/ ### IntelliJ IDEA ### .idea +.env *.iws *.iml *.ipr From 82c2e5256c16124d1a3aa249a068a00e097fb85b Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 09:55:38 +0300 Subject: [PATCH 30/44] Update schema.graphqls --- src/main/resources/graphql/schema.graphqls | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index 09ecf45d..d2e0f454 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -49,8 +49,6 @@ type UserDTO { firstname: String phone: String email: String - status: RegisterAuthStatus - role: Role advertisements: [AdvertisementDTO] image: String } From 1b58a8b180dd0d43a204e9a43d60282bb9158027 Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 10:01:54 +0300 Subject: [PATCH 31/44] fix UserController --- src/main/java/com/example/backend/web/User/UserController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/backend/web/User/UserController.java b/src/main/java/com/example/backend/web/User/UserController.java index d2f13cde..8cbbd2a8 100644 --- a/src/main/java/com/example/backend/web/User/UserController.java +++ b/src/main/java/com/example/backend/web/User/UserController.java @@ -45,7 +45,8 @@ public UserDTO getByIdUser(@Argument final Long id) { @PatchMapping(UPDATE_IMAGE_USER) @ApiResponseOK - public UserInfoDTO updateImage(@RequestHeader(AUTHORIZATION) final String jwt, @RequestParam MultipartFile image) { + public UserInfoDTO updateImage(@RequestHeader(AUTHORIZATION) final String jwt, + @RequestParam final MultipartFile image) { return userService.updateImageUser(jwt, image); } From c5e732b70592c1f8dca27b45d52e1dfb088380b3 Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 11:01:10 +0300 Subject: [PATCH 32/44] Create ImageCreateDTO and ImageCreateFactory --- .../web/File/store/dto/ImageCreateDTO.java | 6 ++++++ .../File/store/factory/ImageCreateFactory.java | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/main/java/com/example/backend/web/File/store/dto/ImageCreateDTO.java create mode 100644 src/main/java/com/example/backend/web/File/store/factory/ImageCreateFactory.java diff --git a/src/main/java/com/example/backend/web/File/store/dto/ImageCreateDTO.java b/src/main/java/com/example/backend/web/File/store/dto/ImageCreateDTO.java new file mode 100644 index 00000000..485acabf --- /dev/null +++ b/src/main/java/com/example/backend/web/File/store/dto/ImageCreateDTO.java @@ -0,0 +1,6 @@ +package com.example.backend.web.File.store.dto; + +import lombok.Builder; + +@Builder +public record ImageCreateDTO(String imageUrl) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/File/store/factory/ImageCreateFactory.java b/src/main/java/com/example/backend/web/File/store/factory/ImageCreateFactory.java new file mode 100644 index 00000000..40175f32 --- /dev/null +++ b/src/main/java/com/example/backend/web/File/store/factory/ImageCreateFactory.java @@ -0,0 +1,18 @@ +package com.example.backend.web.File.store.factory; + + +import com.example.backend.web.File.store.ImageEntity; +import com.example.backend.web.File.store.dto.ImageCreateDTO; +import org.springframework.stereotype.Component; + +import java.util.function.Function; + +@Component +public class ImageCreateFactory implements Function { + @Override + public ImageCreateDTO apply(final ImageEntity imageEntity) { + return ImageCreateDTO.builder() + .imageUrl(imageEntity.getImageUrl()) + .build(); + } +} \ No newline at end of file From 0ae9d3ea5f3d3fc38dd619e379fe946443ef7568 Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 11:02:54 +0300 Subject: [PATCH 33/44] Updated the project architecture ImageEntity --- src/main/java/com/example/backend/web/File/ImageDTO.java | 6 ------ .../example/backend/web/File/{ => store}/ImageEntity.java | 2 +- .../com/example/backend/web/File/store/dto/ImageDTO.java | 6 ++++++ .../backend/web/File/{ => store/factory}/ImageFactory.java | 7 ++++++- 4 files changed, 13 insertions(+), 8 deletions(-) delete mode 100644 src/main/java/com/example/backend/web/File/ImageDTO.java rename src/main/java/com/example/backend/web/File/{ => store}/ImageEntity.java (88%) create mode 100644 src/main/java/com/example/backend/web/File/store/dto/ImageDTO.java rename src/main/java/com/example/backend/web/File/{ => store/factory}/ImageFactory.java (54%) diff --git a/src/main/java/com/example/backend/web/File/ImageDTO.java b/src/main/java/com/example/backend/web/File/ImageDTO.java deleted file mode 100644 index 075935a1..00000000 --- a/src/main/java/com/example/backend/web/File/ImageDTO.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.backend.web.File; - -import lombok.Builder; - -@Builder -public record ImageDTO(String imageUrl) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/File/ImageEntity.java b/src/main/java/com/example/backend/web/File/store/ImageEntity.java similarity index 88% rename from src/main/java/com/example/backend/web/File/ImageEntity.java rename to src/main/java/com/example/backend/web/File/store/ImageEntity.java index 116cced7..29610eb9 100644 --- a/src/main/java/com/example/backend/web/File/ImageEntity.java +++ b/src/main/java/com/example/backend/web/File/store/ImageEntity.java @@ -1,4 +1,4 @@ -package com.example.backend.web.File; +package com.example.backend.web.File.store; import jakarta.persistence.*; import lombok.*; diff --git a/src/main/java/com/example/backend/web/File/store/dto/ImageDTO.java b/src/main/java/com/example/backend/web/File/store/dto/ImageDTO.java new file mode 100644 index 00000000..9a2a1b75 --- /dev/null +++ b/src/main/java/com/example/backend/web/File/store/dto/ImageDTO.java @@ -0,0 +1,6 @@ +package com.example.backend.web.File.store.dto; + +import lombok.Builder; + +@Builder +public record ImageDTO(Long id, String name, String imageUrl, String imageId) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/File/ImageFactory.java b/src/main/java/com/example/backend/web/File/store/factory/ImageFactory.java similarity index 54% rename from src/main/java/com/example/backend/web/File/ImageFactory.java rename to src/main/java/com/example/backend/web/File/store/factory/ImageFactory.java index 5cab3d1a..6b8cec4a 100644 --- a/src/main/java/com/example/backend/web/File/ImageFactory.java +++ b/src/main/java/com/example/backend/web/File/store/factory/ImageFactory.java @@ -1,6 +1,8 @@ -package com.example.backend.web.File; +package com.example.backend.web.File.store.factory; +import com.example.backend.web.File.store.ImageEntity; +import com.example.backend.web.File.store.dto.ImageDTO; import org.springframework.stereotype.Component; import java.util.function.Function; @@ -10,7 +12,10 @@ public class ImageFactory implements Function { @Override public ImageDTO apply(final ImageEntity imageEntity) { return ImageDTO.builder() + .id(imageEntity.getId()) + .name(imageEntity.getName()) .imageUrl(imageEntity.getImageUrl()) + .imageId(imageEntity.getImageId()) .build(); } } \ No newline at end of file From 18971a49108183bd008e98d140aff197d4732d09 Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 11:04:15 +0300 Subject: [PATCH 34/44] Added ImageCreateDTO --- .../com/example/backend/web/File/ImageController.java | 1 + .../com/example/backend/web/File/ImageRepository.java | 2 ++ .../com/example/backend/web/File/ImageService.java | 5 ++++- .../com/example/backend/web/File/ImageServiceImpl.java | 10 ++++++++-- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/backend/web/File/ImageController.java b/src/main/java/com/example/backend/web/File/ImageController.java index dd9e6758..d4efede3 100644 --- a/src/main/java/com/example/backend/web/File/ImageController.java +++ b/src/main/java/com/example/backend/web/File/ImageController.java @@ -1,6 +1,7 @@ package com.example.backend.web.File; +import com.example.backend.web.File.store.dto.ImageDTO; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/com/example/backend/web/File/ImageRepository.java b/src/main/java/com/example/backend/web/File/ImageRepository.java index 433506d2..880600d5 100644 --- a/src/main/java/com/example/backend/web/File/ImageRepository.java +++ b/src/main/java/com/example/backend/web/File/ImageRepository.java @@ -1,5 +1,7 @@ package com.example.backend.web.File; +import com.example.backend.web.File.store.ImageEntity; +import com.example.backend.web.File.store.dto.ImageDTO; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/example/backend/web/File/ImageService.java b/src/main/java/com/example/backend/web/File/ImageService.java index 211769cb..b96d4caa 100644 --- a/src/main/java/com/example/backend/web/File/ImageService.java +++ b/src/main/java/com/example/backend/web/File/ImageService.java @@ -1,12 +1,15 @@ package com.example.backend.web.File; +import com.example.backend.web.File.store.ImageEntity; +import com.example.backend.web.File.store.dto.ImageCreateDTO; +import com.example.backend.web.File.store.dto.ImageDTO; import org.springframework.web.multipart.MultipartFile; import java.util.List; public interface ImageService { - ImageDTO uploadImage(MultipartFile file); + ImageCreateDTO uploadImage(MultipartFile file); ImageEntity uploadImageEntity(MultipartFile file); List getAllPhoto(); ImageEntity getByImage(String image); diff --git a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java index 25a033eb..7d3c039f 100644 --- a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java +++ b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java @@ -1,5 +1,10 @@ package com.example.backend.web.File; +import com.example.backend.web.File.store.ImageEntity; +import com.example.backend.web.File.store.dto.ImageCreateDTO; +import com.example.backend.web.File.store.dto.ImageDTO; +import com.example.backend.web.File.store.factory.ImageCreateFactory; +import com.example.backend.web.File.store.factory.ImageFactory; import com.example.backend.web.File.upload.FileUpload; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; @@ -18,6 +23,7 @@ @RequiredArgsConstructor public class ImageServiceImpl implements ImageService { + private final ImageCreateFactory imageCreateFactory; private final ImageRepository imageRepository; private final ImageFactory imageFactory; private final FileUpload fileUpload; @@ -25,7 +31,7 @@ public class ImageServiceImpl implements ImageService { @Override @SneakyThrows @Transactional - public ImageDTO uploadImage(final MultipartFile file) { + public ImageCreateDTO uploadImage(final MultipartFile file) { final var imageOptional = Optional.ofNullable(ImageIO.read(file.getInputStream())); final var result = fileUpload.uploadFile(file); @@ -38,7 +44,7 @@ public ImageDTO uploadImage(final MultipartFile file) { imageOptional.orElseThrow(() -> badRequestException("There is no uploaded image")); - return imageFactory.apply(imageRepository.save(image)); + return imageCreateFactory.apply(imageRepository.save(image)); } @Override From fb49c04d8a9a1c8a97e90423e613192bdc51fc85 Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 11:04:56 +0300 Subject: [PATCH 35/44] fixAll project --- .../backend/security/models/request/GoogleTokenRequest.java | 6 ------ .../example/backend/web/Advertisement/AdvertisementDTO.java | 2 +- .../com/example/backend/web/Category/CategoryEntity.java | 2 +- .../java/com/example/backend/web/User/store/UserEntity.java | 2 +- 4 files changed, 3 insertions(+), 9 deletions(-) delete mode 100644 src/main/java/com/example/backend/security/models/request/GoogleTokenRequest.java diff --git a/src/main/java/com/example/backend/security/models/request/GoogleTokenRequest.java b/src/main/java/com/example/backend/security/models/request/GoogleTokenRequest.java deleted file mode 100644 index cd83887c..00000000 --- a/src/main/java/com/example/backend/security/models/request/GoogleTokenRequest.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.backend.security.models.request; - -import lombok.Builder; - -@Builder -public record GoogleTokenRequest(String token) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java index f7147644..0bc7b476 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java @@ -1,6 +1,6 @@ package com.example.backend.web.Advertisement; -import com.example.backend.web.File.ImageEntity; +import com.example.backend.web.File.store.ImageEntity; import lombok.Builder; import java.time.LocalDateTime; diff --git a/src/main/java/com/example/backend/web/Category/CategoryEntity.java b/src/main/java/com/example/backend/web/Category/CategoryEntity.java index 7ef97018..d99ca903 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryEntity.java +++ b/src/main/java/com/example/backend/web/Category/CategoryEntity.java @@ -1,6 +1,6 @@ package com.example.backend.web.Category; -import com.example.backend.web.File.ImageEntity; +import com.example.backend.web.File.store.ImageEntity; import com.example.backend.web.Advertisement.AdvertisementEntity; import jakarta.persistence.*; import lombok.*; diff --git a/src/main/java/com/example/backend/web/User/store/UserEntity.java b/src/main/java/com/example/backend/web/User/store/UserEntity.java index 09b35c4b..5f9f17d1 100644 --- a/src/main/java/com/example/backend/web/User/store/UserEntity.java +++ b/src/main/java/com/example/backend/web/User/store/UserEntity.java @@ -3,7 +3,7 @@ import com.example.backend.utils.enums.RegisterAuthStatus; import com.example.backend.utils.enums.Role; import com.example.backend.web.Advertisement.AdvertisementEntity; -import com.example.backend.web.File.ImageEntity; +import com.example.backend.web.File.store.ImageEntity; import jakarta.persistence.*; import lombok.*; import org.springframework.data.jpa.domain.support.AuditingEntityListener; From dbc20497f549b9e3b248a7b70ad69df9c1ae8b87 Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 11:08:25 +0300 Subject: [PATCH 36/44] Update ImageController --- .../java/com/example/backend/web/File/ImageController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/backend/web/File/ImageController.java b/src/main/java/com/example/backend/web/File/ImageController.java index d4efede3..7e552ff0 100644 --- a/src/main/java/com/example/backend/web/File/ImageController.java +++ b/src/main/java/com/example/backend/web/File/ImageController.java @@ -1,6 +1,7 @@ package com.example.backend.web.File; +import com.example.backend.web.File.store.dto.ImageCreateDTO; import com.example.backend.web.File.store.dto.ImageDTO; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -27,7 +28,7 @@ public List getAllImage() { @PostMapping(URI_IMAGE) @ResponseBody - public ImageDTO upload(@RequestParam final MultipartFile file) { + public ImageCreateDTO upload(@RequestParam final MultipartFile file) { return imageService.uploadImage(file); } From b5e5b1c28d9b5b47102a40762337a0f2d0815f5a Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 11:21:53 +0300 Subject: [PATCH 37/44] Create CategoryCreateDTO and CategoryCreateFactory --- .../Category/store/dto/CategoryCreateDTO.java | 10 ++++++++++ .../store/factory/CategoryCreateFactory.java | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/main/java/com/example/backend/web/Category/store/dto/CategoryCreateDTO.java create mode 100644 src/main/java/com/example/backend/web/Category/store/factory/CategoryCreateFactory.java diff --git a/src/main/java/com/example/backend/web/Category/store/dto/CategoryCreateDTO.java b/src/main/java/com/example/backend/web/Category/store/dto/CategoryCreateDTO.java new file mode 100644 index 00000000..742f0a26 --- /dev/null +++ b/src/main/java/com/example/backend/web/Category/store/dto/CategoryCreateDTO.java @@ -0,0 +1,10 @@ +package com.example.backend.web.Category.store.dto; + + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Builder; + +@Builder +public record CategoryCreateDTO(@NotNull @NotBlank @Size(min = 5, max = 20) String categoryName, String image) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/store/factory/CategoryCreateFactory.java b/src/main/java/com/example/backend/web/Category/store/factory/CategoryCreateFactory.java new file mode 100644 index 00000000..6328bb83 --- /dev/null +++ b/src/main/java/com/example/backend/web/Category/store/factory/CategoryCreateFactory.java @@ -0,0 +1,18 @@ +package com.example.backend.web.Category.store.factory; + +import com.example.backend.web.Category.store.CategoryEntity; +import com.example.backend.web.Category.store.dto.CategoryCreateDTO; +import org.springframework.stereotype.Component; + +import java.util.function.Function; + +@Component +public class CategoryCreateFactory implements Function { + @Override + public CategoryCreateDTO apply(final CategoryEntity category) { + return CategoryCreateDTO.builder() + .categoryName(category.getCategoryName()) + .image(category.getImage().getImageUrl()) + .build(); + } +} \ No newline at end of file From ed8a9884a7a3e39c8fe6f3d39fd7fcb3f20d68c2 Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 11:27:19 +0300 Subject: [PATCH 38/44] Update architecture and method create and update --- .../backend/utils/general/WebIsNullFactory.java | 2 +- .../web/Advertisement/AdvertisementEntity.java | 2 +- .../backend/web/Category/CategoryController.java | 7 +++++-- .../example/backend/web/Category/CategoryDTO.java | 15 --------------- .../backend/web/Category/CategoryRepository.java | 1 + .../backend/web/Category/CategoryService.java | 8 ++++++-- .../backend/web/Category/CategoryServiceImpl.java | 14 ++++++++++---- .../web/Category/{ => store}/CategoryEntity.java | 2 +- .../web/Category/store/dto/CategoryDTO.java | 10 ++++++++++ .../{ => store/factory}/CategoryFactory.java | 4 +++- 10 files changed, 38 insertions(+), 27 deletions(-) delete mode 100644 src/main/java/com/example/backend/web/Category/CategoryDTO.java rename src/main/java/com/example/backend/web/Category/{ => store}/CategoryEntity.java (93%) create mode 100644 src/main/java/com/example/backend/web/Category/store/dto/CategoryDTO.java rename src/main/java/com/example/backend/web/Category/{ => store/factory}/CategoryFactory.java (79%) diff --git a/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java b/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java index 9cf4e388..a9f0d0e8 100644 --- a/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java +++ b/src/main/java/com/example/backend/utils/general/WebIsNullFactory.java @@ -1,7 +1,7 @@ package com.example.backend.utils.general; -import com.example.backend.web.Category.CategoryEntity; +import com.example.backend.web.Category.store.CategoryEntity; import com.example.backend.web.Advertisement.AdvertisementDTO; import com.example.backend.web.Advertisement.AdvertisementFactory; import com.example.backend.web.User.store.UserEntity; diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java index 59c41e87..8c6cf25f 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java @@ -1,6 +1,6 @@ package com.example.backend.web.Advertisement; -import com.example.backend.web.Category.CategoryEntity; +import com.example.backend.web.Category.store.CategoryEntity; import com.example.backend.web.File.ImageEntity; import com.example.backend.web.User.store.UserEntity; import jakarta.persistence.*; diff --git a/src/main/java/com/example/backend/web/Category/CategoryController.java b/src/main/java/com/example/backend/web/Category/CategoryController.java index 675842e8..d5189230 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryController.java +++ b/src/main/java/com/example/backend/web/Category/CategoryController.java @@ -1,5 +1,7 @@ package com.example.backend.web.Category; +import com.example.backend.web.Category.store.dto.CategoryCreateDTO; +import com.example.backend.web.Category.store.dto.CategoryDTO; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.graphql.data.method.annotation.Argument; @@ -30,12 +32,13 @@ public CategoryDTO getByNameCategory(@Argument final String name) { } @PostMapping - public CategoryDTO create(@RequestBody @Validated final CategoryDTO categoryDTO) { + public CategoryCreateDTO create(@RequestBody @Validated final CategoryCreateDTO categoryDTO) { return categoryService.create(categoryDTO); } @PutMapping(URI_CATEGORIES_ID) - public CategoryDTO update(@PathVariable final Long id, @RequestBody @Validated final CategoryDTO categoryDTO) { + public CategoryCreateDTO update(@PathVariable final Long id, + @RequestBody @Validated final CategoryCreateDTO categoryDTO) { return categoryService.update(id, categoryDTO); } diff --git a/src/main/java/com/example/backend/web/Category/CategoryDTO.java b/src/main/java/com/example/backend/web/Category/CategoryDTO.java deleted file mode 100644 index 6cf19e69..00000000 --- a/src/main/java/com/example/backend/web/Category/CategoryDTO.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.example.backend.web.Category; - - -import com.example.backend.web.Advertisement.AdvertisementDTO; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; -import lombok.Builder; - -import java.util.List; - -@Builder -public record CategoryDTO(@NotNull @NotBlank @Size(min = 5, max = 20) String categoryName, - List advertisements, - String image) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryRepository.java b/src/main/java/com/example/backend/web/Category/CategoryRepository.java index 152b39c2..db2c6fa9 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryRepository.java +++ b/src/main/java/com/example/backend/web/Category/CategoryRepository.java @@ -1,5 +1,6 @@ package com.example.backend.web.Category; +import com.example.backend.web.Category.store.CategoryEntity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/example/backend/web/Category/CategoryService.java b/src/main/java/com/example/backend/web/Category/CategoryService.java index b3efeae7..ab08bf7e 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryService.java +++ b/src/main/java/com/example/backend/web/Category/CategoryService.java @@ -1,11 +1,15 @@ package com.example.backend.web.Category; +import com.example.backend.web.Category.store.CategoryEntity; +import com.example.backend.web.Category.store.dto.CategoryCreateDTO; +import com.example.backend.web.Category.store.dto.CategoryDTO; + import java.util.List; public interface CategoryService { List getAll(); CategoryEntity getCategoryName(String categoryName); CategoryDTO getCategoryDTOName(String categoryName); - CategoryDTO create(CategoryDTO categoryDTO); - CategoryDTO update(Long categoryId, CategoryDTO categoryDTO); + CategoryCreateDTO create(CategoryCreateDTO categoryDTO); + CategoryCreateDTO update(Long categoryId, CategoryCreateDTO categoryDTO); void deleteId(Long id); } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java index acdab06b..34636e6a 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java +++ b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java @@ -1,5 +1,10 @@ package com.example.backend.web.Category; +import com.example.backend.web.Category.store.CategoryEntity; +import com.example.backend.web.Category.store.dto.CategoryCreateDTO; +import com.example.backend.web.Category.store.dto.CategoryDTO; +import com.example.backend.web.Category.store.factory.CategoryCreateFactory; +import com.example.backend.web.Category.store.factory.CategoryFactory; import com.example.backend.web.File.ImageService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -11,6 +16,7 @@ @AllArgsConstructor public class CategoryServiceImpl implements CategoryService { + private final CategoryCreateFactory categoryCreateFactory; private final CategoryRepository categoryRepository; private final CategoryFactory categoryFactory; private final ImageService imageService; @@ -34,7 +40,7 @@ public CategoryDTO getCategoryDTOName(final String categoryName) { } @Override - public CategoryDTO create(final CategoryDTO categoryDTO) { + public CategoryCreateDTO create(final CategoryCreateDTO categoryDTO) { final var newImage = imageService.getByImage(categoryDTO.image()); final var newCategory = CategoryEntity.builder() @@ -42,11 +48,11 @@ public CategoryDTO create(final CategoryDTO categoryDTO) { .image(newImage) .build(); - return categoryFactory.apply(categoryRepository.save(newCategory)); + return categoryCreateFactory.apply(categoryRepository.save(newCategory)); } @Override - public CategoryDTO update(final Long categoryId, final CategoryDTO categoryDTO) { + public CategoryCreateDTO update(final Long categoryId, final CategoryCreateDTO categoryDTO) { final var updateImage = imageService.getByImage(categoryDTO.image()); final var category = getIdCategory(categoryId); @@ -54,7 +60,7 @@ public CategoryDTO update(final Long categoryId, final CategoryDTO categoryDTO) category.setCategoryName(categoryDTO.categoryName()); category.setImage(updateImage); - return categoryFactory.apply(categoryRepository.save(category)); + return categoryCreateFactory.apply(categoryRepository.save(category)); } @Override diff --git a/src/main/java/com/example/backend/web/Category/CategoryEntity.java b/src/main/java/com/example/backend/web/Category/store/CategoryEntity.java similarity index 93% rename from src/main/java/com/example/backend/web/Category/CategoryEntity.java rename to src/main/java/com/example/backend/web/Category/store/CategoryEntity.java index d99ca903..f22588d4 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryEntity.java +++ b/src/main/java/com/example/backend/web/Category/store/CategoryEntity.java @@ -1,4 +1,4 @@ -package com.example.backend.web.Category; +package com.example.backend.web.Category.store; import com.example.backend.web.File.store.ImageEntity; import com.example.backend.web.Advertisement.AdvertisementEntity; diff --git a/src/main/java/com/example/backend/web/Category/store/dto/CategoryDTO.java b/src/main/java/com/example/backend/web/Category/store/dto/CategoryDTO.java new file mode 100644 index 00000000..e2da811c --- /dev/null +++ b/src/main/java/com/example/backend/web/Category/store/dto/CategoryDTO.java @@ -0,0 +1,10 @@ +package com.example.backend.web.Category.store.dto; + + +import com.example.backend.web.Advertisement.AdvertisementDTO; +import lombok.Builder; + +import java.util.List; + +@Builder +public record CategoryDTO(String categoryName, List advertisements, String image) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/CategoryFactory.java b/src/main/java/com/example/backend/web/Category/store/factory/CategoryFactory.java similarity index 79% rename from src/main/java/com/example/backend/web/Category/CategoryFactory.java rename to src/main/java/com/example/backend/web/Category/store/factory/CategoryFactory.java index cdfe5d78..2a73e85e 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryFactory.java +++ b/src/main/java/com/example/backend/web/Category/store/factory/CategoryFactory.java @@ -1,6 +1,8 @@ -package com.example.backend.web.Category; +package com.example.backend.web.Category.store.factory; import com.example.backend.utils.general.WebIsNullFactory; +import com.example.backend.web.Category.store.CategoryEntity; +import com.example.backend.web.Category.store.dto.CategoryDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; From 50c3c7e94242200c3316d5f63265021d451d37f9 Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 11:28:40 +0300 Subject: [PATCH 39/44] fix AdvertisementEntity --- .../example/backend/web/Advertisement/AdvertisementEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java index 8c6cf25f..5bd7de53 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java @@ -1,7 +1,7 @@ package com.example.backend.web.Advertisement; import com.example.backend.web.Category.store.CategoryEntity; -import com.example.backend.web.File.ImageEntity; +import com.example.backend.web.File.store.ImageEntity; import com.example.backend.web.User.store.UserEntity; import jakarta.persistence.*; import lombok.*; From 47cdff32b771ee33fadd508b7c6c876f59efd062 Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 14:43:18 +0300 Subject: [PATCH 40/44] Update method uploadImageEntity --- .../java/com/example/backend/web/File/ImageServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java index 7d3c039f..63e72d10 100644 --- a/src/main/java/com/example/backend/web/File/ImageServiceImpl.java +++ b/src/main/java/com/example/backend/web/File/ImageServiceImpl.java @@ -57,11 +57,13 @@ public ImageEntity uploadImageEntity(final MultipartFile file) { final var map = fileUpload.uploadFile(file); - return ImageEntity.builder() + final var image = ImageEntity.builder() .name((String) map.get("original_filename")) .imageUrl((String) map.get("url")) .imageId((String) map.get("public_id")) .build(); + + return imageRepository.save(image); } @Override From b342e3b6c03fad52a11e4fd82738528b974a7aee Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 13 May 2024 22:24:46 +0300 Subject: [PATCH 41/44] Added for CategoryEntity color --- .../com/example/backend/web/Category/CategoryServiceImpl.java | 2 ++ .../example/backend/web/Category/store/CategoryEntity.java | 3 +++ .../backend/web/Category/store/dto/CategoryCreateDTO.java | 4 +++- .../example/backend/web/Category/store/dto/CategoryDTO.java | 2 +- .../web/Category/store/factory/CategoryCreateFactory.java | 1 + .../backend/web/Category/store/factory/CategoryFactory.java | 1 + src/main/resources/graphql/schema.graphqls | 1 + 7 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java index 34636e6a..8523dd06 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java +++ b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java @@ -46,6 +46,7 @@ public CategoryCreateDTO create(final CategoryCreateDTO categoryDTO) { final var newCategory = CategoryEntity.builder() .categoryName(categoryDTO.categoryName()) .image(newImage) + .color(categoryDTO.color()) .build(); return categoryCreateFactory.apply(categoryRepository.save(newCategory)); @@ -59,6 +60,7 @@ public CategoryCreateDTO update(final Long categoryId, final CategoryCreateDTO c category.setCategoryName(categoryDTO.categoryName()); category.setImage(updateImage); + category.setColor(category.getColor()); return categoryCreateFactory.apply(categoryRepository.save(category)); } diff --git a/src/main/java/com/example/backend/web/Category/store/CategoryEntity.java b/src/main/java/com/example/backend/web/Category/store/CategoryEntity.java index f22588d4..222543dd 100644 --- a/src/main/java/com/example/backend/web/Category/store/CategoryEntity.java +++ b/src/main/java/com/example/backend/web/Category/store/CategoryEntity.java @@ -24,6 +24,9 @@ public class CategoryEntity { @Column(nullable = false) private String categoryName; + @Column(nullable = false) + private String color; + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "category", fetch = FetchType.LAZY) private List advertisements; diff --git a/src/main/java/com/example/backend/web/Category/store/dto/CategoryCreateDTO.java b/src/main/java/com/example/backend/web/Category/store/dto/CategoryCreateDTO.java index 742f0a26..bb70becf 100644 --- a/src/main/java/com/example/backend/web/Category/store/dto/CategoryCreateDTO.java +++ b/src/main/java/com/example/backend/web/Category/store/dto/CategoryCreateDTO.java @@ -7,4 +7,6 @@ import lombok.Builder; @Builder -public record CategoryCreateDTO(@NotNull @NotBlank @Size(min = 5, max = 20) String categoryName, String image) { } \ No newline at end of file +public record CategoryCreateDTO(@NotNull @NotBlank @Size(min = 5, max = 20) String categoryName, + String image, + @NotNull @NotBlank String color) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/store/dto/CategoryDTO.java b/src/main/java/com/example/backend/web/Category/store/dto/CategoryDTO.java index e2da811c..d1f37071 100644 --- a/src/main/java/com/example/backend/web/Category/store/dto/CategoryDTO.java +++ b/src/main/java/com/example/backend/web/Category/store/dto/CategoryDTO.java @@ -7,4 +7,4 @@ import java.util.List; @Builder -public record CategoryDTO(String categoryName, List advertisements, String image) { } \ No newline at end of file +public record CategoryDTO(String categoryName, List advertisements, String image, String color) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/store/factory/CategoryCreateFactory.java b/src/main/java/com/example/backend/web/Category/store/factory/CategoryCreateFactory.java index 6328bb83..4c2961c7 100644 --- a/src/main/java/com/example/backend/web/Category/store/factory/CategoryCreateFactory.java +++ b/src/main/java/com/example/backend/web/Category/store/factory/CategoryCreateFactory.java @@ -13,6 +13,7 @@ public CategoryCreateDTO apply(final CategoryEntity category) { return CategoryCreateDTO.builder() .categoryName(category.getCategoryName()) .image(category.getImage().getImageUrl()) + .color(category.getColor()) .build(); } } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Category/store/factory/CategoryFactory.java b/src/main/java/com/example/backend/web/Category/store/factory/CategoryFactory.java index 2a73e85e..933ac31b 100644 --- a/src/main/java/com/example/backend/web/Category/store/factory/CategoryFactory.java +++ b/src/main/java/com/example/backend/web/Category/store/factory/CategoryFactory.java @@ -20,6 +20,7 @@ public CategoryDTO apply(final CategoryEntity category) { .categoryName(category.getCategoryName()) .advertisements(webIsNullFactory.isNullAdvertisementCategory(category)) .image(category.getImage().getImageUrl()) + .color(category.getColor()) .build(); } } \ No newline at end of file diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index d2e0f454..2a268872 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -26,6 +26,7 @@ type CategoryDTO { categoryName: String advertisements: [AdvertisementDTO] image: String + color: String } type AdvertisementDTO { From a435749e02d46e3b3f352aa23b6cce2c96e70450 Mon Sep 17 00:00:00 2001 From: Vladik Date: Wed, 15 May 2024 14:12:53 +0300 Subject: [PATCH 42/44] Fix AdvertisementEntity --- .../example/backend/web/Advertisement/AdvertisementEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java index 5bd7de53..e2ea948d 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java @@ -44,7 +44,7 @@ public class AdvertisementEntity { @JoinColumn(name = "category_id") private CategoryEntity category; - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + @OneToMany @JoinColumn(name = "photo_id") private List images; From 962ec6884ff3240715966f9417291f09dc2010ef Mon Sep 17 00:00:00 2001 From: Vladik Date: Wed, 15 May 2024 23:29:51 +0300 Subject: [PATCH 43/44] Update schema.graphqls --- src/main/resources/graphql/schema.graphqls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index 2a268872..71d70a08 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -35,7 +35,7 @@ type AdvertisementDTO { descriptionAdvertisement: String characteristicAdvertisement: String price: Int - date: LocalTimeDate + createDate: LocalTimeDate location: String images: [ImageDTO] } From 134ba3b1b08f64e22d38230b5a3c53bf679511ff Mon Sep 17 00:00:00 2001 From: Vladik Date: Thu, 16 May 2024 20:44:44 +0300 Subject: [PATCH 44/44] Added Delivery AdvertisementEntity --- .../example/backend/web/Advertisement/AdvertisementDTO.java | 3 ++- .../example/backend/web/Advertisement/AdvertisementEntity.java | 3 +++ .../backend/web/Advertisement/AdvertisementFactory.java | 1 + .../backend/web/Advertisement/AdvertisementServiceImpl.java | 2 ++ src/main/resources/graphql/schema.graphqls | 1 + 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java index 0bc7b476..f3bdb1b9 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementDTO.java @@ -15,4 +15,5 @@ public record AdvertisementDTO(Long id, LocalDateTime createDate, List images, String location, - String category) { } \ No newline at end of file + String category, + String delivery) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java index e2ea948d..dea96458 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementEntity.java @@ -37,6 +37,9 @@ public class AdvertisementEntity { @Column(nullable = false) private String location; + @Column(nullable = false) + private String delivery; + @Builder.Default private LocalDateTime createDate = LocalDateTime.now(); diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java index 8767f865..15a5baca 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementFactory.java @@ -18,6 +18,7 @@ public AdvertisementDTO apply(final AdvertisementEntity entity) { .category(entity.getCategory().getCategoryName()) .images(entity.getImages()) .location(entity.getLocation()) + .delivery(entity.getDelivery()) .build(); } } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java index 3bae1c1a..9920f334 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java @@ -35,6 +35,7 @@ public AdvertisementDTO createAdvertisement(final Long id, final AdvertisementDT .location(advertisement.location()) .createDate(LocalDateTime.now()) .category(categoryName) + .delivery(advertisement.delivery()) .build(); return advertisementFactory.apply(advertisementRepository.save(newAdvertisement)); @@ -62,6 +63,7 @@ public AdvertisementDTO editAdvertisement(final Long id, final AdvertisementDTO entityId.setCharacteristicAdvertisement(entity.characteristicAdvertisement()); entityId.setDescriptionAdvertisement(entity.descriptionAdvertisement()); entityId.setCreateDate(entity.createDate()); + entityId.setDelivery(entity.delivery()); entityId.setPrice(entity.price()); return advertisementFactory.apply(advertisementRepository.save(entityId)); diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index 71d70a08..5378048d 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -37,6 +37,7 @@ type AdvertisementDTO { price: Int createDate: LocalTimeDate location: String + delivery: String images: [ImageDTO] }