From 2653939db22d2e731cccc15ba1b6f799ddfe8d1d Mon Sep 17 00:00:00 2001 From: NoirFLamme <40685531+NoirFLamme@users.noreply.github.com> Date: Wed, 28 Dec 2022 17:42:15 +0200 Subject: [PATCH 1/2] Revert "Pa 67 notes save notes integration" --- .../barmjz/productivityapp/Folder/Folder.java | 6 +- .../productivityapp/Note/NoteController.java | 11 +- .../productivityapp/Note/NoteManager.java | 28 +- .../todo_task_category/task/TaskService.java | 4 + .../src/main/resources/application.properties | 4 +- .../Folder/GetUserFolderTest.java | 1 - .../productivityapp/Note/CreateNoteTest.java | 17 +- .../productivityapp/Note/GetNoteTest.java | 2 +- .../productivityapp/Note/ModifyNoteTest.java | 33 +- frontend/App.js | 35 +- frontend/AppNavigation.js | 71 - frontend/UI/NavigationButton.js | 20 - frontend/api/notes.api.js | 32 +- frontend/babel.config.js | 8 +- .../components/{home-component => }/Home.js | 12 +- .../LoginScreen.js => Login.js} | 12 +- .../{mindmap-component => }/MindMap.js | 8 +- .../MindMapCategory.js | 6 +- frontend/components/MindMapScreen.js | 14 + ...dRecoveryScreen.js => PasswordRecovery.js} | 0 .../SignUpScreen.js => SignUp.js} | 8 +- .../{todo-component => }/TodoCategoryGroup.js | 4 +- .../{todo-component => }/TodoList.js | 6 +- .../{todo-component => }/TodoScreen.js | 4 +- .../mindmap-component/MindMapScreen.js | 18 - .../{NotesScreen.js => Notes-Main.js} | 63 +- .../CurrentFolderContainer.js | 63 +- .../{ => Subcomponents}/FoldersContainer.js | 2 +- .../{ => Subcomponents}/NoteEditor.js | 9 +- .../notes-component/{ => UI-Items}/Folder.js | 2 +- .../notes-component/{ => UI-Items}/Note.js | 5 +- frontend/package-lock.json | 1243 +++++++++++++---- frontend/package.json | 6 +- 33 files changed, 1157 insertions(+), 600 deletions(-) delete mode 100644 frontend/AppNavigation.js delete mode 100644 frontend/UI/NavigationButton.js rename frontend/components/{home-component => }/Home.js (68%) rename frontend/components/{login-component/LoginScreen.js => Login.js} (89%) rename frontend/components/{mindmap-component => }/MindMap.js (96%) rename frontend/components/{mindmap-component => }/MindMapCategory.js (97%) create mode 100644 frontend/components/MindMapScreen.js rename frontend/components/{login-component/PasswordRecoveryScreen.js => PasswordRecovery.js} (100%) rename frontend/components/{login-component/SignUpScreen.js => SignUp.js} (94%) rename frontend/components/{todo-component => }/TodoCategoryGroup.js (89%) rename frontend/components/{todo-component => }/TodoList.js (96%) rename frontend/components/{todo-component => }/TodoScreen.js (75%) delete mode 100644 frontend/components/mindmap-component/MindMapScreen.js rename frontend/components/notes-component/{NotesScreen.js => Notes-Main.js} (71%) rename frontend/components/notes-component/{ => Subcomponents}/CurrentFolderContainer.js (82%) rename frontend/components/notes-component/{ => Subcomponents}/FoldersContainer.js (98%) rename frontend/components/notes-component/{ => Subcomponents}/NoteEditor.js (95%) rename frontend/components/notes-component/{ => UI-Items}/Folder.js (96%) rename frontend/components/notes-component/{ => UI-Items}/Note.js (84%) diff --git a/backend/src/main/java/com/barmjz/productivityapp/Folder/Folder.java b/backend/src/main/java/com/barmjz/productivityapp/Folder/Folder.java index 39d43c8..82346e5 100644 --- a/backend/src/main/java/com/barmjz/productivityapp/Folder/Folder.java +++ b/backend/src/main/java/com/barmjz/productivityapp/Folder/Folder.java @@ -45,7 +45,11 @@ public class Folder { private Date CreatedDate; private Date modifiedDate; - @ManyToOne(fetch = FetchType.LAZY, optional = false) + @ManyToOne( + optional = false, + cascade = CascadeType.ALL + ) + @OnDelete(action = OnDeleteAction.CASCADE) @JoinColumn( name = "user_id", referencedColumnName = "id" diff --git a/backend/src/main/java/com/barmjz/productivityapp/Note/NoteController.java b/backend/src/main/java/com/barmjz/productivityapp/Note/NoteController.java index f5fd095..956671c 100644 --- a/backend/src/main/java/com/barmjz/productivityapp/Note/NoteController.java +++ b/backend/src/main/java/com/barmjz/productivityapp/Note/NoteController.java @@ -1,7 +1,6 @@ package com.barmjz.productivityapp.Note; -import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.AllArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -27,13 +26,13 @@ public ResponseEntity createNote(@RequestParam("folderId") Long folderId, } @PutMapping("/modify") - public ResponseEntity modifyNote(@RequestParam("noteId") Long noteId, @RequestBody ObjectNode objectNode) { + public ResponseEntity modifyNote(@RequestParam("folderId") Long folderId, @RequestBody String modifiedNote) { try { - String title = objectNode.get("title").asText(); - String content = objectNode.get("content").asText(); - return ResponseEntity.status(HttpStatus.OK).body(noteManager.modifyNote(noteId, title, content)); + System.out.println(modifiedNote); +// return ResponseEntity.status(HttpStatus.OK).body(noteManager.modifyNote(modifiedNote, folderId)); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); } catch (Exception exception) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Fuck"); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); } } diff --git a/backend/src/main/java/com/barmjz/productivityapp/Note/NoteManager.java b/backend/src/main/java/com/barmjz/productivityapp/Note/NoteManager.java index 323c108..61851d0 100644 --- a/backend/src/main/java/com/barmjz/productivityapp/Note/NoteManager.java +++ b/backend/src/main/java/com/barmjz/productivityapp/Note/NoteManager.java @@ -39,18 +39,24 @@ public Note createNote(Long folderId, String noteTitle){ return newNote; } - public String modifyNote(Long noteId, String title, String content){ - if(noteId == null || !noteRepo.existsById(noteId)) + public Note modifyNote(Note modifiedNote, Long folderId){ + if(modifiedNote == null || modifiedNote.getId() == null) + throw new NullPointerException("note is null"); + if(!noteRepo.existsById(modifiedNote.getId())) throw new NoSuchElementException("note not found"); - Note existedNote = noteRepo.getReferenceById(noteId); - if( (noteRepo.existsByTitleAndFolder_Id(title,existedNote.getFolder().getId())) && - (!noteRepo.findByTitleAndFolder_Id(title,existedNote.getFolder().getId()).getId().equals(existedNote.getId()))) - throw new IllegalStateException("note new title already exist"); - existedNote.setTitle(title); - existedNote.setContent(content); +// if(!noteRepo.findByTitleAndFolder_Id(modifiedNote.getTitle(),folderId) +// .getId().equals(modifiedNote.getId())) +// throw new IllegalStateException("note title already exist"); + Note existedNote = noteRepo.getReferenceById(modifiedNote.getId()); + // need more efficient way + existedNote.setTitle(modifiedNote.getTitle()); + existedNote.setContent(modifiedNote.getContent()); existedNote.setModifiedDate(new Date()); + existedNote.setStarred(modifiedNote.isStarred()); + existedNote.setColor(modifiedNote.getColor()); + existedNote.setFontSize(modifiedNote.getFontSize()); noteRepo.save(existedNote); - return "note modified"; + return existedNote; } public List getFolderNotes(Long folderId){ @@ -74,8 +80,8 @@ public List getUserStarredNotes(Long userId){ public Note moveNote(Long newFolderId, Long noteId){ if(noteId == null || newFolderId == null || !folderRepo.existsFolderById(newFolderId) || !noteRepo.existsById(noteId)) throw new NoSuchElementException("not found"); - Note note = noteRepo.findById(noteId).get(); - note.setFolder(folderRepo.findById(newFolderId).get()); + Note note = noteRepo.getReferenceById(noteId); + note.setFolder(folderRepo.getReferenceById(newFolderId)); noteRepo.save(note); return note; } diff --git a/backend/src/main/java/com/barmjz/productivityapp/todo_task_category/task/TaskService.java b/backend/src/main/java/com/barmjz/productivityapp/todo_task_category/task/TaskService.java index 32c5240..f2dab8f 100644 --- a/backend/src/main/java/com/barmjz/productivityapp/todo_task_category/task/TaskService.java +++ b/backend/src/main/java/com/barmjz/productivityapp/todo_task_category/task/TaskService.java @@ -36,6 +36,10 @@ public TaskService(UserRepo userRepo, CategoryRepo categoryRepo, OneTimeTaskRepo this.repeatedTaskRepo = repeatedTaskRepo; } + @Autowired + + + public Task getTask(Long taskId){ if (oneTimeTaskRepo.existsById(taskId)) return oneTimeTaskRepo.findById(taskId).orElse(null); diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index 9ba29f8..b95b7b7 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -1,10 +1,10 @@ spring.datasource.url=jdbc:mysql://localhost:3306/prod_schema spring.datasource.username=root -spring.datasource.password=root +spring.datasource.password=1000*1000 spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.formate_sql=true spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect rsa.private-key=classpath:certs/private.pem -rsa.public-key=classpath:certs/public.pem +rsa.public-key=classpath:certs/public.pem \ No newline at end of file diff --git a/backend/src/test/java/com/barmjz/productivityapp/Folder/GetUserFolderTest.java b/backend/src/test/java/com/barmjz/productivityapp/Folder/GetUserFolderTest.java index 2731245..de7235b 100644 --- a/backend/src/test/java/com/barmjz/productivityapp/Folder/GetUserFolderTest.java +++ b/backend/src/test/java/com/barmjz/productivityapp/Folder/GetUserFolderTest.java @@ -71,7 +71,6 @@ void getExistedUserFolders(){ @Test void getNonExistedUserFolders(){ - userRepo.save(user1); folderRepo.save(folder1); folderRepo.save(folder2); assertThatThrownBy(() -> folderManager.getUserFolders(user1.getId()+3)) diff --git a/backend/src/test/java/com/barmjz/productivityapp/Note/CreateNoteTest.java b/backend/src/test/java/com/barmjz/productivityapp/Note/CreateNoteTest.java index 6ce8fc8..6f65174 100644 --- a/backend/src/test/java/com/barmjz/productivityapp/Note/CreateNoteTest.java +++ b/backend/src/test/java/com/barmjz/productivityapp/Note/CreateNoteTest.java @@ -3,7 +3,6 @@ import com.barmjz.productivityapp.Folder.Folder; import com.barmjz.productivityapp.Folder.FolderRepo; import com.barmjz.productivityapp.user.User; -import com.barmjz.productivityapp.user.UserRepo; import lombok.Data; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -20,11 +19,9 @@ @DataJpaTest class CreateNoteTest { - @Autowired UserRepo userRepo; @Autowired FolderRepo folderRepo; @Autowired NoteRepo noteRepo; NoteManager noteManager; - User user; Folder folder; Note note1; Note note2; @@ -36,16 +33,14 @@ void setUp() { folderRepo.deleteAll(); noteRepo.deleteAll(); date = new Date(); - user = User.builder() - .email("user1@gmail.com") - .password("pass") - .firstName("userFirst") - .lastName("userLast") - .build(); - userRepo.save(user); folder = Folder.builder() .name("folder") - .user(user) + .user(User.builder() + .email("user1@gmail.com") + .password("pass") + .firstName("userFirst") + .lastName("userLast") + .build()) .CreatedDate(date) .modifiedDate(date) .build(); diff --git a/backend/src/test/java/com/barmjz/productivityapp/Note/GetNoteTest.java b/backend/src/test/java/com/barmjz/productivityapp/Note/GetNoteTest.java index ec04ebe..6fec96a 100644 --- a/backend/src/test/java/com/barmjz/productivityapp/Note/GetNoteTest.java +++ b/backend/src/test/java/com/barmjz/productivityapp/Note/GetNoteTest.java @@ -102,7 +102,7 @@ void getStarredNotes(){ note2 = noteManager.createNote(folder2.getId(),"note2"); note2.setContent("content2"); noteManager.alterStar(note2.getId()); - noteManager.modifyNote(note2.getId(), note2.getTitle(), note2.getContent()); + noteManager.modifyNote(note2, note2.getFolder().getId()); assertThat(note2.isStarred()).isTrue(); assertThat(noteRepo.findById(note2.getId()).get().getContent()).isEqualTo("content2"); List starredNotes = new ArrayList<>(); diff --git a/backend/src/test/java/com/barmjz/productivityapp/Note/ModifyNoteTest.java b/backend/src/test/java/com/barmjz/productivityapp/Note/ModifyNoteTest.java index 6beed93..b331f66 100644 --- a/backend/src/test/java/com/barmjz/productivityapp/Note/ModifyNoteTest.java +++ b/backend/src/test/java/com/barmjz/productivityapp/Note/ModifyNoteTest.java @@ -3,7 +3,6 @@ import com.barmjz.productivityapp.Folder.Folder; import com.barmjz.productivityapp.Folder.FolderRepo; import com.barmjz.productivityapp.user.User; -import com.barmjz.productivityapp.user.UserRepo; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -19,8 +18,8 @@ @DataJpaTest class ModifyNoteTest { - @Autowired UserRepo userRepo; - @Autowired FolderRepo folderRepo; + @Autowired + FolderRepo folderRepo; @Autowired NoteRepo noteRepo; NoteManager noteManager; Folder folder; @@ -34,16 +33,14 @@ void setUp() { folderRepo.deleteAll(); noteRepo.deleteAll(); date = new Date(); - User user = User.builder() - .email("user1@gmail.com") - .password("pass") - .firstName("userFirst") - .lastName("userLast") - .build(); - userRepo.save(user); folder = Folder.builder() .name("folder") - .user(user) + .user(User.builder() + .email("user1@gmail.com") + .password("pass") + .firstName("userFirst") + .lastName("userLast") + .build()) .CreatedDate(date) .modifiedDate(date) .build(); @@ -61,16 +58,19 @@ void modifyNote(){ .folder(folder) .createdDate(date) .modifiedDate(date) + .fontSize(8) .build(); - noteManager.modifyNote(note2.getId(), note2.getTitle(), note2.getContent()); + noteManager.modifyNote(note2, folder.getId()); assertThat(noteRepo.findById(note1.getId()).get().getContent()).isEqualTo("note 1 content"); + assertThat(noteRepo.findById(note1.getId()).get().getFontSize()).isEqualTo(8); +// assertThat(noteRepo.findById(note1.getId()).get()).isEqualTo(note2); } @Test void invalidModifiedNote(){ - assertThatThrownBy(() -> noteManager.modifyNote(null, "new title", "new content")) - .isInstanceOf(NoSuchElementException.class) - .hasMessageContaining("note not found"); + assertThatThrownBy(() -> noteManager.modifyNote(null, folder.getId())) + .isInstanceOf(NullPointerException.class) + .hasMessageContaining("note is null"); } @Test @@ -85,8 +85,9 @@ void modifyNonExistedNote(){ .folder(folder) .createdDate(date) .modifiedDate(date) + .fontSize(8) .build(); - assertThatThrownBy(() -> noteManager.modifyNote(note2.getId(),note2.getTitle(), note2.getContent())) + assertThatThrownBy(() -> noteManager.modifyNote(note2,folder.getId())) .isInstanceOf(NoSuchElementException.class) .hasMessageContaining("note not found"); } diff --git a/frontend/App.js b/frontend/App.js index 7c1b195..0715e44 100644 --- a/frontend/App.js +++ b/frontend/App.js @@ -1,18 +1,43 @@ -import 'react-native-gesture-handler'; import * as React from "react"; -import { StatusBar } from "expo-status-bar"; +import { Home } from "./components/Home"; +import { Login } from "./components/Login"; +import { PasswordRecovery } from "./components/PasswordRecovery"; +import { SignUp } from "./components/SignUp"; +import TodoScreen from "./components/TodoScreen"; +import MindMapScreen from "./components/MindMapScreen"; +import { Notes } from "./components/notes-component/Notes-Main"; +import { StatusBar } from 'expo-status-bar'; +import { NavigationContainer } from "@react-navigation/native"; +import { createNativeStackNavigator } from "@react-navigation/native-stack"; import { NativeBaseProvider } from "native-base"; import { AuthContextProvider } from "./store/auth-context"; import { theme } from "./UI/theme"; -import AppNavigation from "./AppNavigation"; + + +const Stack = createNativeStackNavigator(); + export default function App() { return ( - - + + + + + + + + + + {/* */} + + + ); diff --git a/frontend/AppNavigation.js b/frontend/AppNavigation.js deleted file mode 100644 index f085cc2..0000000 --- a/frontend/AppNavigation.js +++ /dev/null @@ -1,71 +0,0 @@ -import React, { useContext } from "react"; -import { VStack } from "native-base"; -import AuthContext from "./store/auth-context"; - -import { NavigationContainer } from "@react-navigation/native"; -import { createNativeStackNavigator } from "@react-navigation/native-stack"; -import { createDrawerNavigator } from "@react-navigation/drawer"; - -const Stack = createNativeStackNavigator(); -const Drawer = createDrawerNavigator(); - -import { Home } from "./components/home-component/Home"; -import { Login } from "./components/login-component/LoginScreen"; -import { PasswordRecovery } from "./components/login-component/PasswordRecoveryScreen"; -import { SignUp } from "./components/login-component/SignUpScreen"; -import { Notes } from "./components/notes-component/NotesScreen"; -import TodoScreen from "./components/todo-component/TodoScreen"; -import MindMapScreen from "./components/mindmap-component/MindMapScreen"; - -const AppNavigation = () => { - const auth = useContext(AuthContext); - - return ( - - {auth.isLoggedIn ? ( - - - - - - - ) : ( - - - - - - )} - - ); -}; - -import { - DrawerContentScrollView, - DrawerItemList, - DrawerItem, -} from "@react-navigation/drawer"; -import { Ionicons } from "@expo/vector-icons"; - -function CustomDrawerContent(props) { - const auth = useContext(AuthContext); - - return ( - - - - - - } - labelStyle={{ marginLeft: -25 }} - onPress={() => auth.logout()} - /> - - ); -} -export default AppNavigation; diff --git a/frontend/UI/NavigationButton.js b/frontend/UI/NavigationButton.js deleted file mode 100644 index f6c807e..0000000 --- a/frontend/UI/NavigationButton.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from "react"; -import { IconButton, HamburgerIcon } from "native-base"; -import { DrawerActions, useNavigation } from "@react-navigation/native"; - -export const NavigationButton = ({ navigation }) => { - const navigate = useNavigation(); - - const toggleDrawer = () => { - navigate.dispatch(DrawerActions.toggleDrawer()); - }; - - return ( - } - > - Toggle - - ); -}; diff --git a/frontend/api/notes.api.js b/frontend/api/notes.api.js index 4b5b041..22b1a31 100644 --- a/frontend/api/notes.api.js +++ b/frontend/api/notes.api.js @@ -105,43 +105,21 @@ export const getFolders = async (token) => { return response; } - export const editNote = async (noteId, title, content, token) => { - const url = `${BACKEND_URL}/note/modify?noteId=${noteId}`; + export const editNote = async (note, folderId, token) => { + const url = `${BACKEND_URL}/note/modify?folderId=${folderId}`; - const stringBody = { - title: `${title}`, - content: `${content}` - } - - const response = await fetch(url, { - method: "PUT", - headers: { "Content-type": "application/json", Authorization: `Bearer ${token}` }, - body: JSON.stringify(stringBody), - }).catch((error) => { - throw new Error("Problem connecting with the server!"); - }); - - if (response.status !== 200) { - const message = "I don't Know Yet"; - throw new Error(message); - } - - return response; - } - - export const MoveNoteToFolder = async (newFolderId, noteId, token) => { - const url = `${BACKEND_URL}/note/moveNote?newFolderId=${newFolderId}¬eId=${noteId}`; + console.log("Note", note) const response = await fetch(url, { method: "PUT", headers: { "Content-type": "application/json", Authorization: `Bearer ${token}` }, + body: note, }).catch((error) => { throw new Error("Problem connecting with the server!"); }); - console.log(response.headers) if (response.status !== 200) { - const message = "I don't know yet."; + const message = "Folder has the same name as this"; throw new Error(message); } diff --git a/frontend/babel.config.js b/frontend/babel.config.js index 99860ab..2900afe 100644 --- a/frontend/babel.config.js +++ b/frontend/babel.config.js @@ -1,10 +1,6 @@ -module.exports = function (api) { +module.exports = function(api) { api.cache(true); return { - presets: ["babel-preset-expo"], - plugins: [ - "@babel/plugin-proposal-export-namespace-from", - "react-native-reanimated/plugin", - ], + presets: ['babel-preset-expo'], }; }; diff --git a/frontend/components/home-component/Home.js b/frontend/components/Home.js similarity index 68% rename from frontend/components/home-component/Home.js rename to frontend/components/Home.js index 9e65c97..901bc0a 100644 --- a/frontend/components/home-component/Home.js +++ b/frontend/components/Home.js @@ -1,10 +1,9 @@ import { useContext, useState, useEffect } from "react"; -import { Text, View } from "react-native"; -import AuthContext from "../../store/auth-context"; -import { getUser } from "../../api/user.api"; -import { NavigationButton } from "../../UI/NavigationButton"; +import { Button, Text, View } from "react-native"; +import AuthContext from "../store/auth-context"; +import { getUser } from "../api/user.api"; -export const Home = () => { +export const Home = ({ navigation }) => { const [name, setName] = useState(""); const auth = useContext(AuthContext); @@ -22,12 +21,13 @@ export const Home = () => { return ( - Welcome Home 😁 {auth.isLoggedIn && Hello, {name}} {auth.isLoggedIn && ( logged in Token = {auth.token} )} +