feat: continued implementing adminApiService
This commit is contained in:
		| @@ -27,6 +27,7 @@ dependencies { | ||||
|     implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.+' | ||||
|     implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.+' | ||||
|     implementation 'org.postgresql:postgresql' | ||||
|     implementation group: 'com.itextpdf', name: 'itextpdf', version: '5.5.13.3' | ||||
|  | ||||
|     testImplementation 'org.springframework.boot:spring-boot-starter-test' | ||||
|     testImplementation 'com.h2database:h2' | ||||
|   | ||||
| @@ -81,7 +81,7 @@ public class AdminApi { | ||||
|      */ | ||||
|     @PostMapping("/admin/appoitements/report/{appointmentId}") | ||||
|     public void createAppointmentReport( | ||||
|             @PathVariable String appointmentId, | ||||
|             @PathVariable long appointmentId, | ||||
|             @RequestBody Report report, | ||||
|             @AuthenticationPrincipal Jwt principal) { | ||||
|         adminApiService.createAppointmentReport( | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package enseirb.myinpulse.controller; | ||||
|  | ||||
| import com.itextpdf.text.DocumentException; | ||||
| import enseirb.myinpulse.model.*; | ||||
| import enseirb.myinpulse.service.SharedApiService; | ||||
|  | ||||
| @@ -9,6 +10,9 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; | ||||
| import org.springframework.security.oauth2.jwt.Jwt; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.FileNotFoundException; | ||||
|  | ||||
| @SpringBootApplication | ||||
| @RestController | ||||
| public class SharedApi { | ||||
| @@ -78,7 +82,11 @@ public class SharedApi { | ||||
|     @GetMapping("/shared/projects/appointments/report/{appointmentId}") | ||||
|     public void getPDFReport( | ||||
|             @PathVariable int appointmentId, @AuthenticationPrincipal Jwt principal) { | ||||
|         sharedApiService.getPDFReport(appointmentId, principal.getClaimAsString("email")); | ||||
|         try { | ||||
|             sharedApiService.getPDFReport(appointmentId, principal.getClaimAsString("email")); | ||||
|         } catch (FileNotFoundException | DocumentException e) { | ||||
|             System.out.println(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -115,4 +115,8 @@ public class Appointment { | ||||
|     public Report getAppointmentReport() { | ||||
|         return report; | ||||
|     } | ||||
|  | ||||
|     public void setAppointmentReport(Report report) { | ||||
|         this.report = report; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -37,4 +37,12 @@ public class Report { | ||||
|     public void setReportContent(String reportContent) { | ||||
|         this.reportContent = reportContent; | ||||
|     } | ||||
|  | ||||
|     public Appointment getAppointmentReport() { | ||||
|         return appointmentReport; | ||||
|     } | ||||
|  | ||||
|     public void setAppointmentReport(Appointment appointmentReport) { | ||||
|         this.appointmentReport = appointmentReport; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -4,6 +4,12 @@ import enseirb.myinpulse.model.*; | ||||
| import enseirb.myinpulse.service.database.AdministratorService; | ||||
| import enseirb.myinpulse.service.database.ProjectService; | ||||
| import enseirb.myinpulse.service.database.UserService; | ||||
| import enseirb.myinpulse.service.database.AppointmentService; | ||||
| import enseirb.myinpulse.service.database.ReportService; | ||||
| import enseirb.myinpulse.service.UtilsService; | ||||
|  | ||||
| import org.apache.logging.log4j.LogManager; | ||||
| import org.apache.logging.log4j.Logger; | ||||
|  | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.http.HttpStatus; | ||||
| @@ -13,30 +19,41 @@ import org.springframework.web.server.ResponseStatusException; | ||||
| @Service | ||||
| public class AdminApiService { | ||||
|  | ||||
|     protected static final Logger logger = LogManager.getLogger(); | ||||
|  | ||||
|     private final ProjectService projectService; | ||||
|     private final UserService userService; | ||||
|     private final AdministratorService administratorService; | ||||
|     private final UtilsService utilsService; | ||||
|     private final AppointmentService appointmentService; | ||||
|     private final ReportService reportService; | ||||
|  | ||||
|     @Autowired | ||||
|     AdminApiService( | ||||
|             ProjectService projectService, | ||||
|             UserService userService, | ||||
|             AdministratorService administratorService) { | ||||
|             AdministratorService administratorService, | ||||
|             UtilsService utilsService, | ||||
|             AppointmentService appointmentService, | ||||
|             ReportService reportService) { | ||||
|         this.projectService = projectService; | ||||
|         this.userService = userService; | ||||
|         this.administratorService = administratorService; | ||||
|         this.utilsService = utilsService; | ||||
|         this.appointmentService = appointmentService; | ||||
|         this.reportService = reportService; | ||||
|     } | ||||
|  | ||||
|     // TODO: test | ||||
|     public Iterable<Project> getProjectsOfAdmin(String email) { | ||||
|     public Iterable<Project> getProjectsOfAdmin(String mail) { | ||||
|         return projectService.getProjectsByAdminId( | ||||
|                 administratorService.getAdministratorById( | ||||
|                         this.userService.getUserByEmail(email).getIdUser())); | ||||
|                         this.userService.getUserByEmail(mail).getIdUser())); | ||||
|     } | ||||
|  | ||||
|     // TODO | ||||
|     public Iterable<Appointment> getUpcomingAppointments(String email) { | ||||
|         throw new ResponseStatusException(HttpStatus.NOT_IMPLEMENTED, "Not implemented yet"); | ||||
|     public Iterable<Appointment> getUpcomingAppointments(String mail) { | ||||
|         logger.info("User {} check their upcoming appointments", mail); | ||||
|     } | ||||
|  | ||||
|     // TODO: test | ||||
| @@ -60,9 +77,26 @@ public class AdminApiService { | ||||
|         projectService.addNewProject(project); // TODO: how can the front know the ID ? | ||||
|     } | ||||
|  | ||||
|     // TODO | ||||
|     public void createAppointmentReport(String appointmentId, Report report, String email) { | ||||
|         throw new ResponseStatusException(HttpStatus.NOT_IMPLEMENTED, "Not implemented yet"); | ||||
|     public void createAppointmentReport(long appointmentId, Report report, String mail) { | ||||
|         long projectId = | ||||
|                 this.appointmentService | ||||
|                         .getAppointmentById(appointmentId) | ||||
|                         .getAppointmentListSectionCell() | ||||
|                         .getFirst() | ||||
|                         .getProjectSectionCell() | ||||
|                         .getIdProject(); | ||||
|         if (!utilsService.isAllowedToCheckProject(mail, projectId)) { | ||||
|             logger.warn( | ||||
|                     "User {} tried to add an report for appointment {} but is not allowed to.", | ||||
|                     mail, | ||||
|                     projectId); | ||||
|             throw new ResponseStatusException( | ||||
|                     HttpStatus.UNAUTHORIZED, "You're not allowed to check this project"); | ||||
|         } | ||||
|         logger.info("User {} added a report for appointment {}", mail, projectId); | ||||
|         Report addedReport = this.reportService.addNewReport(report); | ||||
|         addedReport.setAppointmentReport(this.appointmentService.getAppointmentById(appointmentId)); | ||||
|         this.appointmentService.getAppointmentById(appointmentId).setAppointmentReport(addedReport); | ||||
|     } | ||||
|  | ||||
|     // TODO: test | ||||
|   | ||||
| @@ -10,6 +10,11 @@ import org.springframework.http.HttpStatus; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.web.server.ResponseStatusException; | ||||
|  | ||||
| import com.itextpdf.text.*; | ||||
| import com.itextpdf.text.pdf.PdfWriter; | ||||
|  | ||||
| import java.io.FileNotFoundException; | ||||
| import java.io.FileOutputStream; | ||||
| import java.time.LocalDateTime; | ||||
| import java.time.format.DateTimeFormatter; | ||||
| import java.util.ArrayList; | ||||
| @@ -118,8 +123,9 @@ public class SharedApiService { | ||||
|         return appointments; | ||||
|     } | ||||
|  | ||||
|     // TODO | ||||
|     public void getPDFReport(long appointmentId, String mail) { | ||||
|     // | ||||
|     public void getPDFReport(long appointmentId, String mail) | ||||
|             throws FileNotFoundException, DocumentException { | ||||
|         long projectId = | ||||
|                 this.appointmentService | ||||
|                         .getAppointmentById(appointmentId) | ||||
| @@ -139,15 +145,82 @@ public class SharedApiService { | ||||
|             throw new ResponseStatusException( | ||||
|                     HttpStatus.UNAUTHORIZED, "You're not allowed to check this project"); | ||||
|         } | ||||
|         /* return this.appointmentService | ||||
|         .getAppointmentById(appointmentId) | ||||
|         .getAppointmentReport().getReportContent(); */ | ||||
|         // generate pdf from this string, and format it to be decent looking | ||||
|         throw new ResponseStatusException(HttpStatus.NOT_IMPLEMENTED, "Not implemented yet"); | ||||
|         logger.info( | ||||
|                 "User {} generated the PDF report related to appointment {}", mail, appointmentId); | ||||
|  | ||||
|         String reportContent = | ||||
|                 this.appointmentService | ||||
|                         .getAppointmentById(appointmentId) | ||||
|                         .getAppointmentReport() | ||||
|                         .getReportContent(); | ||||
|  | ||||
|         // PDF generation | ||||
|         Document document = new Document(); | ||||
|         PdfWriter.getInstance(document, new FileOutputStream("Report" + appointmentId + ".pdf")); | ||||
|         document.open(); | ||||
|  | ||||
|         Paragraph title = | ||||
|                 new Paragraph( | ||||
|                         new Phrase( | ||||
|                                 "Compte Rendu - Réunion du " | ||||
|                                         + this.appointmentService | ||||
|                                                 .getAppointmentById(appointmentId) | ||||
|                                                 .getAppointmentDate() | ||||
|                                                 .toString(), | ||||
|                                 FontFactory.getFont( | ||||
|                                         FontFactory.HELVETICA, | ||||
|                                         20, | ||||
|                                         Font.BOLDITALIC, | ||||
|                                         BaseColor.BLACK))); | ||||
|         title.setAlignment(Element.ALIGN_CENTER); | ||||
|         document.add(title); | ||||
|  | ||||
|         Font subsection = | ||||
|                 FontFactory.getFont(FontFactory.HELVETICA, 14, Font.UNDERLINE, BaseColor.DARK_GRAY); | ||||
|         Font body = FontFactory.getFont(FontFactory.COURIER, 12, BaseColor.BLACK); | ||||
|  | ||||
|         String[] split = reportContent.split(" "); | ||||
|  | ||||
|         String tmp = ""; | ||||
|         int counter = 1; | ||||
|         for (String s : split) { | ||||
|             if (s.equals("//")) { | ||||
|                 Chunk chunk = new Chunk(tmp, body); | ||||
|                 document.add(chunk); | ||||
|                 document.add(new Paragraph("\n")); | ||||
|                 tmp = ""; | ||||
|                 Paragraph paragraph = new Paragraph("Point n°" + counter + " : ", subsection); | ||||
|                 document.add(paragraph); | ||||
|                 document.add(new Paragraph("\n")); | ||||
|                 counter++; | ||||
|             } else { | ||||
|                 tmp = tmp.concat(s + " "); | ||||
|             } | ||||
|         } | ||||
|         Chunk chunk = new Chunk(tmp, body); | ||||
|         document.add(chunk); | ||||
|         document.add(new Paragraph("\n")); | ||||
|  | ||||
|         document.close(); | ||||
|     } | ||||
|  | ||||
|     // TODO | ||||
|     public void createAppointmentRequest(Appointment appointment, String mail) { | ||||
|         throw new ResponseStatusException(HttpStatus.NOT_IMPLEMENTED, "Not implemented yet"); | ||||
|         long projectId = | ||||
|                 appointment | ||||
|                         .getAppointmentListSectionCell() | ||||
|                         .getFirst() | ||||
|                         .getProjectSectionCell() | ||||
|                         .getIdProject(); | ||||
|         if (!utilsService.isAllowedToCheckProject(mail, projectId)) { | ||||
|             logger.warn( | ||||
|                     "User {} tried to create for the project {} but is not allowed to.", | ||||
|                     mail, | ||||
|                     projectId); | ||||
|             throw new ResponseStatusException( | ||||
|                     HttpStatus.UNAUTHORIZED, "You're not allowed to check this project"); | ||||
|         } | ||||
|         logger.info("User {} tried to create an appointment for project {}", mail, projectId); | ||||
|         this.appointmentService.addNewAppointment(appointment); | ||||
|     } | ||||
| } | ||||
|   | ||||
							
								
								
									
										12
									
								
								documentation/Doc.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								documentation/Doc.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| Format des comptes rendus de réunion : | ||||
| Texte organisé par bullet point, chaque bullet point est séparé par "//" pour pouvoir être correctement généré. | ||||
|  | ||||
| Exemple : | ||||
| Le texte "// blablabla // oui bonjour" | ||||
| donne le résultat | ||||
|  | ||||
| Point n°1 : | ||||
|   blablabla | ||||
|  | ||||
| Point n°2 : | ||||
|   oui bonjour | ||||
		Reference in New Issue
	
	Block a user