package it.pcdev.dokskan.central.controller; import it.pcdev.dokskan.central.dto.UserDto; import it.pcdev.dokskan.central.service.impl.AuthenticationServiceImpl; import it.pcdev.dokskan.central.service.impl.strategy.docupload.DocumentUploadServiceAiImpl; import it.pcdev.dokskan.central.service.impl.UserServiceImpl; import jakarta.annotation.security.RolesAllowed; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.persistence.PersistenceException; import jakarta.ws.rs.*; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.SecurityContext; @ApplicationScoped @Path("/api/v1/auth") public class AuthenticationController { @Inject UserServiceImpl userService; @Inject AuthenticationServiceImpl authenticationServiceImpl; @Inject DocumentUploadServiceAiImpl documentUploadServiceImpl; @Inject SecurityContext securityContext; @POST @Path("/signup") public Response createUser(UserDto userDto) { userService.persist(userDto); return Response.status(Response.Status.CREATED).build(); } @GET @Path("/signin") public Response signIn(@HeaderParam("USERNAME") String username, @HeaderParam("PASSWORD") String password) { try { return Response.status(Response.Status.OK).entity(authenticationServiceImpl.authenticate(username, password)).build(); } catch (PersistenceException exc) { return Response.status(Response.Status.UNAUTHORIZED).build(); } catch (Exception exc) { exc.printStackTrace(); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } } @DELETE @Path("/deleteUserAndRelatedData") @RolesAllowed("user") public Response deleteMe() { documentUploadServiceImpl.deleteDocumentDataByUser(securityContext.getUserPrincipal().getName()); userService.deleteByUsername(securityContext.getUserPrincipal().getName()); return Response.status(Response.Status.OK).build(); } }