source: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/controllers/ApplicationController.java

main
Last change on this file was 4d97b63, checked in by 223021 <daniel.ilievski.2@…>, 11 months ago

Implemented Google login, additional file uploads, response messages and email notifications

  • Property mode set to 100644
File size: 5.4 KB
Line 
1package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.controllers;
2
3import lombok.AllArgsConstructor;
4import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.Application;
5import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationDTO;
6import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationDetailsDTO;
7import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationStatusDTO;
8import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.ApplicationService;
9import org.springframework.http.HttpStatus;
10import org.springframework.http.MediaType;
11import org.springframework.http.ResponseEntity;
12import org.springframework.web.bind.annotation.*;
13import org.springframework.web.multipart.MultipartFile;
14import org.springframework.core.io.Resource;
15import org.springframework.http.HttpHeaders;
16
17import java.util.List;
18
19@RestController
20@RequestMapping("/api")
21@AllArgsConstructor
22@CrossOrigin(origins = "*")
23public class ApplicationController {
24 private final ApplicationService applicationService;
25
26 @GetMapping("/my-applications/{id}")
27 public ResponseEntity<?> findAllApplicationsByJobSeekerId(@PathVariable Long id) {
28 List<ApplicationDetailsDTO> applicationList = applicationService.findAllByJobSeekerId(id);
29 return new ResponseEntity<>(applicationList, HttpStatus.OK);
30 }
31
32 @PostMapping("/my-applications/{id}/filtered")
33 public ResponseEntity<?> filterApplicationsByJobSeekerId(@PathVariable Long id, @RequestBody String status) {
34 List<ApplicationDetailsDTO> applicationList = applicationService.filterByJobSeekerId(id, status);
35 return new ResponseEntity<>(applicationList, HttpStatus.OK);
36 }
37
38 @GetMapping("/job-advertisements/{advertisement_id}/applications")
39 public ResponseEntity<?> findAllApplicationsByJobAdvertisementId(@PathVariable("advertisement_id") Long advertisementId) {
40 List<ApplicationDetailsDTO> applicationList = applicationService.findAllByJobAdvertisementId(advertisementId);
41 return new ResponseEntity<>(applicationList, HttpStatus.OK);
42 }
43
44 @PostMapping("/job-advertisements/{advertisement_id}/applications/filtered")
45 public ResponseEntity<?> filterApplicationsByJobAdvertisementId(@PathVariable("advertisement_id") Long advertisementId, @RequestBody String status) {
46 List<ApplicationDetailsDTO> applicationList = applicationService.filterByJobAdvertisementId(advertisementId, status);
47 return new ResponseEntity<>(applicationList, HttpStatus.OK);
48 }
49
50 @PostMapping("/applications/{id}/update/NOT-IN-USE")
51 public ResponseEntity<?> updateApplicationStatus(@PathVariable("id") Long applicaitonId, @RequestBody ApplicationStatusDTO appStatusDTO) {
52 ApplicationStatusDTO applicationStatusDTO = applicationService.updateApplicationStatus(applicaitonId,appStatusDTO.getStatus());
53 return new ResponseEntity<>(applicationStatusDTO, HttpStatus.OK);
54 }
55
56 @PostMapping("/applications/update")
57 public ResponseEntity<?> updateApplications(@RequestBody List<ApplicationStatusDTO> changes) {
58 List<ApplicationStatusDTO> updatedApplications = applicationService.updateApplications(changes);
59 return new ResponseEntity<>(updatedApplications, HttpStatus.OK);
60 }
61
62 @GetMapping("/applications/{id}/download-resume")
63 public ResponseEntity<Resource> downloadResume(@PathVariable("id") Long applicationId) {
64 Resource resource = applicationService.loadResumeAsResource(applicationId);
65 return ResponseEntity.ok()
66 .contentType(MediaType.APPLICATION_PDF)
67 .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
68 .body(resource);
69 }
70
71 @PostMapping("/applications/submit")
72 public ResponseEntity<ApplicationDetailsDTO> submitApplication(
73 @RequestParam("jobSeekerId") Long jobSeekerId,
74 @RequestParam("jobAdId") Long jobAdId,
75 @RequestParam("resumeFile") MultipartFile resumeFile,
76 @RequestParam("answerOne") String answerOne,
77 @RequestParam("answerTwo") String answerTwo,
78 @RequestParam("answerThree") String answerThree,
79 @RequestParam("messageToRecruiter") String messageToRecruiter) {
80
81 ApplicationDTO applicationDTO = new ApplicationDTO(jobSeekerId, jobAdId,
82 resumeFile, answerOne, answerTwo, answerThree, messageToRecruiter);
83 ApplicationDetailsDTO applicationDetailsDTO = applicationService.submitApplication(applicationDTO);
84 return new ResponseEntity<>(applicationDetailsDTO, HttpStatus.OK);
85 }
86
87 @PostMapping("/applications/{id}/update")
88 public ResponseEntity<ApplicationDetailsDTO> updateApplication(
89 @PathVariable("id") Long applicationId,
90 @RequestParam("additionalFiles") MultipartFile[] additionalFiles) {
91 ApplicationDetailsDTO applicationDetailsDTO = applicationService.updateApplication(applicationId, additionalFiles);
92 return new ResponseEntity<>(applicationDetailsDTO, HttpStatus.OK);
93 }
94
95 @GetMapping("/applications/{id}/download-additional-files")
96 public ResponseEntity<List<String>> getAdditionalFilesUrls(@PathVariable("id") Long applicationId) {
97 List<String> fileUrls = applicationService.loadAdditionalFilesAsUrls(applicationId);
98 return ResponseEntity.ok(fileUrls);
99 }
100
101}
Note: See TracBrowser for help on using the repository browser.