From 714215744c3445fa2e34416f7f50baf851b9c493 Mon Sep 17 00:00:00 2001 From: kimson Date: Mon, 8 Aug 2022 17:43:19 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[FE][:wrench:=20FIX]:=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=EC=88=98=EC=A0=95=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20#97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/frontend/src/apis/commonTypes.ts | 2 +- src/main/frontend/src/apis/user/index.ts | 2 +- .../frontend/src/apis/utils/fileupload.ts | 9 +- .../src/components/molecules/AvatarBox.tsx | 8 +- .../src/components/organisms/UserInfo.tsx | 12 ++- src/main/frontend/src/models/PModel.ts | 8 +- src/main/frontend/src/pages/Auth/Profile.tsx | 91 ++++++++++++------- src/main/frontend/src/tools/utils.ts | 21 ++++- 8 files changed, 108 insertions(+), 45 deletions(-) diff --git a/src/main/frontend/src/apis/commonTypes.ts b/src/main/frontend/src/apis/commonTypes.ts index 7e8eb0f..53d12bb 100644 --- a/src/main/frontend/src/apis/commonTypes.ts +++ b/src/main/frontend/src/apis/commonTypes.ts @@ -6,5 +6,5 @@ export type METHOD = "get" | "post" | "put" | "delete"; export const handleReceiveData = (res: AxiosResponse) => res.data; export const handleReceiveError = (err: { message: any }) => { - console.log(err.message); + console.log(err); }; diff --git a/src/main/frontend/src/apis/user/index.ts b/src/main/frontend/src/apis/user/index.ts index 40a9203..dd00a73 100644 --- a/src/main/frontend/src/apis/user/index.ts +++ b/src/main/frontend/src/apis/user/index.ts @@ -48,7 +48,7 @@ const findUserById = async (id: string) => { // 회원 수정 const userUpdate = (formData: FormData) => { - axios + return axios .put(`/api/user`, formData) .then(handleReceiveData) .catch(handleReceiveError); diff --git a/src/main/frontend/src/apis/utils/fileupload.ts b/src/main/frontend/src/apis/utils/fileupload.ts index aeb05fa..95de872 100644 --- a/src/main/frontend/src/apis/utils/fileupload.ts +++ b/src/main/frontend/src/apis/utils/fileupload.ts @@ -23,4 +23,11 @@ const profileUpload = (file: File, id: string, hashName: string) => { .catch(handleReceiveError); }; -export { fileupload, profileUpload }; +const deleteProfileImage = (id: string) => { + return axios + .delete("/api/user/profile/" + id) + .then(handleReceiveData) + .catch(handleReceiveError); +}; + +export { fileupload, profileUpload, deleteProfileImage }; diff --git a/src/main/frontend/src/components/molecules/AvatarBox.tsx b/src/main/frontend/src/components/molecules/AvatarBox.tsx index 681e8c3..ac96ccd 100644 --- a/src/main/frontend/src/components/molecules/AvatarBox.tsx +++ b/src/main/frontend/src/components/molecules/AvatarBox.tsx @@ -15,6 +15,7 @@ import { signout } from "../../apis/auth"; import { findByJwt } from "../../apis/user"; import { decodeJwt } from "jose"; import { removeUser, setUser, UserContext } from "../../contexts/UserProvider"; +import { profileIamgeOrCat } from "../../tools/utils"; function AvatarBox() { const navigate = useNavigate(); @@ -75,7 +76,12 @@ function AvatarBox() { - + { return name[0].toUpperCase(); }; return ( - + {author} diff --git a/src/main/frontend/src/models/PModel.ts b/src/main/frontend/src/models/PModel.ts index 95b5bb5..403352b 100644 --- a/src/main/frontend/src/models/PModel.ts +++ b/src/main/frontend/src/models/PModel.ts @@ -11,7 +11,7 @@ export class PModel { public log(): void { console.log( `[${this.constructor.name}_Class]:`, - JSON.stringify(this, null, 2) + JSON.stringify(this, null, 2), ); } @@ -21,7 +21,7 @@ export class PModel { (el: HTMLInputElement) => el instanceof Element && el.tagName === "INPUT" && - this.hasOwnProperty(el.name) + this.hasOwnProperty(el.name), ); } @@ -53,7 +53,9 @@ export class PModel { case "updates": break; default: - formData.append(column, value); + if (value) { + formData.append(column, value); + } break; } }); diff --git a/src/main/frontend/src/pages/Auth/Profile.tsx b/src/main/frontend/src/pages/Auth/Profile.tsx index 6983609..be309e7 100644 --- a/src/main/frontend/src/pages/Auth/Profile.tsx +++ b/src/main/frontend/src/pages/Auth/Profile.tsx @@ -12,14 +12,19 @@ import { EncryptJWT } from "jose"; import { sha256 } from "js-sha256"; import React, { useContext, useEffect, useState } from "react"; import { useCookies } from "react-cookie"; +import { useNavigate } from "react-router-dom"; import * as yup from "yup"; import { checkPassword } from "../../apis/auth"; import { handleReceiveError } from "../../apis/commonTypes"; import { addFaceImage } from "../../apis/faceImage"; import { userUpdate } from "../../apis/user"; -import { fileupload, profileUpload } from "../../apis/utils/fileupload"; +import { + deleteProfileImage, + fileupload, + profileUpload, +} from "../../apis/utils/fileupload"; import TextFieldSet from "../../components/molecules/TextFieldSet"; -import { UserContext } from "../../contexts/UserProvider"; +import { setUser, UserContext } from "../../contexts/UserProvider"; import FaceImage from "../../models/FaceImage"; import User, { UserColumn } from "../../models/User"; import { @@ -30,8 +35,7 @@ import { nickNameValidation, passwordValidation, phoneValidation, - REQUIRED_ERROR, - splitToUnderBar, + profileIamgeOrCat, } from "../../tools/utils"; const validationSchema = yup.object({ @@ -104,6 +108,8 @@ const validationSchema = yup.object({ // http://placekitten.com/200/200 function Profile() { + const navigate = useNavigate(); + const [faceImages, setFaceImages] = useState([]); const [user, dispatch] = useContext(UserContext); const [cookies, setCookie] = useCookies(["token"]); const [fields, setFields] = useState([ @@ -113,12 +119,12 @@ function Profile() { placeholder: "", required: true, }, - { - name: "email", - type: "text", - placeholder: "", - required: true, - }, + // { + // name: "email", + // type: "text", + // placeholder: "", + // required: true, + // }, { name: "phone", type: "text", @@ -151,8 +157,7 @@ function Profile() { }, validationSchema: validationSchema, onSubmit: (values) => { - console.log(values); - + formik.values.email = user.email; checkPassword(values.check_password, user.id) .then((result) => { if (result) { @@ -160,37 +165,50 @@ function Profile() { Object.entries(values).forEach(([column, value]) => { userInfo.set(column as UserColumn, value); }); - userInfo.set("id", user.id); - userInfo.set("profileImg", values.profileImg?.name); const face = new FaceImage(); - const profileSplit = values.profileImg?.name.split("."); - const imgSplit = values.faceImage?.name.split("."); - const profileType = profileSplit.pop(); - const profileName = profileSplit.join(); - const type = imgSplit.pop(); - const name = imgSplit.join(); - face.set("uid", user.id); - face.set("imgPath", `${sha256(name)}.${type}`); + const profileSplit = values.profileImg?.name?.split("."); + const imgSplit = values.faceImage?.name?.split("."); + const profileType = profileSplit?.pop(); + const profileName = profileSplit?.join(); + const type = imgSplit?.pop(); + const name = imgSplit?.join(); + + userInfo.set("id", user.id); const userFormData = userInfo.makeFormData(); const faceFormData = face.makeFormData(); + console.log(values.faceImage, values.profileImg); - console.log(userInfo, face, user.id); - console.log(type, name); - - if (values.profileImg) { - profileUpload( - values.profileImg, - user.id, + if (values.profileImg && values.profileImg instanceof File) { + userFormData.set( + "profileImg", `${sha256(profileName)}.${profileType}`, ); + deleteProfileImage(user.id).then(() => { + profileUpload( + values.profileImg, + user.id, + `${sha256(profileName)}.${profileType}`, + ); + }); } - if (values.faceImage) { + if (values.faceImage && values.faceImage instanceof File) { + faceFormData.append("uid", user.id); + faceFormData.append("imgPath", `${sha256(name)}.${type}`); fileupload(values.faceImage, user.id, `${sha256(name)}.${type}`); addFaceImage(faceFormData); + userFormData.append("isFaceSign", "true"); } - userUpdate(userFormData); + userFormData.append("id", user.id); + userFormData.delete("password"); + userUpdate(userFormData).then((result: any) => { + if (result) { + delete result["password"]; + dispatch(setUser(result)); + navigate(0); + } + }); } else { alert("비밀번호를 다시 확인 해 주세요."); } @@ -269,7 +287,7 @@ function Profile() { elevation={5}> @@ -335,6 +353,15 @@ function Profile() { onChange={handleFaceImage} /> + {user.isFaceSign && + faceImages.map((face) => ( + + {face.imgPath} + + + ))} diff --git a/src/main/frontend/src/tools/utils.ts b/src/main/frontend/src/tools/utils.ts index 77e4820..c1afbd9 100644 --- a/src/main/frontend/src/tools/utils.ts +++ b/src/main/frontend/src/tools/utils.ts @@ -13,7 +13,7 @@ export const nickNameValidation = yup export const emailValidation = yup .string() .matches( - /^([A-z]+([0-9]*))+\@[A-z]{2,}(\.[A-z]{2,}){1,}$/g, + /^([A-z_.\-0-9]+)+\@[A-z]{2,}(\.[A-z]{2,}){1,}$/g, "이메일 형식과 맞지 않습니다.", ) .required("이메일은 필수 항목 입니다."); @@ -21,14 +21,14 @@ export const passwordValidation = yup .string() .matches( /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/g, - "비밀번호는 숫자 + 대문자 + 특수문자로 구성되어야 합니다. (대문자 및 특수문자는 최소 1자 이상 포함되어야 합니다.", + "비밀번호는 숫자 + 소문자 + 대문자 + 특수문자로 구성되어야 합니다. (대문자 및 특수문자는 최소 1자 이상 포함되어야 합니다.", ) .required("이메일은 필수 항목 입니다."); export const phoneValidation = yup .string() .matches( /^[0-9]{2,4}(-[0-9]{3,5}){2,3}$/, - "전화번호 형식과 일치하지 않습니다.", + "전화번호 형식과 일치하지 않습니다. ex) 010-0000-0000", ); export const AVAILABLE_FILE_TYPE = ["JPG", "PNG", "GIF", "MP4", "WEBM"]; @@ -79,6 +79,20 @@ const convertLongToDate = (time: number): string => { const isEmpty = (object: object): boolean => Object.keys(object).length === 0; +const profileIamgeOrCat = (user: any) => { + let path; + try { + if (user && user.id && user.profileImg) { + path = require(`../profiles/${user.id}/${user.profileImg}`); + } + } catch (e) { + // console.log(e); + path = "http://placekitten.com/300/200"; + } finally { + return path; + } +}; + export { upperCase, splitToUnderBar, @@ -86,4 +100,5 @@ export { mapToQuery, convertLongToDate, isEmpty, + profileIamgeOrCat, }; From 7f907bd164730fabffd185addb5e389331ed1e3d Mon Sep 17 00:00:00 2001 From: kimson Date: Mon, 8 Aug 2022 17:44:07 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[FE][:wrench:=20FIX]:=20=EB=8B=A4=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EB=A6=AC=20=EC=88=98=EC=A0=95=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=99=84=EB=A3=8C=20#98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frontend/src/pages/Diary/WriteForm.tsx | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/frontend/src/pages/Diary/WriteForm.tsx b/src/main/frontend/src/pages/Diary/WriteForm.tsx index 0b6f3d8..19b7ce1 100644 --- a/src/main/frontend/src/pages/Diary/WriteForm.tsx +++ b/src/main/frontend/src/pages/Diary/WriteForm.tsx @@ -12,7 +12,7 @@ import Emotions from "../../models/Emotions"; import "suneditor/dist/css/suneditor.min.css"; import Diary from "../../models/Diary"; import SwitchLabels from "../../components/molecules/SwitchLabels"; -import { insertEmotions } from "../../apis/emotions"; +import { deleteEmotionByDid, insertEmotions } from "../../apis/emotions"; import { useCookies } from "react-cookie"; import { checkToken } from "../../apis/auth"; import { UserContext } from "../../contexts/UserProvider"; @@ -65,15 +65,15 @@ function WriteForm() { diary.getResponseData(values as unknown as Diary); const diaryFormData = diary.makeFormData(); + let diaryId; if (params.id) { diaryFormData.append("id", params.id); + diaryId = await updateDiary(diaryFormData); + } else { + diaryId = await insertDiary(diaryFormData); } - const diaryId = params.id - ? await updateDiary(diaryFormData) - : await insertDiary(diaryFormData); - const emotion = new Emotions(); emotion.getResponseData( emotionResult.emotionScore as unknown as Emotions, @@ -85,6 +85,10 @@ function WriteForm() { if (!params.id) { insertEmotions(emotionFormData); + } else { + deleteEmotionByDid(diaryId).then(() => { + insertEmotions(emotionFormData); + }); } navigate("/diary"); @@ -213,7 +217,11 @@ function WriteForm() { type='submit'> 일기 저장하기 - From 578f8c73eb64588605453cdb5523f6e5e3f0e373 Mon Sep 17 00:00:00 2001 From: kimson Date: Mon, 8 Aug 2022 17:47:06 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[BE][:wrench:=20FIX]:=20=EC=9C=A0=EC=A0=80?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=99=84=EB=A3=8C=20#97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/repository/UserRepositoryCustom.java | 2 ++ .../repository/UserRepositoryCustomImpl.java | 7 +++++ .../restController/UserRestController.java | 27 +++++++++++++++++-- .../com/narang/web/service/UserService.java | 19 +++++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/narang/web/repository/UserRepositoryCustom.java b/src/main/java/com/narang/web/repository/UserRepositoryCustom.java index 62a78aa..8003dac 100644 --- a/src/main/java/com/narang/web/repository/UserRepositoryCustom.java +++ b/src/main/java/com/narang/web/repository/UserRepositoryCustom.java @@ -13,4 +13,6 @@ public interface UserRepositoryCustom { public Optional findByEmail(String email); public Boolean update(User user); + + public User removeProfileImageById(String id); } diff --git a/src/main/java/com/narang/web/repository/UserRepositoryCustomImpl.java b/src/main/java/com/narang/web/repository/UserRepositoryCustomImpl.java index c632df6..db0967a 100644 --- a/src/main/java/com/narang/web/repository/UserRepositoryCustomImpl.java +++ b/src/main/java/com/narang/web/repository/UserRepositoryCustomImpl.java @@ -37,4 +37,11 @@ public Boolean update(User user) { userTemplate.save(foundUser, "user"); return true; } + + @Override + public User removeProfileImageById(String id) { + User foundedUser = userTemplate.findById(id, User.class); + foundedUser.setProfileImg(""); + return userTemplate.save(foundedUser, "user"); + } } diff --git a/src/main/java/com/narang/web/restController/UserRestController.java b/src/main/java/com/narang/web/restController/UserRestController.java index 070b268..e60eec5 100644 --- a/src/main/java/com/narang/web/restController/UserRestController.java +++ b/src/main/java/com/narang/web/restController/UserRestController.java @@ -96,15 +96,38 @@ public Map fileupload(MultipartFile multipartFile, String id, St return m; } + @PostMapping("/profile/fileupload") + public Map profileFileupload(MultipartFile multipartFile, String id, String hashName) { + File targetFile = new File("src/main/frontend/src/profiles/" + + id + + "/" + hashName); + try { + InputStream fileStream = multipartFile.getInputStream(); + FileUtils.copyInputStreamToFile(fileStream, targetFile); + } catch (IOException e) { + FileUtils.deleteQuietly(targetFile); + e.printStackTrace(); + } + Map m = new HashMap<>(); + return m; + } + @PutMapping("/user") - public Boolean update(User user) { - return userService.update(user); + public String update(User user) throws JsonProcessingException { + userService.update(user); + return mapper(userService.findById(user.getId())); } @DeleteMapping("/user/{id}") public Boolean delete(@PathVariable("id") String id) { return userService.deleteById(id); } + + @DeleteMapping("/user/profile/{id}") + public Boolean removeUserProfile(@PathVariable("id") String id) { + return userService.removeProfileImageById(id); + } + } // [UnAuthorized error 날 때] https://subbak2.com/11 diff --git a/src/main/java/com/narang/web/service/UserService.java b/src/main/java/com/narang/web/service/UserService.java index 54c40c3..4acd2c4 100644 --- a/src/main/java/com/narang/web/service/UserService.java +++ b/src/main/java/com/narang/web/service/UserService.java @@ -6,7 +6,10 @@ import com.narang.web.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import java.io.File; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -107,6 +110,22 @@ public Boolean checkPassword(String password, String id) { } } + public Boolean removeProfileImageById(String id) { + File file = new File("src/main/frontend/src/profiles/"+id); + if(file.isDirectory()) { + File[] files = file.listFiles(); + for(File f : files) { + if(f.delete()) { + System.out.println("파일을 성공적으로 삭제 했습니다."); + } else { + System.out.println("없는 파일 입니다."); + } + } + } + userRepository.removeProfileImageById(id); + return true; + } + public Boolean update(User user) { return userRepository.update(user); } From 1b6282ea2beb6f2f57e17e1aa4ecb0e78b3b3139 Mon Sep 17 00:00:00 2001 From: kimson Date: Mon, 8 Aug 2022 17:48:19 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[BR][:bulb:=20ADD]:=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=EC=82=AC=EC=A7=84=20=EC=84=9C=EB=B2=84=20=EC=97=85?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20#97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...fbf3f55b14fbe9e578e9989c94d816c3f1c5cc81.jpg | Bin 0 -> 44833 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/frontend/src/profiles/62f0bc8331925873285f3a47/6199fa6416a5f317d16331dafbf3f55b14fbe9e578e9989c94d816c3f1c5cc81.jpg diff --git a/src/main/frontend/src/profiles/62f0bc8331925873285f3a47/6199fa6416a5f317d16331dafbf3f55b14fbe9e578e9989c94d816c3f1c5cc81.jpg b/src/main/frontend/src/profiles/62f0bc8331925873285f3a47/6199fa6416a5f317d16331dafbf3f55b14fbe9e578e9989c94d816c3f1c5cc81.jpg new file mode 100644 index 0000000000000000000000000000000000000000..623657424d21995908cf54e142db13a566cf2de2 GIT binary patch literal 44833 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 C{gs6P literal 0 HcmV?d00001 From cf0a0b143ced2dd9528afad8d07e3b2bdd75d4cb Mon Sep 17 00:00:00 2001 From: kimson Date: Mon, 8 Aug 2022 17:49:24 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[BE][:wrench:=20FIX]:=20=EC=9D=BC=EA=B8=B0?= =?UTF-8?q?=20=EB=B0=8F=20like,=20emotion=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20#98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/narang/web/repository/DiaryRepositoryCustom.java | 2 +- .../narang/web/repository/DiaryRepositoryCustomImpl.java | 5 ++--- .../com/narang/web/repository/LikeRepositoryCustom.java | 3 ++- .../narang/web/repository/LikeRepositoryCustomImpl.java | 7 ++++--- .../com/narang/web/restController/DiaryRestController.java | 2 +- .../com/narang/web/restController/LikeRestController.java | 1 - src/main/java/com/narang/web/service/DiaryService.java | 5 +++-- src/main/java/com/narang/web/service/LikeService.java | 4 ++-- 8 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/narang/web/repository/DiaryRepositoryCustom.java b/src/main/java/com/narang/web/repository/DiaryRepositoryCustom.java index 51a33e5..cca6fb4 100644 --- a/src/main/java/com/narang/web/repository/DiaryRepositoryCustom.java +++ b/src/main/java/com/narang/web/repository/DiaryRepositoryCustom.java @@ -3,5 +3,5 @@ import com.narang.web.entity.Diary; public interface DiaryRepositoryCustom { - public Boolean update(Diary diary); + public Diary update(Diary diary); } diff --git a/src/main/java/com/narang/web/repository/DiaryRepositoryCustomImpl.java b/src/main/java/com/narang/web/repository/DiaryRepositoryCustomImpl.java index ef8a562..e774e94 100644 --- a/src/main/java/com/narang/web/repository/DiaryRepositoryCustomImpl.java +++ b/src/main/java/com/narang/web/repository/DiaryRepositoryCustomImpl.java @@ -15,10 +15,9 @@ public class DiaryRepositoryCustomImpl implements DiaryRepositoryCustom { } @Override - public Boolean update(Diary diary) { + public Diary update(Diary diary) { Diary foundDiary = diaryTemplate.findById(diary.getId(), Diary.class); foundDiary.replaceIfNotNull(diary); - diaryTemplate.save(foundDiary, "diary"); - return true; + return diaryTemplate.save(foundDiary, "diary"); } } diff --git a/src/main/java/com/narang/web/repository/LikeRepositoryCustom.java b/src/main/java/com/narang/web/repository/LikeRepositoryCustom.java index f1a38a6..0ce9298 100644 --- a/src/main/java/com/narang/web/repository/LikeRepositoryCustom.java +++ b/src/main/java/com/narang/web/repository/LikeRepositoryCustom.java @@ -2,12 +2,13 @@ import com.narang.web.entity.Like; +import java.util.List; import java.util.Optional; public interface LikeRepositoryCustom { public Optional findByUid(String uid); - public Optional findByDid(String did); + public List findByDid(String did); public Boolean deleteByUid(String uid); diff --git a/src/main/java/com/narang/web/repository/LikeRepositoryCustomImpl.java b/src/main/java/com/narang/web/repository/LikeRepositoryCustomImpl.java index 7cc3ed1..bee584c 100644 --- a/src/main/java/com/narang/web/repository/LikeRepositoryCustomImpl.java +++ b/src/main/java/com/narang/web/repository/LikeRepositoryCustomImpl.java @@ -6,6 +6,7 @@ import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; +import java.util.List; import java.util.Optional; public class LikeRepositoryCustomImpl implements LikeRepositoryCustom { @@ -25,11 +26,11 @@ public Optional findByUid(String uid) { } @Override - public Optional findByDid(String did) { + public List findByDid(String did) { Criteria cr = new Criteria("did").is(did); Query q = new Query(cr); - Like foundLike = likeTemplate.findOne(q, Like.class); - return Optional.of(foundLike); + List foundLike = likeTemplate.find(q, Like.class); + return foundLike; } @Override diff --git a/src/main/java/com/narang/web/restController/DiaryRestController.java b/src/main/java/com/narang/web/restController/DiaryRestController.java index 1a49564..5040d01 100644 --- a/src/main/java/com/narang/web/restController/DiaryRestController.java +++ b/src/main/java/com/narang/web/restController/DiaryRestController.java @@ -33,7 +33,7 @@ public String insert(Diary diary) { } @PutMapping("/diary") - public Boolean update(Diary diary) { + public String update(Diary diary) { return diaryService.update(diary); } diff --git a/src/main/java/com/narang/web/restController/LikeRestController.java b/src/main/java/com/narang/web/restController/LikeRestController.java index 3e8c2a1..41cec64 100644 --- a/src/main/java/com/narang/web/restController/LikeRestController.java +++ b/src/main/java/com/narang/web/restController/LikeRestController.java @@ -34,7 +34,6 @@ public String findById(@PathVariable("id") String id) throws JsonProcessingExcep @GetMapping("/like/did/{did}") public String findByDid(@PathVariable("did") String did) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(likeService.findByDid(did)); } diff --git a/src/main/java/com/narang/web/service/DiaryService.java b/src/main/java/com/narang/web/service/DiaryService.java index 5442484..ef6914d 100644 --- a/src/main/java/com/narang/web/service/DiaryService.java +++ b/src/main/java/com/narang/web/service/DiaryService.java @@ -29,8 +29,9 @@ public String insert(Diary diary) { return newDiary.getId(); } - public Boolean update(Diary diary){ - return diaryRepository.update(diary); + public String update(Diary diary){ + Diary updatedDiary = diaryRepository.update(diary); + return updatedDiary.getId(); } public Boolean deleteById(String id) { diff --git a/src/main/java/com/narang/web/service/LikeService.java b/src/main/java/com/narang/web/service/LikeService.java index 92a7f16..7cc2739 100644 --- a/src/main/java/com/narang/web/service/LikeService.java +++ b/src/main/java/com/narang/web/service/LikeService.java @@ -28,8 +28,8 @@ public Like findByUid(String uid) { return likeRepository.findByUid(uid).orElseThrow(); } - public Like findByDid(String did) { - return likeRepository.findByDid(did).orElseThrow(); + public List findByDid(String did) { + return likeRepository.findByDid(did); } public String insert(Like like){