Skip to content

Commit 18c7af0

Browse files
Merge pull request #8 from Csaba79-coder/feature-litter-service-vasile
Feature litter service vasile
2 parents 38e7adf + 6ccf231 commit 18c7af0

File tree

15 files changed

+332
-297
lines changed

15 files changed

+332
-297
lines changed

src/main/java/com/csaba79coder/littersnap/model/litter/dto/LitterCreateOrModifyModel.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66
import lombok.NoArgsConstructor;
77
import lombok.Setter;
88

9+
import java.util.UUID;
10+
911
@Getter
1012
@Setter
1113
@AllArgsConstructor
1214
@NoArgsConstructor
1315
public class LitterCreateOrModifyModel {
1416

17+
private UUID id;
1518
private AddressModel address;
1619
private String description;
1720
private byte[] image;

src/main/java/com/csaba79coder/littersnap/model/litter/service/LitterService.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import java.io.IOException;
1717
import java.util.List;
18+
import java.util.NoSuchElementException;
1819
import java.util.Optional;
1920
import java.util.UUID;
2021
import java.util.stream.Collectors;
@@ -28,11 +29,16 @@ public class LitterService {
2829

2930
private final AddressRepository addressRepository;
3031

31-
//Image i will need @RequestParam("image") MultipartFile file
32-
33-
3432
public List<LitterModel> getAllLitters() {
3533
List<Litter> litters = litterRepository.findAll();
34+
35+
36+
if (litters.isEmpty()) {
37+
String message = "Litter list is empty";
38+
log.error(message);
39+
throw new NoSuchElementException(message);
40+
}
41+
3642
return litters.stream()
3743
.map(litter -> {
3844
LitterModel litterModel = Mapper.mapLitterEntityToModel(litter);
@@ -52,12 +58,14 @@ public LitterModel addNewLitter(LitterCreateOrModifyModel litterModel, Address a
5258
address = addressRepository.save(address);
5359
}
5460
Litter litterEntity = new Litter();
55-
litterEntity.setAddress(address); //TODO set an incoming address also here! if address is not found in entiy new must be created
61+
litterEntity.setAddress(address);
5662
litterEntity.setDescription(litterModel.getDescription());
5763
try {
5864
litterEntity.setImage(ImageUtil.compressImage(file.getBytes())); // Compressing the image before saving
5965
} catch (IOException e) {
60-
throw new RuntimeException(e);
66+
String message = String.format("File not found."+ e.getMessage());
67+
log.error(message);
68+
throw new NoSuchElementException(e);
6169
}
6270
Litter savedLitterEntity = litterRepository.save(litterEntity);
6371
return Mapper.mapLitterEntityToModel(savedLitterEntity);
@@ -74,7 +82,7 @@ public LitterModel getLitterById(UUID id) {
7482
} else {
7583
String message = String.format("Litter with id %s not found", id);
7684
log.error(message);
77-
throw new RuntimeException(message);
85+
throw new NoSuchElementException(message);
7886
}
7987
}
8088

@@ -94,19 +102,22 @@ public LitterModel updateExistingLitter(UUID id, LitterCreateOrModifyModel model
94102
Litter updatedLitter = litterRepository.save(Mapper.mapLitterModelToEntity(existingLitter));
95103

96104
return Mapper.mapLitterEntityToModel(updatedLitter);
105+
}else {
106+
String message = String.format("Couldn't update. Litter with id %s not found", id);
107+
log.error(message);
108+
throw new NoSuchElementException(message);
97109
}
98-
//TODO
99-
//Case where liter not found
100-
return null;
110+
101111
}
102112

103113
public void deleteLitter(UUID id) {
104114
Optional<Litter> optionalExistingLitter = litterRepository.findById(id);
105115
if (optionalExistingLitter.isPresent()) {
106116
litterRepository.deleteById(id);
107117
} else {
108-
//TODO
109-
//Case where liter not found
118+
String message = String.format("Couldn't delete. Litter with id %s not found", id);
119+
log.error(message);
120+
throw new NoSuchElementException(message);
110121
}
111122
}
112123
}

src/main/java/com/csaba79coder/littersnap/model/user/dto/UserModel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ public class UserModel {
2323
private String email;
2424
private String firstName;
2525
private Role role;
26-
}
26+
27+
}

src/main/java/com/csaba79coder/littersnap/util/Mapper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public static LitterModel mapLitterEntityToModel(Litter entity) {
5656
model.setImage(ImageUtil.decompressImage(entity.getImage()));
5757
model.setAddress(mapAddressEntityToModel(entity.getAddress()));
5858
model.setDescription(entity.getDescription());
59+
model.setStatus(entity.getStatus());
5960
return model;
6061
}
6162

src/main/java/com/csaba79coder/littersnap/view/LitterViewController.java

Lines changed: 75 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.springframework.web.multipart.MultipartFile;
1212

1313
import java.util.List;
14+
import java.util.NoSuchElementException;
1415
import java.util.UUID;
1516

1617
@Controller
@@ -26,58 +27,106 @@ public LitterViewController(LitterService litterService) {
2627

2728
@GetMapping
2829
public String getAllLitters(Model model) {
29-
List<LitterModel> litters = litterService.getAllLitters();
30-
31-
if (litters.isEmpty()) {
32-
return "error_page";
33-
} else {
30+
try {
31+
List<LitterModel> litters = litterService.getAllLitters();
3432
model.addAttribute("litters", litters);
35-
return "litter_list"; // Replace with the actual view name for displaying the list of litters
33+
model.addAttribute("view", "litter_list");
34+
return "welcome"; // Replace with the actual view name for displaying the list of litters
35+
} catch (NoSuchElementException e) {
36+
model.addAttribute("errorMessage", e.getMessage());
37+
return "error_page"; // Redirect to the error page to display the error message
3638
}
3739
}
3840

3941
@GetMapping("/{id}")
4042
public String getLitterById(@PathVariable("id") UUID id, Model model) {
41-
LitterModel litter = litterService.getLitterById(id);
42-
model.addAttribute("litter", litter);
43-
return "litter_details";
43+
44+
try {
45+
LitterModel litter = litterService.getLitterById(id);
46+
model.addAttribute("id", litter.getId());
47+
model.addAttribute("createdAt", litter.getCreatedAt());
48+
model.addAttribute("updatedAt", litter.getUpdatedAt());
49+
model.addAttribute("firstline", litter.getAddress().getFirstLine());
50+
model.addAttribute("city", litter.getAddress().getCity());
51+
model.addAttribute("country", litter.getAddress().getCountry());
52+
model.addAttribute("postcode", litter.getAddress().getPostCode());
53+
model.addAttribute("description", litter.getDescription());
54+
model.addAttribute("image", litter.getImage());
55+
model.addAttribute("status", litter.getStatus());
56+
model.addAttribute("view", "litter_details");
57+
return "welcome";
58+
} catch (NoSuchElementException e) {
59+
model.addAttribute("errorMessage", e.getMessage());
60+
return "error_page"; // Redirect to the error page to display the error message
61+
}
4462
}
4563

4664
@GetMapping("/create")
4765
public String showAddLitterForm(Model model) {
48-
model.addAttribute("litter", new LitterCreateOrModifyModel());
49-
return "litter_add_form";
66+
try {
67+
model.addAttribute("litter", new LitterCreateOrModifyModel());
68+
return "litter_add_form";
69+
} catch (NoSuchElementException e) {
70+
model.addAttribute("errorMessage", e.getMessage());
71+
return "error_page"; // Redirect to the error page to display the error message
72+
}
5073
}
5174

5275
@PostMapping("/create")
5376
public String addNewLitter(@ModelAttribute("litter") LitterCreateOrModifyModel litterModel,
5477
@ModelAttribute("address") Address address,
55-
@RequestParam("file") MultipartFile file) {
56-
litterService.addNewLitter(litterModel, address, file);
57-
return "redirect:/thy/litter";
78+
@RequestParam("file") MultipartFile file,Model model) {
79+
try {
80+
litterService.addNewLitter(litterModel, address, file);
81+
return "redirect:/thy/litter";
82+
} catch (NoSuchElementException e) {
83+
model.addAttribute("errorMessage", e.getMessage());
84+
return "error_page"; // Redirect to the error page to display the error message
85+
}
5886
}
5987

6088
@GetMapping("/edit/{id}")
6189
public String showEditForm(@PathVariable UUID id, Model model) {
62-
LitterCreateOrModifyModel currentLitter = Mapper.mapModelToLitterCreateOrModifyModel(litterService.getLitterById(id));
63-
if (currentLitter == null) {
64-
return "error_page";
65-
} else {
66-
model.addAttribute("litter", currentLitter);
67-
return "litter_edit_form";
90+
try {
91+
LitterCreateOrModifyModel litter = Mapper.mapModelToLitterCreateOrModifyModel(litterService.getLitterById(id));
92+
model.addAttribute("id", litter.getId());
93+
model.addAttribute("firstline", litter.getAddress().getFirstLine());
94+
model.addAttribute("city", litter.getAddress().getCity());
95+
model.addAttribute("country", litter.getAddress().getCountry());
96+
model.addAttribute("postcode", litter.getAddress().getPostCode());
97+
model.addAttribute("description", litter.getDescription());
98+
model.addAttribute("image", litter.getImage());
99+
model.addAttribute("view","litter_edit_form");
100+
return "welcome";
101+
} catch (NoSuchElementException e) {
102+
model.addAttribute("errorMessage", e.getMessage());
103+
return "error_page"; // Redirect to the error page to display the error message
68104
}
69105
}
70106

71107
@PostMapping("/edit/{id}")
72-
public String updateLitter(@PathVariable UUID id, @ModelAttribute("report") LitterCreateOrModifyModel litterModel) {
73-
litterService.updateExistingLitter(id,litterModel);
74-
return "redirect:/reports"; // Redirect to the URL for displaying all reports after successful update
108+
public String updateLitter(@PathVariable UUID id, @ModelAttribute("report") LitterCreateOrModifyModel litterModel, Model model) {
109+
try {
110+
litterService.updateExistingLitter(id, litterModel);
111+
return "redirect:/reports"; // Redirect to the URL for displaying all reports after successful update
112+
} catch (NoSuchElementException e) {
113+
model.addAttribute("errorMessage", e.getMessage());
114+
return "error_page"; // Redirect to the error page to display the error message
115+
}
75116
}
76117

118+
77119
@GetMapping("/delete/{id}")
78-
public String deleteLitter(@PathVariable UUID id) {
79-
litterService.deleteLitter(id);
80-
return "redirect:/reports"; // Redirect to the URL for displaying all reports after successful deletion
120+
public String deleteLitter(@PathVariable UUID id,Model model) {
121+
122+
try {
123+
litterService.deleteLitter(id);
124+
return "redirect:/thy/litter"; // Redirect to the URL for displaying all reports after successful deletion
125+
} catch (NoSuchElementException e) {
126+
model.addAttribute("errorMessage", e.getMessage());
127+
return "error_page"; // Redirect to the error page to display the error message
128+
}
129+
81130
}
82131

83132

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.csaba79coder.littersnap.view;
22

3+
import com.csaba79coder.littersnap.model.user.dto.UserModel;
34
import com.csaba79coder.littersnap.model.user.service.UserService;
45
import lombok.RequiredArgsConstructor;
56
import org.springframework.stereotype.Controller;
6-
import org.springframework.ui.Model;
7-
import org.springframework.web.bind.annotation.GetMapping;
87
import org.springframework.web.bind.annotation.RequestMapping;
98

9+
import java.util.List;
10+
import java.util.NoSuchElementException;
11+
1012
@Controller
1113
@RequiredArgsConstructor
1214
@RequestMapping("/thy/users")
@@ -15,8 +17,15 @@ public class UserViewController {
1517
private final UserService userService;
1618

1719
@GetMapping
18-
public String renderAllUsers(Model model) {
19-
model.addAttribute("users", userService.findAllUsers());
20-
return "user";
20+
public String getAllUsers(Model model) {
21+
try {
22+
List<UserModel> users = userService.findAllUsers();
23+
model.addAttribute("users", users);
24+
model.addAttribute("view", "user_list");
25+
return "welcome"; // Replace with the actual view name for displaying the list of litters
26+
} catch (NoSuchElementException e) {
27+
model.addAttribute("errorMessage", e.getMessage());
28+
return "error_page"; // Redirect to the error page to display the error message
29+
}
2130
}
2231
}

src/main/resources/static/style.css

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ body {
2020
.fixed-buttons {
2121
position: fixed;
2222
top: 0;
23-
right: 20px;
23+
right: 0;
2424
z-index: 999;
2525
}
2626

@@ -62,10 +62,27 @@ body {
6262
width: 100%;
6363
}
6464

65-
.input-label-logo-welcome-page {
65+
/*Logo Control when user will be logged in*/
66+
.logged-logo {
67+
position: relative;
68+
}
6669

70+
.logged-logo .logged-logo-name {
71+
position: absolute;
72+
bottom: 20px;
73+
right: 305px;
74+
font-family: 'Niagara Solid', cursive;
75+
font-size: 80px;
76+
color: #1c5486;
77+
text-align: center; /* Center the text horizontally */
6778
}
6879

80+
.logged-logo .man-with-the-phone-icon {
81+
width: 300px;
82+
opacity: 0.965;
83+
}
84+
85+
6986
/*Modal Container on index page*/
7087

7188
/*.modal-dialog {*/

src/main/resources/templates/error_page.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@
1616
</head>
1717

1818
<body>
19-
<!-- Your 404 content here -->
19+
2020
<div class="container d-flex flex-column justify-content-center align-items-center" style="min-height: 100vh;">
21-
<h1>404 - Page Not Found</h1>
21+
<h1>Error Page</h1>
2222
<br>
23+
<p th:text = "${errorMessage}" ></p>
2324
<p class="text-center">Vasile, Csaba and Kev are on it now...</p>
2425
<img th:src="@{/images/404.jpg}" alt="Image" class="no_page_found_icon">
2526
</div>

src/main/resources/templates/index.html

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,10 @@
3434
</button>
3535
</div>
3636
</div>
37-
<button class="btn btn-primary btn-sm btn-block m-1" data-bs-toggle="modal" data-bs-target="#addLitterModal">
38-
TestAddButton
39-
</button>
40-
<button class="btn btn-warning btn-sm btn-block m-1" data-bs-toggle="modal" data-bs-target="#editLitterModal">
41-
TestEditButton
42-
</button>
4337

44-
<button class="btn btn-danger btn-sm btn-block m-1" data-bs-toggle="modal" data-bs-target="#showLitterDetailsModal">
45-
Test Litter Details
46-
</button>
47-
48-
49-
<div th:replace="~{litter_add_form}"></div>
50-
<div th:replace="~{litter_edit_form}"></div>
51-
<div th:replace="~{litter_details}"></div>
5238
<div th:replace="~{signIn_form}"></div>
5339
<div th:replace="~{signUp_form}"></div>
5440

55-
5641
<!-- Middle Part -->
5742
<div class="row justify-content-center align-items-center min-vh-100">
5843
<div class="col-12 col-md-8 col-lg-6">

0 commit comments

Comments
 (0)