Skip to content

Commit 931627a

Browse files
Merge pull request #5 from Csaba79-coder/user-report-backend-Vasile
User report backend vasile
2 parents cea6f76 + 89dcee6 commit 931627a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1471
-125
lines changed

MANUAL.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
![img.png](src/main/resources/static/img/readme/banner-app.png)
1+
![img.png](src/main/resources/static/readme/banner-app.png)
22

33
# We use server port: 8081
44

@@ -8,7 +8,7 @@
88

99
Step-by-step guide:
1010

11-
![img.png](src/main/resources/static/img/manual/env-variable.png)
11+
![img.png](src/main/resources/static/manual/env-variable.png)
1212

1313
<span style="color: cyan">The program is creating the empty database with tables (also in the MySQL server) without running any script (due to the setup of application.properties)!</span>
1414
<br>
@@ -29,7 +29,7 @@ Step-by-step guide:
2929

3030
EMAIL_VALIDATOR value as follows:
3131

32-
![img.png](src/main/resources/static/img/manual/regex-email-pattern.png)
32+
![img.png](src/main/resources/static/manual/regex-email-pattern.png)
3333

3434
```(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])```
3535

@@ -42,4 +42,4 @@ PASSWORD_VALIDATOR value as follows:
4242

4343
# Created by:
4444

45-
![img_1.png](src/main/resources/static/img/readme/banner-team.png)
45+
![img_1.png](src/main/resources/static/readme/banner-team.png)

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
![img.png](/src/main/resources/static/img/readme/banner-app.png)
1+
![img.png](/static/images/readme/banner-app.png)
22

33
# We use server port: 8081
44

@@ -39,4 +39,4 @@
3939

4040
# Created by:
4141

42-
![img_1.png](/src/main/resources/static/img/readme/banner-team.png)
42+
![img_1.png](/static/images/readme/banner-team.png)

src/main/java/com/csaba79coder/littersnap/config/SecurityConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
2828
.anyRequest().permitAll() // Allow access to all endpoints
2929
.and()
3030
.formLogin()
31-
.loginPage("/login")
31+
.loginPage("/security/login")
3232
.permitAll()
3333
.and()
3434
.logout()
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.csaba79coder.littersnap.controller;
2+
3+
import com.csaba79coder.littersnap.model.address.entity.Address;
4+
import com.csaba79coder.littersnap.model.litter.dto.LitterCreateOrModifyModel;
5+
import com.csaba79coder.littersnap.model.litter.dto.LitterModel;
6+
import com.csaba79coder.littersnap.model.litter.service.LitterService;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.http.HttpStatus;
9+
import org.springframework.http.ResponseEntity;
10+
import org.springframework.web.bind.annotation.*;
11+
import org.springframework.web.multipart.MultipartFile;
12+
13+
import java.util.List;
14+
import java.util.UUID;
15+
16+
@RestController
17+
@RequestMapping("/api/litters")
18+
@RequiredArgsConstructor
19+
public class LitterController {
20+
21+
private final LitterService litterService;
22+
23+
@GetMapping
24+
public List<LitterModel> getAllLitters() {
25+
return litterService.getAllLitters();
26+
}
27+
28+
@PostMapping
29+
public ResponseEntity<LitterModel> addNewLitter(@RequestBody LitterCreateOrModifyModel litterModel,
30+
@RequestBody Address address,
31+
@RequestParam("file") MultipartFile file) {
32+
return ResponseEntity.status(201).body(litterService.addNewLitter(litterModel, address, file));
33+
}
34+
35+
@GetMapping("/{id}")
36+
public ResponseEntity<LitterModel> getLitterById(@PathVariable("id") UUID id) {
37+
LitterModel litter = litterService.getLitterById(id);
38+
if (litter != null) {
39+
return new ResponseEntity<>(litter, HttpStatus.OK);
40+
}
41+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
42+
}
43+
44+
@PutMapping("/{id}")
45+
public ResponseEntity<LitterModel> updateExistingLitter(@PathVariable("id") UUID id,
46+
@RequestBody LitterCreateOrModifyModel model) {
47+
return ResponseEntity.status(200).body(litterService.updateExistingLitter(id, model));
48+
}
49+
50+
@DeleteMapping("/{id}")
51+
public ResponseEntity<Void> deleteExistingLitter(@PathVariable("id") UUID id) {
52+
LitterModel litter = litterService.getLitterById(id);
53+
litterService.deleteLitter(id);
54+
55+
return ResponseEntity.status(204).build();
56+
}
57+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.csaba79coder.littersnap.controller;
2+
3+
import com.csaba79coder.littersnap.model.report.dto.ReportModel;
4+
import com.csaba79coder.littersnap.model.report.service.ReportService;
5+
import org.springframework.http.ResponseEntity;
6+
import org.springframework.web.bind.annotation.*;
7+
8+
import java.util.List;
9+
import java.util.UUID;
10+
11+
@RestController
12+
@RequestMapping("/api/reports")
13+
public class ReportController {
14+
15+
private final ReportService reportService;
16+
17+
public ReportController(ReportService reportService) {
18+
this.reportService = reportService;
19+
}
20+
21+
@GetMapping
22+
public List<ReportModel> getAllReports() {
23+
return reportService.getAllReports();
24+
}
25+
26+
@PostMapping
27+
public ResponseEntity<ReportModel> addNewReport(@RequestBody ReportModel model) {
28+
return ResponseEntity.status(201).body(reportService.addNewReport(model));
29+
}
30+
31+
@GetMapping("/{id}")
32+
public ResponseEntity<ReportModel> getReportById(@PathVariable("id") UUID id) {
33+
ReportModel report = reportService.getReportById(id);
34+
if (report != null) {
35+
return ResponseEntity.ok(report); // Include the report in the response body with status code 200 (OK)
36+
}
37+
return ResponseEntity.notFound().build(); // Return 404 (Not Found) status
38+
}
39+
40+
@PutMapping("/{id}")
41+
public ResponseEntity<ReportModel> updateExistingReport(@PathVariable("id") UUID id, @RequestBody ReportModel model) {
42+
return ResponseEntity.status(200).body(reportService.updateExistingReport(id, model));
43+
}
44+
45+
@DeleteMapping("/{id}")
46+
public ResponseEntity<Void> deleteExistingReport(@PathVariable("id") UUID id) {
47+
ReportModel litter = reportService.getReportById(id);
48+
reportService.deleteExistingReport(id);
49+
50+
return ResponseEntity.status(204).build();
51+
}
52+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.csaba79coder.littersnap.model.address.dto;
2+
3+
import lombok.*;
4+
5+
@Getter
6+
@Setter
7+
@AllArgsConstructor
8+
@NoArgsConstructor
9+
public class AddressModel {
10+
11+
private String firstLine;
12+
private String postCode;
13+
private String city;
14+
private String country;
15+
16+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.csaba79coder.littersnap.model.address.entity;
2+
3+
import com.csaba79coder.littersnap.model.base.entity.Auditable;
4+
import com.csaba79coder.littersnap.model.litter.entity.Litter;
5+
import jakarta.persistence.*;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
import lombok.Setter;
10+
11+
import java.util.List;
12+
13+
@Entity
14+
@Table(name = "address")
15+
@Getter
16+
@Setter
17+
@AllArgsConstructor
18+
@NoArgsConstructor
19+
public class Address extends Auditable {
20+
21+
@Column(name = "first_line")
22+
private String firstLine;
23+
24+
@Column(name = "post_code")
25+
private String postCode;
26+
27+
@Column(name = "city")
28+
private String city;
29+
30+
@Column(name = "country")
31+
private String country;
32+
33+
@OneToMany(mappedBy = "address")
34+
private List<Litter> litters;
35+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.csaba79coder.littersnap.model.address.persitence;
2+
3+
import com.csaba79coder.littersnap.model.address.entity.Address;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
import java.util.Optional;
8+
import java.util.UUID;
9+
10+
@Repository
11+
public interface AddressRepository extends JpaRepository<Address, UUID> {
12+
13+
Optional<Address> findAddressByCityContainingIgnoreCaseAndCountryContainingIgnoreCaseAndPostCodeAndFirstLineContainsIgnoreCase(
14+
String city, String country, String postCode, String firstLine);
15+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.csaba79coder.littersnap.model.litter.dto;
2+
3+
import com.csaba79coder.littersnap.value.LitterStatus;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
@Getter
10+
@Setter
11+
@AllArgsConstructor
12+
@NoArgsConstructor
13+
public class LitterAdminModifyModel {
14+
15+
private LitterStatus status;
16+
17+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.csaba79coder.littersnap.model.litter.dto;
2+
3+
import com.csaba79coder.littersnap.model.address.dto.AddressModel;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
@Getter
10+
@Setter
11+
@AllArgsConstructor
12+
@NoArgsConstructor
13+
public class LitterCreateOrModifyModel {
14+
15+
private AddressModel address;
16+
private String description;
17+
private byte[] image;
18+
19+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.csaba79coder.littersnap.model.litter.dto;
2+
3+
import com.csaba79coder.littersnap.model.address.dto.AddressModel;
4+
import com.csaba79coder.littersnap.model.report.dto.ReportModel;
5+
import com.csaba79coder.littersnap.value.LitterStatus;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
import lombok.Setter;
10+
11+
import java.time.LocalDateTime;
12+
import java.util.List;
13+
import java.util.UUID;
14+
15+
@Getter
16+
@Setter
17+
@AllArgsConstructor
18+
@NoArgsConstructor
19+
public class LitterModel {
20+
private UUID id;
21+
private LocalDateTime createdAt = LocalDateTime.now();
22+
private LocalDateTime updatedAt = LocalDateTime.now();
23+
private UUID createdBy = UUID.fromString("6772c9dc-a7be-4826-963a-e376074fd4e7");
24+
private UUID updatedBy = UUID.fromString("dbd58012-9ee7-47d5-8f87-9bbc91583009");
25+
private AddressModel address;
26+
private String description;
27+
private byte[] image;
28+
private List<ReportModel> reports;
29+
private LitterStatus status;
30+
31+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.csaba79coder.littersnap.model.litter.entity;
2+
3+
import com.csaba79coder.littersnap.model.address.entity.Address;
4+
import com.csaba79coder.littersnap.model.base.entity.Auditable;
5+
import com.csaba79coder.littersnap.value.LitterStatus;
6+
import jakarta.persistence.*;
7+
import lombok.AllArgsConstructor;
8+
import lombok.Getter;
9+
import lombok.NoArgsConstructor;
10+
import lombok.Setter;
11+
12+
@Entity
13+
@Table(name = "litter")
14+
@Getter
15+
@Setter
16+
@AllArgsConstructor
17+
@NoArgsConstructor
18+
public class Litter extends Auditable {
19+
20+
@Enumerated(EnumType.STRING)
21+
@Column(name = "status" , nullable = false)
22+
private LitterStatus status = LitterStatus.REPORTED;
23+
24+
@Column(name = "description",nullable = false)
25+
private String description;
26+
27+
@Lob
28+
@Column(name = "image", length = Integer.MAX_VALUE, nullable = false)
29+
private byte[] image;
30+
31+
@ManyToOne(cascade = CascadeType.ALL)
32+
@JoinColumn(name = "address_id", referencedColumnName = "id")
33+
private Address address;
34+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.csaba79coder.littersnap.model.litter.persistence;
2+
3+
import com.csaba79coder.littersnap.model.litter.entity.Litter;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
import java.util.UUID;
7+
8+
public interface LitterRepository extends JpaRepository<Litter, UUID> {
9+
}

0 commit comments

Comments
 (0)