Backend: Feedback creation with the api : "/create_feedback"

This commit is contained in:
Yohan Boujon 2024-12-23 01:02:16 +01:00
parent 8cf27b7b64
commit 3b8b095db5
5 changed files with 101 additions and 6 deletions

View file

@ -23,7 +23,7 @@ Course Exercice : Application to help others
- [X] `Rest` Make sure admin can do everything and users don't
- [X] `Rest` Create a Help Request
- [X] `Rest` Modify the Help Request status
- [ ] `Rest` Create a User Feedback
- [X] `Rest` Create a User Feedback
- [ ] `Rest` Gather User Feedbacks
## Check `SOAP` Requests

View file

@ -0,0 +1,59 @@
package insa.application.helpapp.rest;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.Column;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
@Entity
@Table(name = "feedback", schema = "service-architecture")
public class Feedback {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "id_user", nullable = false)
private int idUser;
@Column(name = "id_request", nullable = false)
private int idRequest;
@Column(name = "message", nullable = false)
private String message;
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getIdUser() {
return idUser;
}
public void setIdUser(int idUser) {
this.idUser = idUser;
}
public int getIdRequest() {
return idRequest;
}
public void setIdRequest(int idRequest) {
this.idRequest = idRequest;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

View file

@ -0,0 +1,6 @@
package insa.application.helpapp.rest;
import org.springframework.data.jpa.repository.JpaRepository;
public interface FeedbackRepository extends JpaRepository<Feedback, Integer> {
}

View file

@ -8,6 +8,9 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
@SpringBootApplication
@ -15,6 +18,10 @@ import org.springframework.beans.factory.annotation.Autowired;
public class FeedbackServiceApplication {
@Autowired
private AdministrationService administrationService;
@Autowired
private RequestRepository requestRepository;
@Autowired
private FeedbackRepository feedbackRepository;
public static void main(String[] args) {
SpringApplication.run(FeedbackServiceApplication.class, args);
@ -33,4 +40,28 @@ public class FeedbackServiceApplication {
};
}
@PostMapping("/create_feedback")
public ResponseEntity<?> CreateFeedback(@RequestParam int idUser, @RequestParam String token,
@RequestParam int idRequest, @RequestParam String message) {
if (!administrationService.checkToken(idUser, token)) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("User or token invalid.");
}
Optional<Request> requestOption = requestRepository.findById(idRequest);
if (!requestOption.isPresent()) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("No request found with the following ID.");
}
Request request = requestOption.get();
int idRole = administrationService.getRole(idUser).get();
// Checks if the user id corresponds to a 'user'. if admin/volunteer can send feedback either way
if((idRole == RoleEnum.USER.getValue()) && (request.getIdUser() != idUser))
{
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Only the author can respond to its own request.");
}
Feedback feedback = new Feedback();
feedback.setIdRequest(idRequest);
feedback.setIdUser(idUser);
feedback.setMessage(message);
return ResponseEntity.ok(feedbackRepository.save(feedback));
}
}

View file

@ -60,17 +60,17 @@ public class RequestServiceApplication {
return ResponseEntity.ok(requestRepository.save(request));
}
// Put should be : /change_status?idUser=1&idMessage=1&status=1&token=?
// Put should be : /change_status?idUser=1&idRequest=1&status=1&token=?
// Response if success: the request with the changed status
@PutMapping("/change_status")
public ResponseEntity<?> changeStatus(@RequestParam int idUser, @RequestParam String token,
@RequestParam int idMessage, @RequestParam int status) {
@RequestParam int idRequest, @RequestParam int status) {
if (!administrationService.checkToken(idUser, token)) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("User or token invalid.");
}
Optional<Request> requestOption = requestRepository.findById(idMessage);
Optional<Request> requestOption = requestRepository.findById(idRequest);
if (!requestOption.isPresent()) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("No message found with the following ID.");
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("No request found with the following ID.");
}
Request request = requestOption.get();
@ -116,5 +116,4 @@ public class RequestServiceApplication {
.body("Only Admins can perform this action.");
}
}