Skip to content

Commit 55e01d9

Browse files
authored
Merge pull request #2 from Smejia11/feature/Feat_1
feat: add endpoints to update branch and product names
2 parents 89f1ea1 + 77437e3 commit 55e01d9

File tree

5 files changed

+78
-2
lines changed

5 files changed

+78
-2
lines changed

src/main/java/com/example/franchise_api/controller/FranchiseController.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
import com.example.franchise_api.dto.FranchiseCreateDto;
1818
import com.example.franchise_api.dto.ProductCreateDto;
1919
import com.example.franchise_api.dto.TopProductResponse;
20+
import com.example.franchise_api.dto.UpdateNameBranch;
21+
import com.example.franchise_api.dto.UpdateNameFranchise;
22+
import com.example.franchise_api.dto.UpdateNameProduct;
2023
import com.example.franchise_api.service.FranchiseService;
2124

2225
@RestController
@@ -34,10 +37,31 @@ public ResponseEntity<Void> franchises(@RequestBody FranchiseCreateDto franchise
3437
return ResponseEntity.status(HttpStatus.CREATED).build();
3538
}
3639

40+
@PatchMapping("/{franchiseName}/update/name")
41+
public ResponseEntity<Void> updateName(@PathVariable String franchiseName,
42+
@RequestBody UpdateNameFranchise franchiseUpdateName) throws Exception {
43+
this.franchiseService.updateName(franchiseName, franchiseUpdateName);
44+
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
45+
}
46+
47+
@PatchMapping("/{franchiseName}/branches/{branchName}/update/name")
48+
public ResponseEntity<Void> updateNameBranch(@PathVariable String franchiseName, @PathVariable String branchName,
49+
@RequestBody UpdateNameBranch updateNameBranch) throws Exception {
50+
this.franchiseService.updateNameBranch(franchiseName, branchName, updateNameBranch);
51+
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
52+
}
53+
54+
@PatchMapping("/{franchiseName}/branches/{branchName}/products/{productName}/update/name")
55+
public ResponseEntity<Void> updateNameProduct(@PathVariable String franchiseName, @PathVariable String branchName,
56+
@PathVariable String productName, @RequestBody UpdateNameProduct updateNameBranch) throws Exception {
57+
this.franchiseService.updateNameProduct(franchiseName, branchName, productName, updateNameBranch);
58+
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
59+
}
60+
3761
@PostMapping("/{franchiseName}/branches")
3862
public ResponseEntity<Void> addBranchToFranchises(@PathVariable String franchiseName,
3963
@RequestBody BranchesCreateDto branchesCreateDto) throws Exception {
40-
this.franchiseService.addBranchToFranchises(branchesCreateDto, franchiseName);
64+
this.franchiseService.addBranchToFranchise(branchesCreateDto, franchiseName);
4165
return ResponseEntity.status(HttpStatus.CREATED).build();
4266
}
4367

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.example.franchise_api.dto;
2+
3+
public record UpdateNameBranch(String name) {
4+
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.example.franchise_api.dto;
2+
3+
public record UpdateNameFranchise(String name) {
4+
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.example.franchise_api.dto;
2+
3+
public record UpdateNameProduct(String name) {
4+
5+
}

src/main/java/com/example/franchise_api/service/FranchiseService.java

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
import com.example.franchise_api.mapper.ProductMapper;
1212
import com.example.franchise_api.model.Branch;
1313
import com.example.franchise_api.dto.TopProductResponse;
14+
import com.example.franchise_api.dto.UpdateNameBranch;
15+
import com.example.franchise_api.dto.UpdateNameFranchise;
16+
import com.example.franchise_api.dto.UpdateNameProduct;
1417
import com.example.franchise_api.model.Franchise;
1518
import com.example.franchise_api.model.Product;
1619
import com.example.franchise_api.repository.FranchiseRepository;
@@ -59,7 +62,7 @@ private void validateFranchise(String franchiseName) {
5962
}
6063
}
6164

62-
public @Nullable Franchise addBranchToFranchises(BranchesCreateDto dto, String name) {
65+
public @Nullable Franchise addBranchToFranchise(BranchesCreateDto dto, String name) {
6366
Branch branch = branchesMapper.toEntity(dto);
6467
Query query = new Query(Criteria.where("name").is(name));
6568
Update update = new Update().push("branches", branch);
@@ -126,4 +129,38 @@ public List<TopProductResponse> getTopStockProducts(String franchiseName) {
126129
}).toList();
127130
}
128131

132+
public @Nullable Franchise updateName(String franchiseName, UpdateNameFranchise franchiseUpdateName) {
133+
Query query = new Query(Criteria.where("name").is(franchiseName));
134+
Update update = new Update().set("name", franchiseUpdateName.name());
135+
Franchise franchise = mongoTemplate.findAndModify(query, update, FindAndModifyOptions.options().returnNew(true),
136+
Franchise.class);
137+
return Optional.ofNullable(franchise).orElseThrow(() -> new FranchiseNotFoundException(franchiseName));
138+
139+
}
140+
141+
public Franchise updateNameBranch(String franchiseName, String branchName, UpdateNameBranch updateNameBranch) {
142+
this.validateFranchise(franchiseName);
143+
Query query = new Query(Criteria.where("name").is(franchiseName).and("branches.name").is(branchName));
144+
Update update = new Update().set("branches.$.name", updateNameBranch.name());
145+
Franchise franchise = mongoTemplate.findAndModify(query, update, FindAndModifyOptions.options().returnNew(true),
146+
Franchise.class);
147+
return Optional.ofNullable(franchise).orElseThrow(() -> new FranchiseNotFoundException(franchiseName));
148+
}
149+
150+
public Franchise updateNameProduct(String franchiseName, String branchName, String productName,
151+
UpdateNameProduct updateNameProduct) {
152+
this.validateFranchise(franchiseName);
153+
Query query = new Query(Criteria.where("name").is(franchiseName));
154+
155+
Update update = new Update().set("branches.$[branch].products.$[product].name", updateNameProduct.name())
156+
.filterArray(Criteria.where("branch.name").is(branchName))
157+
.filterArray(Criteria.where("product.name").is(productName));
158+
159+
FindAndModifyOptions options = FindAndModifyOptions.options().returnNew(true);
160+
161+
Franchise franchise = mongoTemplate.findAndModify(query, update, options, Franchise.class);
162+
return Optional.ofNullable(franchise).orElseThrow(() -> new FranchiseNotFoundException(franchiseName));
163+
164+
}
165+
129166
}

0 commit comments

Comments
 (0)