Forum and topic getter and creator endpoints
This commit is contained in:
		@ -0,0 +1,84 @@
 | 
			
		||||
package ovh.herisson.Clyde.EndPoints.Msg;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.http.HttpStatus;
 | 
			
		||||
import org.springframework.http.HttpStatusCode;
 | 
			
		||||
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.RequestHeader;
 | 
			
		||||
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.ForumRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 | 
			
		||||
import ovh.herisson.Clyde.Services.AuthenticatorService;
 | 
			
		||||
import ovh.herisson.Clyde.Services.CourseService;
 | 
			
		||||
import ovh.herisson.Clyde.Services.Msg.ForumService;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Course;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Forum;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Topic;
 | 
			
		||||
 | 
			
		||||
@RestController
 | 
			
		||||
@CrossOrigin(originPatterns = "*", allowCredentials = "true")
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
public class ForumController {
 | 
			
		||||
 | 
			
		||||
	private CourseRepository courseRepo;
 | 
			
		||||
	private CourseService courseServ;
 | 
			
		||||
	private AuthenticatorService authServ;
 | 
			
		||||
	private ForumService forumServ;
 | 
			
		||||
	private ForumRepository forumRepo;
 | 
			
		||||
 | 
			
		||||
	//// Endpoints to get and create new forums
 | 
			
		||||
 | 
			
		||||
	@GetMapping("/forums/{id}")
 | 
			
		||||
	public ResponseEntity<List<Forum>> getForumFromCourseId(@RequestHeader("Authorization") String token, @PathVariable long id){
 | 
			
		||||
		User u = authServ.getUserFromToken(token);
 | 
			
		||||
		if(u != null){
 | 
			
		||||
			return new UnauthorizedResponse<>(null);
 | 
			
		||||
		}
 | 
			
		||||
		return new ResponseEntity<>(courseRepo.findById(id).getForums(), HttpStatus.OK);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@PostMapping("/forums/{id}")
 | 
			
		||||
	public ResponseEntity<Forum> createForumOfCourse(@RequestHeader("Authorization") String token, @PathVariable long id, @RequestBody Forum data){
 | 
			
		||||
		User u = authServ.getUserFromToken(token);
 | 
			
		||||
		Course c = courseRepo.findById(id);
 | 
			
		||||
		if(!c.getOwner().equals(u)){
 | 
			
		||||
			return new UnauthorizedResponse<>(null);
 | 
			
		||||
		}
 | 
			
		||||
		forumServ.createForum(c, data);
 | 
			
		||||
		return new ResponseEntity<>(HttpStatus.ACCEPTED);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//// Endpoints to get and create forum's topic
 | 
			
		||||
 | 
			
		||||
	@GetMapping("/forum/{id}")
 | 
			
		||||
	public ResponseEntity<List<Topic>> getTopicsFromForumId(@RequestHeader("Authorization") String token, @PathVariable long id){
 | 
			
		||||
		User u = authServ.getUserFromToken(token);
 | 
			
		||||
		if(u != null){
 | 
			
		||||
			return new UnauthorizedResponse<>(null);
 | 
			
		||||
		}
 | 
			
		||||
		return new ResponseEntity<>(forumRepo.findById(id).orElse(null).getTopics(), HttpStatus.OK);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@PostMapping("/forum/{id}")
 | 
			
		||||
	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)){
 | 
			
		||||
			return new UnauthorizedResponse<>(null);
 | 
			
		||||
		}
 | 
			
		||||
		forumServ.createTopic(f, data);
 | 
			
		||||
		return new ResponseEntity<>(HttpStatus.ACCEPTED);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,9 @@
 | 
			
		||||
package ovh.herisson.Clyde.Repositories.Msg;
 | 
			
		||||
 | 
			
		||||
import org.springframework.data.repository.CrudRepository;
 | 
			
		||||
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Forum;
 | 
			
		||||
 | 
			
		||||
public interface ForumRepository extends CrudRepository<Forum, Long> {
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,29 @@
 | 
			
		||||
package ovh.herisson.Clyde.Services.Msg;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
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.Tables.Course;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Forum;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Topic;
 | 
			
		||||
 | 
			
		||||
@Service
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
public class ForumService {
 | 
			
		||||
 | 
			
		||||
	private CourseRepository courseRepo;
 | 
			
		||||
	private ForumRepository forumRepo;
 | 
			
		||||
 | 
			
		||||
	public void createForum(Course c, Forum f){
 | 
			
		||||
		c.addForum(f);
 | 
			
		||||
		courseRepo.save(c);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    public void createTopic(Forum f, Topic data) {
 | 
			
		||||
		f.addTopic(data);
 | 
			
		||||
		forumRepo.save(f);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
package ovh.herisson.Clyde.Tables;
 | 
			
		||||
 | 
			
		||||
import jakarta.persistence.*;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Msg.Forum;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
@ -9,6 +10,7 @@ import org.hibernate.annotations.OnDelete;
 | 
			
		||||
import org.hibernate.annotations.OnDeleteAction;
 | 
			
		||||
 | 
			
		||||
@Entity
 | 
			
		||||
@Data
 | 
			
		||||
public class Course {
 | 
			
		||||
    @Id
 | 
			
		||||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
			
		||||
@ -24,6 +26,10 @@ public class Course {
 | 
			
		||||
	//// Extension Messagerie /////
 | 
			
		||||
	@OneToMany
 | 
			
		||||
	private List<Forum> forums;
 | 
			
		||||
 | 
			
		||||
	public void addForum(Forum f){
 | 
			
		||||
		forums.add(f);
 | 
			
		||||
	}
 | 
			
		||||
	///////////////////////////////
 | 
			
		||||
 | 
			
		||||
    public Course(int credits, String title, User owner){
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,13 @@ public class Forum {
 | 
			
		||||
 | 
			
		||||
	private String name;
 | 
			
		||||
 | 
			
		||||
	@OneToMany
 | 
			
		||||
	private List<Topic> topics;
 | 
			
		||||
 | 
			
		||||
    public void addTopic(Topic t) {
 | 
			
		||||
		topics.add(t);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @OneToMany
 | 
			
		||||
	private List<User> writers; // User who are authorized to create a post
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user