Skip to content
Snippets Groups Projects
Commit f11e6885 authored by Tini Tran's avatar Tini Tran
Browse files

Merge branch 'rest-endpoints' into 'main'

added endpoints to backend

See merge request !1
parents 5b1bb307 02ac9eb3
No related branches found
No related tags found
1 merge request!1added endpoints to backend
Showing
with 452 additions and 2 deletions
package ntnu.idatt2105.group44.trivioServer.advice;
import ntnu.idatt2105.group44.trivioServer.exception.TrivioNotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class TrivioNotFoundAdvice {
@ExceptionHandler
@ResponseStatus(HttpStatus.NOT_FOUND)
String TrivioNotFoundHandler(TrivioNotFoundException ex) {
return ex.getMessage();
}
}
package ntnu.idatt2105.group44.trivioServer.controller;
import java.util.List;
import ntnu.idatt2105.group44.trivioServer.dto.TrivioWithQAndA;
import ntnu.idatt2105.group44.trivioServer.model.Trivio;
import ntnu.idatt2105.group44.trivioServer.model.User;
import ntnu.idatt2105.group44.trivioServer.service.TrivioService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@CrossOrigin
@RequestMapping("/trivios")
public class TrivioController {
private TrivioService trivioService;
@Autowired
public TrivioController(TrivioService trivioService){
this.trivioService=trivioService;
}
@GetMapping
public List<Trivio> getAllTrivio(){
return trivioService.getAllTrivios();
}
@GetMapping(path = "{trivioId}")
public Trivio getTrivio(@PathVariable Long trivioId){
return trivioService.getTrivioById(trivioId);
}
@PostMapping
public ResponseEntity<String> addUser(@RequestBody Trivio trivio){
trivioService.addTrivio(trivio);
return new ResponseEntity<>("created!", HttpStatus.CREATED);
}
@PostMapping("/create")
public ResponseEntity<String> addTrivioWithQuestionsAndAnswers(@RequestBody TrivioWithQAndA trivioWithQuestionsAndAnswers) {
trivioService.createTrivio(trivioWithQuestionsAndAnswers);
return new ResponseEntity<>("Trivio with questions and answers added successfully", HttpStatus.CREATED);
}
}
package ntnu.idatt2105.group44.trivioServer.controller;
import java.util.List;
import ntnu.idatt2105.group44.trivioServer.model.Question;
import ntnu.idatt2105.group44.trivioServer.model.Trivio;
import ntnu.idatt2105.group44.trivioServer.service.QuestionService;
import ntnu.idatt2105.group44.trivioServer.service.TrivioService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/trivios")
public class TrivioQuestionController {
private TrivioService trivioService;
private QuestionService questionService;
@Autowired
public TrivioQuestionController(TrivioService trivioService, QuestionService questionService) {
this.trivioService = trivioService;
this.questionService = questionService;
}
@GetMapping("{trivioId}/questions")
public ResponseEntity<List<Question>> getQuestionForTrivia(@PathVariable Long trivioId){
Trivio trivio = trivioService.getTrivioById(trivioId);
System.out.println(trivio.getQuestionList());
System.out.println(trivio.getQuestionList().size());
return ResponseEntity.ok(trivio.getQuestionList());
}
/*
Denne løsningen fungerer ikke helt. Implementasjonen her er å legge til et spørsmål til
spesifikke trivioen, men tror det er bedre at vi bare poster hele trivioen, istedenfor
å poste flere spørsmål samtidig.
*/
@PostMapping("{trivioId}/questions")
public ResponseEntity<Question> addQuestionToTrivio(@PathVariable Long trivioId, @RequestBody Question question){
trivioService.addQuestionToTrivio(question,trivioId);
return ResponseEntity.ok(question);
}
}
package ntnu.idatt2105.group44.trivioServer.dto;
import java.util.List;
import ntnu.idatt2105.group44.trivioServer.model.Answer;
import ntnu.idatt2105.group44.trivioServer.model.Question;
//selve DTO-klasse for å abstraktere spørsmål- og svar-entitetene
public class QuestionWithAnswers {
private Question question;
private List<Answer> answers;
public Question getQuestion() {
return question;
}
public void setQuestion(Question question) {
this.question = question;
}
public List<Answer> getAnswers() {
return answers;
}
public void setAnswers(List<Answer> answers) {
this.answers = answers;
}
}
package ntnu.idatt2105.group44.trivioServer.dto;
import java.util.List;
import ntnu.idatt2105.group44.trivioServer.model.Trivio;
public class TrivioWithQAndA {
private Trivio trivio;
private List<QuestionWithAnswers> questionsWithAnswers;
private Long userId;
public Trivio getTrivio() {
return trivio;
}
public void setTrivio(Trivio trivio) {
this.trivio = trivio;
}
public Long getUserId() {
return userId;
}
public List<QuestionWithAnswers> getQuestionsWithAnswers() {
return questionsWithAnswers;
}
public void setQuestionsWithAnswers(List<QuestionWithAnswers> questionsWithAnswers) {
this.questionsWithAnswers = questionsWithAnswers;
}
}
package ntnu.idatt2105.group44.trivioServer.dto;
public class UserDTO {
private Long id;
private String username;
private String email;
public Long getId() {
return id;
}
public String getUsername() {
return username;
}
public String getEmail() {
return email;
}
}
package ntnu.idatt2105.group44.trivioServer.exception;
public class TrivioNotFoundException extends RuntimeException {
public TrivioNotFoundException(Long id){
super("Trivio id: "+id+" does not exist!");
}
}
package ntnu.idatt2105.group44.trivioServer.model; package ntnu.idatt2105.group44.trivioServer.model;
import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import ntnu.idatt2105.group44.trivioServer.repository.QuestionRepository;
@Entity @Entity
public class Answer { public class Answer {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
public Long getId() {
return id;
}
public String getAnswer() {
return answer;
}
@JsonBackReference
@ManyToOne
@JoinColumn(name = "question_id")
public Question question;
public boolean isCorrect() {
return correct;
}
public String answer; public String answer;
boolean correct; boolean correct;
public void setQuestion(Question question){
this.question = question;
}
} }
package ntnu.idatt2105.group44.trivioServer.model; package ntnu.idatt2105.group44.trivioServer.model;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.CascadeType;
import jakarta.persistence.ElementCollection; import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn; import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
...@@ -11,13 +17,15 @@ import java.util.List; ...@@ -11,13 +17,15 @@ import java.util.List;
@Entity @Entity
public class Question { public class Question {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
public String question; public String question;
@JsonManagedReference
@OneToMany @OneToMany(mappedBy = "question", cascade = CascadeType.ALL)
public List<Answer> answers; public List<Answer> answers;
@JsonBackReference
@ManyToOne @ManyToOne
@JoinColumn(name = "trivio_id") @JoinColumn(name = "trivio_id")
public Trivio trivio; public Trivio trivio;
...@@ -29,4 +37,8 @@ public class Question { ...@@ -29,4 +37,8 @@ public class Question {
public List<Answer> getAnswers() { public List<Answer> getAnswers() {
return answers; return answers;
} }
public void setTrivio(Trivio trivio) {
this.trivio = trivio;
}
} }
package ntnu.idatt2105.group44.trivioServer.model; package ntnu.idatt2105.group44.trivioServer.model;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany; import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import java.util.List; import java.util.List;
@Entity @Entity
@Table(name="trivio")
public class Trivio { public class Trivio {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
public String title; public String title;
public String description; public String description;
@ManyToOne
@JoinColumn(name = "user_id")
public User user;
@JsonManagedReference
@OneToMany(mappedBy = "trivio") @OneToMany(mappedBy = "trivio")
public List<Question> questionList; public List<Question> questionList;
...@@ -23,4 +36,20 @@ public class Trivio { ...@@ -23,4 +36,20 @@ public class Trivio {
public String getDescription() { public String getDescription() {
return description; return description;
} }
public List<Question> getQuestionList(){
return questionList;
}
public User getUser() {
return user;
}
public Long getId() {
return id;
}
public void setUser(User user) {
this.user = user;
}
} }
...@@ -4,7 +4,10 @@ import jakarta.persistence.Entity; ...@@ -4,7 +4,10 @@ import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType; import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import java.util.List;
@Entity @Entity
@Table(name="users") @Table(name="users")
...@@ -18,6 +21,8 @@ public class User { ...@@ -18,6 +21,8 @@ public class User {
private String email; private String email;
@OneToMany(mappedBy = "user")
private List<Trivio> trivio;
public User(){ public User(){
} }
...@@ -41,4 +46,16 @@ public class User { ...@@ -41,4 +46,16 @@ public class User {
public String getEmail() { public String getEmail() {
return email; return email;
} }
public void setId(Long id) {
this.id = id;
}
public void setUsername(String username) {
this.username = username;
}
public void setEmail(String email) {
this.email = email;
}
} }
package ntnu.idatt2105.group44.trivioServer.repository;
import ntnu.idatt2105.group44.trivioServer.model.Answer;
import org.springframework.data.jpa.repository.JpaRepository;
public interface AnswerRepository extends JpaRepository<Answer, Long> {
}
package ntnu.idatt2105.group44.trivioServer.repository;
import ntnu.idatt2105.group44.trivioServer.model.Question;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface QuestionRepository extends JpaRepository<Question, Long> {
}
package ntnu.idatt2105.group44.trivioServer.repository;
import java.util.Optional;
import ntnu.idatt2105.group44.trivioServer.model.Trivio;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface TrivioRepository extends JpaRepository<Trivio, Long> {
Optional<Trivio> findTrivioByTitle(String title);
}
package ntnu.idatt2105.group44.trivioServer.service;
import java.util.List;
import ntnu.idatt2105.group44.trivioServer.exception.TrivioNotFoundException;
import ntnu.idatt2105.group44.trivioServer.model.Answer;
import ntnu.idatt2105.group44.trivioServer.model.Question;
import ntnu.idatt2105.group44.trivioServer.repository.AnswerRepository;
import ntnu.idatt2105.group44.trivioServer.repository.QuestionRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class QuestionService {
private QuestionRepository questionRepository;
private AnswerRepository answerRepository;
public QuestionService(QuestionRepository questionRepository, AnswerRepository answerRepository) {
this.questionRepository = questionRepository;
this.answerRepository = answerRepository;
}
public void addQuestion(Question question) {
questionRepository.save(question);
}
// public void addAnswerToQuestion(Long questionId, Answer answer){
// Question question = questionRepository.findById(questionId).orElseThrow(() -> new TrivioNotFoundException(questionId));
// answer.setQuestion(question);
// answerRepository.save(answer);
//
// question.getAnswers().add(answer);
// questionRepository.save(question);
// }
@Transactional
public void addQuestionWithAnswers(Question question, List<Answer> answers) {
Question savedQuestion = questionRepository.save(question);
for (Answer answer : answers) {
answer.setQuestion(savedQuestion);
answerRepository.save(answer);
}
}
}
package ntnu.idatt2105.group44.trivioServer.service;
import java.util.List;
import ntnu.idatt2105.group44.trivioServer.dto.QuestionWithAnswers;
import ntnu.idatt2105.group44.trivioServer.dto.TrivioWithQAndA;
import ntnu.idatt2105.group44.trivioServer.dto.UserDTO;
import ntnu.idatt2105.group44.trivioServer.exception.TrivioNotFoundException;
import ntnu.idatt2105.group44.trivioServer.model.Answer;
import ntnu.idatt2105.group44.trivioServer.model.Question;
import ntnu.idatt2105.group44.trivioServer.model.Trivio;
import ntnu.idatt2105.group44.trivioServer.model.User;
import ntnu.idatt2105.group44.trivioServer.repository.QuestionRepository;
import ntnu.idatt2105.group44.trivioServer.repository.TrivioRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TrivioService {
private TrivioRepository trivioRepository;
private QuestionRepository questionRepository;
private QuestionService questionService;
private UserService userService;
@Autowired
public TrivioService(TrivioRepository trivioRepository, QuestionRepository questionRepository, QuestionService questionService,
UserService userService){
this.trivioRepository = trivioRepository;
this.questionRepository = questionRepository;
this.questionService = questionService;
this.userService = userService;
}
public List<Trivio> getAllTrivios(){
return trivioRepository.findAll();
}
public Trivio getTrivioByTitle(String title){
if(trivioRepository.findTrivioByTitle(title).isPresent()){
return trivioRepository.findTrivioByTitle(title).get();
}
return null;
}
public Trivio getTrivioById(Long id){
// if(trivioRepository.findById(id).isPresent()){
// return trivioRepository.findById(id).get();
// }
// return null;
return trivioRepository.findById(id).orElseThrow(() -> new TrivioNotFoundException(id));
}
public void addTrivio(Trivio trivio){
trivioRepository.save(trivio);
}
public void addQuestionToTrivio(Question question, Long id){
Trivio trivio = trivioRepository.findById(id).orElseThrow(() -> new TrivioNotFoundException(id));
trivio.questionList.add(question);
trivioRepository.save(trivio);
questionRepository.save(question);
}
public void createTrivio(TrivioWithQAndA trivioWithQAndA){
Trivio trivio = trivioWithQAndA.getTrivio();
Long userId = trivioWithQAndA.getUserId();
User user = userService.getUserById(userId);
trivio.setUser(user);
List<QuestionWithAnswers> questionWithAnswers = trivioWithQAndA.getQuestionsWithAnswers();
Trivio flushTrivio = trivioRepository.save(trivio);
for (QuestionWithAnswers questionWithanswers : questionWithAnswers){
Question question = questionWithanswers.getQuestion();
List<Answer> answers = questionWithanswers.getAnswers();
question.setTrivio(flushTrivio);
questionService.addQuestionWithAnswers(question, answers);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment