From 05374ec17b2b3cfce382bb74164d0fef3343527f Mon Sep 17 00:00:00 2001 From: Vladik Date: Sat, 1 Jun 2024 21:34:23 +0300 Subject: [PATCH 01/15] Update method deleteAll for AdvertisementService --- .../backend/web/Advertisement/AdvertisementController.java | 4 ++-- .../backend/web/Advertisement/AdvertisementService.java | 2 +- .../backend/web/Advertisement/AdvertisementServiceImpl.java | 3 ++- 3 files changed, 5 insertions(+), 4 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 6e66b06a..665b6dd8 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java @@ -61,7 +61,7 @@ public void deleteAdvertisement(@RequestHeader(AUTHORIZATION) final String jwt) @DeleteMapping(URL_DELETE_ALL) @ApiResponseDelete - public void deleteAllAdvertisement() { - advertisementService.deleteAll(); + public void deleteAllAdvertisement(@RequestHeader(AUTHORIZATION) final String jwt) { + advertisementService.deleteAll(jwt); } } \ 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 index 4136ed20..04b2663b 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementService.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementService.java @@ -13,5 +13,5 @@ public interface AdvertisementService { AdvertisementDTO advertisement(String jwt); AdvertisementUpdateDTO editAdvertisement(String jwt, AdvertisementUpdateDTO entity); void deleteAdvertisement(String jwt); - void deleteAll(); + void deleteAll(String jwt); } \ 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 e8cdbd5c..32c029c7 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementServiceImpl.java @@ -126,7 +126,8 @@ public void deleteAdvertisement(final String jwt) { @Override @Transactional - public void deleteAll() { + public void deleteAll(final String jwt) { + helpers.tokenUserData(jwt); advertisementRepository.deleteAll(); } } \ No newline at end of file From e07caa9ea80670a0be7fceb566a457569f4f7ced Mon Sep 17 00:00:00 2001 From: Vladik Date: Sun, 2 Jun 2024 16:56:27 +0300 Subject: [PATCH 02/15] Update AdvertisementEntity --- .../backend/web/Advertisement/store/AdvertisementEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/backend/web/Advertisement/store/AdvertisementEntity.java b/src/main/java/com/example/backend/web/Advertisement/store/AdvertisementEntity.java index affdf990..6eca0d6b 100644 --- a/src/main/java/com/example/backend/web/Advertisement/store/AdvertisementEntity.java +++ b/src/main/java/com/example/backend/web/Advertisement/store/AdvertisementEntity.java @@ -29,7 +29,7 @@ public class AdvertisementEntity { @Column(columnDefinition = "TEXT", nullable = false) private String descriptionAdvertisement; - @Column(columnDefinition = "TEXT", nullable = false) + @Column(columnDefinition = "TEXT") private String characteristicAdvertisement; //TODO: Поставити поле на обговорення! @Column(nullable = false) From 261b970ceefa3ee0d03432dc4fc4d2ae58cbd16c Mon Sep 17 00:00:00 2001 From: Vladik Date: Sun, 2 Jun 2024 17:00:45 +0300 Subject: [PATCH 03/15] Update UserServiceImpl --- .../java/com/example/backend/web/User/UserServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 30989969..a57ff072 100644 --- a/src/main/java/com/example/backend/web/User/UserServiceImpl.java +++ b/src/main/java/com/example/backend/web/User/UserServiceImpl.java @@ -124,9 +124,9 @@ public UserSecurityDTO mySecuritySave(final UserEntity user) { @Transactional public UserImageUpdateInfoDTO updateImageUser(final String jwt, final MultipartFile image) { final var userData = helpers.tokenUserData(jwt); - final var update = imageService.uploadImageEntity(image); + final var uploadImage = imageService.uploadImageEntity(image); - userData.setImage(update); + userData.setImage(uploadImage); userRepository.save(userData); From e510b28cb16ee106fd574d01c7b3af46747f0ade Mon Sep 17 00:00:00 2001 From: Vladik Date: Sun, 2 Jun 2024 17:20:05 +0300 Subject: [PATCH 04/15] Update checkstyle.xml --- src/main/resources/checkstyle/checkstyle.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/checkstyle/checkstyle.xml b/src/main/resources/checkstyle/checkstyle.xml index dd115cdf..5de6c6ac 100644 --- a/src/main/resources/checkstyle/checkstyle.xml +++ b/src/main/resources/checkstyle/checkstyle.xml @@ -311,7 +311,6 @@ - From d7597781589fde506da30b1a83a243c250c8ecb4 Mon Sep 17 00:00:00 2001 From: Vladik Date: Sun, 2 Jun 2024 17:31:29 +0300 Subject: [PATCH 05/15] Added annotations for controllers --- .../backend/web/Advertisement/AdvertisementController.java | 3 +++ .../com/example/backend/web/Category/CategoryController.java | 2 ++ .../java/com/example/backend/web/File/ImageController.java | 3 ++- 3 files changed, 7 insertions(+), 1 deletion(-) 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 665b6dd8..c1c5459b 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java @@ -2,6 +2,7 @@ import com.example.backend.utils.annotations.ApiResponseCreated; import com.example.backend.utils.annotations.ApiResponseDelete; +import com.example.backend.utils.annotations.ApiResponseOK; import com.example.backend.web.Advertisement.store.dto.AdvertisementCreateDTO; import com.example.backend.web.Advertisement.store.dto.AdvertisementDTO; import com.example.backend.web.Advertisement.store.dto.AdvertisementUpdateDTO; @@ -43,11 +44,13 @@ public List getAllAdvertisement() { } @GetMapping(ADVERTISEMENT) + @ApiResponseOK public AdvertisementDTO getByAdvertisement(@RequestHeader(AUTHORIZATION) final String jwt) { return advertisementService.advertisement(jwt); } @PatchMapping(URL_EDIT) + @ApiResponseOK public AdvertisementUpdateDTO editAdvertisement(@RequestHeader(AUTHORIZATION) final String jwt, @RequestBody final AdvertisementUpdateDTO entity) { return advertisementService.editAdvertisement(jwt, entity); 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 b060b10f..db0af091 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryController.java +++ b/src/main/java/com/example/backend/web/Category/CategoryController.java @@ -2,6 +2,7 @@ import com.example.backend.utils.annotations.ApiResponseCreated; import com.example.backend.utils.annotations.ApiResponseDelete; +import com.example.backend.utils.annotations.ApiResponseOK; 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; @@ -43,6 +44,7 @@ public CategoryCreateDTO create(@RequestBody @Validated final CategoryCreateDTO } @PutMapping(URI_CATEGORIES_ID) + @ApiResponseOK 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/File/ImageController.java b/src/main/java/com/example/backend/web/File/ImageController.java index 4da8f9dc..cafa2f67 100644 --- a/src/main/java/com/example/backend/web/File/ImageController.java +++ b/src/main/java/com/example/backend/web/File/ImageController.java @@ -2,6 +2,7 @@ import com.example.backend.utils.annotations.ApiResponseCreated; +import com.example.backend.utils.annotations.ApiResponseDelete; import com.example.backend.utils.annotations.ApiResponseOK; import com.example.backend.web.File.store.dto.ImageCreateDTO; import com.example.backend.web.File.store.dto.ImageDTO; @@ -38,7 +39,7 @@ public ImageCreateDTO upload(@RequestParam final MultipartFile file) { @GetMapping(URI_IMAGES_ID) @ResponseBody - @ApiResponseOK + @ApiResponseDelete public void deleteCloudinaryAndRepositoryById(@PathVariable final String imageId) { imageService.imageDeleteId(imageId); } From fe6b39b1426375d55db8f96ffa9c67439b445455 Mon Sep 17 00:00:00 2001 From: Vladik Date: Tue, 4 Jun 2024 12:35:44 +0300 Subject: [PATCH 06/15] Update models auth --- .../backend/security/models/request/EmailRequest.java | 4 +++- .../backend/security/models/request/PasswordRequest.java | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/backend/security/models/request/EmailRequest.java b/src/main/java/com/example/backend/security/models/request/EmailRequest.java index 4d02a07d..be51ac66 100644 --- a/src/main/java/com/example/backend/security/models/request/EmailRequest.java +++ b/src/main/java/com/example/backend/security/models/request/EmailRequest.java @@ -5,5 +5,7 @@ import jakarta.validation.constraints.NotNull; import lombok.Builder; +import static com.example.backend.utils.general.Constants.EMPTY_FIELD; + @Builder -public record EmailRequest(@NotNull @NotBlank @Email String email) { } \ No newline at end of file +public record EmailRequest(@NotNull @NotBlank(message = EMPTY_FIELD) @Email String email) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/security/models/request/PasswordRequest.java b/src/main/java/com/example/backend/security/models/request/PasswordRequest.java index 20d31b5e..b2f3b604 100644 --- a/src/main/java/com/example/backend/security/models/request/PasswordRequest.java +++ b/src/main/java/com/example/backend/security/models/request/PasswordRequest.java @@ -3,6 +3,11 @@ import jakarta.validation.constraints.*; import lombok.Builder; +import static com.example.backend.utils.general.Constants.EMPTY_FIELD; + @Builder public record PasswordRequest( - @NotNull @NotBlank @Size(min = 7, max = 20) @Pattern(regexp = "^(?=.*\\d)[A-Za-z\\d]+$") String password) { } \ No newline at end of file + @NotNull @NotBlank(message = EMPTY_FIELD) + @Size(min = 7, max = 20) + @Pattern(regexp = "^(?=.*\\d)[A-Za-z\\d]+$", + message = "password має відповідати вказаному формату") String password) { } \ No newline at end of file From d91bf632c1e9ab057bb307ad80f11ed2de814e57 Mon Sep 17 00:00:00 2001 From: Vladik Date: Wed, 5 Jun 2024 17:11:40 +0300 Subject: [PATCH 07/15] Update All Category --- .../backend/web/Category/CategoryServiceImpl.java | 10 ++++------ .../backend/web/Category/store/CategoryEntity.java | 3 --- .../web/Category/store/dto/CategoryCreateDTO.java | 3 +-- .../backend/web/Category/store/dto/CategoryDTO.java | 2 +- .../Category/store/factory/CategoryCreateFactory.java | 1 - .../web/Category/store/factory/CategoryFactory.java | 1 - 6 files changed, 6 insertions(+), 14 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 cfc3d09b..ece97b2c 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java +++ b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java @@ -8,6 +8,7 @@ import com.example.backend.web.File.ImageService; import jakarta.transaction.Transactional; import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.util.List; @@ -48,7 +49,6 @@ public CategoryCreateDTO create(final CategoryCreateDTO categoryDTO) { final var newCategory = CategoryEntity.builder() .name(categoryDTO.name()) .image(newImage) - .color(categoryDTO.color()) .build(); return categoryCreateFactory.apply(categoryRepository.save(newCategory)); @@ -57,13 +57,11 @@ public CategoryCreateDTO create(final CategoryCreateDTO categoryDTO) { @Override @Transactional public CategoryCreateDTO update(final Long categoryId, final CategoryCreateDTO categoryDTO) { - final var updateImage = imageService.getByImage(categoryDTO.image()); - final var category = categoryRepository.getReferenceById(categoryId); - category.setName(categoryDTO.name()); - category.setImage(updateImage); - category.setColor(categoryDTO.color()); + if (StringUtils.isNoneEmpty(categoryDTO.name())) { + category.setName(categoryDTO.name()); + } 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 8ec1f81a..39c6d281 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,9 +24,6 @@ public class CategoryEntity { @Column(nullable = false) private String name; - @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 994e1a2b..bf60b8a0 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 @@ -8,5 +8,4 @@ @Builder public record CategoryCreateDTO(@NotNull @NotBlank @Size(min = 5, max = 20) String name, - String image, - @NotNull @NotBlank String color) { } \ No newline at end of file + @NotNull @NotBlank String image) { } \ 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 68a6d244..e863a676 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 name, List advertisements, String image, String color) { } \ No newline at end of file +public record CategoryDTO(String name, List advertisements, 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 index 4b672383..2613c863 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,7 +13,6 @@ public CategoryCreateDTO apply(final CategoryEntity category) { return CategoryCreateDTO.builder() .name(category.getName()) .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 6176124e..22b0813a 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,7 +20,6 @@ public CategoryDTO apply(final CategoryEntity category) { .name(category.getName()) .advertisements(webIsNullFactory.isNullAdvertisementCategory(category)) .image(category.getImage().getImageUrl()) - .color(category.getColor()) .build(); } } \ No newline at end of file From 56f71547f2386a63d6ca208de6dfe3ac8543d572 Mon Sep 17 00:00:00 2001 From: Vladik Date: Wed, 5 Jun 2024 20:58:59 +0300 Subject: [PATCH 08/15] Update annotation --- 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 2956e12f..4b36f613 100644 --- a/src/main/java/com/example/backend/web/User/UserController.java +++ b/src/main/java/com/example/backend/web/User/UserController.java @@ -51,7 +51,7 @@ public UserDTO getByIdUser(@Argument final Long id) { return userService.getByIdUser(id); } - @PatchMapping(value = UPDATE_IMAGE_USER, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) + @PutMapping(value = UPDATE_IMAGE_USER, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) @ApiResponseOK public UserImageUpdateInfoDTO updateImage(@RequestHeader(AUTHORIZATION) final String jwt, @RequestPart final MultipartFile image) { From 5856dec0e6fcd436a67e6ea4e1a7b4908015d3b8 Mon Sep 17 00:00:00 2001 From: Vladik Date: Wed, 5 Jun 2024 21:00:44 +0300 Subject: [PATCH 09/15] Update and added functional --- .../web/Category/CategoryController.java | 20 +++++++++++-------- .../backend/web/Category/CategoryService.java | 6 ++++-- .../web/Category/CategoryServiceImpl.java | 16 +++++++++++---- 3 files changed, 28 insertions(+), 14 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 db0af091..db547656 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryController.java +++ b/src/main/java/com/example/backend/web/Category/CategoryController.java @@ -9,8 +9,10 @@ import lombok.RequiredArgsConstructor; import org.springframework.graphql.data.method.annotation.Argument; import org.springframework.graphql.data.method.annotation.QueryMapping; +import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -21,7 +23,7 @@ public class CategoryController { private final CategoryServiceImpl categoryService; - private static final String URI_CATEGORIES_ID = "/category/{id}"; + private static final String URI_CATEGORIES_NAME = "/category/update"; private static final String URI_CATEGORY = "/category"; private static final String URI_CATEGORIES = "/categories"; private static final String URI_CATEGORY_DELETE = "/category/delete"; @@ -37,17 +39,19 @@ public CategoryDTO getByNameCategory(@Argument final String name) { return categoryService.getCategoryDTOName(name); } - @PostMapping(URI_CATEGORY) + @PostMapping(value = URI_CATEGORY, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) @ApiResponseCreated - public CategoryCreateDTO create(@RequestBody @Validated final CategoryCreateDTO categoryDTO) { - return categoryService.create(categoryDTO); + public CategoryCreateDTO create(@RequestPart @Validated final CategoryCreateDTO categoryDTO, + @RequestPart final MultipartFile image) { + return categoryService.create(categoryDTO, image); } - @PutMapping(URI_CATEGORIES_ID) + @PatchMapping(value = URI_CATEGORIES_NAME, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) @ApiResponseOK - public CategoryCreateDTO update(@PathVariable final Long id, - @RequestBody @Validated final CategoryCreateDTO categoryDTO) { - return categoryService.update(id, categoryDTO); + public CategoryCreateDTO update(@RequestParam final String name, + @RequestPart @Validated final CategoryCreateDTO categoryDTO, + @RequestPart final MultipartFile image) { + return categoryService.update(name, categoryDTO, image); } @DeleteMapping(URI_CATEGORY_DELETE) 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 ca04acf5..2f3974d5 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryService.java +++ b/src/main/java/com/example/backend/web/Category/CategoryService.java @@ -3,13 +3,15 @@ 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 org.springframework.web.multipart.MultipartFile; import java.util.List; + public interface CategoryService { List getAll(); CategoryEntity getCategoryName(String name); CategoryDTO getCategoryDTOName(String name); - CategoryCreateDTO create(CategoryCreateDTO categoryDTO); - CategoryCreateDTO update(Long categoryId, CategoryCreateDTO categoryDTO); + CategoryCreateDTO create(CategoryCreateDTO categoryDTO, MultipartFile image); + CategoryCreateDTO update(String name, CategoryCreateDTO categoryDTO, MultipartFile image); void deleteCategory(CategoryDTO categoryDTO); } \ 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 ece97b2c..27a34eaa 100644 --- a/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java +++ b/src/main/java/com/example/backend/web/Category/CategoryServiceImpl.java @@ -10,6 +10,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.stream.Collectors; @@ -43,8 +44,8 @@ public CategoryDTO getCategoryDTOName(final String name) { @Override @Transactional - public CategoryCreateDTO create(final CategoryCreateDTO categoryDTO) { - final var newImage = imageService.getByImage(categoryDTO.image()); + public CategoryCreateDTO create(final CategoryCreateDTO categoryDTO, final MultipartFile image) { + final var newImage = imageService.uploadImageEntity(image); final var newCategory = CategoryEntity.builder() .name(categoryDTO.name()) @@ -56,13 +57,20 @@ public CategoryCreateDTO create(final CategoryCreateDTO categoryDTO) { @Override @Transactional - public CategoryCreateDTO update(final Long categoryId, final CategoryCreateDTO categoryDTO) { - final var category = categoryRepository.getReferenceById(categoryId); + public CategoryCreateDTO update(final String name, + final CategoryCreateDTO categoryDTO, + final MultipartFile image) { + final var category = getCategoryName(name); + final var uploadImage = imageService.uploadImageEntity(image); if (StringUtils.isNoneEmpty(categoryDTO.name())) { category.setName(categoryDTO.name()); } + if (StringUtils.isNoneEmpty(categoryDTO.image())) { + category.setImage(uploadImage); + } + return categoryCreateFactory.apply(categoryRepository.save(category)); } From 6e5820823db6a9fd5f038625dd36c0acf8c6f395 Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 10 Jun 2024 19:07:32 +0300 Subject: [PATCH 10/15] fix schema.graphqls --- src/main/resources/graphql/schema.graphqls | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/graphql/schema.graphqls b/src/main/resources/graphql/schema.graphqls index c2e8928f..22db9686 100644 --- a/src/main/resources/graphql/schema.graphqls +++ b/src/main/resources/graphql/schema.graphqls @@ -12,7 +12,6 @@ type CategoryDTO { name: String advertisements: [AdvertisementDTO] image: String - color: String } type AdvertisementDTO { From 4fa9ec463407b6c531e4539b1191844eaa2cafda Mon Sep 17 00:00:00 2001 From: Vladik Date: Mon, 10 Jun 2024 19:07:59 +0300 Subject: [PATCH 11/15] Update roles and All --- .../example/backend/security/oauth/AuthGoogle.java | 13 +++++++------ .../security/service/details/MyUserDetails.java | 6 ++++-- .../service/details/MyUserDetailsFactory.java | 2 +- .../security/service/impl/AuthServiceImpl.java | 4 +++- .../security/service/impl/JwtTokenServiceImpl.java | 8 ++++---- .../example/backend/web/User/store/UserEntity.java | 3 ++- .../backend/web/User/store/dto/UserSecurityDTO.java | 4 +++- .../web/User/store/factory/UserSecurityFactory.java | 2 +- 8 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/example/backend/security/oauth/AuthGoogle.java b/src/main/java/com/example/backend/security/oauth/AuthGoogle.java index f5548f14..9c0a3785 100644 --- a/src/main/java/com/example/backend/security/oauth/AuthGoogle.java +++ b/src/main/java/com/example/backend/security/oauth/AuthGoogle.java @@ -2,8 +2,8 @@ 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 jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; @@ -19,6 +19,7 @@ import java.time.LocalDateTime; import java.util.List; import java.util.Map; +import java.util.Set; import static com.example.backend.utils.enums.RegisterAuthStatus.GOOGLE; import static com.example.backend.utils.enums.Role.USER; @@ -50,7 +51,8 @@ public void onAuthenticationSuccess(final HttpServletRequest request, userService.getByEmail(defaultOAuth2UserEmail) .ifPresentOrElse(user -> SecurityContextHolder.getContext().setAuthentication( createOAuth2AuthenticationToken( - createOAuth2User(user.getRole().name(), defaultOAuth2User), user.getRole().name(), + createOAuth2User(user.getRoles().toString(), defaultOAuth2User), + user.getRoles().toString(), oAuth2AuthenticationToken.getAuthorizedClientRegistrationId() ) ), () -> { @@ -60,9 +62,8 @@ public void onAuthenticationSuccess(final HttpServletRequest request, SecurityContextHolder.getContext().setAuthentication( createOAuth2AuthenticationToken( - createOAuth2User(saveUser.getRole().name(), defaultOAuth2User), - - saveUser.getRole().name(), + createOAuth2User(saveUser.getRoles().toString(), defaultOAuth2User), + saveUser.getRoles().toString(), oAuth2AuthenticationToken.getAuthorizedClientRegistrationId() ) @@ -94,7 +95,7 @@ private UserEntity createUserEntity(final Map attributes, final .firstname(attributes.getOrDefault("given_name", EMPTY_LINE).toString()) .lastname(attributes.getOrDefault("family_name", EMPTY_LINE).toString()) .registerAuthStatus(GOOGLE) - .role(USER) + .roles(Set.of(USER)) .enabled(true) .createData(LocalDateTime.now()) .password(passwordEncoder.passwordEncoder().encode(generateRandomPassword())) diff --git a/src/main/java/com/example/backend/security/service/details/MyUserDetails.java b/src/main/java/com/example/backend/security/service/details/MyUserDetails.java index 7c2bb004..03be3023 100644 --- a/src/main/java/com/example/backend/security/service/details/MyUserDetails.java +++ b/src/main/java/com/example/backend/security/service/details/MyUserDetails.java @@ -7,13 +7,15 @@ import org.springframework.security.core.userdetails.UserDetails; import java.util.Collection; -import java.util.List; +import java.util.stream.Collectors; @Builder public record MyUserDetails(UserSecurityDTO user) implements UserDetails { @Override public Collection getAuthorities() { - return List.of(new SimpleGrantedAuthority(user.role().name())); + return user.roles().stream() + .map(role -> new SimpleGrantedAuthority(role.name())) + .collect(Collectors.toSet()); } @Override diff --git a/src/main/java/com/example/backend/security/service/details/MyUserDetailsFactory.java b/src/main/java/com/example/backend/security/service/details/MyUserDetailsFactory.java index 32bdefbd..5bc62a36 100644 --- a/src/main/java/com/example/backend/security/service/details/MyUserDetailsFactory.java +++ b/src/main/java/com/example/backend/security/service/details/MyUserDetailsFactory.java @@ -13,7 +13,7 @@ public MyUserDetails build(final UserSecurityDTO user) { .email(user.email()) .password(user.password()) .phone(user.phone()) - .role(user.role()) + .roles(user.roles()) .status(user.status()) .enabled(user.enabled()) .build()) 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 2d9e60a0..101ccf6f 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 @@ -22,8 +22,10 @@ import org.springframework.stereotype.Service; import java.util.Properties; +import java.util.Set; import static com.example.backend.utils.enums.RegisterAuthStatus.JWT; +import static com.example.backend.utils.enums.Role.ADMIN; import static com.example.backend.utils.enums.Role.USER; import static com.example.backend.utils.enums.Status.OFFLINE; import static com.example.backend.utils.exception.RequestException.badRequestException; @@ -58,7 +60,7 @@ public void signup(final RegisterRequest registerRequest) { .phone(registerRequest.phone()) .registerAuthStatus(JWT) .enabled(false) - .role(USER) + .roles(Set.of(USER, ADMIN)) .status(OFFLINE) .build(); diff --git a/src/main/java/com/example/backend/security/service/impl/JwtTokenServiceImpl.java b/src/main/java/com/example/backend/security/service/impl/JwtTokenServiceImpl.java index 28194b55..23b376c0 100644 --- a/src/main/java/com/example/backend/security/service/impl/JwtTokenServiceImpl.java +++ b/src/main/java/com/example/backend/security/service/impl/JwtTokenServiceImpl.java @@ -45,7 +45,7 @@ private String generateJwtPasswordToken(final UserSecurityDTO userData) { final Map claims = new HashMap<>(); claims.put(PASSWORD, userData.password()); - claims.put(ROLE, userData.role()); + claims.put(ROLE, userData.roles()); return Jwts .builder() @@ -64,7 +64,7 @@ private String generateJwtPasswordToken(final UserSecurityDTO userData) { private String generateJwtEmailToken(final UserSecurityDTO userData) { final Map role = new HashMap<>(); - role.put(ROLE, userData.role()); + role.put(ROLE, userData.roles()); return Jwts .builder() @@ -84,7 +84,7 @@ private String generateJwtAccessToken(final Map extraClaims, fin final var userDetails = (MyUserDetails) authentication.getPrincipal(); final Map role = new HashMap<>(); - role.put(ROLE, userDetails.user().role().name()); + role.put(ROLE, userDetails.user().roles()); return Jwts .builder() @@ -105,7 +105,7 @@ private String generateJwtRefreshToken(final Map extraClaims, fi final var userDetails = (MyUserDetails) authentication.getPrincipal(); final Map role = new HashMap<>(); - role.put(ROLE, userDetails.user().role().name()); + role.put(ROLE, userDetails.user().roles()); return Jwts .builder() 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 07041b8b..2e00f396 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 @@ -11,6 +11,7 @@ import java.time.LocalDateTime; import java.util.List; +import java.util.Set; @Entity @Table(name = "users") @@ -46,7 +47,7 @@ public class UserEntity { private ImageEntity image; @Enumerated(value = EnumType.STRING) - private Role role; + private Set roles; @Enumerated(value = EnumType.STRING) @Column(name = "register_status") diff --git a/src/main/java/com/example/backend/web/User/store/dto/UserSecurityDTO.java b/src/main/java/com/example/backend/web/User/store/dto/UserSecurityDTO.java index f670fe3e..8e904d32 100644 --- a/src/main/java/com/example/backend/web/User/store/dto/UserSecurityDTO.java +++ b/src/main/java/com/example/backend/web/User/store/dto/UserSecurityDTO.java @@ -4,6 +4,8 @@ import com.example.backend.utils.enums.Role; import lombok.Builder; +import java.util.Set; + @Builder public record UserSecurityDTO(String lastname, String firstname, @@ -11,5 +13,5 @@ public record UserSecurityDTO(String lastname, String phone, String password, RegisterAuthStatus status, - Role role, + Set roles, Boolean enabled) { } \ No newline at end of file diff --git a/src/main/java/com/example/backend/web/User/store/factory/UserSecurityFactory.java b/src/main/java/com/example/backend/web/User/store/factory/UserSecurityFactory.java index bfc93ddb..ccf4a63a 100644 --- a/src/main/java/com/example/backend/web/User/store/factory/UserSecurityFactory.java +++ b/src/main/java/com/example/backend/web/User/store/factory/UserSecurityFactory.java @@ -19,7 +19,7 @@ public UserSecurityDTO apply(final UserEntity user) { .phone(user.getPhone()) .password(user.getPassword()) .status(user.getRegisterAuthStatus()) - .role(user.getRole()) + .roles(user.getRoles()) .enabled(user.getEnabled()) .build(); } From 33bb6d578b4261eb54edb021b5d3d46943dd7d79 Mon Sep 17 00:00:00 2001 From: Vladik Date: Wed, 12 Jun 2024 17:30:19 +0300 Subject: [PATCH 12/15] Update Entity Google --- .../java/com/example/backend/security/oauth/AuthGoogle.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/example/backend/security/oauth/AuthGoogle.java b/src/main/java/com/example/backend/security/oauth/AuthGoogle.java index 9c0a3785..ef1649a7 100644 --- a/src/main/java/com/example/backend/security/oauth/AuthGoogle.java +++ b/src/main/java/com/example/backend/security/oauth/AuthGoogle.java @@ -23,6 +23,7 @@ import static com.example.backend.utils.enums.RegisterAuthStatus.GOOGLE; import static com.example.backend.utils.enums.Role.USER; +import static com.example.backend.utils.enums.Status.ONLINE; import static com.example.backend.utils.general.Constants.*; import static com.example.backend.utils.general.MyPasswordEncoder.generateRandomPassword; @@ -97,6 +98,7 @@ private UserEntity createUserEntity(final Map attributes, final .registerAuthStatus(GOOGLE) .roles(Set.of(USER)) .enabled(true) + .status(ONLINE) .createData(LocalDateTime.now()) .password(passwordEncoder.passwordEncoder().encode(generateRandomPassword())) .phone(attributes.getOrDefault("phone", EMPTY_LINE).toString()) From 4f3bc102568a65ae92bee2ef9e9cac0f9208b4bf Mon Sep 17 00:00:00 2001 From: Vladik Date: Wed, 12 Jun 2024 20:43:24 +0300 Subject: [PATCH 13/15] fix AdvertisementController --- .../backend/web/Advertisement/AdvertisementController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c1c5459b..4d32f4f5 100644 --- a/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java +++ b/src/main/java/com/example/backend/web/Advertisement/AdvertisementController.java @@ -27,7 +27,7 @@ public class AdvertisementController { private static final String URL_CREATE = "/createAdvertisement"; private static final String URL_EDIT = "/editAdvertisement"; private static final String URL_DELETE = "/deleteAdvertisement"; - public static final String ADVERTISEMENT = "/advertisement"; + private static final String ADVERTISEMENT = "/advertisement"; private static final String URL_DELETE_ALL = "/deleteAll"; @PostMapping(value = URL_CREATE, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) From c330d4d8bfdd01cee44750bd88369fa9e1606af8 Mon Sep 17 00:00:00 2001 From: Vladik Date: Wed, 12 Jun 2024 23:19:50 +0300 Subject: [PATCH 14/15] Update file --- .../security/{controllers => controller}/AuthController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/com/example/backend/security/{controllers => controller}/AuthController.java (98%) diff --git a/src/main/java/com/example/backend/security/controllers/AuthController.java b/src/main/java/com/example/backend/security/controller/AuthController.java similarity index 98% rename from src/main/java/com/example/backend/security/controllers/AuthController.java rename to src/main/java/com/example/backend/security/controller/AuthController.java index e9abcb22..07f77f7f 100644 --- a/src/main/java/com/example/backend/security/controllers/AuthController.java +++ b/src/main/java/com/example/backend/security/controller/AuthController.java @@ -1,4 +1,4 @@ -package com.example.backend.security.controllers; +package com.example.backend.security.controller; import com.example.backend.security.models.request.AuthRequest; import com.example.backend.security.models.request.EmailRequest; From 070653a5701e1aa1342d8bf2c614bdd24d450717 Mon Sep 17 00:00:00 2001 From: Vladik Date: Fri, 14 Jun 2024 16:38:00 +0300 Subject: [PATCH 15/15] Update JwtAuthFilter --- .../com/example/backend/security/jwt/JwtAuthFilter.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/backend/security/jwt/JwtAuthFilter.java b/src/main/java/com/example/backend/security/jwt/JwtAuthFilter.java index 20fccd7e..b25a2a94 100644 --- a/src/main/java/com/example/backend/security/jwt/JwtAuthFilter.java +++ b/src/main/java/com/example/backend/security/jwt/JwtAuthFilter.java @@ -21,8 +21,8 @@ @RequiredArgsConstructor public class JwtAuthFilter extends OncePerRequestFilter { - private final JwtService jwtService; private final MyUserDetailsService userDetailsService; + private final JwtService jwtService; @Override @SneakyThrows @@ -60,7 +60,7 @@ private String getExtractUserData(final String jwt) { } private void getSecurityContextHolder(final HttpServletRequest request, final String userData, final String jwt) { - if (StringUtils.isNoneEmpty(userData) && SecurityContextHolder.getContext().getAuthentication() == null) { + if (StringUtils.isNoneEmpty(userData) && isNotAuthenticated()) { final var userDetails = userDetailsService.loadUserByUsername(userData); @@ -79,4 +79,8 @@ private void getSecurityContextHolder(final HttpServletRequest request, final St } } } + + private boolean isNotAuthenticated() { + return SecurityContextHolder.getContext().getAuthentication() == null; + } } \ No newline at end of file