1 | package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.controllers;
|
---|
2 |
|
---|
3 | import lombok.AllArgsConstructor;
|
---|
4 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.Application;
|
---|
5 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationDTO;
|
---|
6 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationDetailsDTO;
|
---|
7 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.applications.DTO.ApplicationStatusDTO;
|
---|
8 | import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.ApplicationService;
|
---|
9 | import org.springframework.http.HttpStatus;
|
---|
10 | import org.springframework.http.MediaType;
|
---|
11 | import org.springframework.http.ResponseEntity;
|
---|
12 | import org.springframework.web.bind.annotation.*;
|
---|
13 | import org.springframework.web.multipart.MultipartFile;
|
---|
14 | import org.springframework.core.io.Resource;
|
---|
15 | import org.springframework.http.HttpHeaders;
|
---|
16 |
|
---|
17 | import java.util.List;
|
---|
18 |
|
---|
19 | @RestController
|
---|
20 | @RequestMapping("/api")
|
---|
21 | @AllArgsConstructor
|
---|
22 | @CrossOrigin(origins = "*")
|
---|
23 | public 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 | }
|
---|