diff --git a/pom.xml b/pom.xml
index baec0d9..ac274a5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,13 +18,29 @@
-
- UTF-8
- UTF-8
- 11
-
-
+
+ org.projectlombok
+ lombok
+ 1.18.30
+ provided
+
+
+
+
+
+ org.apache.logging.log4j
+ log4j-api
+ ${log4j-api.version}
+
+
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
org.springframework.boot
spring-boot-starter-data-jpa
@@ -53,6 +69,14 @@
test
+
+ UTF-8
+ UTF-8
+ 17
+ 1.7.36
+ 2.17.1
+ 3.3.6
+
@@ -62,6 +86,4 @@
-
-
diff --git a/src/main/java/com/example/easynotes/controller/IndexController.java b/src/main/java/com/example/easynotes/controller/IndexController.java
index f9c5ea4..7b15e60 100644
--- a/src/main/java/com/example/easynotes/controller/IndexController.java
+++ b/src/main/java/com/example/easynotes/controller/IndexController.java
@@ -1,16 +1,25 @@
package com.example.easynotes.controller;
-
-
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/")
+@Slf4j
public class IndexController {
@GetMapping
public String sayHello() {
- return "Hello and Welcome to the EasyNotes application. You can create a new Note by making a POST request to /api/notes endpoint.";
+ try{
+ log.info("/ API hit");
+ return "Hello and Welcome to the EasyNotes application. You can create a new Note by making a POST request to /api/notes endpoint.";
+ } catch (Exception e ){
+ log.error("Error:{}",e);
+ return "Contact Administrator";
+ }
+
}
}
diff --git a/src/main/java/com/example/easynotes/controller/NoteController.java b/src/main/java/com/example/easynotes/controller/NoteController.java
index 52f2ef0..51763f2 100644
--- a/src/main/java/com/example/easynotes/controller/NoteController.java
+++ b/src/main/java/com/example/easynotes/controller/NoteController.java
@@ -1,13 +1,20 @@
package com.example.easynotes.controller;
+import com.example.easynotes.exception.Messages;
import com.example.easynotes.exception.ResourceNotFoundException;
import com.example.easynotes.model.Note;
import com.example.easynotes.repository.NoteRepository;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
+import java.io.*;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.List;
/**
@@ -15,11 +22,21 @@
*/
@RestController
@RequestMapping("/api")
+@Slf4j
public class NoteController {
@Autowired
NoteRepository noteRepository;
+
+ @Autowired
+ Messages messages;
+
+
+
+ private static final long MAX_FILE_SIZE = 2L * 1024 * 1024 * 1024; // 10GB
+
+
@GetMapping("/notes")
public List getAllNotes() {
return noteRepository.findAll();
@@ -59,4 +76,49 @@ public ResponseEntity> deleteNote(@PathVariable(value = "id") Long noteId) {
return ResponseEntity.ok().build();
}
+
+ @PostMapping("/upload/file")
+ public ResponseEntity uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
+ log.info(file.getOriginalFilename());
+
+ // #TODO : put this value in properties file
+ final String uploadLocation="C:\\Users\\harsh\\PROJECTS\\src\\main\\resources\\notes";
+
+ // 1. Validate file size (between 2000 and 2000 MB)
+ if (file.isEmpty() || file.getSize() > MAX_FILE_SIZE) {
+ log.info("File Size is :{}",file.getSize());
+ return ResponseEntity.badRequest().body(messages.FileLimit);
+ }
+
+ // 2. Extract filename directly from MultipartFile (assuming no specific format)
+ String fileName = file.getOriginalFilename();
+ log.info("File Name uploaded is {}",fileName);
+
+ // 3. Sanitize filename
+ if (fileName == null || fileName.isEmpty() || fileName.contains("..")) {
+ return new ResponseEntity<>(messages.InvalidFileName, HttpStatus.BAD_REQUEST);
+ }
+
+ // Perform additional processing with the sanitized filename and uploaded file content (not shown for brevity)
+ Path filePath=Paths.get(uploadLocation).resolve(file.getOriginalFilename());
+
+
+ // Create input stream from uploaded file
+ try (InputStream inputStream = file.getInputStream();
+ // Create output stream to write file directly to disk
+ OutputStream outputStream = new FileOutputStream(filePath.toFile())) {
+ byte[] buffer = new byte[1024];
+ int bytesRead;
+ while ((bytesRead = inputStream.read(buffer)) != -1) {
+ outputStream.write(buffer, 0, bytesRead);
+ }
+
+ return new ResponseEntity<>(messages.SuccessFullyUploaded,HttpStatus.OK);
+ } catch(Exception e ){
+ log.error(messages.ErrorSavingFile);
+ return new ResponseEntity<>(messages.ErrorSavingFile,HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+
+ }
+
}
diff --git a/src/main/java/com/example/easynotes/exception/Messages.java b/src/main/java/com/example/easynotes/exception/Messages.java
new file mode 100644
index 0000000..64041b0
--- /dev/null
+++ b/src/main/java/com/example/easynotes/exception/Messages.java
@@ -0,0 +1,12 @@
+package com.example.easynotes.exception;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class Messages {
+ public final String FileNotFound="File Not Found";
+ public final String InvalidFileName="Invalid FileName";
+ public final String SuccessFullyUploaded="File uploaded successfully";
+ public final String ErrorSavingFile ="Error saving the file";
+ public final String FileLimit=" File must be not empty and less than 2Gb";
+}
diff --git a/src/main/java/config/AppConfig.java b/src/main/java/config/AppConfig.java
new file mode 100644
index 0000000..5e462df
--- /dev/null
+++ b/src/main/java/config/AppConfig.java
@@ -0,0 +1,20 @@
+package config;
+
+import com.example.easynotes.exception.Messages;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+@ComponentScan
+@Configuration
+public class AppConfig {
+ private String messages;
+ private HttpStatus status;
+ @Bean
+ public Messages messages(){
+ return new Messages();
+ }
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index d357d46..2baa7dd 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -10,4 +10,16 @@ spring.datasource.password = callicoder
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
# Hibernate ddl auto (create, create-drop, validate, update)
-spring.jpa.hibernate.ddl-auto = update
\ No newline at end of file
+spring.jpa.hibernate.ddl-auto = update
+
+# Loggers and Levels
+logging.level.root=INFO
+logging.level.org.springframework.web=DEBUG
+logging.level.org.hibernate=WARN
+logging.level.org.hibernate.SQL=DEBUG
+logging.level.org.hibernate.exception=ERROR
+
+# File Logging Configuration
+logging.file.path=logs/
+logging.file.name=application.log
+logging.file.max-size=10MB
\ No newline at end of file
diff --git a/src/main/resources/notes/2023-01-05 (1).png b/src/main/resources/notes/2023-01-05 (1).png
new file mode 100644
index 0000000..3d9a205
Binary files /dev/null and b/src/main/resources/notes/2023-01-05 (1).png differ
diff --git a/src/main/resources/notes/SortServer2008Compat.nls b/src/main/resources/notes/SortServer2008Compat.nls
new file mode 100644
index 0000000..7592532
Binary files /dev/null and b/src/main/resources/notes/SortServer2008Compat.nls differ
diff --git a/src/main/resources/notes/SortWindows62.nls b/src/main/resources/notes/SortWindows62.nls
new file mode 100644
index 0000000..d0ff391
Binary files /dev/null and b/src/main/resources/notes/SortWindows62.nls differ
diff --git a/src/main/resources/notes/thoughts.txt b/src/main/resources/notes/thoughts.txt
new file mode 100644
index 0000000..4049dd4
--- /dev/null
+++ b/src/main/resources/notes/thoughts.txt
@@ -0,0 +1 @@
+you need to experience the bad to enjoy the good and the good to identify the bad
\ No newline at end of file