Skip to content

Commit

Permalink
Merge pull request #23 from ibtissamelhani/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
ibtissamelhani authored Oct 20, 2024
2 parents 86db074 + 0e13b39 commit 83e9a32
Show file tree
Hide file tree
Showing 35 changed files with 1,108 additions and 263 deletions.
34 changes: 32 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<packaging>war</packaging>
<groupId>org.example</groupId>
<artifactId>DevSync</artifactId>
<version>1.1.0-SNAPSHOT</version>
<version>1.2.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>11</maven.compiler.source>
Expand Down Expand Up @@ -73,7 +73,37 @@
<artifactId>jbcrypt</artifactId>
<version>0.4</version>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.12.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.12</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>

</plugin>

</plugins>
</build>

</project>
16 changes: 8 additions & 8 deletions src/main/java/org/example/Main.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package org.example;

import org.example.schedulers.ResetTokenScheduler;

public class Main {
public static void main(String[] args) {
// Create an instance of the ResetTokenScheduler
ResetTokenScheduler resetTokenScheduler = new ResetTokenScheduler();
// ResetTokenScheduler resetTokenScheduler = new ResetTokenScheduler();
//
// resetTokenScheduler.run();
//
// System.out.println("Token reset executed successfully.");

// Execute the run method to test the token reset functionality
resetTokenScheduler.run();
// CheckPendingRequestsScheduler scheduler = new CheckPendingRequestsScheduler();
// scheduler.run();
// System.out.println("Token double executed successfully.");

// Optional: You could log or print out information to confirm tokens were reset
System.out.println("Token reset executed successfully.");
}
}
24 changes: 16 additions & 8 deletions src/main/java/org/example/controller/RequestServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,25 @@ public class RequestServlet extends HttpServlet {
RequestService requestService;
TokenService tokenService;
TaskService taskService;
UserService userService;

@Override
public void init() throws ServletException {
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("DevSyncPU");
RequestRepository requestRepository = new RequestRepositoryImpl(entityManagerFactory);
tokenService = new TokenService(new TokenRepositoryImpl(entityManagerFactory));
TagService tagService = new TagService(new TagRepositoryImpl(entityManagerFactory));
UserService userService = new UserService(new UserRepositoryImpl(entityManagerFactory),tokenService);
userService = new UserService(new UserRepositoryImpl(entityManagerFactory),tokenService);
taskService = new TaskService(new TaskRepositoryImpl(entityManagerFactory),tagService,userService);
requestService = new RequestService(requestRepository,tokenService,taskService);
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Request> requests = requestService.getAllRequests();
List<User> users = userService.getRegularUsers();
request.setAttribute("requests", requests);
request.setAttribute("users", users);
request.getRequestDispatcher("/WEB-INF/views/dashboard/Request/requests.jsp").forward(request, response);
}

Expand All @@ -63,12 +66,19 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)

private void editRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
long requestId = Long.parseLong(request.getParameter("requestId"));
long userId = Long.parseLong(request.getParameter("userId"));
String newStatus = request.getParameter("status");

Optional<Request> optionalRequest = requestService.getRequestById(requestId);
if (optionalRequest.isPresent()) {
Optional<User> optionalUser = userService.getUserById(userId);

if (optionalRequest.isPresent() && optionalUser.isPresent()) {
Request req = optionalRequest.get();
User user = optionalUser.get();

req.setStatus(RequestStatus.valueOf(newStatus));
requestService.updateRequest(req);
requestService.updateRequest(req,user);

response.sendRedirect(request.getContextPath() + "/requests");
}

Expand All @@ -87,13 +97,11 @@ private void deleteRequest(HttpServletRequest req, HttpServletResponse resp) thr
boolean result = requestService.handleTaskDeletionRequest(id, loggedUser);

if (result) {
req.getSession().setAttribute("message", "Done");
req.getSession().setAttribute("message", "task deleted");
} else {
req.getSession().setAttribute("errorMessage", "Failed to delete task. Try again later.");
req.getSession().setAttribute("errorMessage", "Failed to sent request. Try again later.");
}
} catch (TaskNotFoundException e) {
req.getSession().setAttribute("errorMessage", "Task not found.");
} catch (InsufficientTokensException e) {
} catch (TaskNotFoundException | InsufficientTokensException e) {
req.getSession().setAttribute("errorMessage", e.getMessage());
}

Expand Down
16 changes: 12 additions & 4 deletions src/main/java/org/example/controller/TaskServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,13 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t

private void listTasks(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Task> tasks = taskService.findAll();
double notStartPercent = taskService.notStarPercent();
double inProgPercent = taskService.inProgPercent();
double compPercent = taskService.compPercent();
request.setAttribute("tasks", tasks);
request.setAttribute("notStartPercent", notStartPercent);
request.setAttribute("inProgPercent", inProgPercent);
request.setAttribute("compPercent", compPercent);
request.getRequestDispatcher("/WEB-INF/views/dashboard/Task/tasks.jsp").forward(request, response);
}

Expand Down Expand Up @@ -143,9 +149,11 @@ private void editTask(HttpServletRequest request, HttpServletResponse response)

task.setStatus(TaskStatus.valueOf(newStatus));

taskService.update(task);

response.sendRedirect(request.getContextPath() + "/users?action=taskDetails&id=" + taskId);
Task updatedTask = taskService.update(task);
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
response.sendRedirect(request.getContextPath() + "/users?action=taskDetails&id=" + updatedTask.getId());
} catch (TaskNotFoundException e) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "Task not found.");
} catch (Exception e) {
Expand Down Expand Up @@ -173,7 +181,7 @@ private void deleteTask(HttpServletRequest req, HttpServletResponse resp) throws
}

} catch (TaskNotFoundException e) {
req.getSession().setAttribute("errorMessage", "Task not found.");
req.getSession().setAttribute("errorMessage", e.getMessage());
}

long userId = loggedUser.getId();
Expand Down
15 changes: 8 additions & 7 deletions src/main/java/org/example/controller/UserServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ private void createUser(HttpServletRequest request, HttpServletResponse response
userService.createUser(newUser);
response.sendRedirect(request.getContextPath() + "/users?action=list");
}

private void deleteUser(HttpServletRequest request, HttpServletResponse response) throws IOException {
try {
Long userId = Long.parseLong(request.getParameter("id"));
Expand Down Expand Up @@ -173,20 +174,18 @@ private void login(HttpServletRequest request, HttpServletResponse response) thr
String email = request.getParameter("email");
String password = request.getParameter("password");

Optional<User> optionalUser = userService.getUserByEmail(email);

if (optionalUser.isPresent()) {
User user = optionalUser.get();
try {
User user = userService.getUserByEmail(email);

if (BCrypt.checkpw(password, user.getPassword())) {
HttpSession session = request.getSession();
session.setAttribute("loggedUser", user);
checkRole(request, response, user);
}else {
} else {
response.sendRedirect(request.getContextPath() + "/users?action=login");
}

}else {
} catch (UserNotFoundException e) {
response.sendRedirect(request.getContextPath() + "/users?action=login");
}
}
Expand All @@ -198,7 +197,7 @@ private void logout(HttpServletRequest req, HttpServletResponse resp) throws Ser

private void checkRole(HttpServletRequest request, HttpServletResponse response,User user) throws ServletException, IOException {
if(user.getRole().equals(UserRole.MANAGER)){
response.sendRedirect(request.getContextPath() + "/users?action=list");
response.sendRedirect(request.getContextPath() + "/tasks?action=list");
}else if (user.getRole().equals(UserRole.USER)){
Long userId = user.getId();
response.sendRedirect(request.getContextPath() + "/users?action=userInterface&id="+userId);
Expand All @@ -218,6 +217,8 @@ private void selfAssign(HttpServletRequest request, HttpServletResponse response
try {
Task task = new Task(title, description, creationDate, dueDate, TaskStatus.NOT_STARTED, null, loggedUser);
taskService.create(task, tagIds, assigneeId);
HttpSession session = request.getSession();
session.setAttribute("message", "task added");
response.sendRedirect("users?action=userInterface&id=" + loggedUser.getId());
} catch (TaskAlreadyExistException | IllegalArgumentException e) {
HttpSession session = request.getSession();
Expand Down
7 changes: 5 additions & 2 deletions src/main/java/org/example/model/entities/Task.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,14 @@ public class Task {
@Column(name = "due_date",nullable = false)
private LocalDate dueDate;

@Column(name = "is_token_applied", nullable = false)
private boolean isTokenApplied = false;

@Enumerated(EnumType.STRING)
@Column(nullable = false)
private TaskStatus status;

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.DETACH)
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "task_tags",
joinColumns = @JoinColumn(name = "task_id"),
inverseJoinColumns = @JoinColumn(name = "tag_id"))
Expand All @@ -66,6 +69,6 @@ public Task(String title, String description, LocalDate creationDate, LocalDate
this.status = status;
this.tags = tags != null ? tags : new ArrayList<>();
this.creator = creator;
// this.assignee = assignee;
this.isTokenApplied = false;
}
}
1 change: 0 additions & 1 deletion src/main/java/org/example/model/entities/Token.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ public class Token {

@ManyToOne
@JoinColumn(name = "user_id")
@OnDelete(action = OnDeleteAction.CASCADE)
private User user;

private boolean used;
Expand Down
1 change: 1 addition & 0 deletions src/main/java/org/example/model/entities/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "users")
public class User {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,55 +1,84 @@
package org.example.repository.implementation;

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.*;
import org.example.model.entities.Request;
import org.example.model.entities.Tag;
import org.example.model.enums.RequestStatus;
import org.example.repository.interfaces.RequestRepository;

import java.util.List;
import java.util.Optional;

public class RequestRepositoryImpl implements RequestRepository {

private final EntityManagerFactory entityManagerFactory;
EntityManagerFactory entityManagerFactory;
EntityManager entityManager;

public RequestRepositoryImpl(EntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory;
this.entityManager = entityManagerFactory.createEntityManager();
}

@Override
public Request save(Request request) {
try (EntityManager entityManager = entityManagerFactory.createEntityManager()) {
try {
entityManager.getTransaction().begin();
entityManager.persist(request);
entityManager.getTransaction().commit();
return request;
} catch (PersistenceException e) {
if (entityManager.getTransaction().isActive()) {
entityManager.getTransaction().rollback();
}
return null;
}
}

@Override
public Optional<Request> findById(long id) {
try (EntityManager entityManager = entityManagerFactory.createEntityManager()) {
try {
Request request = entityManager.find(Request.class, id);
return Optional.ofNullable(request);
} catch (NoResultException e) {
System.out.println(e.getMessage());
return Optional.empty();
}
}

@Override
public List<Request> findAll() {
try (EntityManager entityManager = entityManagerFactory.createEntityManager()) {
try {
return entityManager.createQuery("SELECT r FROM Request r", Request.class)
.getResultList();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

@Override
public Request update(Request request) {
try (EntityManager entityManager = entityManagerFactory.createEntityManager()) {
try {
entityManager.getTransaction().begin();
entityManager.merge(request);
entityManager.getTransaction().commit();
return request;
}catch (Exception e) {
if (entityManager.getTransaction().isActive()) {
entityManager.getTransaction().rollback();
}
throw e;
}
}

@Override
public List<Request> findRequestsByStatus(RequestStatus status) {
try {
TypedQuery<Request> query = entityManager.createQuery(
"SELECT r FROM Request r WHERE r.status = :status", Request.class);
query.setParameter("status", status);
return query.getResultList();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Loading

0 comments on commit 83e9a32

Please sign in to comment.