diff --git a/server/.mvn/google_checks.xml b/server/.mvn/google_checks.xml
new file mode 100644
index 0000000..0151c92
--- /dev/null
+++ b/server/.mvn/google_checks.xml
@@ -0,0 +1,371 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/server/pom.xml b/server/pom.xml
index 2aaa4b9..b5165b8 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -183,12 +183,6 @@
0.12.6
-
-
- org.ocpsoft.prettytime
- prettytime
- 5.0.9.Final
-
diff --git a/server/src/main/java/br/com/tasknoteapp/server/config/CloudNativeConfig.java b/server/src/main/java/br/com/tasknoteapp/server/config/CloudNativeConfig.java
index d903086..7ddff8a 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/config/CloudNativeConfig.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/config/CloudNativeConfig.java
@@ -19,6 +19,7 @@ import org.springframework.aot.hint.annotation.RegisterReflectionForBinding;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportRuntimeHints;
+/** This class contains configurations for the GraalVM Cloud Native image. */
@Configuration
@RegisterReflectionForBinding({
LoginRequest.class,
@@ -48,9 +49,6 @@ import org.springframework.context.annotation.ImportRuntimeHints;
io.jsonwebtoken.impl.io.StandardCompressionAlgorithms.class,
io.jsonwebtoken.impl.DefaultClaimsBuilder.class,
io.jsonwebtoken.impl.DefaultJwtParserBuilder.class,
- org.ocpsoft.prettytime.PrettyTime.class,
- org.ocpsoft.prettytime.i18n.Resources.class,
- org.ocpsoft.prettytime.i18n.Resources_en.class,
})
@ImportRuntimeHints(value = {HttpServletRequestRuntimeHint.class})
public class CloudNativeConfig {}
diff --git a/server/src/main/java/br/com/tasknoteapp/server/config/SecurityConfig.java b/server/src/main/java/br/com/tasknoteapp/server/config/SecurityConfig.java
index a5a62a9..e24ea80 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/config/SecurityConfig.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/config/SecurityConfig.java
@@ -65,6 +65,11 @@ public class SecurityConfig {
return new BCryptPasswordEncoder();
}
+ /**
+ * Provides an AuthenticationProvider with user and password.
+ *
+ * @return AuthenticationProvider instance
+ */
@Bean
public AuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
@@ -73,6 +78,13 @@ public class SecurityConfig {
return authProvider;
}
+ /**
+ * Provides an AuthenticationManager to manage authentication.
+ *
+ * @param config AuthenticationConfiguration instance
+ * @return AuthenticationManager instance
+ * @throws Exception if issues occur.
+ */
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration config)
throws Exception {
diff --git a/server/src/main/java/br/com/tasknoteapp/server/controller/AuthenticationController.java b/server/src/main/java/br/com/tasknoteapp/server/controller/AuthenticationController.java
index 604501f..6b734fa 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/controller/AuthenticationController.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/controller/AuthenticationController.java
@@ -36,7 +36,7 @@ public class AuthenticationController {
*
* @param loginRequest User data with email and password.
* @return JwtAuthenticationResponse containing user token
- * @throws UserAlreadyExistsException
+ * @throws UserAlreadyExistsException when user already exists.
*/
@PutMapping(path = "/sign-up", consumes = "application/json", produces = "application/json")
@Operation(
diff --git a/server/src/main/java/br/com/tasknoteapp/server/controller/HomeController.java b/server/src/main/java/br/com/tasknoteapp/server/controller/HomeController.java
index 5d83f23..a862c95 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/controller/HomeController.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/controller/HomeController.java
@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
+/** This class provides resources to handle home requests by the client. */
@RestController
@RequestMapping("/rest/home")
@AllArgsConstructor
@@ -51,7 +52,7 @@ public class HomeController {
}
/**
- * Search for tasks and notes
+ * Search for tasks and notes.
*
* @returns List of SearchResponse with found records.
*/
diff --git a/server/src/main/java/br/com/tasknoteapp/server/controller/NoteController.java b/server/src/main/java/br/com/tasknoteapp/server/controller/NoteController.java
index 16067e0..9161e3f 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/controller/NoteController.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/controller/NoteController.java
@@ -26,6 +26,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+/** This class provides resources to handle notes requests by the client. */
@RestController
@RequestMapping("/rest/notes")
@AllArgsConstructor
diff --git a/server/src/main/java/br/com/tasknoteapp/server/controller/RestExceptionController.java b/server/src/main/java/br/com/tasknoteapp/server/controller/RestExceptionController.java
index db0e12a..bf3437c 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/controller/RestExceptionController.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/controller/RestExceptionController.java
@@ -6,6 +6,7 @@ import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
+/** This class provides exceptions handling for requests. */
@RestControllerAdvice
public class RestExceptionController {
diff --git a/server/src/main/java/br/com/tasknoteapp/server/controller/TaskController.java b/server/src/main/java/br/com/tasknoteapp/server/controller/TaskController.java
index e2755ac..edac400 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/controller/TaskController.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/controller/TaskController.java
@@ -145,8 +145,7 @@ public class TaskController {
@Valid
TaskRequest taskRequest) {
TaskEntity createdTask = taskService.createTask(taskRequest);
- return ResponseEntity.status(HttpStatus.CREATED)
- .body(TaskResponse.fromEntity(createdTask, null));
+ return ResponseEntity.status(HttpStatus.CREATED).body(TaskResponse.fromEntity(createdTask));
}
/**
diff --git a/server/src/main/java/br/com/tasknoteapp/server/controller/UserSessionController.java b/server/src/main/java/br/com/tasknoteapp/server/controller/UserSessionController.java
index 03a8871..d528a69 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/controller/UserSessionController.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/controller/UserSessionController.java
@@ -10,7 +10,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
diff --git a/server/src/main/java/br/com/tasknoteapp/server/entity/NoteEntity.java b/server/src/main/java/br/com/tasknoteapp/server/entity/NoteEntity.java
index e21f2c1..cdc78ef 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/entity/NoteEntity.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/entity/NoteEntity.java
@@ -9,18 +9,19 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
+import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import java.util.List;
+/** This class represents a note in the database. */
@Data
@Entity
@Table(name = "notes")
@ToString
@EqualsAndHashCode
public class NoteEntity {
-
+
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
diff --git a/server/src/main/java/br/com/tasknoteapp/server/entity/NoteUrlEntity.java b/server/src/main/java/br/com/tasknoteapp/server/entity/NoteUrlEntity.java
index a96258e..3c14cd5 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/entity/NoteUrlEntity.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/entity/NoteUrlEntity.java
@@ -12,6 +12,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
+/** This class represents a note url in the database. */
@Data
@Entity
@ToString
diff --git a/server/src/main/java/br/com/tasknoteapp/server/entity/TaskEntity.java b/server/src/main/java/br/com/tasknoteapp/server/entity/TaskEntity.java
index dcc7cbe..3dc8fa3 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/entity/TaskEntity.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/entity/TaskEntity.java
@@ -10,13 +10,13 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
-
import java.time.LocalDateTime;
import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
+/** This class represents a task in the database. */
@Data
@Entity
@Table(name = "tasks")
diff --git a/server/src/main/java/br/com/tasknoteapp/server/entity/TaskUrlEntity.java b/server/src/main/java/br/com/tasknoteapp/server/entity/TaskUrlEntity.java
index 580e583..c6c0e75 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/entity/TaskUrlEntity.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/entity/TaskUrlEntity.java
@@ -12,6 +12,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
+/** This class represents a task url in the database. */
@Data
@Entity
@ToString
diff --git a/server/src/main/java/br/com/tasknoteapp/server/exception/BadPasswordException.java b/server/src/main/java/br/com/tasknoteapp/server/exception/BadPasswordException.java
index 78e8222..c49139d 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/exception/BadPasswordException.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/exception/BadPasswordException.java
@@ -4,6 +4,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.server.ResponseStatusException;
+/** This class represents a Bad Password exception. */
@ResponseStatus(HttpStatus.BAD_REQUEST)
public class BadPasswordException extends ResponseStatusException {
diff --git a/server/src/main/java/br/com/tasknoteapp/server/filter/JwtAuthenticationFilter.java b/server/src/main/java/br/com/tasknoteapp/server/filter/JwtAuthenticationFilter.java
index 0ac3f03..2274e55 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/filter/JwtAuthenticationFilter.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/filter/JwtAuthenticationFilter.java
@@ -19,6 +19,7 @@ import org.springframework.security.web.authentication.WebAuthenticationDetailsS
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
+/** This class represents an authentication filter do authenticate requests. */
@Slf4j
@Component
public class JwtAuthenticationFilter extends OncePerRequestFilter {
diff --git a/server/src/main/java/br/com/tasknoteapp/server/repository/NoteRepository.java b/server/src/main/java/br/com/tasknoteapp/server/repository/NoteRepository.java
index 0b7313c..360b215 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/repository/NoteRepository.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/repository/NoteRepository.java
@@ -5,6 +5,7 @@ import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
+/** This interface represents a note repository, for database access. */
public interface NoteRepository extends JpaRepository {
List findAllByUser_id(Long userId);
diff --git a/server/src/main/java/br/com/tasknoteapp/server/repository/NoteUrlRepository.java b/server/src/main/java/br/com/tasknoteapp/server/repository/NoteUrlRepository.java
index cf630f4..846de16 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/repository/NoteUrlRepository.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/repository/NoteUrlRepository.java
@@ -4,6 +4,7 @@ import br.com.tasknoteapp.server.entity.NoteUrlEntity;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
+/** This interface represents a note url repository, for database access. */
public interface NoteUrlRepository extends JpaRepository {
void deleteAllByIdIn(List ids);
diff --git a/server/src/main/java/br/com/tasknoteapp/server/repository/TaskRepository.java b/server/src/main/java/br/com/tasknoteapp/server/repository/TaskRepository.java
index 758f10d..e2dfcd8 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/repository/TaskRepository.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/repository/TaskRepository.java
@@ -1,12 +1,11 @@
package br.com.tasknoteapp.server.repository;
import br.com.tasknoteapp.server.entity.TaskEntity;
-
import java.util.List;
-
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
+/** This interface represents a task repository, for database access. */
public interface TaskRepository extends JpaRepository {
List findAllByUser_id(Long userId);
diff --git a/server/src/main/java/br/com/tasknoteapp/server/repository/TaskUrlRepository.java b/server/src/main/java/br/com/tasknoteapp/server/repository/TaskUrlRepository.java
index 655bb83..85e82c2 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/repository/TaskUrlRepository.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/repository/TaskUrlRepository.java
@@ -4,6 +4,7 @@ import br.com.tasknoteapp.server.entity.TaskUrlEntity;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
+/** This interface represents a task url repository, for database access. */
public interface TaskUrlRepository extends JpaRepository {
void deleteAllByIdIn(List ids);
diff --git a/server/src/main/java/br/com/tasknoteapp/server/request/NoteUrlPatchRequest.java b/server/src/main/java/br/com/tasknoteapp/server/request/NoteUrlPatchRequest.java
index f550450..2a3a416 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/request/NoteUrlPatchRequest.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/request/NoteUrlPatchRequest.java
@@ -1,3 +1,9 @@
package br.com.tasknoteapp.server.request;
-public record NoteUrlPatchRequest(Long id, String url) {}
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/** This record represents a Note Url payload to be patched. */
+@Schema(description = "Represents a Note Url payload to be patched.")
+public record NoteUrlPatchRequest(
+ @Schema(description = "The identification of the note url in the database") Long id,
+ @Schema(description = "The note URL address, if any.") String url) {}
diff --git a/server/src/main/java/br/com/tasknoteapp/server/request/TaskUrlPatchRequest.java b/server/src/main/java/br/com/tasknoteapp/server/request/TaskUrlPatchRequest.java
index de4891f..2539642 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/request/TaskUrlPatchRequest.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/request/TaskUrlPatchRequest.java
@@ -1,3 +1,9 @@
package br.com.tasknoteapp.server.request;
-public record TaskUrlPatchRequest(Long id, String url) {}
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/** This record represents a Task Url payload to be patched. */
+@Schema(description = "Represents a Task Url payload to be patched.")
+public record TaskUrlPatchRequest(
+ @Schema(description = "The identification of the task url in the database") Long id,
+ @Schema(description = "The task URL address, if any.") String url) {}
diff --git a/server/src/main/java/br/com/tasknoteapp/server/response/JwtAuthenticationResponse.java b/server/src/main/java/br/com/tasknoteapp/server/response/JwtAuthenticationResponse.java
index c487895..530ff01 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/response/JwtAuthenticationResponse.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/response/JwtAuthenticationResponse.java
@@ -1,3 +1,7 @@
package br.com.tasknoteapp.server.response;
-public record JwtAuthenticationResponse(String token) {}
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/** This record represents a JWT Token response to be returned to the client. */
+@Schema(description = "Represents a JWT Token response to be returned to the client.")
+public record JwtAuthenticationResponse(@Schema(description = "The JWT token") String token) {}
diff --git a/server/src/main/java/br/com/tasknoteapp/server/response/SearchResponse.java b/server/src/main/java/br/com/tasknoteapp/server/response/SearchResponse.java
index 3eb92a7..d1af43c 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/response/SearchResponse.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/response/SearchResponse.java
@@ -1,5 +1,10 @@
package br.com.tasknoteapp.server.response;
+import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
-public record SearchResponse(List tasks, List notes) {}
+/** This record represents a Search response with found results. */
+@Schema(description = "Represents a Search response with found results")
+public record SearchResponse(
+ @Schema(description = "List of found tasks.") List tasks,
+ @Schema(description = "List of found notes.") List notes) {}
diff --git a/server/src/main/java/br/com/tasknoteapp/server/response/SummaryResponse.java b/server/src/main/java/br/com/tasknoteapp/server/response/SummaryResponse.java
index c94b453..1ae451b 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/response/SummaryResponse.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/response/SummaryResponse.java
@@ -1,4 +1,10 @@
package br.com.tasknoteapp.server.response;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/** This record represents a summary response payload object. */
+@Schema(description = "Represents a summary response payload object.")
public record SummaryResponse(
- Integer pendingTaskCount, Integer doneTaskCount, Integer notesCount) {}
+ @Schema(description = "The amount of pending tasks") Integer pendingTaskCount,
+ @Schema(description = "The amount of done tasks") Integer doneTaskCount,
+ @Schema(description = "The amount of notes") Integer notesCount) {}
diff --git a/server/src/main/java/br/com/tasknoteapp/server/response/TaskResponse.java b/server/src/main/java/br/com/tasknoteapp/server/response/TaskResponse.java
index 881dc7b..5c881ef 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/response/TaskResponse.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/response/TaskResponse.java
@@ -2,13 +2,12 @@ package br.com.tasknoteapp.server.response;
import br.com.tasknoteapp.server.entity.TaskEntity;
import br.com.tasknoteapp.server.entity.TaskUrlEntity;
+import br.com.tasknoteapp.server.util.TimeAgoUtil;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
-import org.ocpsoft.prettytime.PrettyTime;
-
/** This record represents a task and its urls object to be returned. */
@Schema(description = "This record represents a task and its urls object to be returned.")
public record TaskResponse(
@@ -25,7 +24,7 @@ public record TaskResponse(
* @param entity The TaskEntity source data.
* @return TaskResponse instance with all task data and urls, if any.
*/
- public static TaskResponse fromEntity(TaskEntity entity, PrettyTime prettyTime) {
+ public static TaskResponse fromEntity(TaskEntity entity) {
List urls = entity.getUrls();
List urlsResponse = new ArrayList<>();
if (Objects.isNull(urls)) {
@@ -37,11 +36,7 @@ public record TaskResponse(
}
}
- if (Objects.isNull(prettyTime)) {
- prettyTime = new PrettyTime();
- }
-
- String timeAgoFmt = prettyTime.format(entity.getLastUpdate());
+ String timeAgoFmt = TimeAgoUtil.format(entity.getLastUpdate());
return new TaskResponse(
entity.getId(),
diff --git a/server/src/main/java/br/com/tasknoteapp/server/response/ValidationExceptionResponse.java b/server/src/main/java/br/com/tasknoteapp/server/response/ValidationExceptionResponse.java
index 2510962..a79d710 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/response/ValidationExceptionResponse.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/response/ValidationExceptionResponse.java
@@ -1,16 +1,15 @@
package br.com.tasknoteapp.server.response;
+import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
-
+import lombok.Getter;
import org.springframework.validation.FieldError;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Getter;
-
+/** This class represents a validation error exception to be returned in the JSON format. */
@Getter
@Schema(description = "An object containing the error message and the invalid fields")
public class ValidationExceptionResponse {
-
+
private static final String MESSAGE_TEMPLATE = "%d field(s) with validation problems!";
@Schema(description = "The error message")
diff --git a/server/src/main/java/br/com/tasknoteapp/server/service/NoteService.java b/server/src/main/java/br/com/tasknoteapp/server/service/NoteService.java
index f507897..459020b 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/service/NoteService.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/service/NoteService.java
@@ -6,6 +6,7 @@ import br.com.tasknoteapp.server.request.NoteRequest;
import br.com.tasknoteapp.server.response.NoteResponse;
import java.util.List;
+/** This interface contains methods to handle notes. */
public interface NoteService {
public List getAllNotes();
diff --git a/server/src/main/java/br/com/tasknoteapp/server/service/impl/AuthServiceImpl.java b/server/src/main/java/br/com/tasknoteapp/server/service/impl/AuthServiceImpl.java
index 8eb5474..139c29d 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/service/impl/AuthServiceImpl.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/service/impl/AuthServiceImpl.java
@@ -126,7 +126,7 @@ class AuthServiceImpl implements AuthService {
* Get all registered users.
*
* @return List of UserEntity.
- * @throws UserForbiddenException
+ * @throws UserForbiddenException when the user has no permission.
*/
@Override
public List getAllUsers() {
@@ -136,7 +136,7 @@ class AuthServiceImpl implements AuthService {
log.info("Getting all users to user {}", currentUser.getId());
- if (!currentUser.getAdmin()) {
+ if (!currentUser.getAdmin() || !currentUser.getEmail().equals("ricardompcampos@gmail.com")) {
log.info("User not allowed!");
throw new UserForbiddenException();
}
diff --git a/server/src/main/java/br/com/tasknoteapp/server/service/impl/JwtServiceImpl.java b/server/src/main/java/br/com/tasknoteapp/server/service/impl/JwtServiceImpl.java
index ee077d5..1461914 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/service/impl/JwtServiceImpl.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/service/impl/JwtServiceImpl.java
@@ -19,10 +19,10 @@ import org.springframework.stereotype.Service;
@Service
class JwtServiceImpl implements JwtService {
- private final long SECOND = 1000;
- private final long MINUTE = SECOND * 60;
- private final long EXPIRATION_TIME = MINUTE * 30;
- private final SecretKey KEY = Jwts.SIG.HS256.key().build();
+ private static final long SECOND = 1000;
+ private static final long MINUTE = SECOND * 60;
+ private static final long EXPIRATION_TIME = MINUTE * 30;
+ private static final SecretKey KEY = Jwts.SIG.HS256.key().build();
@Override
public String getEmailFromToken(String token) {
diff --git a/server/src/main/java/br/com/tasknoteapp/server/service/impl/NoteServiceImpl.java b/server/src/main/java/br/com/tasknoteapp/server/service/impl/NoteServiceImpl.java
index 280ff3a..5b29570 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/service/impl/NoteServiceImpl.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/service/impl/NoteServiceImpl.java
@@ -22,6 +22,7 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+/** This class implements the NoteService interface methods. */
@Slf4j
@Service
@AllArgsConstructor
diff --git a/server/src/main/java/br/com/tasknoteapp/server/service/impl/TaskServiceImpl.java b/server/src/main/java/br/com/tasknoteapp/server/service/impl/TaskServiceImpl.java
index f239a8d..29e4378 100644
--- a/server/src/main/java/br/com/tasknoteapp/server/service/impl/TaskServiceImpl.java
+++ b/server/src/main/java/br/com/tasknoteapp/server/service/impl/TaskServiceImpl.java
@@ -17,13 +17,10 @@ import jakarta.transaction.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
-import java.util.Locale;
-import java.util.MissingResourceException;
import java.util.Objects;
import java.util.Optional;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.ocpsoft.prettytime.PrettyTime;
import org.springframework.stereotype.Service;
/** This class contains the implementation for the Task Service class. */
@@ -49,30 +46,7 @@ class TaskServiceImpl implements TaskService {
List tasks = taskRepository.findAllByUser_id(user.getId());
log.info("{} tasks found!", tasks.size());
- try {
- log.info("Trying PrettyTime with 'en-US'");
- new PrettyTime(Locale.forLanguageTag("en-US"));
- } catch (MissingResourceException e) {
- log.error("Not found PrettyTime with 'en-US'");
- }
-
- try {
- log.info("Trying PrettyTime with 'en_US'");
- new PrettyTime(Locale.forLanguageTag("en_US"));
- } catch (MissingResourceException e) {
- log.error("Not found PrettyTime with 'en_US'");
- }
-
- try {
- log.info("Trying PrettyTime with 'en'");
- new PrettyTime(Locale.forLanguageTag("en"));
- } catch (MissingResourceException e) {
- log.error("Not found PrettyTime with 'en'");
- }
-
- Locale localeForLangEnUs = Locale.forLanguageTag("en");
- PrettyTime time = new PrettyTime(localeForLangEnUs);
- return tasks.stream().map((TaskEntity tr) -> TaskResponse.fromEntity(tr, time)).toList();
+ return tasks.stream().map((TaskEntity tr) -> TaskResponse.fromEntity(tr)).toList();
}
@Override
@@ -140,7 +114,7 @@ class TaskServiceImpl implements TaskService {
log.info("Task patched! Id {}", patchedTask.getId());
- return TaskResponse.fromEntity(patchedTask, null);
+ return TaskResponse.fromEntity(patchedTask);
}
@Override
@@ -178,8 +152,7 @@ class TaskServiceImpl implements TaskService {
taskRepository.findAllBySearchTerm(searchTerm.toUpperCase(), user.getId());
log.info("{} tasks found!", tasks.size());
- PrettyTime time = new PrettyTime();
- return tasks.stream().map((TaskEntity tr) -> TaskResponse.fromEntity(tr, time)).toList();
+ return tasks.stream().map((TaskEntity tr) -> TaskResponse.fromEntity(tr)).toList();
}
private UserEntity getCurrentUser() {
diff --git a/server/src/main/java/br/com/tasknoteapp/server/util/TimeAgoUtil.java b/server/src/main/java/br/com/tasknoteapp/server/util/TimeAgoUtil.java
new file mode 100644
index 0000000..99cd16e
--- /dev/null
+++ b/server/src/main/java/br/com/tasknoteapp/server/util/TimeAgoUtil.java
@@ -0,0 +1,46 @@
+package br.com.tasknoteapp.server.util;
+
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.time.Period;
+
+/** This class contains util methods to format local date time. */
+public class TimeAgoUtil {
+
+ /**
+ * Format a time in the time ago format.
+ *
+ * @param pastTime The past time to be formatted.
+ * @return String with formatted time.
+ */
+ public static String format(LocalDateTime pastTime) {
+ LocalDateTime now = LocalDateTime.now();
+ Period period = Period.between(pastTime.toLocalDate(), now.toLocalDate());
+ Duration duration = Duration.between(pastTime, now);
+ if (period.getYears() > 1) {
+ return String.format("%d years ago", period.getYears());
+ } else if (period.getYears() > 0) {
+ return String.format("%d year ago", period.getYears());
+ } else if (period.getMonths() > 1) {
+ return String.format("%d months ago", period.getMonths());
+ } else if (period.getMonths() > 0) {
+ return String.format("%d month ago", period.getMonths());
+ } else if (period.getDays() > 1) {
+ return String.format("%d days ago", period.getDays());
+ } else if (period.getDays() > 0) {
+ return String.format("%d day ago", period.getDays());
+ } else if (duration.toHours() > 1L) {
+ return String.format("%d hours ago", duration.toHours());
+ } else if (duration.toHours() > 0L) {
+ return String.format("%d hour ago", duration.toHours());
+ } else if (duration.toMinutes() > 1L) {
+ return String.format("%d minutes ago", duration.toMinutes());
+ } else if (duration.toMinutes() > 0L) {
+ return String.format("%d minute ago", duration.toMinutes());
+ } else if (duration.toSeconds() > 1L) {
+ return String.format("%d seconds ago", duration.toSeconds());
+ } else {
+ return "moments ago";
+ }
+ }
+}
diff --git a/server/src/main/resources/META-INF/native-image/config.ini b/server/src/main/resources/META-INF/native-image/config.ini
deleted file mode 100644
index d8a380c..0000000
--- a/server/src/main/resources/META-INF/native-image/config.ini
+++ /dev/null
@@ -1 +0,0 @@
-resources = org.ocpsoft.prettytime.i18n.*
diff --git a/server/src/test/java/br/com/tasknoteapp/server/JavaApiApplicationTests.java b/server/src/test/java/br/com/tasknoteapp/server/JavaApiApplicationTests.java
index 58b3716..a608f54 100644
--- a/server/src/test/java/br/com/tasknoteapp/server/JavaApiApplicationTests.java
+++ b/server/src/test/java/br/com/tasknoteapp/server/JavaApiApplicationTests.java
@@ -6,8 +6,6 @@ import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class JavaApiApplicationTests {
- @Test
- void contextLoads() {
- }
-
+ @Test
+ void contextLoads() {}
}