Skip to content

Commit 7fdc408

Browse files
committed
Nueva API "/shopping-lists/{id}/products-selected"
- Actualización del estado de selección de los productos de una lista de la compra. - Se agregó la anotación "@transactional" (necesaria) para que la actualización funcione correctamente.
1 parent 6b3a8cc commit 7fdc408

File tree

5 files changed

+48
-0
lines changed

5 files changed

+48
-0
lines changed

src/main/java/dev/nmarulo/despensaapp/app/productshoppinglist/ProductHasShoppingListRepository.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import dev.nmarulo.despensaapp.app.users.User;
44
import org.springframework.data.jpa.repository.JpaRepository;
55
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
6+
import org.springframework.data.jpa.repository.Modifying;
7+
import org.springframework.data.jpa.repository.Query;
68
import org.springframework.stereotype.Repository;
79

810
import java.util.List;
@@ -24,4 +26,9 @@ List<ProductHasShoppingList> findAllByShoppingList_IdAndShoppingList_UserAndProd
2426
List<Long> productsId,
2527
List<Long> unitTypesId);
2628

29+
@Modifying
30+
@Query(
31+
"UPDATE ProductHasShoppingList phsl SET phsl.selected = :selected WHERE phsl.shoppingList.id = :shoppingListId AND phsl.shoppingList.user = :user")
32+
void updateSelectedByShoppingList_IdShoppingList_User(boolean selected, Long shoppingListId, User user);
33+
2734
}

src/main/java/dev/nmarulo/despensaapp/app/shoppinglist/ShoppingListController.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,12 @@ public ResponseEntity<FindByIdProductListRes> findAllProducts(@PathVariable Long
8383
pageable));
8484
}
8585

86+
@PutMapping("/{id}/products-selected")
87+
public ResponseEntity<Void> productsSelected(@PathVariable Long id, @RequestBody ProductsSelectedReq request) {
88+
this.shoppingListService.productsSelected(id, request, this.dataRequestScope.getAuthenticationPrincipal());
89+
90+
return ResponseEntity.noContent()
91+
.build();
92+
}
93+
8694
}

src/main/java/dev/nmarulo/despensaapp/app/shoppinglist/ShoppingListRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ public interface ShoppingListRepository extends JpaRepository<ShoppingList, Long
1515

1616
Optional<ShoppingList> findByIdAndUser(Long id, User user);
1717

18+
boolean existsByIdAndUser(Long id, User user);
19+
1820
}

src/main/java/dev/nmarulo/despensaapp/app/shoppinglist/ShoppingListService.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.apache.commons.lang3.StringUtils;
1717
import org.springframework.data.domain.Pageable;
1818
import org.springframework.stereotype.Service;
19+
import org.springframework.transaction.annotation.Transactional;
1920

2021
import java.math.BigDecimal;
2122
import java.util.List;
@@ -203,4 +204,19 @@ private List<SelectOption<SelectedProducts, String>> getSelectOptionList(FindByI
203204
new SelectOption<>(SelectedProducts.ALL, "Todos", SelectedProducts.ALL == selected));
204205
}
205206

207+
@Transactional
208+
public void productsSelected(Long id, ProductsSelectedReq request, User user) {
209+
if (request.getAction() == null) {
210+
return;
211+
}
212+
213+
if (!this.shoppingListRepository.existsByIdAndUser(id, user)) {
214+
throw new NotFoundException(getLocalMessage().getMessage("error.record-not-exist"));
215+
}
216+
217+
final var select = ProductsSelectedReq.ActionType.SELECT == request.getAction();
218+
219+
this.productHasShoppingListRepository.updateSelectedByShoppingList_IdShoppingList_User(select, id, user);
220+
}
221+
206222
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev.nmarulo.despensaapp.app.shoppinglist.dtos;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class ProductsSelectedReq {
7+
8+
private ActionType action;
9+
10+
public enum ActionType {
11+
SELECT,
12+
DESELECT
13+
}
14+
15+
}

0 commit comments

Comments
 (0)