responses and general modifications
This commit is contained in:
		@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import jakarta.websocket.server.PathParam;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.CourseRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.Msg.AnswerRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.Msg.ForumRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.Msg.TopicRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 | 
			
		||||
@ -27,6 +28,7 @@ import ovh.herisson.Clyde.Tables.Course;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Role;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Token;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Answer;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Forum;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Topic;
 | 
			
		||||
 | 
			
		||||
@ -36,7 +38,6 @@ import ovh.herisson.Clyde.Tables.Msg.Topic;
 | 
			
		||||
public class ForumController {
 | 
			
		||||
 | 
			
		||||
	private CourseRepository courseRepo;
 | 
			
		||||
	private CourseService courseServ;
 | 
			
		||||
	private AuthenticatorService authServ;
 | 
			
		||||
	private ForumService forumServ;
 | 
			
		||||
	private ForumRepository forumRepo;
 | 
			
		||||
@ -69,7 +70,7 @@ public class ForumController {
 | 
			
		||||
	@GetMapping("/forum/{id}")
 | 
			
		||||
	public ResponseEntity<List<Topic>> getTopicsFromForumId(@RequestHeader("Authorization") String token, @PathVariable long id){
 | 
			
		||||
		User u = authServ.getUserFromToken(token);
 | 
			
		||||
		if(u != null){
 | 
			
		||||
		if(u == null){
 | 
			
		||||
			return new UnauthorizedResponse<>(null);
 | 
			
		||||
		}
 | 
			
		||||
		return new ResponseEntity<>(forumRepo.findById(id).orElse(null).getTopics(), HttpStatus.OK);
 | 
			
		||||
@ -79,7 +80,7 @@ public class ForumController {
 | 
			
		||||
	public ResponseEntity<Topic> postTopicToForum(@RequestHeader("Authorization") String token, @PathVariable long id, @RequestBody Topic data){
 | 
			
		||||
		User u = authServ.getUserFromToken(token);
 | 
			
		||||
		Forum f = forumRepo.findById(id).orElse(null);
 | 
			
		||||
		if(!f.getWriters().contains(u)){
 | 
			
		||||
		if(!(f.getWriters().contains(u) || u.getRole() == Role.Admin)){
 | 
			
		||||
			return new UnauthorizedResponse<>(null);
 | 
			
		||||
		}
 | 
			
		||||
		forumServ.createTopic(f, data);
 | 
			
		||||
@ -91,13 +92,25 @@ public class ForumController {
 | 
			
		||||
	@GetMapping("/forum/post/{id}")
 | 
			
		||||
	public ResponseEntity<Topic> getPost(@RequestHeader("Authorization") String token, @PathVariable long id){
 | 
			
		||||
		User u = authServ.getUserFromToken(token);
 | 
			
		||||
		if(u != null){
 | 
			
		||||
		if(u == null){
 | 
			
		||||
			return new UnauthorizedResponse<>(null);
 | 
			
		||||
		}
 | 
			
		||||
		Topic t = topicRepo.findById(id).orElse(null);
 | 
			
		||||
		return new ResponseEntity<>(t, HttpStatus.OK);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@PostMapping("/forum/post/{id}")
 | 
			
		||||
	public ResponseEntity<Topic> postTopicToForum(@RequestHeader("Authorization") String token, @PathVariable long id, @RequestBody Answer data){
 | 
			
		||||
		User u = authServ.getUserFromToken(token);
 | 
			
		||||
		Topic t = topicRepo.findById(id).orElse(null);
 | 
			
		||||
		if(t.isLocked() && u.getRole() != Role.Admin){
 | 
			
		||||
			return new UnauthorizedResponse<>(null);
 | 
			
		||||
		}
 | 
			
		||||
		System.out.println(data);
 | 
			
		||||
		forumServ.answerTopic(t, data, u);
 | 
			
		||||
		return new ResponseEntity<>(HttpStatus.ACCEPTED);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: <tonitch> Create a new post/topic and response to a topic
 | 
			
		||||
 | 
			
		||||
	// TODO: <tonitch> Check if authorization to view a post/forum/...
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,10 @@
 | 
			
		||||
package ovh.herisson.Clyde.Repositories.Msg;
 | 
			
		||||
 | 
			
		||||
import org.springframework.data.repository.CrudRepository;
 | 
			
		||||
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Answer;
 | 
			
		||||
 | 
			
		||||
public interface AnswerRepository extends CrudRepository<Answer, Long> {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,10 @@ import org.springframework.stereotype.Service;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.CourseRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.Msg.ForumRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.Msg.TopicRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Course;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Answer;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Forum;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Topic;
 | 
			
		||||
 | 
			
		||||
@ -15,6 +18,7 @@ public class ForumService {
 | 
			
		||||
 | 
			
		||||
	private CourseRepository courseRepo;
 | 
			
		||||
	private ForumRepository forumRepo;
 | 
			
		||||
	private TopicRepository topicRepo;
 | 
			
		||||
 | 
			
		||||
	public void createForum(Course c, Forum f){
 | 
			
		||||
		c.addForum(f);
 | 
			
		||||
@ -25,4 +29,10 @@ public class ForumService {
 | 
			
		||||
		f.addTopic(data);
 | 
			
		||||
		forumRepo.save(f);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void answerTopic(Topic t, Answer data, User	u) {
 | 
			
		||||
		data.setAuthor(u);
 | 
			
		||||
		t.addAnswer(data);
 | 
			
		||||
		topicRepo.save(t);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
@Entity
 | 
			
		||||
@Data
 | 
			
		||||
public class Answers {
 | 
			
		||||
public class Answer {
 | 
			
		||||
	@Id
 | 
			
		||||
	@GeneratedValue(strategy = GenerationType.AUTO)
 | 
			
		||||
	private int id;
 | 
			
		||||
@ -19,12 +19,9 @@ public class Answers {
 | 
			
		||||
	@CreationTimestamp
 | 
			
		||||
	private Date creation;
 | 
			
		||||
 | 
			
		||||
	@ManyToOne
 | 
			
		||||
	private Topic topic;
 | 
			
		||||
 | 
			
		||||
	private String content;
 | 
			
		||||
 | 
			
		||||
	@OneToOne
 | 
			
		||||
	@ManyToOne(cascade=CascadeType.ALL)
 | 
			
		||||
	private User author;
 | 
			
		||||
 | 
			
		||||
	private boolean anonymous;
 | 
			
		||||
@ -20,7 +20,7 @@ public class Forum {
 | 
			
		||||
 | 
			
		||||
	private String name;
 | 
			
		||||
 | 
			
		||||
	@OneToMany
 | 
			
		||||
	@OneToMany(cascade = CascadeType.ALL)
 | 
			
		||||
	private List<Topic> topics;
 | 
			
		||||
 | 
			
		||||
    public void addTopic(Topic t) {
 | 
			
		||||
 | 
			
		||||
@ -16,11 +16,16 @@ public class Topic {
 | 
			
		||||
 | 
			
		||||
	private String subject, content;
 | 
			
		||||
 | 
			
		||||
	@OneToOne
 | 
			
		||||
	@ManyToOne
 | 
			
		||||
	private User author;
 | 
			
		||||
	
 | 
			
		||||
	@OneToMany(mappedBy = "topic", cascade = CascadeType.ALL)
 | 
			
		||||
	private List<Answers> answers;
 | 
			
		||||
	@OneToMany(cascade = CascadeType.ALL)
 | 
			
		||||
	private List<Answer> answers;
 | 
			
		||||
 | 
			
		||||
	public void addAnswer(Answer a){
 | 
			
		||||
		answers.add(a);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private boolean locked; // true if new messages can be posted
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user