104 lines
3.9 KiB
Java
104 lines
3.9 KiB
Java
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.Repositories.Msg.TopicRepository;
|
|
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.Role;
|
|
import ovh.herisson.Clyde.Tables.Token;
|
|
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;
|
|
private TopicRepository topicRepo;
|
|
|
|
//// 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) || u.getRole() == Role.Admin)){
|
|
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);
|
|
}
|
|
|
|
//// Endpoints related to topics and messages
|
|
|
|
@GetMapping("/forum/post/{id}")
|
|
public ResponseEntity<Topic> getPost(@RequestHeader("Authorization") String token, @PathVariable long id){
|
|
User u = authServ.getUserFromToken(token);
|
|
if(u != null){
|
|
return new UnauthorizedResponse<>(null);
|
|
}
|
|
Topic t = topicRepo.findById(id).orElse(null);
|
|
return new ResponseEntity<>(t, HttpStatus.OK);
|
|
}
|
|
|
|
|
|
// TODO: <tonitch> Create a new post/topic and response to a topic
|
|
}
|