Skip to content

Commit bb7f886

Browse files
Deletes unused endpoints and refactors app accordingly
1 parent 726d17f commit bb7f886

34 files changed

+44
-1307
lines changed

backend/src/main/java/es/codeurjc/vscode4teaching/controllers/CommentController.java

Lines changed: 0 additions & 81 deletions
This file was deleted.

backend/src/main/java/es/codeurjc/vscode4teaching/controllers/CourseController.java

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,6 @@ public CourseController(CourseService courseService, JWTTokenUtil jwtTokenUtil)
4040
this.jwtTokenUtil = jwtTokenUtil;
4141
}
4242

43-
@GetMapping("/courses")
44-
@JsonView(CourseViews.CreatorView.class)
45-
public ResponseEntity<List<Course>> getAllCourses() {
46-
logger.info("Request to GET '/api/courses'");
47-
List<Course> courses = courseService.getAllCourses();
48-
return !courses.isEmpty() ? ResponseEntity.ok(courses) : ResponseEntity.noContent().build();
49-
}
50-
5143
@GetMapping("/courses/{courseId}")
5244
@JsonView(CourseViews.CreatorView.class)
5345
public ResponseEntity<Course> getCourse(@PathVariable @Min(1) Long courseId) {
@@ -56,13 +48,6 @@ public ResponseEntity<Course> getCourse(@PathVariable @Min(1) Long courseId) {
5648
return course.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.noContent().build());
5749
}
5850

59-
@GetMapping("/courses/{courseId}/creator")
60-
@JsonView(UserViews.GeneralView.class)
61-
public ResponseEntity<User> getCreator(@PathVariable @Min(1) Long courseId) throws CourseNotFoundException {
62-
logger.info("Request to GET '/api/courses/{}/creator'", courseId);
63-
return ResponseEntity.ok(courseService.getCreator(courseId));
64-
}
65-
6651
@PostMapping("/courses")
6752
@JsonView(CourseViews.CreatorView.class)
6853
public ResponseEntity<Course> addCourse(HttpServletRequest request, @Valid @RequestBody CourseDTO courseDTO)
@@ -129,21 +114,12 @@ public ResponseEntity<Course> removeUsersFromCourse(@PathVariable @Min(1) Long c
129114

130115
@GetMapping("/courses/{courseId}/code")
131116
public ResponseEntity<String> getCode(@PathVariable Long courseId, HttpServletRequest request)
132-
throws UserNotFoundException, CourseNotFoundException, NotInCourseException {
117+
throws CourseNotFoundException, NotInCourseException {
133118
logger.info("Request to GET '/api/courses/{}/code'", courseId);
134119
return ResponseEntity.ok(courseService.getCourseCode(courseId, jwtTokenUtil.getUsernameFromAuthenticatedRequest(request)));
135120
}
136121

137-
@Deprecated // VERSION 2.1 AND LATER ARE NOT USING THIS METHOD, READ DOCS FOR FURTHER INFORMATION
138122
@GetMapping("/courses/code/{courseCode}")
139-
@JsonView(CourseViews.ExercisesView.class)
140-
public ResponseEntity<Course> getExercisesWithCode(HttpServletRequest request, @PathVariable String courseCode)
141-
throws CourseNotFoundException, UserNotFoundException {
142-
logger.info("Request to GET '/api/courses/code/{}' (deprecated API endpoint)", courseCode);
143-
return ResponseEntity.ok(courseService.joinCourseWithSharingCode(courseCode, jwtTokenUtil.getUsernameFromAuthenticatedRequest(request)));
144-
}
145-
146-
@GetMapping("/v2/courses/code/{courseCode}")
147123
@JsonView(CourseViews.CreatorView.class)
148124
public ResponseEntity<Course> getCourseInformationBySharingCode(@PathVariable String courseCode)
149125
throws CourseNotFoundException {

backend/src/main/java/es/codeurjc/vscode4teaching/controllers/ExerciseController.java

Lines changed: 7 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,9 @@
1919
import org.springframework.web.bind.annotation.*;
2020

2121
import jakarta.servlet.http.HttpServletRequest;
22-
import jakarta.transaction.Transactional;
2322
import jakarta.validation.Valid;
2423
import jakarta.validation.constraints.Min;
25-
import java.util.ArrayList;
24+
2625
import java.util.List;
2726

2827
@RestController
@@ -53,33 +52,17 @@ public ResponseEntity<List<Exercise>> getExercises(HttpServletRequest request, @
5352
return exercises.isEmpty() ? ResponseEntity.noContent().build() : ResponseEntity.ok(exercises);
5453
}
5554

56-
@Deprecated
5755
@PostMapping("/courses/{courseId}/exercises")
5856
@JsonView(ExerciseViews.CourseView.class)
5957
public ResponseEntity<Exercise> addExercise(HttpServletRequest request, @PathVariable @Min(1) Long courseId,
6058
@Valid @RequestBody ExerciseDTO exerciseDTO) throws CourseNotFoundException, NotInCourseException {
61-
logger.info("Request to POST '/api/courses/{}/exercises' with body '{}' (deprecated API endpoint)", courseId, exerciseDTO);
59+
logger.info("Request to POST '/api/courses/{}/exercises' with body '{}'", courseId, exerciseDTO);
6260
Exercise exercise = new Exercise(exerciseDTO.name);
63-
Exercise savedExercise = courseService.addExerciseToCourse(courseId, exercise,
64-
jwtTokenUtil.getUsernameFromAuthenticatedRequest(request));
65-
return new ResponseEntity<>(savedExercise, HttpStatus.CREATED);
66-
}
67-
68-
@PostMapping("/v2/courses/{courseId}/exercises")
69-
@JsonView(ExerciseViews.CourseView.class)
70-
@Transactional
71-
public ResponseEntity<List<Exercise>> addExercises(HttpServletRequest request, @PathVariable @Min(1) Long courseId,
72-
@Valid @RequestBody ExerciseDTO[] exercisesDTO) throws CourseNotFoundException, NotInCourseException {
73-
logger.info("Request to POST '/api/v2/courses/{}/exercises' with body '{}'", courseId, exercisesDTO);
74-
ArrayList<Exercise> savedExercises = new ArrayList<>();
75-
for (ExerciseDTO exerciseDTO : exercisesDTO) {
76-
Exercise exercise = new Exercise(exerciseDTO.name);
77-
exercise.setIncludesTeacherSolution(exerciseDTO.includesTeacherSolution);
78-
exercise.setSolutionIsPublic(exerciseDTO.solutionIsPublic);
79-
exercise.setAllowEditionAfterSolutionDownloaded(exerciseDTO.allowEditionAfterSolutionDownloaded);
80-
savedExercises.add(courseService.addExerciseToCourse(courseId, exercise, jwtTokenUtil.getUsernameFromAuthenticatedRequest(request)));
81-
}
82-
return new ResponseEntity<>(savedExercises, HttpStatus.CREATED);
61+
exercise.setIncludesTeacherSolution(exerciseDTO.includesTeacherSolution);
62+
exercise.setSolutionIsPublic(exerciseDTO.solutionIsPublic);
63+
exercise.setAllowEditionAfterSolutionDownloaded(exerciseDTO.allowEditionAfterSolutionDownloaded);
64+
exercise = courseService.addExerciseToCourse(courseId, exercise, jwtTokenUtil.getUsernameFromAuthenticatedRequest(request));
65+
return new ResponseEntity<>(exercise, HttpStatus.CREATED);
8366
}
8467

8568
@GetMapping("/exercises/{exerciseId}")
@@ -110,13 +93,6 @@ public ResponseEntity<Void> deleteExercise(HttpServletRequest request, @PathVari
11093
return ResponseEntity.noContent().build();
11194
}
11295

113-
@GetMapping("/exercises/{exerciseId}/code")
114-
public ResponseEntity<String> getCode(@PathVariable Long exerciseId, HttpServletRequest request)
115-
throws UserNotFoundException, ExerciseNotFoundException, NotInCourseException {
116-
logger.info("Request to GET '/api/exercises/{}/code'", exerciseId);
117-
return ResponseEntity.ok(courseService.getExerciseCode(exerciseId, jwtTokenUtil.getUsernameFromAuthenticatedRequest(request)));
118-
}
119-
12096
@GetMapping("/exercises/{exerciseId}/info")
12197
@JsonView(ExerciseUserInfoViews.GeneralView.class)
12298
public ResponseEntity<ExerciseUserInfo> getExerciseUserInfo(@PathVariable Long exerciseId, HttpServletRequest request) throws NotFoundException {

backend/src/main/java/es/codeurjc/vscode4teaching/controllers/ExerciseSingleFileController.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,10 @@
2424
@Validated
2525
@RequestMapping("/api")
2626
public class ExerciseSingleFileController {
27-
private static final String templateFolderName = "template";
28-
private static final String solutionFolderName = "solution";
29-
3027
private final ExerciseSingleFileService exerciseSingleFileService;
3128
private final JWTTokenUtil jwtTokenUtil;
3229

33-
private final Logger logger = LoggerFactory.getLogger(ExerciseZipFileController.class);
30+
private final Logger logger = LoggerFactory.getLogger(ExerciseSingleFileController.class);
3431

3532
public ExerciseSingleFileController(ExerciseSingleFileService exerciseSingleFileService,
3633
JWTTokenUtil jwtTokenUtil) {

backend/src/main/java/es/codeurjc/vscode4teaching/controllers/ExerciseZipFileController.java

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package es.codeurjc.vscode4teaching.controllers;
22

3-
import com.fasterxml.jackson.annotation.JsonView;
43
import es.codeurjc.vscode4teaching.controllers.dtos.UploadFileResponse;
54
import es.codeurjc.vscode4teaching.model.Exercise;
6-
import es.codeurjc.vscode4teaching.model.ExerciseFile;
7-
import es.codeurjc.vscode4teaching.model.views.FileViews;
85
import es.codeurjc.vscode4teaching.security.jwt.JWTTokenUtil;
96
import es.codeurjc.vscode4teaching.services.ExerciseZipFileService;
107
import es.codeurjc.vscode4teaching.services.exceptions.*;
@@ -133,15 +130,6 @@ public void getAllStudentsFiles(@PathVariable Long id, HttpServletRequest reques
133130
exportToZipAllStudents(response, files, exerciseDirectory);
134131
}
135132

136-
@JsonView(FileViews.GeneralView.class)
137-
@GetMapping("/users/{username}/exercises/{exerciseId}/files")
138-
public ResponseEntity<List<ExerciseFile>> getFileInfoByOwnerAndExercise(@PathVariable String username,
139-
@PathVariable Long exerciseId) throws NotFoundException {
140-
logger.info("Request to GET '/api/users/{}/exercises/{}/files'", username, exerciseId);
141-
List<ExerciseFile> files = exerciseZipFileService.getFileIdsByExerciseAndId(exerciseId, username);
142-
return files.isEmpty() ? ResponseEntity.noContent().build() : ResponseEntity.ok(files);
143-
}
144-
145133
private String[] headerFilename(String filename) {
146134
String[] headerElements = new String[2];
147135
headerElements[0] = "Content-Disposition";
@@ -172,16 +160,14 @@ private void exportToZipAllStudents(HttpServletResponse response, List<File> fil
172160

173161

174162
// POST endpoint
175-
176-
@PostMapping(value = {"/exercises/{id}/files", "/exercises/{id}/files/{type:template|solution}"})
163+
@PostMapping("/exercises/{id}/files/{type:template|solution}")
177164
public ResponseEntity<List<UploadFileResponse>> uploadFiles(@PathVariable Long id, @PathVariable(required = false) String type,
178165
@RequestParam("file") MultipartFile zip, HttpServletRequest request)
179-
throws NotFoundException, NotInCourseException, IOException, ExerciseFinishedException {
166+
throws NotFoundException, NotInCourseException, IOException {
180167
logger.info("Request to POST '/api/exercises/{}/files/{}' with a MultipartFile (ZIP) as body", id, type);
181168

182169
// Stage 1: All the information necessary to execute the process is obtained and files are saved using
183170
// filesService specific methods. This process distinguishes between the different possible cases:
184-
// - Uploading of individual files for each student's exercise
185171
// - Uploading of an exercise template.
186172
// - Uploading of the proposed solution to an exercise (if existing).
187173
String username = jwtTokenUtil.getUsernameFromAuthenticatedRequest(request);
@@ -196,8 +182,7 @@ public ResponseEntity<List<UploadFileResponse>> uploadFiles(@PathVariable Long i
196182
filesMap = exerciseZipFileService.saveExerciseSolution(id, zip, username);
197183
pattern = fileSeparatorPattern + ExerciseZipFileController.solutionFolderName + fileSeparatorPattern;
198184
} else {
199-
filesMap = exerciseZipFileService.saveExerciseFiles(id, zip, username);
200-
pattern = fileSeparatorPattern + "student_[0-9]*" + fileSeparatorPattern;
185+
return ResponseEntity.badRequest().build();
201186
}
202187

203188
// Stage 2: saved files in previous stage are now collected and response is prepared and sent.

backend/src/main/java/es/codeurjc/vscode4teaching/controllers/JWTLoginController.java

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -51,40 +51,23 @@ public JWTLoginController(AuthenticationManager authenticationManager, JWTTokenU
5151
public ResponseEntity<JWTResponse> generateLoginToken(@Valid @RequestBody JWTRequest loginRequest, HttpServletResponse response) {
5252
logger.info("Request to POST '/api/login'");
5353
String username = loginRequest.getUsername();
54-
login(username, loginRequest.getPassword());
54+
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, loginRequest.getPassword()));
5555
final UserDetails userDetails = userDetailsService.loadUserByUsername(username);
5656
final String token = jwtTokenUtil.generateToken(userDetails);
5757

5858
return ResponseEntity.ok(new JWTResponse(token, jwtTokenUtil.encryptToken(token)));
5959
}
6060

61-
private void login(String username, String password) {
62-
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
63-
}
64-
6561
@PostMapping("/register")
6662
@JsonView(UserViews.EmailView.class)
6763
public ResponseEntity<User> saveUser(@Valid @RequestBody UserDTO userDto) {
6864
logger.info("Request to POST '/api/register' with body '{}'", userDto);
6965
String encodedPassword = bCryptPasswordEncoder.encode(userDto.getPassword());
70-
User user = new User(userDto.getEmail(), userDto.getUsername(), encodedPassword, userDto.getName(),
71-
userDto.getLastName());
66+
User user = new User(userDto.getEmail(), userDto.getUsername(), encodedPassword, userDto.getName(), userDto.getLastName());
7267
User saveduser = userDetailsService.save(user, false);
7368
return new ResponseEntity<>(saveduser, HttpStatus.CREATED);
7469
}
7570

76-
@Deprecated // VERSION 2.1 AND LATER ARE NOT USING THIS METHOD, READ DOCS FOR FURTHER INFORMATION
77-
@PostMapping("/teachers/register")
78-
@JsonView(UserViews.EmailView.class)
79-
public ResponseEntity<User> saveTeacher(@Valid @RequestBody UserDTO userDto) {
80-
logger.info("Request to POST '/api/teachers/register' with body '{}' (deprecated API endpoint)", userDto);
81-
String encodedPassword = bCryptPasswordEncoder.encode(userDto.getPassword());
82-
User user = new User(userDto.getEmail(), userDto.getUsername(), encodedPassword, userDto.getName(),
83-
userDto.getLastName());
84-
User savedUser = userDetailsService.save(user, true);
85-
return new ResponseEntity<>(savedUser, HttpStatus.CREATED);
86-
}
87-
8871
@PostMapping("/teachers/invitation")
8972
public ResponseEntity<UserDTO> saveTeacherInvitation(@RequestBody UserDTO userDto) {
9073
logger.info("Request to POST '/api/teachers/invitation' with body '{}'", userDto);
@@ -105,11 +88,6 @@ public ResponseEntity<User> getCurrentUser(HttpServletRequest request) throws No
10588
return ResponseEntity.ok(user);
10689
}
10790

108-
@GetMapping("/csrf")
109-
public ResponseEntity<Void> getCsrfToken() {
110-
return ResponseEntity.ok().build();
111-
}
112-
11391
@GetMapping("/users")
11492
@JsonView(UserViews.GeneralView.class)
11593
public ResponseEntity<List<User>> getAllUsers() {

backend/src/main/java/es/codeurjc/vscode4teaching/controllers/dtos/CommentDTO.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)