diff --git a/src/main/java/net/sinzak/server/alarm/controller/AlarmController.java b/src/main/java/net/sinzak/server/alarm/controller/AlarmController.java index e6c5e94d..5e37246f 100644 --- a/src/main/java/net/sinzak/server/alarm/controller/AlarmController.java +++ b/src/main/java/net/sinzak/server/alarm/controller/AlarmController.java @@ -10,8 +10,9 @@ @RequiredArgsConstructor public class AlarmController { private final AlarmService alarmService; - @GetMapping(value ="/alarms") - public JSONObject getAlarms(){ + + @GetMapping(value = "/alarms") + public JSONObject getAlarms() { return alarmService.getAlarms(); } } diff --git a/src/main/java/net/sinzak/server/alarm/domain/Alarm.java b/src/main/java/net/sinzak/server/alarm/domain/Alarm.java index ded2168b..4086397b 100644 --- a/src/main/java/net/sinzak/server/alarm/domain/Alarm.java +++ b/src/main/java/net/sinzak/server/alarm/domain/Alarm.java @@ -23,13 +23,14 @@ public class Alarm extends BaseTimeEntity { private Long id; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name ="user_id") + @JoinColumn(name = "user_id") private User user; - private String opponentUserName; + @Enumerated(EnumType.STRING) private AlarmType alarmType; + private String thumbnail; private String route; diff --git a/src/main/java/net/sinzak/server/alarm/repository/AlarmRepository.java b/src/main/java/net/sinzak/server/alarm/repository/AlarmRepository.java index 56137009..1ee9ebdf 100644 --- a/src/main/java/net/sinzak/server/alarm/repository/AlarmRepository.java +++ b/src/main/java/net/sinzak/server/alarm/repository/AlarmRepository.java @@ -7,7 +7,7 @@ import java.util.Set; -public interface AlarmRepository extends JpaRepository { +public interface AlarmRepository extends JpaRepository { @Query("select a from Alarm a where a.user.id = :userId") Set findByUserId(@Param("userId") Long userId); diff --git a/src/main/java/net/sinzak/server/alarm/service/AlarmService.java b/src/main/java/net/sinzak/server/alarm/service/AlarmService.java index e3a4104b..2df4deb7 100644 --- a/src/main/java/net/sinzak/server/alarm/service/AlarmService.java +++ b/src/main/java/net/sinzak/server/alarm/service/AlarmService.java @@ -5,7 +5,7 @@ import net.sinzak.server.alarm.domain.AlarmType; import net.sinzak.server.alarm.dto.GetAlarmDto; import net.sinzak.server.alarm.repository.AlarmRepository; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.common.UserUtils; import net.sinzak.server.user.domain.User; import org.json.simple.JSONObject; @@ -21,13 +21,15 @@ public class AlarmService { private final UserUtils userUtils; private final AlarmRepository alarmRepository; + @Transactional - public JSONObject getAlarms(){ + public JSONObject getAlarms() { List getAlarmDtos = new ArrayList<>(); Set alarms = alarmRepository.findByUserId(userUtils.getCurrentUserId()); - for(Alarm alarm : alarms){ + for (Alarm alarm : alarms) { GetAlarmDto getAlarmDto = GetAlarmDto.builder() - .date(alarm.getCreatedDate().toString()) + .date(alarm.getCreatedDate() + .toString()) .alarmType(alarm.getAlarmType()) .thumbnail(alarm.getThumbnail()) .route(alarm.getRoute()) @@ -35,11 +37,11 @@ public JSONObject getAlarms(){ .build(); getAlarmDtos.add(getAlarmDto); } - return PropertyUtil.response(getAlarmDtos); + return SinzakResponse.success(getAlarmDtos); } @Transactional - public void makeAlarm(User user, String thumbnail, String route, AlarmType alarmType,String opponentUserName){ + public void makeAlarm(User user, String thumbnail, String route, AlarmType alarmType, String opponentUserName) { Alarm alarm = Alarm.builder() .user(user) .thumbnail(thumbnail) @@ -47,7 +49,8 @@ public void makeAlarm(User user, String thumbnail, String route, AlarmType alarm .alarmType(alarmType) .opponentUserName(opponentUserName) .build(); - user.getAlarms().add(alarm); + user.getAlarms() + .add(alarm); alarmRepository.save(alarm); } } diff --git a/src/main/java/net/sinzak/server/banner/Banner.java b/src/main/java/net/sinzak/server/banner/Banner.java index 027591ed..2506b42a 100644 --- a/src/main/java/net/sinzak/server/banner/Banner.java +++ b/src/main/java/net/sinzak/server/banner/Banner.java @@ -7,7 +7,7 @@ @Getter @Entity -@SequenceGenerator(name = "Banner_SEQ_GEN",sequenceName = "Banner_SEQ") +@SequenceGenerator(name = "Banner_SEQ_GEN", sequenceName = "Banner_SEQ") public class Banner { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Banner_SEQ") @@ -30,7 +30,8 @@ public Banner(String content, String imageUrl, String pcImageUrl) { this.href = ""; } - protected Banner() {} + protected Banner() { + } public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; @@ -38,7 +39,7 @@ public void setImageUrl(String imageUrl) { } public void setUserInfo(Long userId, String nickName) { - this.href = "/profile/"+userId.toString(); + this.href = "/profile/" + userId.toString(); this.content = nickName; } diff --git a/src/main/java/net/sinzak/server/banner/BannerController.java b/src/main/java/net/sinzak/server/banner/BannerController.java index c06b7ba2..f06e28fc 100644 --- a/src/main/java/net/sinzak/server/banner/BannerController.java +++ b/src/main/java/net/sinzak/server/banner/BannerController.java @@ -24,50 +24,36 @@ public class BannerController { private final BannerService bannerService; @ApiDocumentResponse - @ApiOperation(value = "배너 생성",notes = "{\"success\":true, \"id\":2}\n해당 글의 id를 전해드리니 이 /banner/{id}/image 에 넘겨주세요\n") + @ApiOperation(value = "배너 생성", notes = "{\"success\":true, \"id\":2}\n해당 글의 id를 전해드리니 이 /banner/{id}/image 에 넘겨주세요\n") @PostMapping(value = "/admin/banner/build", consumes = {MediaType.APPLICATION_JSON_VALUE}) - public JSONObject makeProductPost(@RequestBody BannerDto buildDto) { + public JSONObject makeBanner(@RequestBody BannerDto buildDto) { return bannerService.make(buildDto); } @ApiDocumentResponse @ApiOperation(value = "배너 이미지 등록") @PostMapping(value = "/admin/banner/{id}/image", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) - @ApiImplicitParam(name = "multipartFile", dataType = "multipartFile", - value = "파일 보내주시면 파일 s3서버에 저장 및, 해당 파일이 저장되어 있는 URL을 디비에 저장합니다") - public JSONObject makeProductPost(@PathVariable("id") Long bannerId, @RequestPart MultipartFile multipartFile) { + @ApiImplicitParam(name = "multipartFile", dataType = "multipartFile", value = "파일 보내주시면 파일 s3서버에 저장 및, 해당 파일이 저장되어 있는 URL을 디비에 저장합니다") + public JSONObject makeBanner(@PathVariable("id") Long bannerId, @RequestPart MultipartFile multipartFile) { return bannerService.saveImage(bannerId, multipartFile); } @Cacheable(value = "banner", cacheManager = "testCacheManager") @ApiDocumentResponse - @ApiOperation(value = "배너 정보 출력", notes = "{\n" + - " \"id\": 3,\n" + - " \"content\": \"TEST\",\n" + - " \"imageUrl\": \"https://sinzakimage.s3.ap-northeast-2.amazonaws.com/static/banner3.png\",\n" + - " \"pcImageUrl\": \"https://sinzakimage.s3.ap-northeast-2.amazonaws.com/static/webBanner3.png\",\n" + - " \"href\": \"\"\n" + - " },\n" + - " {\n" + - " \"id\": 4,\n" + - " \"content\": \"신작\",\n" + - " \"imageUrl\": \"https://sinzakimage.s3.ap-northeast-2.amazonaws.com/static/banner4.png\",\n" + - " \"pcImageUrl\": \"https://sinzakimage.s3.ap-northeast-2.amazonaws.com/static/webBanner4.png\",\n" + - " \"href\": \"/profile/106\"\n" + - " }") + @ApiOperation(value = "배너 정보 출력", notes = "{\n" + " \"id\": 3,\n" + " \"content\": \"TEST\",\n" + " \"imageUrl\": \"https://sinzakimage.s3.ap-northeast-2.amazonaws.com/static/banner3.png\",\n" + " \"pcImageUrl\": \"https://sinzakimage.s3.ap-northeast-2.amazonaws.com/static/webBanner3.png\",\n" + " \"href\": \"\"\n" + " },\n" + " {\n" + " \"id\": 4,\n" + " \"content\": \"신작\",\n" + " \"imageUrl\": \"https://sinzakimage.s3.ap-northeast-2.amazonaws.com/static/banner4.png\",\n" + " \"pcImageUrl\": \"https://sinzakimage.s3.ap-northeast-2.amazonaws.com/static/webBanner4.png\",\n" + " \"href\": \"/profile/106\"\n" + " }") @GetMapping(value = "/banner") - public JSONObject showBannerList() { + public JSONObject showBanners() { return bannerService.getList(); } @ApiDocumentResponse - @ApiOperation(value = "떠오르는 작가 임의 설정",notes = "이거는 추후에 수익창출을 위해 필요할 듯 프론트단은 신경 안쓰셔도됩니다") + @ApiOperation(value = "떠오르는 작가 임의 설정", notes = "이거는 추후에 수익창출을 위해 필요할 듯 프론트단은 신경 안쓰셔도됩니다") @PostMapping(value = "/admin/banner/pick", consumes = {MediaType.APPLICATION_JSON_VALUE}) public JSONObject pickUser(@RequestBody IdDto idDto) { return bannerService.pick(idDto.getId()); } - @Scheduled(fixedDelay = 21600000, initialDelay = 100000) /** 6시간 **/ + @Scheduled(fixedDelay = 21600000, initialDelay = 100000) // 6시간 @ApiOperation(value = "무시", hidden = true) @PostMapping("/banner/reset") public void resetBanner() throws NoSuchAlgorithmException { diff --git a/src/main/java/net/sinzak/server/banner/BannerListDto.java b/src/main/java/net/sinzak/server/banner/BannerListDto.java index eca5889b..96ffbdb9 100644 --- a/src/main/java/net/sinzak/server/banner/BannerListDto.java +++ b/src/main/java/net/sinzak/server/banner/BannerListDto.java @@ -3,7 +3,6 @@ import lombok.Getter; @Getter -public class BannerListDto extends BannerDto{ - +public class BannerListDto extends BannerDto { private String image; } diff --git a/src/main/java/net/sinzak/server/banner/BannerRepository.java b/src/main/java/net/sinzak/server/banner/BannerRepository.java index 9eb2e6f0..67b192fe 100644 --- a/src/main/java/net/sinzak/server/banner/BannerRepository.java +++ b/src/main/java/net/sinzak/server/banner/BannerRepository.java @@ -5,7 +5,7 @@ import java.util.List; -public interface BannerRepository extends JpaRepository { +public interface BannerRepository extends JpaRepository { @Query("select b from Banner b where b.href != '' ") List findAuthorBanner(); } diff --git a/src/main/java/net/sinzak/server/banner/BannerService.java b/src/main/java/net/sinzak/server/banner/BannerService.java index 120b15a4..b8543ee7 100644 --- a/src/main/java/net/sinzak/server/banner/BannerService.java +++ b/src/main/java/net/sinzak/server/banner/BannerService.java @@ -2,7 +2,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.common.error.InstanceNotFoundException; import net.sinzak.server.image.S3Service; import net.sinzak.server.user.service.UserQueryService; @@ -25,20 +25,23 @@ public class BannerService { private final S3Service s3Service; @Transactional(rollbackFor = {Exception.class}) - public JSONObject make(BannerDto dto){ // 배너 생성 + public JSONObject make(BannerDto dto) { // 배너 생성 Banner banner = Banner.builder() - .pcImageUrl("") - .imageUrl("") - .content(dto.getContent()).build(); - Long id = bannerRepository.save(banner).getId(); - return PropertyUtil.response(id); + .pcImageUrl("") + .imageUrl("") + .content(dto.getContent()) + .build(); + Long id = bannerRepository.save(banner) + .getId(); + return SinzakResponse.success(id); } @Transactional(rollbackFor = {Exception.class}) - public JSONObject saveImage(Long id, MultipartFile file){ // 글 생성 - Banner banner = bannerRepository.findById(id).orElseThrow(InstanceNotFoundException::new); + public JSONObject saveImage(Long id, MultipartFile file) { // 글 생성 + Banner banner = bannerRepository.findById(id) + .orElseThrow(InstanceNotFoundException::new); uploadImageAndSetThumbnail(banner, file); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } private String uploadImageAndSetThumbnail(Banner banner, MultipartFile file) { @@ -48,16 +51,16 @@ private String uploadImageAndSetThumbnail(Banner banner, MultipartFile file) { } @Transactional(readOnly = true) - public JSONObject getList(){ - return PropertyUtil.response(bannerRepository.findAll()); + public JSONObject getList() { + return SinzakResponse.success(bannerRepository.findAll()); } @Transactional - public JSONObject pick(Long id){ + public JSONObject pick(Long id) { List banners = bannerRepository.findAuthorBanner(); userQueryService.getUserNickName(id) .ifPresent(name -> banners.forEach((banner) -> banner.setUserInfo(id, name))); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } @Transactional diff --git a/src/main/java/net/sinzak/server/cert/CertController.java b/src/main/java/net/sinzak/server/cert/CertController.java index 37e2a865..610136da 100644 --- a/src/main/java/net/sinzak/server/cert/CertController.java +++ b/src/main/java/net/sinzak/server/cert/CertController.java @@ -20,38 +20,33 @@ @RequiredArgsConstructor public class CertController { private final CertService certService; - private final static String univCertAPI ="df6ea145-4134-40a3-a298-764cd7d5d7bb"; + private final static String univCertAPI = "df6ea145-4134-40a3-a298-764cd7d5d7bb"; @ApiDocumentResponse - @ApiOperation(value = "대학 메일 인증 시작", notes = "인증코드는 아예 생략하시고, univ_email, univName 주시면 됩니다 1000~9999의 인증번호 메일전송 예정 \n" + - "success : true 로 올 경우 메일 발송된 것.") + @ApiOperation(value = "대학 메일 인증 시작", notes = "인증코드는 아예 생략하시고, univ_email, univName 주시면 됩니다 1000~9999의 인증번호 메일전송 예정 \n" + "success : true 로 올 경우 메일 발송된 것.") @PostMapping("/certify/mail/send") public JSONObject sendUnivCertMail(@RequestBody MailDto mailDto) throws IOException { boolean univ_check = false; Map check = UnivCert.check(mailDto.getUnivName()); - if((boolean) check.get("success")) - univ_check = true; + if ((boolean) check.get("success")) univ_check = true; Map response = UnivCert.certify(univCertAPI, mailDto.getUniv_email(), mailDto.getUnivName(), univ_check); return new JSONObject(response); } @ApiDocumentResponse - @ApiOperation(value = "인증코드 입력", notes = "인증코드 필수, 1000~9999의 인증번호 양식준수 \n" + - "success : true 면 끝이고 아니면 학생증 인증이나 나중에 하기 버튼 클릭 유도") + @ApiOperation(value = "인증코드 입력", notes = "인증코드 필수, 1000~9999의 인증번호 양식준수 \n" + "success : true 면 끝이고 아니면 학생증 인증이나 나중에 하기 버튼 클릭 유도") @PostMapping("/certify/mail/receive") public JSONObject receiveUnivCertMail(@RequestBody MailDto mailDto) throws IOException { Map response = UnivCert.certifyCode(univCertAPI, mailDto.getUniv_email(), mailDto.getUnivName(), mailDto.getCode()); boolean success = (boolean) response.get("success"); - if(success) - certService.updateCertifiedUniv(mailDto); + if (success) certService.updateCertifiedUniv(mailDto); return new JSONObject(response); } @ApiDocumentResponse - @ApiOperation(value = "대학교 학생증 인증", notes = "대학명만 보내주세요. 메일은 무시.\n" + - "{\"success\":true, \"id\":3}\n해당 유저의 id를 전해드리니 이 /certify/{id}/univ 에 넘겨주세요), \n 학생증 인증은 디폴트로 대학인증 된거로 처리 할 예정. 나중에 시간날 때 아니다 싶으면 인증 해제 하면됨.") + @ApiOperation(value = "대학교 학생증 인증", notes = "대학명만 보내주세요. 메일은 무시.\n" + "{\"success\":true, \"id\":3}\n해당 유저의 id를 전해드리니 이 /certify/{id}/univ 에 넘겨주세요), \n 학생증 인증은 디폴트로 대학인증 된거로 처리 할 예정. 나중에 시간날 때 아니다 싶으면 인증 해제 하면됨.") @PostMapping(value = "/certify/univ", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}) public JSONObject certifyUniv(@RequestBody UnivDto univDto) { return certService.certifyUniv(univDto); @@ -60,31 +55,27 @@ public JSONObject certifyUniv(@RequestBody UnivDto univDto) { @ApiDocumentResponse @ApiOperation(value = "대학교 학생증 사진 업로드") @PostMapping(value = "/certify/{id}/univ", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}) - @ApiImplicitParam(name = "multipartFile", dataType = "multipartFile", - value = "파일 보내주시면 파일 s3서버에 저장 및, 해당 파일이 저장되어 있는 URL을 디비에 저장합니다, \n 학생증 인증은 디폴트로 대학인증 된거로 처리 할 예정. 나중에 시간날 때 아니다 싶으면 인증 해제 하면됨.") + @ApiImplicitParam(name = "multipartFile", dataType = "multipartFile", value = "파일 보내주시면 파일 s3서버에 저장 및, 해당 파일이 저장되어 있는 URL을 디비에 저장합니다, \n 학생증 인증은 디폴트로 대학인증 된거로 처리 할 예정. 나중에 시간날 때 아니다 싶으면 인증 해제 하면됨.") public JSONObject uploadUnivCard(@PathVariable("id") Long certId, @RequestPart MultipartFile multipartFile) { return certService.uploadUnivCard(certId, multipartFile); } @ApiDocumentResponse - @ApiOperation(value = "대학교 학생증 인증 허용",notes = "프론트에서 구현은 X 관리자용") + @ApiOperation(value = "대학교 학생증 인증 허용", notes = "프론트에서 구현은 X 관리자용") @PostMapping(value = "/certify/{id}/univ/complete") public JSONObject completeUnivCard(@PathVariable("id") Long certId) { return certService.completeUnivCard(certId); } @ApiDocumentResponse - @ApiOperation(value = "인증작가 신청", notes = "대학인증 마친 상태에서 요청할 수 있도록 해주세요. \n ***중요*** " + - "인증작가 신청하기 시 status가 'PROCESS'면 처리 중인거니까 더 이상 요청 못 보내게 해주세요. status가 YET인 상황일 때만 보낼 수 있도록 해주세요. 완료시 status = COMPLETE\n" + - "대학인증 여부는 /my-profile에서 받았던거 그대로 됩니다 \n" + - "cert_celeb은 저희가 직접 확인하기 전까지 false") + @ApiOperation(value = "인증작가 신청", notes = "대학인증 마친 상태에서 요청할 수 있도록 해주세요. \n ***중요*** " + "인증작가 신청하기 시 status가 'PROCESS'면 처리 중인거니까 더 이상 요청 못 보내게 해주세요. status가 YET인 상황일 때만 보낼 수 있도록 해주세요. 완료시 status = COMPLETE\n" + "대학인증 여부는 /my-profile에서 받았던거 그대로 됩니다 \n" + "cert_celeb은 저희가 직접 확인하기 전까지 false") @PostMapping(value = "/certify/author") public JSONObject updateCertifiedAuthor(@RequestBody PortFolioDto dto) { return certService.applyCertifiedAuthor(dto.getPortFolio()); } @ApiDocumentResponse - @ApiOperation(value = "대학교 학생증 인증 허용",notes = "프론트에서 구현은 X 관리자용") + @ApiOperation(value = "대학교 학생증 인증 허용", notes = "프론트에서 구현은 X 관리자용") @PostMapping(value = "/certify/{id}/author/complete") public JSONObject completeAuthor(@PathVariable("id") Long certId) { return certService.completeAuthor(certId); diff --git a/src/main/java/net/sinzak/server/cert/CertService.java b/src/main/java/net/sinzak/server/cert/CertService.java index bf28e1c5..c4a562ba 100644 --- a/src/main/java/net/sinzak/server/cert/CertService.java +++ b/src/main/java/net/sinzak/server/cert/CertService.java @@ -7,7 +7,7 @@ import net.sinzak.server.cert.dto.MailDto; import net.sinzak.server.cert.univ.UnivCard; import net.sinzak.server.cert.univ.UnivCardRepository; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.common.UserUtils; import net.sinzak.server.common.error.InstanceNotFoundException; import net.sinzak.server.common.error.UserNotFoundException; @@ -33,62 +33,67 @@ public class CertService { private final S3Service s3Service; - public JSONObject certifyUniv(UnivDto dto){ + public JSONObject certifyUniv(UnivDto dto) { Optional existUnivCard = univCardRepository.findCertByUserId(userUtils.getCurrentUserId()); - if(existUnivCard.isPresent()) - return PropertyUtil.responseMessage("처리중이거나, 이미 인증된 요청입니다."); - Long certId = univCardRepository.save(new UnivCard(dto.getUniv(), "temp", userUtils.getCurrentUserId())).getId(); - return PropertyUtil.response(certId); + if (existUnivCard.isPresent()) return SinzakResponse.error("처리중이거나, 이미 인증된 요청입니다."); + Long certId = univCardRepository.save(new UnivCard(dto.getUniv(), "temp", userUtils.getCurrentUserId())) + .getId(); + return SinzakResponse.success(certId); } - public JSONObject uploadUnivCard(Long id, MultipartFile file){ - UnivCard univCard = univCardRepository.findById(id).orElseThrow(InstanceNotFoundException::new); - userUtils.getCurrentUser().setUniv(univCard.getUnivName()); + public JSONObject uploadUnivCard(Long id, MultipartFile file) { + UnivCard univCard = univCardRepository.findById(id) + .orElseThrow(InstanceNotFoundException::new); + userUtils.getCurrentUser() + .setUniv(univCard.getUnivName()); String url = s3Service.uploadImage(file); univCard.updateImageUrl(url); univCard.setStatus(Status.PROCESS); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } - public JSONObject completeUnivCard(Long id){ - UnivCard univCard = univCardRepository.findById(id).orElseThrow(InstanceNotFoundException::new); + public JSONObject completeUnivCard(Long id) { + UnivCard univCard = univCardRepository.findById(id) + .orElseThrow(InstanceNotFoundException::new); univCard.setStatus(Status.COMPLETE); - User user = userRepository.findByIdNotDeleted(univCard.getUserId()).orElseThrow(UserNotFoundException::new); + User user = userRepository.findByIdNotDeleted(univCard.getUserId()) + .orElseThrow(UserNotFoundException::new); user.setCertifiedUniv(); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } - public JSONObject applyCertifiedAuthor(String link){ + public JSONObject applyCertifiedAuthor(String link) { User user = userUtils.getCurrentUser(); Optional existCeleb = authorRepository.findCertByUserId(user.getId()); - if(!user.isCert_uni()) - return PropertyUtil.responseMessage("아직 대학 인증이 완료되지 않았습니다."); + if (!user.isCert_uni()) return SinzakResponse.error("아직 대학 인증이 완료되지 않았습니다."); - if(existCeleb.isPresent() || user.isCert_author()) - return PropertyUtil.responseMessage("처리중이거나, 이미 인증된 요청입니다."); + if (existCeleb.isPresent() || user.isCert_author()) + return SinzakResponse.error("처리중이거나, 이미 인증된 요청입니다."); Author author = new Author(link, user.getId()); author.setStatus(Status.PROCESS); authorRepository.save(author); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } - - public JSONObject completeAuthor(Long id){ - Author author = authorRepository.findById(id).orElseThrow(InstanceNotFoundException::new); + + public JSONObject completeAuthor(Long id) { + Author author = authorRepository.findById(id) + .orElseThrow(InstanceNotFoundException::new); author.setStatus(Status.COMPLETE); - User user = userRepository.findByIdNotDeleted(author.getUserId()).orElseThrow(UserNotFoundException::new); + User user = userRepository.findByIdNotDeleted(author.getUserId()) + .orElseThrow(UserNotFoundException::new); user.setCertifiedAuthor(); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } - public void updateCertifiedUniv(MailDto dto){ + public void updateCertifiedUniv(MailDto dto) { User user = userUtils.getCurrentUser(); user.setUniv(dto.getUnivName()); user.setCertifiedUniv(); } @Transactional(readOnly = true) - public JSONObject getStatus(){ + public JSONObject getStatus() { User user = userUtils.getCurrentUser(); CertDto certDto = CertDto.builder() .userId(user.getId()) @@ -100,9 +105,8 @@ public JSONObject getStatus(){ authorRepository.findCertByUserId(user.getId()) .ifPresent(author -> certDto.setAuthorStatus(author.getStatus())); - return PropertyUtil.response(certDto); + return SinzakResponse.success(certDto); } - } diff --git a/src/main/java/net/sinzak/server/cert/author/AuthorRepository.java b/src/main/java/net/sinzak/server/cert/author/AuthorRepository.java index dd327ccf..652addbe 100644 --- a/src/main/java/net/sinzak/server/cert/author/AuthorRepository.java +++ b/src/main/java/net/sinzak/server/cert/author/AuthorRepository.java @@ -9,5 +9,5 @@ public interface AuthorRepository extends JpaRepository { @Query("select a from Author a where a.userId = :userId") - Optional findCertByUserId(@Param("userId")Long userId); + Optional findCertByUserId(@Param("userId") Long userId); } diff --git a/src/main/java/net/sinzak/server/cert/dto/PortFolioDto.java b/src/main/java/net/sinzak/server/cert/dto/PortFolioDto.java index 65ba5714..78f842c0 100644 --- a/src/main/java/net/sinzak/server/cert/dto/PortFolioDto.java +++ b/src/main/java/net/sinzak/server/cert/dto/PortFolioDto.java @@ -5,7 +5,6 @@ @Getter public class PortFolioDto { - @ApiModelProperty(value = "포폴 링크", example = "https://github.com/in-seo , notion.so/dfaef") private String portFolio; } diff --git a/src/main/java/net/sinzak/server/cert/univ/UnivCardRepository.java b/src/main/java/net/sinzak/server/cert/univ/UnivCardRepository.java index a9ecf3d0..bd287fcc 100644 --- a/src/main/java/net/sinzak/server/cert/univ/UnivCardRepository.java +++ b/src/main/java/net/sinzak/server/cert/univ/UnivCardRepository.java @@ -7,7 +7,6 @@ import java.util.Optional; public interface UnivCardRepository extends JpaRepository { - @Query("select c from UnivCard c where c.userId = :userId") - Optional findCertByUserId(@Param("userId")Long userId); + Optional findCertByUserId(@Param("userId") Long userId); } diff --git a/src/main/java/net/sinzak/server/chatroom/controller/ChatMessageController.java b/src/main/java/net/sinzak/server/chatroom/controller/ChatMessageController.java index 217aa952..739621d0 100644 --- a/src/main/java/net/sinzak/server/chatroom/controller/ChatMessageController.java +++ b/src/main/java/net/sinzak/server/chatroom/controller/ChatMessageController.java @@ -32,15 +32,15 @@ public class ChatMessageController { // log.info("메시지 구독"+chatMessageDto.getRoomId()); // template.convertAndSend("/sub/chat/rooms/"+chatMessage.getRoomUuid(),chatMessageDto); // } - @MessageMapping(value ="/chat/message") - public void message(ChatMessageDto chatMessageDto){ - log.info("메시지 구독"+chatMessageDto.getRoomId()); + @MessageMapping(value = "/chat/message") + public void message(ChatMessageDto chatMessageDto) { + log.info("메시지 구독" + chatMessageDto.getRoomId()); chatMessageService.sendChatMessage(chatMessageDto); } @MessageMapping(value = "/chat/leave") - public void leave(ChatMessageDto chatMessageDto){ - log.info("채팅방 나가기"+chatMessageDto.getRoomId()); + public void leave(ChatMessageDto chatMessageDto) { + log.info("채팅방 나가기" + chatMessageDto.getRoomId()); chatMessageService.leaveChatRoom(chatMessageDto); } diff --git a/src/main/java/net/sinzak/server/chatroom/controller/ChatRoomCommandController.java b/src/main/java/net/sinzak/server/chatroom/controller/ChatRoomCommandController.java index 3840d4c4..0fbd7e62 100644 --- a/src/main/java/net/sinzak/server/chatroom/controller/ChatRoomCommandController.java +++ b/src/main/java/net/sinzak/server/chatroom/controller/ChatRoomCommandController.java @@ -15,7 +15,7 @@ import java.util.List; -@Api(tags =" 채팅-명령") +@Api(tags = " 채팅-명령") @RestController @RequiredArgsConstructor @Slf4j @@ -24,21 +24,22 @@ public class ChatRoomCommandController { private final ChatRoomCommandService chatRoomCommandService; - @PostMapping (value ="/chat/rooms/create") - @ApiOperation(value ="채팅방 생성",notes = "로그인한 유저, 글 아이디(postId),글 타입(postType = work,product ) 사용") - public JSONObject createChatRoom(@RequestBody PostDto postDto){ + @PostMapping(value = "/chat/rooms/create") + @ApiOperation(value = "채팅방 생성", notes = "로그인한 유저, 글 아이디(postId),글 타입(postType = work,product ) 사용") + public JSONObject createChatRoom(@RequestBody PostDto postDto) { return chatRoomCommandService.createUserChatRoom(postDto); } - @PostMapping(value ="/chat/rooms/check") - @ApiOperation(value="채팅방 존재하는지 체크",notes ="있다면 exist true 없다면 False, 있을 떈 방 uuid 없을 떈 안 돌려줌") - public JSONObject checkChatRoom(@RequestBody PostDto postDto){ + + @PostMapping(value = "/chat/rooms/check") + @ApiOperation(value = "채팅방 존재하는지 체크", notes = "있다면 exist true 없다면 False, 있을 떈 방 uuid 없을 떈 안 돌려줌") + public JSONObject checkChatRoom(@RequestBody PostDto postDto) { return chatRoomCommandService.checkChatRoom(postDto); } - @PostMapping(value ="/chat/rooms/{uuid}/image",consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) - public JSONObject uploadImage(@PathVariable("uuid") String uuid, @RequestPart List multipartFile){ - return chatRoomCommandService.uploadImage(uuid,multipartFile); - } + @PostMapping(value = "/chat/rooms/{uuid}/image", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) + public JSONObject uploadImage(@PathVariable("uuid") String uuid, @RequestPart List multipartFile) { + return chatRoomCommandService.uploadImage(uuid, multipartFile); + } // @PostMapping(value ="/chat/rooms/{uuid}/leave") @@ -50,13 +51,4 @@ public JSONObject uploadImage(@PathVariable("uuid") String uuid, @RequestPart Li //채팅방 조회 - - - - - - - - - } diff --git a/src/main/java/net/sinzak/server/chatroom/controller/ChatRoomQueryController.java b/src/main/java/net/sinzak/server/chatroom/controller/ChatRoomQueryController.java index cc883cc6..6a9edcdf 100644 --- a/src/main/java/net/sinzak/server/chatroom/controller/ChatRoomQueryController.java +++ b/src/main/java/net/sinzak/server/chatroom/controller/ChatRoomQueryController.java @@ -19,35 +19,35 @@ @RestController @RequiredArgsConstructor @Slf4j -@RequestMapping(value ="/chat") +@RequestMapping(value = "/chat") public class ChatRoomQueryController { private final ChatRoomQueryService chatRoomQueryService; - private static final int MESSAGE_PAGE_SIZE =30; + private static final int MESSAGE_PAGE_SIZE = 30; @PostMapping("/rooms") - @ApiOperation(value ="채팅방 목록 조회") - public JSONObject getChatRooms(){ + @ApiOperation(value = "채팅방 목록 조회") + public JSONObject getChatRooms() { return chatRoomQueryService.getChatRooms(); } @PostMapping(value = "/rooms/{uuid}") - @ApiOperation(value ="채팅방 정보 조회 " ,notes = "postUserId = 게시글 올린 유저아이디, opponentUserId = 채팅 하는 상대방 아이디 ,삭제된 게시글일시 productId : null ->삭제된 게시글") - public JSONObject getChatRoom(@PathVariable("uuid") String roomUuid){ + @ApiOperation(value = "채팅방 정보 조회 ", notes = "postUserId = 게시글 올린 유저아이디, opponentUserId = 채팅 하는 상대방 아이디 ,삭제된 게시글일시 productId : null ->삭제된 게시글") + public JSONObject getChatRoom(@PathVariable("uuid") String roomUuid) { return chatRoomQueryService.getChatRoom(roomUuid); } - @PostMapping(value ="/rooms/post") + @PostMapping(value = "/rooms/post") @ApiOperation(value = "상품에 딸려있는 채팅방 불러오기") - public JSONObject getChatRoomByProduct(@RequestBody PostDto postDto){ + public JSONObject getChatRoomByProduct(@RequestBody PostDto postDto) { return chatRoomQueryService.getChatRoomsByPost(postDto); } @GetMapping(value = "/rooms/{uuid}/message") - public Page getChatRoomMessage( - @PathVariable("uuid") String roomUuid, @RequestParam(value = "page",required = false,defaultValue = "0") int page){ - PageRequest pageRequest = PageRequest.of(page,MESSAGE_PAGE_SIZE,Sort.by("messageId").descending()); - return chatRoomQueryService.getChatRoomMessage(roomUuid,pageRequest); + public Page getChatRoomMessage(@PathVariable("uuid") String roomUuid, @RequestParam(value = "page", required = false, defaultValue = "0") int page) { + PageRequest pageRequest = PageRequest.of(page, MESSAGE_PAGE_SIZE, Sort.by("messageId") + .descending()); + return chatRoomQueryService.getChatRoomMessage(roomUuid, pageRequest); } diff --git a/src/main/java/net/sinzak/server/chatroom/domain/ChatMessage.java b/src/main/java/net/sinzak/server/chatroom/domain/ChatMessage.java index 15409e31..e305866d 100644 --- a/src/main/java/net/sinzak/server/chatroom/domain/ChatMessage.java +++ b/src/main/java/net/sinzak/server/chatroom/domain/ChatMessage.java @@ -24,27 +24,28 @@ public class ChatMessage extends BaseTimeEntity { private String senderName; private Long senderId; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name ="chat_room_id") + @JoinColumn(name = "chat_room_id") private ChatRoom chatRoom; - @Setter - @Lob private String message; //모든 언어에 다 있는 byte[] + @Lob + private String message; //모든 언어에 다 있는 byte[] - public void setSenderName(String sender){ - this.senderName =sender; + public void setSenderName(String sender) { + this.senderName = sender; } - public void newConnect(){ + public void newConnect() { this.type = MessageType.ENTER; } - public void closeConnect(){ + public void closeConnect() { this.type = MessageType.LEAVE; } - public void setChatRoom(ChatRoom chatRoom){ + + public void setChatRoom(ChatRoom chatRoom) { this.chatRoom = chatRoom; } } diff --git a/src/main/java/net/sinzak/server/chatroom/domain/ChatRoom.java b/src/main/java/net/sinzak/server/chatroom/domain/ChatRoom.java index ad9a209f..9ab607c9 100644 --- a/src/main/java/net/sinzak/server/chatroom/domain/ChatRoom.java +++ b/src/main/java/net/sinzak/server/chatroom/domain/ChatRoom.java @@ -29,26 +29,30 @@ public void setPostUserId(Long postUserId) { @Enumerated(EnumType.STRING) private PostType postType; - private boolean blocked =false; + private boolean blocked = false; public void setBlocked(boolean blocked) { this.blocked = blocked; } - public void reEnterChatRoom(){ + + public void reEnterChatRoom() { this.participantsNumber++; } - public ChatRoom(){ + public ChatRoom() { this.participantsNumber = 0; - this.roomUuid = UUID.randomUUID().toString(); + this.roomUuid = UUID.randomUUID() + .toString(); } + public ChatRoom(String roomName) { this.roomName = roomName; this.participantsNumber = 0; - this.roomUuid = UUID.randomUUID().toString(); + this.roomUuid = UUID.randomUUID() + .toString(); } - @OneToMany(mappedBy = "chatRoom",cascade = CascadeType.ALL,orphanRemoval = true) + @OneToMany(mappedBy = "chatRoom", cascade = CascadeType.ALL, orphanRemoval = true) private List chatMessages = new ArrayList<>(); @@ -56,47 +60,55 @@ public ChatRoom(String roomName) { private Set userChatRooms = new HashSet<>(); @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name ="product_id") + @JoinColumn(name = "product_id") private Product product; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name ="work_id") + @JoinColumn(name = "work_id") private Work work; - public void setProduct(Product product){ + + public void setProduct(Product product) { this.product = product; this.postType = PostType.PRODUCT; } - public void setWork(Work work){ + + public void setWork(Work work) { this.work = work; this.postType = PostType.WORK; } - public void addUserChatRoom(UserChatRoom userChatRoom){; + + public void addUserChatRoom(UserChatRoom userChatRoom) { + ; userChatRoom.setChatRoom(this); this.userChatRooms.add(userChatRoom); this.participantsNumber++; } - public User addChatMessage(ChatMessage chatMessage){ + + public User addChatMessage(ChatMessage chatMessage) { this.chatMessages.add(chatMessage); - User opponentUser =null; + User opponentUser = null; chatMessage.setChatRoom(this); - for(UserChatRoom userChatRoom :this.userChatRooms){ + for (UserChatRoom userChatRoom : this.userChatRooms) { User findUser = userChatRoom.getUser(); - if(!findUser.getId().equals(chatMessage.getSenderId())){ //보낸 사람이 아닌 유저에게 + if (!findUser.getId() + .equals(chatMessage.getSenderId())) { //보낸 사람이 아닌 유저에게 opponentUser = findUser; } - if(chatMessage.getType()==MessageType.TEXT || chatMessage.getType()==MessageType.LEAVE){ + if (chatMessage.getType() == MessageType.TEXT || chatMessage.getType() == MessageType.LEAVE) { userChatRoom.updateLatestMessage(chatMessage.getMessage()); } - if(chatMessage.getType()==MessageType.IMAGE){ + if (chatMessage.getType() == MessageType.IMAGE) { userChatRoom.updateLatestMessage("사진"); } } return opponentUser; } - public UserChatRoom leaveChatRoom(Long userId){ - for(UserChatRoom userChatRoom :this.userChatRooms){ - if(userChatRoom.getUser().getId().equals(userId)){ + public UserChatRoom leaveChatRoom(Long userId) { + for (UserChatRoom userChatRoom : this.userChatRooms) { + if (userChatRoom.getUser() + .getId() + .equals(userId)) { userChatRoom.setDisable(true); this.participantsNumber--; return userChatRoom; diff --git a/src/main/java/net/sinzak/server/chatroom/domain/MessageType.java b/src/main/java/net/sinzak/server/chatroom/domain/MessageType.java index 55998052..6fd1d9c3 100644 --- a/src/main/java/net/sinzak/server/chatroom/domain/MessageType.java +++ b/src/main/java/net/sinzak/server/chatroom/domain/MessageType.java @@ -1,8 +1,5 @@ package net.sinzak.server.chatroom.domain; public enum MessageType { - ENTER, - IMAGE, - LEAVE, - TEXT + ENTER, IMAGE, LEAVE, TEXT } diff --git a/src/main/java/net/sinzak/server/chatroom/domain/UserChatRoom.java b/src/main/java/net/sinzak/server/chatroom/domain/UserChatRoom.java index 28eb66eb..8079f40d 100644 --- a/src/main/java/net/sinzak/server/chatroom/domain/UserChatRoom.java +++ b/src/main/java/net/sinzak/server/chatroom/domain/UserChatRoom.java @@ -16,11 +16,11 @@ public class UserChatRoom { private Long id; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="CHAT_ROOM_ID") + @JoinColumn(name = "CHAT_ROOM_ID") private ChatRoom chatRoom; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="USER_ID") + @JoinColumn(name = "USER_ID") private User user; @@ -35,13 +35,16 @@ public void setDisable(boolean disable) { private String image; private String latestMessage; private LocalDateTime latestMessageTime; - public UserChatRoom(){} - public void updateLatestMessage(String latestMessage){ + public UserChatRoom() { + } + + public void updateLatestMessage(String latestMessage) { this.latestMessage = latestMessage; this.latestMessageTime = LocalDateTime.now(); } - public UserChatRoom(User user,User opponentUser){ + + public UserChatRoom(User user, User opponentUser) { this.latestMessage = null; this.latestMessageTime = null; this.roomName = opponentUser.getNickName(); @@ -50,10 +53,12 @@ public UserChatRoom(User user,User opponentUser){ this.image = opponentUser.getPicture(); this.user = user; } - public void setUser(User user){ + + public void setUser(User user) { this.user = user; } - public void setChatRoom(ChatRoom chatRoom){ + + public void setChatRoom(ChatRoom chatRoom) { this.chatRoom = chatRoom; } } diff --git a/src/main/java/net/sinzak/server/chatroom/dto/request/PostDto.java b/src/main/java/net/sinzak/server/chatroom/dto/request/PostDto.java index 904a5069..b1afc115 100644 --- a/src/main/java/net/sinzak/server/chatroom/dto/request/PostDto.java +++ b/src/main/java/net/sinzak/server/chatroom/dto/request/PostDto.java @@ -9,8 +9,8 @@ @AllArgsConstructor @NoArgsConstructor public class PostDto { - @ApiModelProperty(value ="게시글 타입",example = "product",dataType = "string") + @ApiModelProperty(value = "게시글 타입", example = "product", dataType = "string") private String postType; - @ApiModelProperty(value ="게시글 아이디", example = "1",dataType = "int") + @ApiModelProperty(value = "게시글 아이디", example = "1", dataType = "int") private Long postId; } diff --git a/src/main/java/net/sinzak/server/chatroom/dto/respond/GetChatMessageDto.java b/src/main/java/net/sinzak/server/chatroom/dto/respond/GetChatMessageDto.java index 9d5235fe..c643c215 100644 --- a/src/main/java/net/sinzak/server/chatroom/dto/respond/GetChatMessageDto.java +++ b/src/main/java/net/sinzak/server/chatroom/dto/respond/GetChatMessageDto.java @@ -5,8 +5,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; - - import java.time.LocalDateTime; @Builder diff --git a/src/main/java/net/sinzak/server/chatroom/service/ChatRoomCommandService.java b/src/main/java/net/sinzak/server/chatroom/service/ChatRoomCommandService.java index 7899f2ab..af015492 100644 --- a/src/main/java/net/sinzak/server/chatroom/service/ChatRoomCommandService.java +++ b/src/main/java/net/sinzak/server/chatroom/service/ChatRoomCommandService.java @@ -11,7 +11,7 @@ import net.sinzak.server.chatroom.repository.ChatRoomRepository; import net.sinzak.server.chatroom.repository.UserChatRoomRepository; import net.sinzak.server.common.PostType; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.common.UserUtils; import net.sinzak.server.common.error.ChatRoomNotFoundException; import net.sinzak.server.common.error.PostNotFoundException; @@ -77,7 +77,7 @@ public JSONObject createUserChatRoom(PostDto postDto) { //상대방 아바타를 checkUserStatus(loginUser,postUser); if(userQueryService.checkReported(postUser,loginUser)){ - return PropertyUtil.responseMessage("차단된 상대입니다."); + return SinzakResponse.error("차단된 상대입니다."); } GetCreatedChatRoomDto getCreatedChatRoomDto =new GetCreatedChatRoomDto(); @@ -92,7 +92,7 @@ public JSONObject createUserChatRoom(PostDto postDto) { //상대방 아바타를 getCreatedChatRoomDto.setNewChatRoom(false); } getCreatedChatRoomDto.setRoomUuid(chatRoom.getRoomUuid()); - return PropertyUtil.response(getCreatedChatRoomDto); + return SinzakResponse.success(getCreatedChatRoomDto); } public JSONObject checkChatRoom(PostDto postDto){ User loginUser = userUtils.getCurrentUser(); @@ -129,7 +129,7 @@ public JSONObject checkChatRoom(PostDto postDto){ getCheckChatRoomDto.setExist(true); } getCheckChatRoomDto.setRoomUuid(chatRoom.getRoomUuid()); - return PropertyUtil.response(getCheckChatRoomDto); + return SinzakResponse.success(getCheckChatRoomDto); } private void addChatRoomToPost(PostDto postDto, Product product, Work work, ChatRoom chatRoom) { if(postDto.getPostType().equals(PostType.WORK.getName())){ @@ -151,7 +151,7 @@ public JSONObject uploadImage(String roomUuid, List multipartFile jsonObject.put("url",url); obj.add(jsonObject); } - return PropertyUtil.response(obj); + return SinzakResponse.success(obj); } // public JSONObject leaveChatRoom(User user,String roomUuid){ // ChatRoom findChatRoom = chatRoomRepository.findByRoomId(roomUuid).orElseThrow(()->new InstanceNotFoundException("존재하지 않는 채팅방입니다.")); diff --git a/src/main/java/net/sinzak/server/chatroom/service/ChatRoomQueryService.java b/src/main/java/net/sinzak/server/chatroom/service/ChatRoomQueryService.java index 5324ac0f..3efeecb0 100644 --- a/src/main/java/net/sinzak/server/chatroom/service/ChatRoomQueryService.java +++ b/src/main/java/net/sinzak/server/chatroom/service/ChatRoomQueryService.java @@ -14,13 +14,9 @@ import net.sinzak.server.chatroom.repository.ChatRoomRepository; import net.sinzak.server.chatroom.repository.UserChatRoomRepository; import net.sinzak.server.common.PostType; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.common.UserUtils; import net.sinzak.server.common.error.ChatRoomNotFoundException; -import net.sinzak.server.common.error.UserNotLoginException; -import net.sinzak.server.product.service.ProductService; -import net.sinzak.server.user.domain.User; -import net.sinzak.server.work.service.WorkService; import org.json.simple.JSONObject; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -70,7 +66,7 @@ public JSONObject getChatRoomsByPost(PostDto postDto){ } } } - return PropertyUtil.response(getChatRoomsDtos); + return SinzakResponse.success(getChatRoomsDtos); } private GetChatRoomsDto makeUserChatRoom(UserChatRoom userChatRoom, ChatRoom chatRoom) { @@ -99,7 +95,7 @@ public JSONObject getChatRooms(){ .build() ) .collect(Collectors.toList()); - return PropertyUtil.response(chatRoomsDtos); + return SinzakResponse.success(chatRoomsDtos); } public Page getChatRoomMessage(String roomUuid, Pageable pageable){ ChatRoom findChatRoom = chatRoomRepository.findByRoomUuidFetchChatMessage(roomUuid) @@ -141,16 +137,16 @@ public JSONObject getChatRoom(String roomUuid){ if(chatRoom.getProduct().isDeleted()){ getChatRoomDto.setPostId(null); } - return PropertyUtil.response(getChatRoomDto); + return SinzakResponse.success(getChatRoomDto); } if(chatRoom.getPostType().equals(PostType.WORK)){ GetChatRoomDto getChatRoomDto = makeWorkChatRoomDto(myUserChatRoom,chatRoom,opponentUserChatRoom); if(chatRoom.getWork().isDeleted()){ getChatRoomDto.setPostId(null); } - return PropertyUtil.response(getChatRoomDto); + return SinzakResponse.success(getChatRoomDto); } - return PropertyUtil.responseMessage("잘못된 요청입니다"); + return SinzakResponse.error("잘못된 요청입니다"); } private GetChatRoomDto makeWorkChatRoomDto(UserChatRoom userChatRoom, ChatRoom chatRoom,UserChatRoom opponentUserChatRoom) { diff --git a/src/main/java/net/sinzak/server/common/PropertyUtil.java b/src/main/java/net/sinzak/server/common/PropertyUtil.java deleted file mode 100644 index cd19af0a..00000000 --- a/src/main/java/net/sinzak/server/common/PropertyUtil.java +++ /dev/null @@ -1,71 +0,0 @@ -package net.sinzak.server.common; - -import lombok.RequiredArgsConstructor; -import net.sinzak.server.common.error.UserNotFoundException; -import net.sinzak.server.user.domain.User; -import org.json.simple.JSONObject; -import org.springframework.context.EnvironmentAware; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.env.Environment; - - -@Configuration -@RequiredArgsConstructor -@PropertySource("classpath:/application-real.properties") -public class PropertyUtil implements EnvironmentAware { - private static Environment environment; - public static final String SUCCESS_WORD ="success"; - - @Override public void setEnvironment(final Environment environment) { - this.environment = environment; - } - - public static String getProperty(String key) { - return environment.getProperty(key); - } - public static JSONObject response(boolean bl){ - JSONObject obj = new JSONObject(); - if(bl){ - obj.put(SUCCESS_WORD,true); - } - else - obj.put(SUCCESS_WORD,false); - return obj; - } - - public static JSONObject response(Object data){ - JSONObject obj = new JSONObject(); - obj.put(SUCCESS_WORD,true); - obj.put("data",data); - return obj; - } - - public static JSONObject response(Object data, boolean bl){ - JSONObject obj = new JSONObject(); - obj.put(SUCCESS_WORD,bl); - obj.put("data",data); - return obj; - } - - public static JSONObject response(Long id){ - JSONObject obj = new JSONObject(); - obj.put("id",id); - obj.put(SUCCESS_WORD,true); - return obj; - } - - public static JSONObject responseMessage(String message){ //그냥 json 리턴해줄때 씀 - JSONObject obj = new JSONObject(); - obj.put(SUCCESS_WORD, false); - obj.put("message", message); - return obj; - } - - public static void checkHeader(User user) { - if(user == null) - throw new UserNotFoundException(UserNotFoundException.USER_NOT_LOGIN); - } - -} - diff --git a/src/main/java/net/sinzak/server/common/SinzakResponse.java b/src/main/java/net/sinzak/server/common/SinzakResponse.java new file mode 100644 index 00000000..7b67354d --- /dev/null +++ b/src/main/java/net/sinzak/server/common/SinzakResponse.java @@ -0,0 +1,50 @@ +package net.sinzak.server.common; + +import net.sinzak.server.common.error.UserNotFoundException; +import net.sinzak.server.user.domain.User; +import org.json.simple.JSONObject; + + +public class SinzakResponse { + private boolean success; + private Object data; + private String message = ""; + + public SinzakResponse(boolean success, Object data, String message) { + this.success = success; + this.data = data; + this.message = message; + } + + public static JSONObject success() { + return makeResponseDto(new SinzakResponse(true, null, null)); + } + + public static JSONObject success(Object data) { + return makeResponseDto(new SinzakResponse(true, data, null)); + } + + public static JSONObject success(Long id) { + JSONObject obj = makeResponseDto(new SinzakResponse(true, null, null)); + obj.put("id",id); + return obj; + } + + public static JSONObject error(String message) { + return makeResponseDto(new SinzakResponse(false, null, message)); + } + + private static JSONObject makeResponseDto(SinzakResponse response) { + JSONObject obj = new JSONObject(); + obj.put("success", response.success); + obj.put("data", response.data); + obj.put("message", response.message); + return obj; + } + + public static void checkHeader(User user) { + if(user == null) + throw new UserNotFoundException(UserNotFoundException.USER_NOT_LOGIN); + } + +} diff --git a/src/main/java/net/sinzak/server/common/error/RestControllerAdvisor.java b/src/main/java/net/sinzak/server/common/error/RestControllerAdvisor.java index adb8ad44..44bacb52 100644 --- a/src/main/java/net/sinzak/server/common/error/RestControllerAdvisor.java +++ b/src/main/java/net/sinzak/server/common/error/RestControllerAdvisor.java @@ -1,6 +1,6 @@ package net.sinzak.server.common.error; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import org.json.simple.JSONObject; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -18,29 +18,29 @@ public class RestControllerAdvisor { @ExceptionHandler(UserNotFoundException.class) @ResponseStatus(HttpStatus.OK) - protected JSONObject handleUserNotFoundException(UserNotFoundException e) {return PropertyUtil.responseMessage(e.getMessage());} + protected JSONObject handleUserNotFoundException(UserNotFoundException e) {return SinzakResponse.error(e.getMessage());} @ExceptionHandler(PostNotFoundException.class) @ResponseStatus(HttpStatus.OK) protected JSONObject handlePostNotFoundException() { - return PropertyUtil.responseMessage("존재하지 않는 글입니다."); + return SinzakResponse.error("존재하지 않는 글입니다."); } @ExceptionHandler(InstanceNotFoundException.class) @ResponseStatus(HttpStatus.OK) protected JSONObject handleInstanceNotFoundException() { - return PropertyUtil.responseMessage("이미 완료된 요청이거나, 존재하지 않는 객체입니다."); + return SinzakResponse.error("이미 완료된 요청이거나, 존재하지 않는 객체입니다."); } @ExceptionHandler(ChatRoomNotFoundException.class) @ResponseStatus(HttpStatus.OK) protected JSONObject handleChatRoomNotFoundException() { - return PropertyUtil.responseMessage("존재하지 않는 채팅방입니다."); + return SinzakResponse.error("존재하지 않는 채팅방입니다."); } @ExceptionHandler(UserNotLoginException.class) @ResponseStatus(HttpStatus.OK) - protected JSONObject handleUserNotLoginException(){return PropertyUtil.responseMessage("로그인이 필요한 작업입니다.");} + protected JSONObject handleUserNotLoginException(){return SinzakResponse.error("로그인이 필요한 작업입니다.");} @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity> handleValidationExceptions( diff --git a/src/main/java/net/sinzak/server/config/QuerydslConfig.java b/src/main/java/net/sinzak/server/config/QuerydslConfig.java index f4374f46..1c38fc78 100644 --- a/src/main/java/net/sinzak/server/config/QuerydslConfig.java +++ b/src/main/java/net/sinzak/server/config/QuerydslConfig.java @@ -14,7 +14,7 @@ public class QuerydslConfig { private EntityManager entityManager; @Bean - public JPAQueryFactory jpaQueryFactory(){ + public JPAQueryFactory jpaQueryFactory() { return new JPAQueryFactory(entityManager); } } \ No newline at end of file diff --git a/src/main/java/net/sinzak/server/config/RedisCacheConfig.java b/src/main/java/net/sinzak/server/config/RedisCacheConfig.java index cc1df67c..3361cdd4 100644 --- a/src/main/java/net/sinzak/server/config/RedisCacheConfig.java +++ b/src/main/java/net/sinzak/server/config/RedisCacheConfig.java @@ -42,7 +42,6 @@ public RedisConnectionFactory redisConnectionFactory() { redisStandaloneConfiguration.setHostName(host); LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration); - log.info("redis 연결"); return lettuceConnectionFactory; } @Bean diff --git a/src/main/java/net/sinzak/server/config/SwaggerConfig.java b/src/main/java/net/sinzak/server/config/SwaggerConfig.java index 1aac522c..cf76c4c4 100644 --- a/src/main/java/net/sinzak/server/config/SwaggerConfig.java +++ b/src/main/java/net/sinzak/server/config/SwaggerConfig.java @@ -33,28 +33,23 @@ public class SwaggerConfig { private static final String API_DESCRIPTION = "신작 API 명세서"; - @Bean - public Docket testApi(){ - return getDocket("TEST",Predicates.or( - PathSelectors.regex("/api.*"))); + public Docket testApi() { + return getDocket("TEST", Predicates.or(PathSelectors.regex("/api.*"))); } + @Bean public Docket AllApi() { - return getDocket("All", Predicates.or( - PathSelectors.regex("/*.*"))); + return getDocket("All", Predicates.or(PathSelectors.regex("/*.*"))); } + public ApiInfo apiInfo() { // API의 이름, 현재 버전, API에 대한 정보 - return new ApiInfoBuilder() - .title(API_NAME) - .version(API_VERSION) - .description(API_DESCRIPTION) - .build(); + return new ApiInfoBuilder().title(API_NAME).version(API_VERSION).description(API_DESCRIPTION).build(); } + public Docket getDocket(String groupName, Predicate predicate) { - return new Docket(DocumentationType.SWAGGER_2) - .useDefaultResponseMessages(false) + return new Docket(DocumentationType.SWAGGER_2).useDefaultResponseMessages(false) .ignoredParameterTypes(AuthenticationPrincipal.class) .groupName(groupName) .select() @@ -70,23 +65,18 @@ public Docket getDocket(String groupName, Predicate predicate) { //swagger ui 설정. @Bean public UiConfiguration uiConfig() { - return UiConfigurationBuilder.builder() - .displayRequestDuration(true) - .validatorUrl("") - .build(); + return UiConfigurationBuilder.builder().displayRequestDuration(true).validatorUrl("").build(); } + private ApiKey userApiKey() { return new ApiKey("JWT", "Authorization", "header"); } private SecurityContext securityContext() { - return springfox - .documentation - .spi.service - .contexts - .SecurityContext - .builder() - .securityReferences(defaultAuth()).forPaths(PathSelectors.any()).build(); + return springfox.documentation.spi.service.contexts.SecurityContext.builder() + .securityReferences(defaultAuth()) + .forPaths(PathSelectors.any()) + .build(); } List defaultAuth() { diff --git a/src/main/java/net/sinzak/server/config/auth/CustomUserDetails.java b/src/main/java/net/sinzak/server/config/auth/CustomUserDetails.java index 2f1f4b1c..753f3be8 100644 --- a/src/main/java/net/sinzak/server/config/auth/CustomUserDetails.java +++ b/src/main/java/net/sinzak/server/config/auth/CustomUserDetails.java @@ -1,7 +1,7 @@ package net.sinzak.server.config.auth; import com.fasterxml.jackson.annotation.JsonIgnore; -import lombok.*; +import lombok.Builder; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; @@ -16,7 +16,10 @@ public class CustomUserDetails implements UserDetails, Serializable { private String role; private String username; private Collection authorities = null; - /** authorities는 역직렬화가 안됨. 굳이 하려면 엄청 복잡하게 해야함. 따라서 레디스에 저장은 null로 하고, 불러온 뒤에 권한 세팅 하는 방법으로 고정. **/ + + /** + * authorities는 역직렬화가 안됨. 굳이 하려면 엄청 복잡하게 해야함. 따라서 레디스에 저장은 null로 하고, 불러온 뒤에 권한 세팅 하는 방법으로 고정. + **/ public String getRole() { return role; } @@ -70,7 +73,7 @@ public boolean isEnabled() { @Builder public CustomUserDetails(Long id, String role) { super(); - this.role = "ROLE_"+role; + this.role = "ROLE_" + role; this.username = String.valueOf(id); this.authorities = getAuthorities(); } diff --git a/src/main/java/net/sinzak/server/config/auth/SecurityConfig.java b/src/main/java/net/sinzak/server/config/auth/SecurityConfig.java index 49ce16ee..43c1c4e2 100644 --- a/src/main/java/net/sinzak/server/config/auth/SecurityConfig.java +++ b/src/main/java/net/sinzak/server/config/auth/SecurityConfig.java @@ -18,8 +18,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { - http - .csrf().disable() + http.csrf() + .disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .headers().frameOptions().disable() // h2-console 화면을 사용하기 위해 해당 옵션 disable diff --git a/src/main/java/net/sinzak/server/config/auth/SecurityService.java b/src/main/java/net/sinzak/server/config/auth/SecurityService.java index 7477c845..2f10763f 100644 --- a/src/main/java/net/sinzak/server/config/auth/SecurityService.java +++ b/src/main/java/net/sinzak/server/config/auth/SecurityService.java @@ -2,11 +2,14 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.common.UserUtils; import net.sinzak.server.common.error.InstanceNotFoundException; import net.sinzak.server.common.error.UserNotFoundException; -import net.sinzak.server.config.auth.jwt.*; +import net.sinzak.server.config.auth.jwt.JwtTokenProvider; +import net.sinzak.server.config.auth.jwt.RefreshToken; +import net.sinzak.server.config.auth.jwt.RefreshTokenRepository; +import net.sinzak.server.config.auth.jwt.TokenDto; import net.sinzak.server.user.domain.JoinTerms; import net.sinzak.server.user.domain.User; import net.sinzak.server.user.dto.request.EmailDto; @@ -37,7 +40,7 @@ public TokenDto login(String email) { .orElseThrow(() -> new UserNotFoundException(UserNotFoundException.USER_NOT_FOUND)); TokenDto tokenDto = jwtProvider.createToken(user.getId().toString(), user.getId(), user.getRole()); - if(user.getNickName() == null || user.getNickName().isEmpty()) + if (user.getNickName() == null || user.getNickName().isEmpty()) tokenDto.setIsJoined(false); tokenDto.setOrigin(user.getOrigin()); RefreshToken refreshToken = RefreshToken.builder() @@ -45,13 +48,13 @@ public TokenDto login(String email) { .token(tokenDto.getRefreshToken()) .build(); refreshTokenRepository.save(refreshToken); - log.error(user.getNickName()+" 로그인!"); + log.error(user.getNickName() + " 로그인!"); return tokenDto; } @Transactional public TokenDto login(User user) { - PropertyUtil.checkHeader(user); + SinzakResponse.checkHeader(user); TokenDto tokenDto = jwtProvider.createToken(user.getId().toString(), user.getId(), user.getRole()); tokenDto.setIsJoined(false); @@ -65,12 +68,11 @@ public TokenDto login(User user) { } - @Transactional(rollbackFor = Exception.class) public JSONObject join(@RequestBody JoinDto dto) { User user = userUtils.getCurrentUser(); - if(!user.getNickName().isBlank()) - return PropertyUtil.responseMessage("이미 회원가입된 유저입니다."); + if (!user.getNickName().isBlank()) + return SinzakResponse.error("이미 회원가입된 유저입니다."); JSONObject obj = new JSONObject(); user.saveJoinInfo(dto.getNickName(), dto.getCategory_like()); user.setRandomProfileImage(); @@ -78,7 +80,7 @@ public JSONObject join(@RequestBody JoinDto dto) { terms.setUser(user); JoinTerms saveTerms = joinTermsRepository.save(terms); Long savedId = userRepository.save(user).getId(); - if(savedId == null || saveTerms.getId() == null) + if (savedId == null || saveTerms.getId() == null) throw new InstanceNotFoundException("서버 오류로 저장되지 않았습니다."); TokenDto tokenDto = jwtProvider.createToken(String.valueOf(user.getId()), user.getId(), user.getRole()); tokenDto.setIsJoined(true); @@ -88,8 +90,8 @@ public JSONObject join(@RequestBody JoinDto dto) { .token(tokenDto.getRefreshToken()) .build(); refreshTokenRepository.save(refreshToken); - obj.put("token",tokenDto); - obj.put("success",true); + obj.put("token", tokenDto); + obj.put("success", true); return obj; } @@ -97,7 +99,7 @@ public JSONObject join(@RequestBody JoinDto dto) { public TokenDto reissue() { User user = userUtils.getCurrentUser(); List refreshTokens = refreshTokenRepository.findByKey(user.getId()); - RefreshToken refreshToken = refreshTokens.get(refreshTokens.size()-1); //마지막꺼가 가장 최신반영된 토큰 + RefreshToken refreshToken = refreshTokens.get(refreshTokens.size() - 1); //마지막꺼가 가장 최신반영된 토큰 TokenDto newCreatedToken = jwtProvider.createToken(user.getId().toString(), user.getId(), user.getRole()); RefreshToken updateRefreshToken = refreshToken.updateToken(newCreatedToken.getRefreshToken()); @@ -110,11 +112,11 @@ public TokenDto reissue() { @Transactional(readOnly = true) public JSONObject checkEmail(EmailDto dto) { Optional existUser = userRepository.findByEmailNotDeleted(dto.getEmail()); - if (existUser.isPresent()){ + if (existUser.isPresent()) { User user = existUser.get(); - if(!user.getNickName().isBlank()) - return PropertyUtil.responseMessage("이미 가입된 이메일입니다."); + if (!user.getNickName().isBlank()) + return SinzakResponse.error("이미 가입된 이메일입니다."); } - return PropertyUtil.response(true); + return SinzakResponse.success(true); } } diff --git a/src/main/java/net/sinzak/server/config/auth/UserProjection.java b/src/main/java/net/sinzak/server/config/auth/UserProjection.java index 1dec556b..1423bffa 100644 --- a/src/main/java/net/sinzak/server/config/auth/UserProjection.java +++ b/src/main/java/net/sinzak/server/config/auth/UserProjection.java @@ -5,5 +5,6 @@ public interface UserProjection { //저장소에서 바로 CustomUserDetails에 주입되지 않아서 거쳐가기. @Column(name = "user_id") Long getuser_id(); + String getRole(); } diff --git a/src/main/java/net/sinzak/server/config/webSocket/WebSocketConfig.java b/src/main/java/net/sinzak/server/config/webSocket/WebSocketConfig.java index fa1466c1..7b592fb1 100644 --- a/src/main/java/net/sinzak/server/config/webSocket/WebSocketConfig.java +++ b/src/main/java/net/sinzak/server/config/webSocket/WebSocketConfig.java @@ -2,7 +2,9 @@ import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; -import org.springframework.web.socket.config.annotation.*; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; @Configuration @EnableWebSocketMessageBroker @@ -12,7 +14,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { public void registerStompEndpoints(StompEndpointRegistry registry) { registry .addEndpoint("/stomp/chat") - .setAllowedOriginPatterns("*","http://localhost:8080","https://sinzak.net") + .setAllowedOriginPatterns("*", "http://localhost:8080", "https://sinzak.net") .withSockJS(); } diff --git a/src/main/java/net/sinzak/server/firebase/FCMInitializer.java b/src/main/java/net/sinzak/server/firebase/FCMInitializer.java index cdb84e48..6c19f4c2 100644 --- a/src/main/java/net/sinzak/server/firebase/FCMInitializer.java +++ b/src/main/java/net/sinzak/server/firebase/FCMInitializer.java @@ -19,7 +19,7 @@ public class FCMInitializer { private String credential; @PostConstruct - public void initialize(){ + public void initialize() { ClassPathResource resource = new ClassPathResource(credential); try (InputStream stream = resource.getInputStream()) { @@ -27,11 +27,12 @@ public void initialize(){ .setCredentials(GoogleCredentials.fromStream(stream)) .build(); - if (FirebaseApp.getApps().isEmpty()) { + if (FirebaseApp.getApps() + .isEmpty()) { FirebaseApp.initializeApp(options); log.info("FirebaseApp initialization complete"); } - }catch (Exception e){ + } catch (Exception e) { log.error("파이어베이스 이니셜라이저 오류 {}", e.getMessage()); } diff --git a/src/main/java/net/sinzak/server/firebase/FireBaseController.java b/src/main/java/net/sinzak/server/firebase/FireBaseController.java index 773180f6..e248598d 100644 --- a/src/main/java/net/sinzak/server/firebase/FireBaseController.java +++ b/src/main/java/net/sinzak/server/firebase/FireBaseController.java @@ -3,7 +3,7 @@ import io.swagger.annotations.Api; import lombok.RequiredArgsConstructor; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.common.UserUtils; import org.json.simple.JSONObject; import org.springframework.web.bind.annotation.PostMapping; @@ -13,12 +13,15 @@ @RestController @RequiredArgsConstructor public class FireBaseController { - private final UserUtils userUtils; /** 이건 pushAlarm이 종속적이라 컨트롤러에 어쩔수없이 선언. **/ + private final UserUtils userUtils; + /** + * 이건 pushAlarm이 종속적이라 컨트롤러에 어쩔수없이 선언. + **/ private final FireBaseService fireBaseService; - @PostMapping(value ="firebase/test") - public JSONObject pushAlarm(){ - fireBaseService.sendIndividualNotification(userUtils.getCurrentUser(),"알림","테스트","/"); - return PropertyUtil.response(true); + @PostMapping(value = "firebase/test") + public JSONObject pushAlarm() { + fireBaseService.sendIndividualNotification(userUtils.getCurrentUser(), "알림", "테스트", "/"); + return SinzakResponse.success(true); } } diff --git a/src/main/java/net/sinzak/server/firebase/FireBaseService.java b/src/main/java/net/sinzak/server/firebase/FireBaseService.java index 27d095ba..f038b2d0 100644 --- a/src/main/java/net/sinzak/server/firebase/FireBaseService.java +++ b/src/main/java/net/sinzak/server/firebase/FireBaseService.java @@ -19,36 +19,41 @@ @Transactional public class FireBaseService { - public void sendIndividualNotification(User user, String title, String body, String route){ - if(user.getFcm() ==null || user.getFcm().equals("")){ //로그아웃 한 상태라면 + public void sendIndividualNotification(User user, String title, String body, String route) { + if (user.getFcm() == null || user.getFcm() + .equals("")) { //로그아웃 한 상태라면 return; } - Notification notification = new Notification(title,body); + Notification notification = new Notification(title, body); Message message = Message.builder() .setNotification(notification) .setToken(user.getFcm()) - .putData("route",route) + .putData("route", route) .build(); - try{ - FirebaseMessaging.getInstance().sendAsync(message); + try { + FirebaseMessaging.getInstance() + .sendAsync(message); log.info("알림 전송에 성공하였습니다."); - } - catch (Exception e){ + } catch (Exception e) { log.error("알림 전송에 실패하였습니다. {}", e.getMessage()); } } - public void sendToAllNotification(List tokenList,String title, String body, String route){ - List messages = tokenList.stream().map(token->Message.builder() - .putData("time", LocalDateTime.now().toString()) - .setNotification(new Notification(title,body)) - .setToken(token) - .build()).collect(Collectors.toList()); + + public void sendToAllNotification(List tokenList, String title, String body, String route) { + List messages = tokenList.stream() + .map(token -> Message.builder() + .putData("time", LocalDateTime.now().toString()) + .setNotification(new Notification(title, body)) + .setToken(token) + .build()) + .collect(Collectors.toList()); BatchResponse response; try { // 알림 발송 - response = FirebaseMessaging.getInstance().sendAll(messages); + response = FirebaseMessaging.getInstance() + .sendAll(messages); // 요청에 대한 응답 처리 if (response.getFailureCount() > 0) { diff --git a/src/main/java/net/sinzak/server/image/S3Config.java b/src/main/java/net/sinzak/server/image/S3Config.java index e69aafd3..efda0990 100644 --- a/src/main/java/net/sinzak/server/image/S3Config.java +++ b/src/main/java/net/sinzak/server/image/S3Config.java @@ -23,9 +23,7 @@ public class S3Config { @Bean public AmazonS3 amazonS3Client() { AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); - - return AmazonS3ClientBuilder - .standard() + return AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(credentials)) .withRegion(region) .build(); diff --git a/src/main/java/net/sinzak/server/image/S3Service.java b/src/main/java/net/sinzak/server/image/S3Service.java index 8f3ab5bb..82c2f48f 100644 --- a/src/main/java/net/sinzak/server/image/S3Service.java +++ b/src/main/java/net/sinzak/server/image/S3Service.java @@ -33,11 +33,10 @@ public String uploadImage(MultipartFile file) { objectMetadata.setContentLength(file.getSize()); objectMetadata.setContentType(file.getContentType()); - try(InputStream inputStream = file.getInputStream()) { - amazonS3.putObject(new PutObjectRequest(bucket, fileName, inputStream, objectMetadata) - .withCannedAcl(CannedAccessControlList.PublicRead)); - return amazonS3.getUrl(bucket,fileName).toString(); - } catch(IOException e) { + try (InputStream inputStream = file.getInputStream()) { + amazonS3.putObject(new PutObjectRequest(bucket, fileName, inputStream, objectMetadata).withCannedAcl(CannedAccessControlList.PublicRead)); + return amazonS3.getUrl(bucket, fileName).toString(); + } catch (IOException e) { throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "이미지 업로드에 실패했습니다."); } } @@ -48,7 +47,9 @@ public void deleteImage(String fileUrl) { private String createFileName(String fileName) { - return UUID.randomUUID().toString().concat(getFileExtension(fileName)); + return UUID.randomUUID() + .toString() + .concat(getFileExtension(fileName)); } private String getFileExtension(String fileName) { diff --git a/src/main/java/net/sinzak/server/oauth/AppleService.java b/src/main/java/net/sinzak/server/oauth/AppleService.java index 30babe11..9484a527 100644 --- a/src/main/java/net/sinzak/server/oauth/AppleService.java +++ b/src/main/java/net/sinzak/server/oauth/AppleService.java @@ -41,7 +41,8 @@ public class AppleService { public String createClientSecret(String teamId, String clientId, String keyId, String keyPath, String authUrl) throws NoSuchAlgorithmException, ParseException { - JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.ES256).keyID(keyId).build(); + JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.ES256).keyID(keyId) + .build(); JWTClaimsSet claimsSet = new JWTClaimsSet(); Date now = new Date(); @@ -101,7 +102,8 @@ public String doPost(String url, Map param) { UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nvps); httpPost.setEntity(formEntity); response = httpclient.execute(httpPost); - statusCode = response.getStatusLine().getStatusCode(); + statusCode = response.getStatusLine() + .getStatusCode(); HttpEntity entity = response.getEntity(); result = EntityUtils.toString(entity, "UTF-8"); diff --git a/src/main/java/net/sinzak/server/oauth/OAuthAttributes.java b/src/main/java/net/sinzak/server/oauth/OAuthAttributes.java index 2c0c0488..009171b4 100644 --- a/src/main/java/net/sinzak/server/oauth/OAuthAttributes.java +++ b/src/main/java/net/sinzak/server/oauth/OAuthAttributes.java @@ -13,7 +13,7 @@ @ToString public class OAuthAttributes { private String email; - private String picture=""; + private String picture = ""; private String origin; @Builder diff --git a/src/main/java/net/sinzak/server/oauth/OAuthController.java b/src/main/java/net/sinzak/server/oauth/OAuthController.java index 5c273630..7a8f5f8c 100644 --- a/src/main/java/net/sinzak/server/oauth/OAuthController.java +++ b/src/main/java/net/sinzak/server/oauth/OAuthController.java @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.common.error.UserNotFoundException; import net.sinzak.server.config.auth.SecurityService; import net.sinzak.server.config.auth.jwt.TokenDto; @@ -13,9 +13,13 @@ import net.sinzak.server.user.service.UserCommandService; import org.json.simple.JSONObject; import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; -import java.util.*; +import java.util.HashMap; +import java.util.Map; @Api(tags = "소셜로그인") @RestController @@ -51,78 +55,78 @@ public class OAuthController { public JSONObject getOauthToken(@org.springframework.web.bind.annotation.RequestBody OauthDto tokenDto) throws Exception { JSONObject OauthInfo = oAuthService.getOauthInfo(tokenDto); OAuthAttributes OauthUser = OAuthAttributes.of(tokenDto.getOrigin(), OauthInfo); - if(OauthUser.getEmail() == null || OauthUser.getEmail().isBlank()) - return PropertyUtil.responseMessage("회원가입 불가능(소셜로그인 실패)"); + if (OauthUser.getEmail() == null || OauthUser.getEmail().isBlank()) + return SinzakResponse.error("회원가입 불가능(소셜로그인 실패)"); TokenDto jwtToken; - try{ + try { jwtToken = securityService.login(OauthUser.getEmail()); - } - catch(UserNotFoundException e){ + } catch (UserNotFoundException e) { User savedUser = userService.saveTempUser(new User(OauthUser.getEmail(), OauthUser.getPicture(), OauthUser.getOrigin())); jwtToken = securityService.login(savedUser); } - return PropertyUtil.response(jwtToken); + return SinzakResponse.success(jwtToken); } - @ApiOperation(value = "스프링용 카카오로그인 실행(인가코드)",notes = "하단 참고") + @ApiOperation(value = "스프링용 카카오로그인 실행(인가코드)", notes = "하단 참고") @GetMapping("/test1") public String kakaoLogin() { - return "로컬환경 : https://kauth.kakao.com/oauth/authorize?client_id="+KAKAO_ID + - "&redirect_uri=http://localhost:8080/api/login/oauth2/code/kakao&response_type=code" +"\n"+ - "배포환경 : https://kauth.kakao.com/oauth/authorize?client_id="+KAKAO_ID + + return "로컬환경 : https://kauth.kakao.com/oauth/authorize?client_id=" + KAKAO_ID + + "&redirect_uri=http://localhost:8080/api/login/oauth2/code/kakao&response_type=code" + "\n" + + "배포환경 : https://kauth.kakao.com/oauth/authorize?client_id=" + KAKAO_ID + "&redirect_uri=https://sinzak.net/api/login/oauth2/code/kakao&response_type=code"; } - @ApiOperation(value = "스프링용 구글로그인 실행",notes = "로컬환경 : https://accounts.google.com/o/oauth2/v2/auth?client_id=782966145872-6shnmrvqi0q4sihr8etu9nrvh9jv43dh.apps.googleusercontent.com" + - "&redirect_uri=http://localhost:8080/api/login/oauth2/code/google&response_type=code&scope=profile%20email&include_granted_scopes=true"+'\n'+ + @ApiOperation(value = "스프링용 구글로그인 실행", notes = "로컬환경 : https://accounts.google.com/o/oauth2/v2/auth?client_id=782966145872-6shnmrvqi0q4sihr8etu9nrvh9jv43dh.apps.googleusercontent.com" + + "&redirect_uri=http://localhost:8080/api/login/oauth2/code/google&response_type=code&scope=profile%20email&include_granted_scopes=true" + '\n' + "배포환경 : https://accounts.google.com/o/oauth2/v2/auth?client_id=782966145872-6shnmrvqi0q4sihr8etu9nrvh9jv43dh.apps.googleusercontent.com" + "&redirect_uri=https://sinzak.net/api/login/oauth2/code/google&response_type=code&scope=profile%20email&include_granted_scopes=true") @GetMapping("/test2") - public String googleLogin(){ - return "로컬환경 : https://accounts.google.com/o/oauth2/v2/auth?client_id="+GOOGLE_ID+ - "&redirect_uri=http://localhost:8080/api/login/oauth2/code/google&response_type=code&scope=profile%20email&include_granted_scopes=true" +"\n"+ - "배포환경 : https://accounts.google.com/o/oauth2/v2/auth?client_id="+GOOGLE_ID+ + public String googleLogin() { + return "로컬환경 : https://accounts.google.com/o/oauth2/v2/auth?client_id=" + GOOGLE_ID + + "&redirect_uri=http://localhost:8080/api/login/oauth2/code/google&response_type=code&scope=profile%20email&include_granted_scopes=true" + "\n" + + "배포환경 : https://accounts.google.com/o/oauth2/v2/auth?client_id=" + GOOGLE_ID + "&redirect_uri=https://sinzak.net/api/login/oauth2/code/google&response_type=code&scope=profile%20email&include_granted_scopes=true"; } - @ApiOperation(value = "스프링용 네이버로그인 실행",notes = + @ApiOperation(value = "스프링용 네이버로그인 실행", notes = "로컬환경 : https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=DwXMEfKZq0tmkrsn6kLk&state=STATE_STRING" + - "&redirect_uri=http://localhost:8080/api/login/oauth2/code/naver"+'\n'+ + "&redirect_uri=http://localhost:8080/api/login/oauth2/code/naver" + '\n' + "배포환경 : https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=DwXMEfKZq0tmkrsn6kLk&state=STATE_STRING" + "&redirect_uri=https://sinzak.net/api/login/oauth2/code/naver") @GetMapping("/test3") - public String naverLogin(){ - return "로컬환경 : https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id="+NAVER_ID+"&state=9kgsGTfH4j7IyAkg"+ - "&redirect_uri=http://localhost:8080/api/login/oauth2/code/naver"+ "\n" + - "배포환경 : https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id="+NAVER_ID+"&state=9kgsGTfH4j7IyAkg"+ + public String naverLogin() { + return "로컬환경 : https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=" + NAVER_ID + "&state=9kgsGTfH4j7IyAkg" + + "&redirect_uri=http://localhost:8080/api/login/oauth2/code/naver" + "\n" + + "배포환경 : https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=" + NAVER_ID + "&state=9kgsGTfH4j7IyAkg" + "&redirect_uri=https://sinzak.net/api/login/oauth2/code/naver"; } - @ApiOperation(value = "스프링용 애플 로그인 실행",notes = - "배포환경 : "+AUTH_URL+"/auth/authorize?client_id=" + CLIENT_ID + "&redirect_uri=" + "https://sinzak.net/api/login/oauth2/code/apple&response_type=code&id_token&response_mode=form_post") + @ApiOperation(value = "스프링용 애플 로그인 실행", notes = + "배포환경 : " + AUTH_URL + "/auth/authorize?client_id=" + CLIENT_ID + "&redirect_uri=" + "https://sinzak.net/api/login/oauth2/code/apple&response_type=code&id_token&response_mode=form_post") @GetMapping("/test4") - public String appleLogin(){ - return "https://appleid.apple.com/auth/authorize?client_id="+CLIENT_ID+"&redirect_uri=https://sinzak.net/api/login/oauth2/code/apple&response_type=code&id_token&response_mode=form_post";} + public String appleLogin() { + return "https://appleid.apple.com/auth/authorize?client_id=" + CLIENT_ID + "&redirect_uri=https://sinzak.net/api/login/oauth2/code/apple&response_type=code&id_token&response_mode=form_post"; + } @ApiOperation(value = "스프링용 카카오 액세스토큰 추출로직", notes = "웹, 안드, ios는 이 로직말고 /oauth/get으로 바로 액세스 토큰 전달해주세요") @GetMapping(value = "/login/oauth2/code/kakao") public JSONObject oauthKakao(@RequestParam(value = "code", required = false) String code) throws Exception { - log.warn("인가코드 = {}",code); - return oAuthService.getKakaoAccessToken(productURL+"/kakao", code); + log.warn("인가코드 = {}", code); + return oAuthService.getKakaoAccessToken(productURL + "/kakao", code); } @ApiOperation(value = "스프링용 구글 액세스토큰 추출로직", notes = "웹, 안드, ios는 이 로직말고 /oauth/get으로 바로 액세스 토큰 전달해주세요") @GetMapping(value = "/login/oauth2/code/google") public String oauthGoogle(@RequestParam(value = "code", required = false) String code) throws Exception { - log.warn("인가코드 = {}",code); - JSONObject obj = oAuthService.getGoogleAccessToken(productURL+"/google", code); + log.warn("인가코드 = {}", code); + JSONObject obj = oAuthService.getGoogleAccessToken(productURL + "/google", code); return obj.toJSONString(); } @ApiOperation(value = "스프링용 네이버 액세스토큰 추출로직", notes = "웹, 안드, ios는 이 로직말고 /oauth/get으로 바로 액세스 토큰 전달해주세요") @GetMapping(value = "/login/oauth2/code/naver") public String oauthNaver(@RequestParam(value = "code", required = false) String code) throws Exception { - log.warn("인가코드 = {}",code); + log.warn("인가코드 = {}", code); JSONObject obj = oAuthService.getNaverAccessToken(code); return obj.toJSONString(); } @@ -130,7 +134,7 @@ public String oauthNaver(@RequestParam(value = "code", required = false) String @ApiOperation(value = "스프링용 애플 코드 반환 로직", notes = "웹, 안드, ios는 이 로직말고 /oauth/get으로 바로 액세스 토큰 전달해주세요") @PostMapping(value = "/login/oauth2/code/apple") public String oauthApple(@RequestParam(value = "code", required = false) String code) throws Exception { - log.warn("인가코드 = {}",code); + log.warn("인가코드 = {}", code); String client_id = CLIENT_ID; String client_secret = appleService.createClientSecret(TEAM_ID, CLIENT_ID, KEY_ID, KEY_PATH, AUTH_URL); log.warn(client_secret); @@ -151,7 +155,7 @@ public String oauthApple(@RequestParam(value = "code", required = false) String public JSONObject oauthApple() throws Exception { String client_secret = appleService.createClientSecret(TEAM_ID, "net.sinzak.ios", KEY_ID, KEY_PATH, AUTH_URL); log.warn(client_secret); - return PropertyUtil.response(client_secret); + return SinzakResponse.success(client_secret); } @ApiOperation(value = "웹용 카카오 액세스토큰 추출로직", notes = "웹, 안드, ios는 이 로직말고 /oauth/get으로 바로 액세스 토큰 전달해주세요") diff --git a/src/main/java/net/sinzak/server/oauth/OAuthService.java b/src/main/java/net/sinzak/server/oauth/OAuthService.java index c135c737..4acf19a9 100644 --- a/src/main/java/net/sinzak/server/oauth/OAuthService.java +++ b/src/main/java/net/sinzak/server/oauth/OAuthService.java @@ -4,7 +4,7 @@ import com.nimbusds.jwt.SignedJWT; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.user.dto.request.OauthDto; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -68,7 +68,7 @@ public JSONObject getKakaoAccessToken(String redirect_uri, String code) throws I JSONObject obj = (JSONObject) parser.parse(responseHTML.body().string()); JSONObject response = new JSONObject(); response.put("access_token",obj.get("access_token").toString()); - return PropertyUtil.response(response); + return SinzakResponse.success(response); } public JSONObject getGoogleAccessToken(String redirect_uri, String code) throws IOException, ParseException { @@ -93,7 +93,7 @@ public JSONObject getGoogleAccessToken(String redirect_uri, String code) throws JSONObject response = new JSONObject(); response.put("access_token", obj.get("access_token").toString()); response.put("id_token", obj.get("id_token").toString()); - return PropertyUtil.response(response); + return SinzakResponse.success(response); } public JSONObject getNaverAccessToken(String code) throws IOException, ParseException { @@ -111,7 +111,7 @@ public JSONObject getNaverAccessToken(String code) throws IOException, ParseExce JSONObject obj = (JSONObject) parser.parse(responseHTML.body().string()); JSONObject response = new JSONObject(); response.put("access_token", obj.get("access_token").toString()); - return PropertyUtil.response(response); + return SinzakResponse.success(response); } public JSONObject getGoogleInfo(OauthDto dto) throws IOException, ParseException { diff --git a/src/main/java/net/sinzak/server/product/controller/ProductController.java b/src/main/java/net/sinzak/server/product/controller/ProductController.java index 8d43365e..61f1fb91 100644 --- a/src/main/java/net/sinzak/server/product/controller/ProductController.java +++ b/src/main/java/net/sinzak/server/product/controller/ProductController.java @@ -6,20 +6,20 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import net.sinzak.server.common.UserUtils; +import net.sinzak.server.common.dto.ActionForm; import net.sinzak.server.common.dto.SuggestDto; import net.sinzak.server.common.error.UserNotFoundException; import net.sinzak.server.common.error.UserNotLoginException; import net.sinzak.server.common.resource.ApiDocumentResponse; import net.sinzak.server.product.dto.*; import net.sinzak.server.product.service.ProductService; -import net.sinzak.server.common.dto.ActionForm; import org.json.simple.JSONObject; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; -import springfox.documentation.annotations.ApiIgnore; import org.springframework.web.multipart.MultipartFile; +import springfox.documentation.annotations.ApiIgnore; import java.util.List; @@ -31,7 +31,7 @@ public class ProductController { private final ProductService productService; @ApiDocumentResponse - @ApiOperation(value = "작품 판매 글 생성",notes = "{\"success\":true, \"id\":52}\n해당 글의 id를 전해드리니 이 /products/{id}/image 에 넘겨주세요\n" + + @ApiOperation(value = "작품 판매 글 생성", notes = "{\"success\":true, \"id\":52}\n해당 글의 id를 전해드리니 이 /products/{id}/image 에 넘겨주세요\n" + "category = painting,orient,sculpture,print,craft,other") @PostMapping(value = "/products/build", consumes = {MediaType.APPLICATION_JSON_VALUE}) public JSONObject makePost(@RequestBody ProductPostDto buildDto) { @@ -72,11 +72,10 @@ public JSONObject deletePost(@PathVariable("id") Long productId) { @PostMapping("/products/{id}") @ApiOperation(value = "작품 상세 조회") public JSONObject showProducts(@PathVariable Long id) { - try{ + try { Long currentUserId = UserUtils.getContextHolderId(); return productService.showDetailForUser(currentUserId, id); - } - catch (UserNotFoundException | UserNotLoginException e){ + } catch (UserNotFoundException | UserNotLoginException e) { return productService.showDetailForGuest(id); /** 비회원용 **/ } } @@ -115,11 +114,10 @@ public JSONObject suggest(@RequestBody SuggestDto dto) { "비회원은 더보기 버튼 클릭 시 로그인 창으로") @PostMapping("/home/products") public JSONObject showHomeProduct() { - try{ + try { Long currentUserId = UserUtils.getContextHolderId(); return productService.showHomeForUser(currentUserId); - } - catch (UserNotFoundException | UserNotLoginException e){ + } catch (UserNotFoundException | UserNotLoginException e) { return productService.showHomeForGuest(); /** 비회원용 **/ } } @@ -152,13 +150,12 @@ public JSONObject showHomeProduct() { @ApiImplicitParam(name = "search", dataType = "string", paramType = "query", value = "String 값으로 주시고 최소 2글자 이상은 받아야 합니다. contain 메서드로 db에서 검색할 예정.") }) - public PageImpl showMarketProduct(@RequestParam(required=false, defaultValue="") String search, @RequestParam(required=false, defaultValue="") List categories, @RequestParam(required=false, defaultValue="recommend") String align, @RequestParam(required=false, defaultValue="false") Boolean sale, @ApiIgnore Pageable pageable) { - try{ + public PageImpl showMarketProduct(@RequestParam(required = false, defaultValue = "") String search, @RequestParam(required = false, defaultValue = "") List categories, @RequestParam(required = false, defaultValue = "recommend") String align, @RequestParam(required = false, defaultValue = "false") Boolean sale, @ApiIgnore Pageable pageable) { + try { UserUtils.getContextHolderId(); - return productService.productListForUser(search, categories, align, sale, pageable); - } - catch (UserNotFoundException | UserNotLoginException e){ - return productService.productListForGuest(search, categories, align, sale, pageable); + return productService.productsForUser(search, categories, align, sale, pageable); + } catch (UserNotFoundException | UserNotLoginException e) { + return productService.productsForGuest(search, categories, align, sale, pageable); } } diff --git a/src/main/java/net/sinzak/server/product/domain/Product.java b/src/main/java/net/sinzak/server/product/domain/Product.java index 4e69bdc5..50460f7a 100644 --- a/src/main/java/net/sinzak/server/product/domain/Product.java +++ b/src/main/java/net/sinzak/server/product/domain/Product.java @@ -5,8 +5,8 @@ import net.sinzak.server.BaseTimeEntity; import net.sinzak.server.chatroom.domain.ChatRoom; import net.sinzak.server.product.dto.ProductEditDto; -import net.sinzak.server.user.domain.embed.Size; import net.sinzak.server.user.domain.User; +import net.sinzak.server.user.domain.embed.Size; import javax.persistence.*; import java.util.ArrayList; @@ -14,9 +14,9 @@ @Getter @Entity -@SequenceGenerator(name = "Product_SEQ_GEN",sequenceName = "Product_SEQ") +@SequenceGenerator(name = "Product_SEQ_GEN", sequenceName = "Product_SEQ") @Table(indexes = {@Index(name = "findAllIndex", columnList = "isDeleted, product_id")}) -public class Product extends BaseTimeEntity { /** 작품 **/ +public class Product extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Product_SEQ") @@ -27,10 +27,10 @@ public class Product extends BaseTimeEntity { /** 작품 **/ private String title; @Column - private String content=""; + private String content = ""; @Column - private String author=""; //닉네임 + private String author = ""; //닉네임 @Column private int price; @@ -39,13 +39,13 @@ public class Product extends BaseTimeEntity { /** 작품 **/ private boolean suggest = false; @Column(name = "isDeleted") - private boolean isDeleted =false; + private boolean isDeleted = false; @Column - private int topPrice=0; + private int topPrice = 0; @Column - private String univ=""; + private String univ = ""; @Column private String category; //분류 @@ -82,10 +82,10 @@ public class Product extends BaseTimeEntity { /** 작품 **/ private List images = new ArrayList<>(); @OneToMany(mappedBy = "product", cascade = CascadeType.REMOVE) - private List productWishList = new ArrayList<>(); + private List productWishes = new ArrayList<>(); - @OneToMany(mappedBy = "product",cascade= CascadeType.MERGE) - private List chatRooms = new ArrayList<>(); + @OneToMany(mappedBy = "product", cascade = CascadeType.MERGE) + private List chatRooms = new ArrayList<>(); @Builder @@ -103,12 +103,14 @@ public Product(String title, String content, String category, int price, boolean public void setDeleted(boolean deleted) { isDeleted = deleted; } + public void setUser(User user) { - user.getProductPostList().add(this); + user.getProductPosts() + .add(this); this.user = user; } - public void editPost(ProductEditDto dto){ + public void editPost(ProductEditDto dto) { this.title = dto.getTitle(); this.content = dto.getContent(); this.price = dto.getPrice(); @@ -122,33 +124,58 @@ public void setTopPrice(int topPrice) { this.topPrice = topPrice; } - public void addChatRoom(ChatRoom chatRoom){ + public void addChatRoom(ChatRoom chatRoom) { chatRoom.setProduct(this); this.chatRooms.add(chatRoom); this.chatCnt++; } - public void makeChatRoomNull(){ - for(ChatRoom chatRoom :this.getChatRooms()){ + + public void makeChatRoomNull() { + for (ChatRoom chatRoom : this.getChatRooms()) { chatRoom.setProduct(null); } } + public void addImage(ProductImage image) { - this.getImages().add(image); + this.getImages() + .add(image); + } + + public void plusWishCnt() { + this.wishCnt++; + this.popularity += 20; + } + + public void minusWishCnt() { + if (wishCnt > 0) this.wishCnt--; + this.popularity -= 10; + } + + public void plusLikesCnt() { + this.likesCnt++; + this.popularity += 10; + } + + public void minusLikesCnt() { + if (likesCnt > 0) this.likesCnt--; + this.popularity -= 10; } - public void plusWishCnt() {this.wishCnt++;this.popularity+=20;} - public void minusWishCnt() {if(wishCnt>0) this.wishCnt--;this.popularity-=10; } - public void plusLikesCnt() {this.likesCnt++;this.popularity+=10;} - public void minusLikesCnt() {if(likesCnt>0)this.likesCnt--;this.popularity-=10;} - protected Product() {} + protected Product() { + } public void setThumbnail(String thumbnail) { this.thumbnail = thumbnail; } - public void addViews() {this.views++;this.popularity++;} + public void addViews() { + this.views++; + this.popularity++; + } - public void setComplete(boolean complete) {this.complete = complete;} + public void setComplete(boolean complete) { + this.complete = complete; + } public void updateUserNickName(String author) { this.author = author; diff --git a/src/main/java/net/sinzak/server/product/domain/ProductImage.java b/src/main/java/net/sinzak/server/product/domain/ProductImage.java index bfbc0399..73952864 100644 --- a/src/main/java/net/sinzak/server/product/domain/ProductImage.java +++ b/src/main/java/net/sinzak/server/product/domain/ProductImage.java @@ -1,6 +1,5 @@ package net.sinzak.server.product.domain; -import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Getter; import net.sinzak.server.BaseTimeEntity; @@ -26,5 +25,6 @@ public ProductImage(String imgUrl, Product product) { this.product = product; } - protected ProductImage() {} + protected ProductImage() { + } } diff --git a/src/main/java/net/sinzak/server/product/domain/ProductLikes.java b/src/main/java/net/sinzak/server/product/domain/ProductLikes.java index bf8b035f..fc2d8bb2 100644 --- a/src/main/java/net/sinzak/server/product/domain/ProductLikes.java +++ b/src/main/java/net/sinzak/server/product/domain/ProductLikes.java @@ -17,25 +17,27 @@ public class ProductLikes { private Long id; //작품 번호 @ManyToOne(fetch = LAZY) - @JoinColumn(name="user_id") + @JoinColumn(name = "user_id") private User user; @ManyToOne(fetch = LAZY) - @JoinColumn(name="product_id") + @JoinColumn(name = "product_id") private Product product; - public static ProductLikes createConnect(Product product, User user){ //생성메서드 + public static ProductLikes createConnect(Product product, User user) { //생성메서드 ProductLikes connect = new ProductLikes(); connect.setProduct(product); connect.setUser(user); return connect; } - private void setUser(User user){ - user.getProductLikesList().add(this); - this.user=user; + private void setUser(User user) { + user.getProductLikesList() + .add(this); + this.user = user; } + public void setProduct(Product product) { this.product = product; } diff --git a/src/main/java/net/sinzak/server/product/domain/ProductSell.java b/src/main/java/net/sinzak/server/product/domain/ProductSell.java index 122d11d4..7ac6fa43 100644 --- a/src/main/java/net/sinzak/server/product/domain/ProductSell.java +++ b/src/main/java/net/sinzak/server/product/domain/ProductSell.java @@ -7,7 +7,7 @@ @Entity @Getter -@SequenceGenerator(name = "Product_SELL_SEQ_GEN",sequenceName = "Product_SELL_SEQ") +@SequenceGenerator(name = "Product_SELL_SEQ_GEN", sequenceName = "Product_SELL_SEQ") public class ProductSell { @Id @@ -23,19 +23,22 @@ public class ProductSell { @JoinColumn(name = "product_id") private Product product; - public static ProductSell createConnect(Product product, User user){ //생성메서드 + public static ProductSell createConnect(Product product, User user) { //생성메서드 ProductSell connect = new ProductSell(); connect.setProduct(product); connect.setUser(user); return connect; } - private void setUser(User user){ - user.getProductSellList().add(this); //구매목록에 추가 - this.user=user; + private void setUser(User user) { + user.getProductSells().add(this); //구매목록에 추가 + this.user = user; } - public void setProduct(Product product) { this.product = product; } + public void setProduct(Product product) { + this.product = product; + } - protected ProductSell() {} + protected ProductSell() { + } } diff --git a/src/main/java/net/sinzak/server/product/domain/ProductSuggest.java b/src/main/java/net/sinzak/server/product/domain/ProductSuggest.java index 1e29d975..bf80250d 100644 --- a/src/main/java/net/sinzak/server/product/domain/ProductSuggest.java +++ b/src/main/java/net/sinzak/server/product/domain/ProductSuggest.java @@ -22,14 +22,17 @@ public class ProductSuggest { @JoinColumn(name = "product_id") private Product product; - public static ProductSuggest createConnect(Product product, User user){ //생성메서드 - return new ProductSuggest(user,product); + public static ProductSuggest createConnect(Product product, User user) { //생성메서드 + return new ProductSuggest(user, product); } - public void setProduct(Product product) { this.product = product; } + public void setProduct(Product product) { + this.product = product; + } - protected ProductSuggest() {} + protected ProductSuggest() { + } public ProductSuggest(User user, Product product) { this.user = user; diff --git a/src/main/java/net/sinzak/server/product/domain/ProductWish.java b/src/main/java/net/sinzak/server/product/domain/ProductWish.java index 0affc7de..145f22b2 100644 --- a/src/main/java/net/sinzak/server/product/domain/ProductWish.java +++ b/src/main/java/net/sinzak/server/product/domain/ProductWish.java @@ -18,28 +18,31 @@ public class ProductWish extends BaseTimeEntity { private Long id; @ManyToOne(fetch = LAZY) - @JoinColumn(name="user_id") + @JoinColumn(name = "user_id") private User user; @ManyToOne(fetch = LAZY) - @JoinColumn(name="product_id") + @JoinColumn(name = "product_id") private Product product; - public static ProductWish createConnect(Product product, User user){ //생성메서드 + public static ProductWish createConnect(Product product, User user) { //생성메서드 ProductWish connect = new ProductWish(); connect.setProduct(product); connect.setUser(user); return connect; } - private void setUser(User user){ - user.getProductWishList().add(this); //스크랩! - this.user=user; + private void setUser(User user) { + user.getProductWishes().add(this); //스크랩! + this.user = user; } - public void setProduct(Product product) { this.product = product; } + public void setProduct(Product product) { + this.product = product; + } - protected ProductWish() {} + protected ProductWish() { + } } diff --git a/src/main/java/net/sinzak/server/product/dto/DetailProductForm.java b/src/main/java/net/sinzak/server/product/dto/DetailProductForm.java index b05561d7..5b691855 100644 --- a/src/main/java/net/sinzak/server/product/dto/DetailProductForm.java +++ b/src/main/java/net/sinzak/server/product/dto/DetailProductForm.java @@ -3,7 +3,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Builder; import lombok.Getter; -import lombok.NoArgsConstructor; import net.sinzak.server.common.dto.DetailForm; import java.util.List; @@ -16,6 +15,7 @@ public class DetailProductForm extends DetailForm { private int vertical; @ApiModelProperty(example = "30", notes = "nullable") private int height; + @Builder public DetailProductForm(Long id, Long userId, String author, String author_picture, String univ, boolean cert_uni, boolean cert_celeb, String followerNum, List images, String title, String category, String date, String content, int price, int topPrice, boolean suggest, int likesCnt, int views, int wishCnt, int chatCnt, boolean complete, int width, int vertical, int height) { super(id, userId, author, author_picture, univ, cert_uni, cert_celeb, followerNum, images, title, category, date, content, price, topPrice, suggest, likesCnt, views, wishCnt, chatCnt, complete); @@ -23,6 +23,7 @@ public DetailProductForm(Long id, Long userId, String author, String author_pict this.vertical = vertical; this.height = height; } + public DetailProductForm() { super(); } diff --git a/src/main/java/net/sinzak/server/product/dto/ProductEditDto.java b/src/main/java/net/sinzak/server/product/dto/ProductEditDto.java index b9d6097d..eae9ac84 100644 --- a/src/main/java/net/sinzak/server/product/dto/ProductEditDto.java +++ b/src/main/java/net/sinzak/server/product/dto/ProductEditDto.java @@ -6,11 +6,11 @@ @Getter public class ProductEditDto extends EditDto { - @ApiModelProperty(value = "가로 사이즈 1m50cm -> 150",example ="150") + @ApiModelProperty(value = "가로 사이즈 1m50cm -> 150", example = "150") private int width; - @ApiModelProperty(value = "세로 사이즈",example ="150") + @ApiModelProperty(value = "세로 사이즈", example = "150") private int vertical; - @ApiModelProperty(value = "높이 사이즈",example ="50") + @ApiModelProperty(value = "높이 사이즈", example = "50") private int height; public ProductEditDto(String title, String content, int price, boolean suggest, int width, int vertical, int height) { diff --git a/src/main/java/net/sinzak/server/product/dto/ProductPostDto.java b/src/main/java/net/sinzak/server/product/dto/ProductPostDto.java index 68d81107..8afd55c3 100644 --- a/src/main/java/net/sinzak/server/product/dto/ProductPostDto.java +++ b/src/main/java/net/sinzak/server/product/dto/ProductPostDto.java @@ -16,19 +16,19 @@ public class ProductPostDto { private String content; @ApiModelProperty(example = "작품 카테고리") private String category; - @ApiModelProperty(value ="작품 가격",example ="30000",notes = "int 값 이상 안들어오게 프론트라인 체크 필수") + @ApiModelProperty(value = "작품 가격", example = "30000", notes = "int 값 이상 안들어오게 프론트라인 체크 필수") @Max(value = Integer.MAX_VALUE, message = "가격 값 초과 Integer Max Value 미만으로 전송바람") private int price; - @ApiModelProperty(value = "작품 모집글 가격 제안 여부", example = "false" ,notes = "true -> 체크 한 사람(가격 제안 받겠다는 사람)") + @ApiModelProperty(value = "작품 모집글 가격 제안 여부", example = "false", notes = "true -> 체크 한 사람(가격 제안 받겠다는 사람)") private boolean suggest; - @ApiModelProperty(value = "가로 사이즈 1m50cm -> 150",example ="150") + @ApiModelProperty(value = "가로 사이즈 1m50cm -> 150", example = "150") @Max(value = Integer.MAX_VALUE, message = "사이즈 값 초과 Integer Max Value 미만으로 전송바람") private int width; - @ApiModelProperty(value = "세로 사이즈",example ="150") + @ApiModelProperty(value = "세로 사이즈", example = "150") @Max(value = Integer.MAX_VALUE, message = "사이즈 값 초과 Integer Max Value 미만으로 전송바람") private int vertical; - @ApiModelProperty(value = "높이 사이즈",example ="50") + @ApiModelProperty(value = "높이 사이즈", example = "50") @Max(value = Integer.MAX_VALUE, message = "사이즈 값 초과 Integer Max Value 미만으로 전송바람") private int height; } diff --git a/src/main/java/net/sinzak/server/product/dto/ShowForm.java b/src/main/java/net/sinzak/server/product/dto/ShowForm.java index 34b36689..aa18d6ff 100644 --- a/src/main/java/net/sinzak/server/product/dto/ShowForm.java +++ b/src/main/java/net/sinzak/server/product/dto/ShowForm.java @@ -16,19 +16,19 @@ public class ShowForm implements Serializable { private String content; @ApiModelProperty(example = "작가명") private String author; - @ApiModelProperty(value = "작품 가격",example ="1") + @ApiModelProperty(value = "작품 가격", example = "1") private int price; @ApiModelProperty(example = "https://sinzakimage.s3.ap-northeast-2.amazonaws.com/7aea0508-4b3b-4b52-a98e-8f699b5b4bc7.jpg") private String thumbnail; @ApiModelProperty(example = "2023-01-02T18:26:27", notes = "작품 글 올린 날짜") private String date; - @ApiModelProperty(example = "boolean",notes = "true -> 체크 한 사람(가격 제안 받겠다는 사람)") + @ApiModelProperty(example = "boolean", notes = "true -> 체크 한 사람(가격 제안 받겠다는 사람)") private boolean suggest; - @ApiModelProperty(example = "좋아요 누른 사람인지 여부",notes = "true -> 누른 사람") + @ApiModelProperty(example = "좋아요 누른 사람인지 여부", notes = "true -> 누른 사람") private boolean like; - @ApiModelProperty(value = "좋아요 수",example = "1",notes = "true -> 누른 사람") + @ApiModelProperty(value = "좋아요 수", example = "1", notes = "true -> 누른 사람") private int likesCnt; - @ApiModelProperty(example = "판매완료 여부",notes = "true -> 판매완료") + @ApiModelProperty(example = "판매완료 여부", notes = "true -> 판매완료") private boolean complete; @ApiModelProperty(hidden = true) private int popularity; diff --git a/src/main/java/net/sinzak/server/product/repository/ProductImageRepository.java b/src/main/java/net/sinzak/server/product/repository/ProductImageRepository.java index 5ec73ced..aafca641 100644 --- a/src/main/java/net/sinzak/server/product/repository/ProductImageRepository.java +++ b/src/main/java/net/sinzak/server/product/repository/ProductImageRepository.java @@ -7,7 +7,7 @@ import java.util.List; -public interface ProductImageRepository extends JpaRepository { +public interface ProductImageRepository extends JpaRepository { @Query("select i from ProductImage i where i.product.id = :id") - List findByProductId(@Param("id")Long id); + List findByProductId(@Param("id") Long id); } diff --git a/src/main/java/net/sinzak/server/product/repository/ProductLikesRepository.java b/src/main/java/net/sinzak/server/product/repository/ProductLikesRepository.java index ee5a3f02..9666ecb6 100644 --- a/src/main/java/net/sinzak/server/product/repository/ProductLikesRepository.java +++ b/src/main/java/net/sinzak/server/product/repository/ProductLikesRepository.java @@ -3,5 +3,5 @@ import net.sinzak.server.product.domain.ProductLikes; import org.springframework.data.jpa.repository.JpaRepository; -public interface ProductLikesRepository extends JpaRepository { +public interface ProductLikesRepository extends JpaRepository { } diff --git a/src/main/java/net/sinzak/server/product/repository/ProductQDSLRepositoryImpl.java b/src/main/java/net/sinzak/server/product/repository/ProductQDSLRepositoryImpl.java index e21acf21..551dea39 100644 --- a/src/main/java/net/sinzak/server/product/repository/ProductQDSLRepositoryImpl.java +++ b/src/main/java/net/sinzak/server/product/repository/ProductQDSLRepositoryImpl.java @@ -17,7 +17,6 @@ import static net.sinzak.server.product.domain.QProduct.product; - @Repository @RequiredArgsConstructor public class ProductQDSLRepositoryImpl { @@ -36,12 +35,12 @@ public Page findAllByCompleteAndCategoriesAligned(boolean complete, Str .select(product.count()) .from(product) .where(eqComplete(complete)); - return PageableExecutionUtils.getPage(result, pageable, countQuery::fetchOne) ; + return PageableExecutionUtils.getPage(result, pageable, countQuery::fetchOne); //PageableExecutionUtils.getPage로 맨 첫 페이지 content 개수가 size 미달이거나, 마지막 page인 경우 count query 실행 X하여 최적화 } private BooleanExpression eqComplete(boolean complete) { //complete 가 true면 where complete = false 로 가져온다. - if (!complete){ + if (!complete) { return null; } return product.complete.eq(false); @@ -64,20 +63,22 @@ else if (align.equals("high")) private BooleanBuilder eqSearch(String keyword) { BooleanBuilder builder = new BooleanBuilder(); - if(keyword.isEmpty()) + if (keyword.isEmpty()) return null; - return builder.or(product.title.contains(keyword)).or(product.content.contains(keyword)); + return builder.or(product.title.contains(keyword)) + .or(product.content.contains(keyword)); } private BooleanBuilder eqCategories(List categories) { BooleanBuilder builder = new BooleanBuilder(); for (String category : categories) { - if(category != null) + if (category != null) builder.or(product.category.contains(category)); } return builder; } + public List findCountByCategoriesDesc(List categories, int count) { return queryFactory .selectFrom(product) diff --git a/src/main/java/net/sinzak/server/product/repository/ProductRepository.java b/src/main/java/net/sinzak/server/product/repository/ProductRepository.java index 2cb1a6e5..d17284b5 100644 --- a/src/main/java/net/sinzak/server/product/repository/ProductRepository.java +++ b/src/main/java/net/sinzak/server/product/repository/ProductRepository.java @@ -10,7 +10,7 @@ import java.util.List; import java.util.Optional; -public interface ProductRepository extends JpaRepository{ +public interface ProductRepository extends JpaRepository { @Query("select p from Product p where p.isDeleted =false order by p.id desc") //이미 인덱스로 정렬되어있음 List findAllProductNotDeleted(); @@ -18,14 +18,18 @@ public interface ProductRepository extends JpaRepository{ @Query("select p from Product p where p.isDeleted =false order by p.id desc") Page findAll(Pageable pageable); - @Query("select p from Product p left join fetch p.productWishList left join fetch p.user where p.id = :id and p.isDeleted = false") - Optional findByIdFetchProductWishAndUser(@Param("id")Long id); /** 해당 작품 찜을 누른 유저 목록까지 불러오기 **/ + @Query("select p from Product p left join fetch p.productWishes left join fetch p.user where p.id = :id and p.isDeleted = false") + Optional findByIdFetchProductWishAndUser(@Param("id") Long id); + + /** + * 해당 작품 찜을 누른 유저 목록까지 불러오기 + **/ @Query("select p from Product p left join fetch p.user where p.isDeleted = false and p.id = :id") Optional findByIdFetchUser(@Param("id") Long id); @Query("select p from Product p left join fetch p.images where p.id = :id and p.isDeleted =false") - Optional findByIdFetchImages(@Param("id")Long id); + Optional findByIdFetchImages(@Param("id") Long id); @Query("select p from Product p left join fetch p.chatRooms where p.id = :id and p.isDeleted = false ") Optional findByIdFetchChatRooms(@Param("id") Long id); diff --git a/src/main/java/net/sinzak/server/product/repository/ProductSuggestRepository.java b/src/main/java/net/sinzak/server/product/repository/ProductSuggestRepository.java index 63303882..a5743b34 100644 --- a/src/main/java/net/sinzak/server/product/repository/ProductSuggestRepository.java +++ b/src/main/java/net/sinzak/server/product/repository/ProductSuggestRepository.java @@ -9,5 +9,5 @@ public interface ProductSuggestRepository extends JpaRepository { @Query("select p from ProductSuggest p where p.user.id = :userId and p.product.id = :productId and p.product.isDeleted =false ") - Optional findByUserIdAndProductId(@Param("userId")Long userId, @Param("productId")Long productId); + Optional findByUserIdAndProductId(@Param("userId") Long userId, @Param("productId") Long productId); } \ No newline at end of file diff --git a/src/main/java/net/sinzak/server/product/repository/ProductWishRepository.java b/src/main/java/net/sinzak/server/product/repository/ProductWishRepository.java index 18f425eb..ce7ea463 100644 --- a/src/main/java/net/sinzak/server/product/repository/ProductWishRepository.java +++ b/src/main/java/net/sinzak/server/product/repository/ProductWishRepository.java @@ -7,7 +7,7 @@ import java.util.List; -public interface ProductWishRepository extends JpaRepository { +public interface ProductWishRepository extends JpaRepository { @Query("select pw from ProductWish pw left join fetch pw.product where pw.user.id = :userId and pw.product.isDeleted =false") List findByUserIdFetchProduct(@Param("userId") Long userId); diff --git a/src/main/java/net/sinzak/server/product/service/ProductService.java b/src/main/java/net/sinzak/server/product/service/ProductService.java index 26f30b8a..2edd14b7 100644 --- a/src/main/java/net/sinzak/server/product/service/ProductService.java +++ b/src/main/java/net/sinzak/server/product/service/ProductService.java @@ -13,7 +13,7 @@ import net.sinzak.server.common.error.PostNotFoundException; import net.sinzak.server.image.S3Service; import net.sinzak.server.product.domain.*; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.product.dto.*; import net.sinzak.server.product.repository.*; import net.sinzak.server.user.domain.User; @@ -75,25 +75,25 @@ public JSONObject makePost(@Valid ProductPostDto buildDto){ // 글 생성 .build(); product.setUser(user); Long productId = productRepository.save(product).getId();// 미리 저장해야 이미지도 저장가능.. - return PropertyUtil.response(productId); + return SinzakResponse.success(productId); } public JSONObject saveImageInS3AndProduct(List multipartFiles, Long id) { Product product = productRepository.findById(id).orElseThrow(PostNotFoundException::new); if(multipartFiles.size() == 0) - return PropertyUtil.responseMessage("사진 1개이상 첨부해주세요."); + return SinzakResponse.error("사진 1개이상 첨부해주세요."); if(!userUtils.getCurrentUserId().equals(product.getUser().getId())) - return PropertyUtil.responseMessage("잘못된 접근입니다."); + return SinzakResponse.error("잘못된 접근입니다."); for (MultipartFile img : multipartFiles) { try{ String url = uploadImageAndSetThumbnail(multipartFiles, product, img); saveImageUrl(product, url); } catch (Exception e){ - return PropertyUtil.responseMessage(multipartFiles.indexOf(img)+"번째 이미지부터 저장 실패"); + return SinzakResponse.error(multipartFiles.indexOf(img)+"번째 이미지부터 저장 실패"); } } - return PropertyUtil.response(true); + return SinzakResponse.success(true); } @@ -114,13 +114,13 @@ private void saveImageUrl(Product product, String url) { public JSONObject deleteImage(Long productId, String url){ Product product = productRepository.findByIdFetchImages(productId).orElseThrow(PostNotFoundException::new); if(!userUtils.getCurrentUserId().equals(product.getUser().getId())) - return PropertyUtil.responseMessage("해당 작품의 작가가 아닙니다."); + return SinzakResponse.error("해당 작품의 작가가 아닙니다."); if(product.getImages().size()==1) - return PropertyUtil.responseMessage("최소 1개 이상의 이미지를 보유해야 합니다."); + return SinzakResponse.error("최소 1개 이상의 이미지를 보유해야 합니다."); for (ProductImage image : product.getImages()) { if(image.getImageUrl().equals(product.getThumbnail())) - return PropertyUtil.responseMessage("썸네일은 삭제 불가능합니다."); + return SinzakResponse.error("썸네일은 삭제 불가능합니다."); if(image.getImageUrl().equals(url)){ imageRepository.delete(image); product.getImages().remove(image); @@ -128,7 +128,7 @@ public JSONObject deleteImage(Long productId, String url){ } } s3Service.deleteImage(url); - return PropertyUtil.response(productId); + return SinzakResponse.success(productId); } @Transactional(rollbackFor = {Exception.class}) @@ -137,11 +137,11 @@ public JSONObject editPost(Long productId, ProductEditDto editDto){ User user = userUtils.getCurrentUser(); Product product = productRepository.findById(productId).orElseThrow(PostNotFoundException::new); if(!user.getId().equals(product.getUser().getId()) && user.getRole() != Role.ADMIN) - return PropertyUtil.responseMessage("글 작성자가 아닙니다."); + return SinzakResponse.error("글 작성자가 아닙니다."); product.editPost(editDto); productRepository.save(product); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } @Transactional(rollbackFor = {Exception.class}) @@ -150,10 +150,10 @@ public JSONObject deletePost(Long productId){ User user = userUtils.getCurrentUser(); Product product = productRepository.findByIdFetchChatRooms(productId).orElseThrow(PostNotFoundException::new); if(!user.getId().equals(product.getUser().getId()) && user.getRole() != Role.ADMIN) - return PropertyUtil.responseMessage("글 작성자가 아닙니다."); + return SinzakResponse.error("글 작성자가 아닙니다."); deleteImagesInPost(product); product.setDeleted(true); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } private void deleteImagesInPost(Product product) { @@ -179,14 +179,14 @@ public JSONObject showDetailForUser(Long currentUserId, Long id){ // 글 상 detailForm.setMyPost(); boolean isLike = checkIsLikes(user.getProductLikesList(), product); - boolean isWish = checkIsWish(user, product.getProductWishList()); /**최적화를 위해 상품의 찜목록과 비교함. (대체적으로 해당 상품 찜개수 < 유저의 찜개수) **/ + boolean isWish = checkIsWish(user, product.getProductWishes()); /**최적화를 위해 상품의 찜목록과 비교함. (대체적으로 해당 상품 찜개수 < 유저의 찜개수) **/ boolean isFollowing = false; if(!product.getUser().isDelete()) isFollowing = checkIsFollowing(user.getFollowings(), product); detailForm.setUserAction(isLike, isWish, isFollowing); product.addViews(); - return PropertyUtil.response(detailForm); + return SinzakResponse.success(detailForm); } @Transactional @@ -202,7 +202,7 @@ public JSONObject showDetailForGuest(Long id){ // 비회원 글 보기 } detailForm.setUserAction(false,false,false); product.addViews(); - return PropertyUtil.response(detailForm); + return SinzakResponse.success(detailForm); } private DetailProductForm makeProductDetailForm(Product product, List images) { @@ -262,7 +262,7 @@ public JSONObject showHomeForUser(Long userId){ List followingList = getFollowingList(user, productList, HOME_OBJECTS); obj.put("following", makeHomeShowForms(user.getProductLikesList(),followingList)); /** 팔로잉 **/ - return PropertyUtil.response(obj); + return SinzakResponse.success(obj); } // @Cacheable(value ="home_guest", cacheManager ="testCacheManager") @@ -279,7 +279,7 @@ public JSONObject showHomeForGuest(){ productList.sort((o1, o2) -> o2.getLikesCnt() - o1.getLikesCnt()); /** hot : 좋아요 순 정렬!! **/ obj.put("hot", makeHomeShowFormsForGuest(productList)); - return PropertyUtil.response(obj); + return SinzakResponse.success(obj); } private List getTradingList(List productList, int limit) { @@ -302,7 +302,7 @@ private List getFollowingList(User user, List productList, int public JSONObject wish(@RequestBody ActionForm form){ JSONObject obj = new JSONObject(); User user = userRepository.findByIdFetchProductWishList(userUtils.getCurrentUserId()).orElseThrow(UserNotFoundException::new); // 작품 찜까지 페치 조인 - List wishList = user.getProductWishList(); //wishList == 유저의 찜 리스트 + List wishList = user.getProductWishes(); //wishList == 유저의 찜 리스트 boolean success = false; boolean isWish=false; Product product = productRepository.findById(form.getId()).orElseThrow(PostNotFoundException::new); @@ -372,28 +372,28 @@ public JSONObject sell(@RequestBody SellDto dto){ User user = userRepository.findByIdFetchProductSellList(userUtils.getCurrentUserId()).orElseThrow(UserNotFoundException::new); Product product = productRepository.findById(dto.getPostId()).orElseThrow(PostNotFoundException::new); if(product.isComplete()) - return PropertyUtil.responseMessage("이미 판매완료된 작품입니다."); + return SinzakResponse.error("이미 판매완료된 작품입니다."); ProductSell connect = ProductSell.createConnect(product, user); productSellRepository.save(connect); product.setComplete(true); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } @Transactional public JSONObject suggest(@RequestBody SuggestDto dto){ User user = userUtils.getCurrentUser(); if(suggestRepository.findByUserIdAndProductId(user.getId(),dto.getId()).isPresent()) - return PropertyUtil.responseMessage("이미 제안을 하신 작품입니다."); + return SinzakResponse.error("이미 제안을 하신 작품입니다."); Product product = productRepository.findByIdFetchUser(dto.getId()).orElseThrow(); ProductSuggest connect = ProductSuggest.createConnect(product, user); product.setTopPrice(dto.getPrice()); // alarmService.makeAlarm(product.getUser(),product.getThumbnail(),product.getId().toString(),Integer.toString(dto.getPrice())); suggestRepository.save(connect); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } @Transactional - public PageImpl productListForUser(String keyword, List categories, String align, boolean complete, Pageable pageable){ + public PageImpl productsForUser(String keyword, List categories, String align, boolean complete, Pageable pageable){ User user = userRepository.findByIdFetchHistoryAndLikesList(userUtils.getCurrentUserId()).orElseThrow(UserNotFoundException::new); List userReports = reportRepository.findByUserId(user.getId()); if(!keyword.isEmpty()) @@ -409,7 +409,7 @@ public PageImpl productListForUser(String keyword, List catego private void saveSearchHistory(String keyword, User user) { - List historyList = new ArrayList<>(user.getHistoryList()); + List historyList = new ArrayList<>(user.getHistories()); if(historyList.size() >= HistoryMaxCount) historyRepository.delete(historyList.get(0)); for (SearchHistory history : historyList) { @@ -421,7 +421,7 @@ private void saveSearchHistory(String keyword, User user) { } @Transactional(readOnly = true) - public PageImpl productListForGuest(String keyword, List categories, String align, boolean complete, Pageable pageable){ + public PageImpl productsForGuest(String keyword, List categories, String align, boolean complete, Pageable pageable){ Page productList = QDSLRepository.findAllByCompleteAndCategoriesAligned(complete, keyword, categories, align, pageable); List showList = makeShowFormsForGuest(productList); return new PageImpl<>(showList, pageable, productList.getTotalElements()); diff --git a/src/main/java/net/sinzak/server/user/controller/UserCommandController.java b/src/main/java/net/sinzak/server/user/controller/UserCommandController.java index 1e17087a..62140f65 100644 --- a/src/main/java/net/sinzak/server/user/controller/UserCommandController.java +++ b/src/main/java/net/sinzak/server/user/controller/UserCommandController.java @@ -3,7 +3,6 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; - import net.sinzak.server.common.UserUtils; import net.sinzak.server.common.dto.IdDto; import net.sinzak.server.common.resource.ApiDocumentResponse; @@ -12,13 +11,12 @@ import net.sinzak.server.user.dto.request.*; import net.sinzak.server.user.service.UserCommandService; import org.json.simple.JSONObject; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import javax.validation.Valid; - -import java.security.NoSuchAlgorithmException; - @Api(tags = "유저-명령") @RestController @RequiredArgsConstructor @@ -70,16 +68,16 @@ public JSONObject updateUser(@RequestBody UpdateUserDto dto) { } @ApiDocumentResponse - @ApiOperation(value ="프로필 이미지 변경") - @PostMapping(value ="/users/edit/image") - public JSONObject updateUserImage(@RequestPart MultipartFile multipartFile){ + @ApiOperation(value = "프로필 이미지 변경") + @PostMapping(value = "/users/edit/image") + public JSONObject updateUserImage(@RequestPart MultipartFile multipartFile) { return userCommandService.updateUserImage(multipartFile); } @ApiDocumentResponse - @ApiOperation(value ="관심장르 업데이트") - @PostMapping(value ="/users/edit/category") - public JSONObject updateCategoryLike(@RequestBody CategoryDto categoryDto){ + @ApiOperation(value = "관심장르 업데이트") + @PostMapping(value = "/users/edit/category") + public JSONObject updateCategoryLike(@RequestBody CategoryDto categoryDto) { return userCommandService.updateCategoryLike(categoryDto); } @@ -87,35 +85,35 @@ public JSONObject updateCategoryLike(@RequestBody CategoryDto categoryDto){ @ApiDocumentResponse @ApiOperation(value = "팔로우하기") @PostMapping(value = "/users/follow") - public JSONObject followUser(@RequestBody UserIdDto userIdDto){ + public JSONObject followUser(@RequestBody UserIdDto userIdDto) { return userCommandService.follow(UserUtils.getContextHolderId(), userIdDto.getUserId()); } @ApiDocumentResponse @ApiOperation(value = "언팔로우하기") @PostMapping(value = "/users/unfollow") - public JSONObject unFollowUser(@RequestBody UserIdDto userIdDto){ + public JSONObject unFollowUser(@RequestBody UserIdDto userIdDto) { return userCommandService.unFollow(UserUtils.getContextHolderId(), userIdDto.getUserId()); } @ApiDocumentResponse @ApiOperation(value = "신고하기") @PostMapping(value = "/users/report") - public JSONObject report(@RequestBody ReportRequestDto reportRequestDto){ + public JSONObject report(@RequestBody ReportRequestDto reportRequestDto) { return userCommandService.report(reportRequestDto); } @ApiDocumentResponse @ApiOperation(value = "신고 취소하기", notes = "userId만 제대로 주시면 응답합니다. (reason은 생략)") @PostMapping(value = "/users/report/cancel") - public JSONObject reportCancel(@RequestBody ReportRequestDto reportRequestDto){ + public JSONObject reportCancel(@RequestBody ReportRequestDto reportRequestDto) { return userCommandService.reportCancel(reportRequestDto); } @ApiDocumentResponse - @ApiOperation(value ="fcm 토큰 저장", notes = "로그아웃할 땐 fcm토큰 빈칸") + @ApiOperation(value = "fcm 토큰 저장", notes = "로그아웃할 땐 fcm토큰 빈칸") @PostMapping(value = "/users/fcm") - public JSONObject setToken(FcmDto fcmDto){ + public JSONObject setToken(FcmDto fcmDto) { return userCommandService.setToken(fcmDto); } @@ -134,11 +132,10 @@ public JSONObject deleteHistory() { @ApiDocumentResponse @ApiOperation(value = "유저 탈퇴하기") @PostMapping(value = "/users/resign") - public JSONObject resign(){ + public JSONObject resign() { return userCommandService.resign(); } - } diff --git a/src/main/java/net/sinzak/server/user/controller/UserQueryController.java b/src/main/java/net/sinzak/server/user/controller/UserQueryController.java index 35e833be..76a81d33 100644 --- a/src/main/java/net/sinzak/server/user/controller/UserQueryController.java +++ b/src/main/java/net/sinzak/server/user/controller/UserQueryController.java @@ -3,14 +3,17 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.common.UserUtils; import net.sinzak.server.common.error.UserNotFoundException; import net.sinzak.server.common.error.UserNotLoginException; import net.sinzak.server.common.resource.ApiDocumentResponse; import net.sinzak.server.user.service.UserQueryService; import org.json.simple.JSONObject; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; @Api(tags = "유저-조회") @RestController @@ -18,69 +21,71 @@ public class UserQueryController { private final UserQueryService userQueryService; - @ApiOperation(value ="내 프로필 보기") - @GetMapping(value ="/users/my-profile") - public JSONObject getMyProfile(){ + @ApiOperation(value = "내 프로필 보기") + @GetMapping(value = "/users/my-profile") + public JSONObject getMyProfile() { return userQueryService.getMyProfile(); } - @ApiOperation(value ="유저 프로필 보기") - @GetMapping(value ="/users/{userId}/profile") - public JSONObject getUserProfile(@PathVariable Long userId){ - try{ + @ApiOperation(value = "유저 프로필 보기") + @GetMapping(value = "/users/{userId}/profile") + public JSONObject getUserProfile(@PathVariable Long userId) { + try { Long currentUserId = UserUtils.getContextHolderId(); return userQueryService.getUserProfileForUser(currentUserId, userId); - } - catch (UserNotFoundException | UserNotLoginException e){ + } catch (UserNotFoundException | UserNotLoginException e) { return userQueryService.getUserProfileForGuest(userId); /** 비회원용 **/ } } - @ApiOperation(value ="모든 유저 목록 보기") - @GetMapping(value="/users") - public JSONObject getAllUser(){ + @ApiOperation(value = "모든 유저 목록 보기") + @GetMapping(value = "/users") + public JSONObject getAllUser() { return userQueryService.getAllUser(); } - @ApiOperation(value ="팔로워리스트") - @GetMapping(value ="/users/{userId}/followers") - public JSONObject getFollowerList(@PathVariable Long userId) { - return userQueryService.getFollowerDtoList(userId); + @ApiOperation(value = "팔로워리스트") + @GetMapping(value = "/users/{userId}/followers") + public JSONObject getFollowers(@PathVariable Long userId) { + return userQueryService.getFollowerDtos(userId); } - @ApiOperation(value ="팔로잉리스트") - @GetMapping(value ="/users/{userId}/followings") - public JSONObject getFollowingList(@PathVariable Long userId) { - return userQueryService.getFollowingDtoList(userId); + @ApiOperation(value = "팔로잉리스트") + @GetMapping(value = "/users/{userId}/followings") + public JSONObject getFollowings(@PathVariable Long userId) { + return userQueryService.getFollowingDtos(userId); } @ApiOperation(value = "검색기록 출력", notes = "GetMapping에 유의 삭제는 Post로") @GetMapping(value = "/users/history") public JSONObject showHistory() { - return userQueryService.showSearchHistory(); + return userQueryService.showSearchHistories(); } - @ApiOperation(value ="찜 목록") - @GetMapping(value ="/users/wish") - public JSONObject showWish(){ - return userQueryService.getWishList(); + @ApiOperation(value = "찜 목록") + @GetMapping(value = "/users/wish") + public JSONObject showWish() { + return userQueryService.getWishes(); } - @ApiOperation(value ="의뢰해요 목록") - @GetMapping(value ="/users/work-employ") - public JSONObject showWorkEmploy(){ + + @ApiOperation(value = "의뢰해요 목록") + @GetMapping(value = "/users/work-employ") + public JSONObject showWorkEmploy() { return userQueryService.getWorkEmploys(); } @ApiDocumentResponse @ApiOperation(value = "신고 목록 출력") @PostMapping(value = "/users/reportlist") - public JSONObject reportList(){ - return userQueryService.showReportList(); + public JSONObject reportList() { + return userQueryService.showReports(); } @ApiDocumentResponse @ApiOperation(value = "안드로이드 버전 출력", notes = "무시") @PostMapping(value = "/aos/version") - public JSONObject version(){return PropertyUtil.response(14);} + public JSONObject version() { + return SinzakResponse.success(14); + } } diff --git a/src/main/java/net/sinzak/server/user/domain/JoinTerms.java b/src/main/java/net/sinzak/server/user/domain/JoinTerms.java index f16f8479..bd63e0bb 100644 --- a/src/main/java/net/sinzak/server/user/domain/JoinTerms.java +++ b/src/main/java/net/sinzak/server/user/domain/JoinTerms.java @@ -33,7 +33,8 @@ public JoinTerms(boolean term4) { this.term4 = term4; } - protected JoinTerms() {} + protected JoinTerms() { + } public void setUser(User user) { this.user = user; diff --git a/src/main/java/net/sinzak/server/user/domain/Report.java b/src/main/java/net/sinzak/server/user/domain/Report.java index e48ac914..d23c1036 100644 --- a/src/main/java/net/sinzak/server/user/domain/Report.java +++ b/src/main/java/net/sinzak/server/user/domain/Report.java @@ -15,18 +15,18 @@ public class Report extends BaseTimeEntity { private Long id; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="user_id") + @JoinColumn(name = "user_id") private User user; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="opponent_user_id") + @JoinColumn(name = "opponent_user_id") private User opponentUser; @Lob private String reason; - public static Report createConnect(User loginUser, User opponentUser){ //생성메서드 + public static Report createConnect(User loginUser, User opponentUser) { //생성메서드 Report connect = new Report(); connect.setUser(loginUser, opponentUser); return connect; @@ -34,7 +34,8 @@ public static Report createConnect(User loginUser, User opponentUser){ //생성 public void setUser(User loginUser, User opponentUser) { this.user = loginUser; - user.getReportList().add(this); + user.getReports() + .add(this); this.opponentUser = opponentUser; } } diff --git a/src/main/java/net/sinzak/server/user/domain/Role.java b/src/main/java/net/sinzak/server/user/domain/Role.java index 94cb6cd5..d1a210d0 100644 --- a/src/main/java/net/sinzak/server/user/domain/Role.java +++ b/src/main/java/net/sinzak/server/user/domain/Role.java @@ -6,7 +6,7 @@ @Getter @RequiredArgsConstructor public enum Role { - USER("ROLE_USER", "회원"), ADMIN("ROLE_ADMIN","관리자"), ADVERTISER("ROLE_ADVERTISER","광고주"); + USER("ROLE_USER", "회원"), ADMIN("ROLE_ADMIN", "관리자"), ADVERTISER("ROLE_ADVERTISER", "광고주"); private final String key; private final String title; } \ No newline at end of file diff --git a/src/main/java/net/sinzak/server/user/domain/SearchHistory.java b/src/main/java/net/sinzak/server/user/domain/SearchHistory.java index 472bc96c..8fc4b93e 100644 --- a/src/main/java/net/sinzak/server/user/domain/SearchHistory.java +++ b/src/main/java/net/sinzak/server/user/domain/SearchHistory.java @@ -15,13 +15,13 @@ public class SearchHistory { private Long id; @ManyToOne(fetch = LAZY) - @JoinColumn(name="user_id") + @JoinColumn(name = "user_id") private User user; @Column private String word; - public static SearchHistory addSearchHistory(String word, User user){ //생성메서드 + public static SearchHistory addSearchHistory(String word, User user) { //생성메서드 SearchHistory connect = new SearchHistory(); connect.setUser(user); connect.setWord(word); @@ -30,7 +30,8 @@ public static SearchHistory addSearchHistory(String word, User user){ //생성 public void setUser(User user) { this.user = user; - user.getHistoryList().add(this); + user.getHistories() + .add(this); } public void setWord(String word) { diff --git a/src/main/java/net/sinzak/server/user/domain/User.java b/src/main/java/net/sinzak/server/user/domain/User.java index 1935dfbb..77f1af6c 100644 --- a/src/main/java/net/sinzak/server/user/domain/User.java +++ b/src/main/java/net/sinzak/server/user/domain/User.java @@ -7,13 +7,11 @@ import net.sinzak.server.BaseTimeEntity; import net.sinzak.server.alarm.domain.Alarm; import net.sinzak.server.chatroom.domain.UserChatRoom; -import net.sinzak.server.product.domain.ProductLikes; import net.sinzak.server.product.domain.Product; +import net.sinzak.server.product.domain.ProductLikes; import net.sinzak.server.product.domain.ProductSell; import net.sinzak.server.product.domain.ProductWish; import net.sinzak.server.user.domain.follow.Follow; -import net.sinzak.server.user.domain.follow.Follower; -import net.sinzak.server.user.domain.follow.Following; import net.sinzak.server.work.domain.Work; import net.sinzak.server.work.domain.WorkLikes; import net.sinzak.server.work.domain.WorkSell; @@ -27,12 +25,12 @@ @Getter @Entity -@SequenceGenerator(name = "User_SEQ_GEN",sequenceName = "User_SEQ") +@SequenceGenerator(name = "User_SEQ_GEN", sequenceName = "User_SEQ") @DynamicUpdate @Table(indexes = {@Index(name = "CoveringIndexUser", columnList = "user_id, role")}) -public class User extends BaseTimeEntity{ +public class User extends BaseTimeEntity { private static final int hundredMillion = 100000000; - private static final int tenThousand =10000; + private static final int tenThousand = 10000; @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "User_SEQ") @@ -43,38 +41,38 @@ public class User extends BaseTimeEntity{ private String email; @Column - private String nickName=""; + private String nickName = ""; @Column @Setter - private String picture=""; //대표 사진 + private String picture = ""; //대표 사진 @Column - private String introduction=""; //한 줄 소개 + private String introduction = ""; //한 줄 소개 @Column - private String univ=""; + private String univ = ""; @Column - private String followingNum="0"; + private String followingNum = "0"; @Column - private String followerNum="0"; + private String followerNum = "0"; @Column private String portFolioUrl; @Column - private String categoryLike=""; //관심 장르 + private String categoryLike = ""; //관심 장르 @Column - private boolean cert_uni =false; //대학 인증여부 + private boolean cert_uni = false; //대학 인증여부 @Column - private boolean cert_author =false; //인증작가 인증여부 + private boolean cert_author = false; //인증작가 인증여부 @Column - private int popularity=0; //'지금 뜨는 아티스트' 때문에 만듦 + private int popularity = 0; //'지금 뜨는 아티스트' 때문에 만듦 @Column private String origin; @@ -87,59 +85,59 @@ public class User extends BaseTimeEntity{ private Role role; @Column - private String fcm =""; + private String fcm = ""; @Column - private boolean isDelete= false; + private boolean isDelete = false; - @OneToMany(mappedBy = "user",cascade = CascadeType.ALL,orphanRemoval = true) + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) private List userChatRooms = new ArrayList<>(); - @OneToMany(mappedBy = "user",cascade = CascadeType.MERGE) - private List productPostList = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = CascadeType.MERGE) + private List productPosts = new ArrayList<>(); - @OneToMany(mappedBy = "user" ,cascade = CascadeType.MERGE) - private Set workPostList = new HashSet<>(); + @OneToMany(mappedBy = "user", cascade = CascadeType.MERGE) + private Set workPosts = new HashSet<>(); @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE, orphanRemoval = true) - private List productSellList = new ArrayList<>(); + private List productSells = new ArrayList<>(); @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE, orphanRemoval = true) - private List productWishList = new ArrayList<>(); + private List productWishes = new ArrayList<>(); @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE, orphanRemoval = true) private List productLikesList = new ArrayList<>(); @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE, orphanRemoval = true) - private List workSellList = new ArrayList<>(); + private List workSells = new ArrayList<>(); @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE, orphanRemoval = true) - private List workWishList = new ArrayList<>(); + private List workWishes = new ArrayList<>(); @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE, orphanRemoval = true) private List workLikesList = new ArrayList<>(); - @OneToMany(mappedBy = "user",cascade = CascadeType.REMOVE, orphanRemoval = true) - private List reportList = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE, orphanRemoval = true) + private List reports = new ArrayList<>(); - @OneToMany(mappedBy = "user",cascade = CascadeType.REMOVE, orphanRemoval = true) - private Set historyList = new HashSet<>(); + @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE, orphanRemoval = true) + private Set histories = new HashSet<>(); - @OneToMany(mappedBy = "user",cascade = CascadeType.REMOVE, orphanRemoval = true) + @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE, orphanRemoval = true) private Set alarms = new HashSet<>(); - @OneToMany(mappedBy = "followingUser",cascade = CascadeType.REMOVE, orphanRemoval = true) + @OneToMany(mappedBy = "followingUser", cascade = CascadeType.REMOVE, orphanRemoval = true) private Set followers = new HashSet<>(); - @OneToMany(mappedBy = "followerUser",cascade = CascadeType.REMOVE, orphanRemoval = true) + @OneToMany(mappedBy = "followerUser", cascade = CascadeType.REMOVE, orphanRemoval = true) private Set followings = new HashSet<>(); - public void setFcm(String fcmToken) { this.fcm = fcmToken; } + public void setDelete() { isDelete = true; nickName = null; @@ -182,7 +180,6 @@ public User(String email, String picture, String origin) throws NoSuchAlgorithmE } - public void saveJoinInfo(String nickName, String categoryLike) { this.nickName = nickName; this.categoryLike = categoryLike; @@ -192,45 +189,47 @@ public void saveJoinInfo(String nickName, String categoryLike) { private Random random = SecureRandom.getInstanceStrong(); public void setRandomProfileImage() { - int randomNumber = random.nextInt(10)+1; - this.picture = "https://sinzakimage.s3.ap-northeast-2.amazonaws.com/static/profile"+randomNumber+".png"; + int randomNumber = random.nextInt(10) + 1; + this.picture = "https://sinzakimage.s3.ap-northeast-2.amazonaws.com/static/profile" + randomNumber + ".png"; } - public void updateProfile(String name, String introduction){ - this.nickName =name; + public void updateProfile(String name, String introduction) { + this.nickName = name; this.introduction = introduction; } - public void updateCategoryLike(String categoryLike){ + + public void updateCategoryLike(String categoryLike) { this.categoryLike = categoryLike; } - public void updateFollowNumber(int changeNum){ - int newFollowerNum = Integer.parseInt(this.followerNum)+changeNum; - int newFollowingNum = Integer.parseInt(this.followingNum)+changeNum; + public void updateFollowNumber(int changeNum) { + int newFollowerNum = Integer.parseInt(this.followerNum) + changeNum; + int newFollowingNum = Integer.parseInt(this.followingNum) + changeNum; this.followerNum = Integer.toString(newFollowerNum); this.followingNum = Integer.toString(newFollowingNum); } - public String followNumberTrans(int number){ - String unit =getUnit(number); - if(number>=hundredMillion){ + public String followNumberTrans(int number) { + String unit = getUnit(number); + if (number >= hundredMillion) { number /= hundredMillion; } - if(number>=tenThousand){ + if (number >= tenThousand) { number /= tenThousand; } String transNumber = Integer.toString(number); - if(transNumber.length()>=4){ - transNumber = transNumber.charAt(0)+","+transNumber.substring(1); + if (transNumber.length() >= 4) { + transNumber = transNumber.charAt(0) + "," + transNumber.substring(1); } - transNumber +=unit; + transNumber += unit; return transNumber; } - public String getUnit(int number){ - if(number>=hundredMillion){ + + public String getUnit(int number) { + if (number >= hundredMillion) { return "억"; } - if(number>=tenThousand){ + if (number >= tenThousand) { return "만"; } return ""; diff --git a/src/main/java/net/sinzak/server/user/domain/follow/Follow.java b/src/main/java/net/sinzak/server/user/domain/follow/Follow.java index b5a9f8cb..f669cd90 100644 --- a/src/main/java/net/sinzak/server/user/domain/follow/Follow.java +++ b/src/main/java/net/sinzak/server/user/domain/follow/Follow.java @@ -20,10 +20,10 @@ public class Follow { private Long id; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="follower_user_id") + @JoinColumn(name = "follower_user_id") User followerUser; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="following_user_id") + @JoinColumn(name = "following_user_id") User followingUser; } diff --git a/src/main/java/net/sinzak/server/user/domain/follow/Follower.java b/src/main/java/net/sinzak/server/user/domain/follow/Follower.java index 58ca4163..87479969 100644 --- a/src/main/java/net/sinzak/server/user/domain/follow/Follower.java +++ b/src/main/java/net/sinzak/server/user/domain/follow/Follower.java @@ -20,10 +20,10 @@ public class Follower { private Long id; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="user_id") + @JoinColumn(name = "user_id") User user; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="follower_user_id") + @JoinColumn(name = "follower_user_id") User followerUser; } diff --git a/src/main/java/net/sinzak/server/user/domain/follow/Following.java b/src/main/java/net/sinzak/server/user/domain/follow/Following.java index 9b92f6cb..0a3cc294 100644 --- a/src/main/java/net/sinzak/server/user/domain/follow/Following.java +++ b/src/main/java/net/sinzak/server/user/domain/follow/Following.java @@ -20,10 +20,10 @@ public class Following { private Long id; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="user_id") + @JoinColumn(name = "user_id") User user; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="following_user_id") + @JoinColumn(name = "following_user_id") User followingUser; } diff --git a/src/main/java/net/sinzak/server/user/dto/respond/ProfileShowForm.java b/src/main/java/net/sinzak/server/user/dto/respond/ProfileShowForm.java index d89ce8f4..146614e1 100644 --- a/src/main/java/net/sinzak/server/user/dto/respond/ProfileShowForm.java +++ b/src/main/java/net/sinzak/server/user/dto/respond/ProfileShowForm.java @@ -1,7 +1,6 @@ package net.sinzak.server.user.dto.respond; import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -17,5 +16,4 @@ public class ProfileShowForm { private String title; private LocalDateTime date; private boolean complete; - } diff --git a/src/main/java/net/sinzak/server/user/repository/FollowRepository.java b/src/main/java/net/sinzak/server/user/repository/FollowRepository.java index 2cdea464..910e49d2 100644 --- a/src/main/java/net/sinzak/server/user/repository/FollowRepository.java +++ b/src/main/java/net/sinzak/server/user/repository/FollowRepository.java @@ -8,14 +8,13 @@ import java.util.Optional; import java.util.Set; -public interface FollowRepository extends JpaRepository { +public interface FollowRepository extends JpaRepository { @Query("select f from Follow f where f.followingUser.id = :followingUserId and f.followerUser.id = :followerUserId") - Optional findFollowByFollowingAndFollower(@Param("followingUserId")Long followingId, @Param("followerUserId")Long followerId); + Optional findFollowByFollowingAndFollower(@Param("followingUserId") Long followingId, @Param("followerUserId") Long followerId); @Query("select f,fg.id,fg.nickName,fg.picture from Follow f left join fetch f.followingUser fg where f.followerUser.id = :loginUserId") Set findByFollowerUserIdFetchFollowings(@Param("loginUserId") Long loginUserId); + @Query("select f,fr.id,fr.nickName,fr.picture from Follow f left join fetch f.followerUser fr where f.followingUser.id = :loginUserId") Set findByFollowingUserIdFetchFollower(@Param("loginUserId") Long loginUserId); - - } diff --git a/src/main/java/net/sinzak/server/user/repository/SearchHistoryRepository.java b/src/main/java/net/sinzak/server/user/repository/SearchHistoryRepository.java index 36129206..1906bb84 100644 --- a/src/main/java/net/sinzak/server/user/repository/SearchHistoryRepository.java +++ b/src/main/java/net/sinzak/server/user/repository/SearchHistoryRepository.java @@ -9,6 +9,6 @@ import java.util.Optional; public interface SearchHistoryRepository extends JpaRepository { - @Query("select u from User u left join fetch u.historyList where u.id = :id") + @Query("select u from User u left join fetch u.histories where u.id = :id") Optional findByIdFetchHistoryList(@Param("id") Long id); } diff --git a/src/main/java/net/sinzak/server/user/repository/UserQDSLRepositoryImpl.java b/src/main/java/net/sinzak/server/user/repository/UserQDSLRepositoryImpl.java deleted file mode 100644 index 2b3ee643..00000000 --- a/src/main/java/net/sinzak/server/user/repository/UserQDSLRepositoryImpl.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.sinzak.server.user.repository; - -import com.querydsl.jpa.impl.JPAQueryFactory; -import lombok.RequiredArgsConstructor; -import net.sinzak.server.user.dto.respond.GetFollowDto; -import net.sinzak.server.user.dto.respond.QGetFollowDto; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -import static net.sinzak.server.user.domain.QUser.user; - -@Repository -@RequiredArgsConstructor -public class UserQDSLRepositoryImpl { - - private final JPAQueryFactory queryFactory; - - public Optional findByIdForFollow(Long userId) { - return Optional.ofNullable(queryFactory - .select(new QGetFollowDto(user.id, user.nickName, user.picture)) - .from(user) - .where(user.id.eq(userId).and(user.isDelete.eq(false))) - .fetchFirst()); - } -} diff --git a/src/main/java/net/sinzak/server/user/repository/UserRepository.java b/src/main/java/net/sinzak/server/user/repository/UserRepository.java index f40fb6fe..71ed5cb1 100644 --- a/src/main/java/net/sinzak/server/user/repository/UserRepository.java +++ b/src/main/java/net/sinzak/server/user/repository/UserRepository.java @@ -3,81 +3,66 @@ import net.sinzak.server.config.auth.UserProjection; import net.sinzak.server.user.domain.User; -import net.sinzak.server.user.domain.follow.Follower; -import net.sinzak.server.user.domain.follow.Following; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; import java.util.Optional; -import java.util.Set; public interface UserRepository extends JpaRepository { - - /**유저 이메일로 구분 및 검색 **/ @Query(value = "select user_id, role from user u where user_id= :id and is_delete = false", nativeQuery = true) - Optional findCurrentUserInfo(@Param("id")Long id); + Optional findCurrentUserInfo(@Param("id") Long id); @Query("select u from User u where u.email= :email and u.isDelete = false") - Optional findByEmailNotDeleted(@Param("email")String email); + Optional findByEmailNotDeleted(@Param("email") String email); //유저 Id @Query("select u from User u where u.id = :id and u.isDelete = false") - Optional findByIdNotDeleted(@Param("id")Long id); + Optional findByIdNotDeleted(@Param("id") Long id); @Query("select u from User u where u.isDelete = false") List findAllNotDeleted(); @Query("select u from User u where u.nickName = :nickName and u.isDelete = false") - Optional findByNickName(@Param("nickName")String nickName); + Optional findByNickName(@Param("nickName") String nickName); //Product - @Query("select u from User u left join fetch u.productWishList where u.id = :id and u.isDelete = false") + @Query("select u from User u left join fetch u.productWishes where u.id = :id and u.isDelete = false") Optional findByIdFetchProductWishList(@Param("id") Long id); - @Query("select u from User u left join fetch u.productPostList where u.id = :id and u.isDelete = false") - Optional findByIdFetchProductPostList(@Param("id")Long id); + @Query("select u from User u left join fetch u.productPosts where u.id = :id and u.isDelete = false") + Optional findByIdFetchProductPostList(@Param("id") Long id); - @Query("select u from User u left join fetch u.productSellList where u.id = :id and u.isDelete = false") - Optional findByIdFetchProductSellList(@Param("id")Long id); + @Query("select u from User u left join fetch u.productSells where u.id = :id and u.isDelete = false") + Optional findByIdFetchProductSellList(@Param("id") Long id); @Query("select u from User u left join fetch u.productLikesList where u.id = :id and u.isDelete = false") - Optional findByIdFetchLikesList(@Param("id")Long id); + Optional findByIdFetchLikesList(@Param("id") Long id); + //Work + @Query("select u from User u left join fetch u.workPosts where u.id = :id and u.isDelete = false") + Optional findByIdFetchWorkPostList(@Param("id") Long id); - @Query("select u from User u left join fetch u.workPostList where u.id = :id and u.isDelete = false") - Optional findByIdFetchWorkPostList(@Param("id")Long id); + @Query("select u from User u left join fetch u.workWishes where u.id = :id and u.isDelete = false") + Optional findByIdFetchWorkWishList(@Param("id") Long id); - @Query("select u from User u left join fetch u.workWishList where u.id = :id and u.isDelete = false") - Optional findByIdFetchWorkWishList(@Param("id")Long id); //Follow - @Query("select u from User u left join fetch u.followers where u.id =:id and u.isDelete = false") - Optional findByIdFetchFollowerList(@Param("id") Long id); @Query("select u from User u left join fetch u.followings where u.id =:id and u.isDelete = false") Optional findByIdFetchFollowings(@Param("id") Long id); - @Query(value = "select following_id from following_list where user_id = :id", nativeQuery = true) - Set findFollowings(@Param("id") Long id); - - @Query(value = "select follower_id from follower_list where user_id = :id", nativeQuery = true) - Set findFollowers(@Param("id") Long id); - @Query("select u from User u left join fetch u.followings fg left join fetch u.productLikesList where u.id = :id and u.isDelete = false") Optional findByIdFetchFollowingAndLikesList(@Param("id") Long id); - @Query("select u from User u left join fetch u.reportList where u.id = :id and u.isDelete = false") - Optional findByIdFetchReportList(@Param("id")Long id); - - @Query("select u from User u left join fetch u.productLikesList left join fetch u.historyList where u.id = :id and u.isDelete = false") - Optional findByIdFetchHistoryAndLikesList(@Param("id")Long id); - - + @Query("select u from User u left join fetch u.reports where u.id = :id and u.isDelete = false") + Optional findByIdFetchReportList(@Param("id") Long id); + @Query("select u from User u left join fetch u.productLikesList left join fetch u.histories where u.id = :id and u.isDelete = false") + Optional findByIdFetchHistoryAndLikesList(@Param("id") Long id); } diff --git a/src/main/java/net/sinzak/server/user/service/UserCommandService.java b/src/main/java/net/sinzak/server/user/service/UserCommandService.java index 9f390855..d817ef21 100644 --- a/src/main/java/net/sinzak/server/user/service/UserCommandService.java +++ b/src/main/java/net/sinzak/server/user/service/UserCommandService.java @@ -13,8 +13,6 @@ import net.sinzak.server.product.domain.Product; import net.sinzak.server.user.domain.Report; import net.sinzak.server.user.domain.follow.Follow; -import net.sinzak.server.user.domain.follow.Follower; -import net.sinzak.server.user.domain.follow.Following; import net.sinzak.server.user.dto.request.CategoryDto; import net.sinzak.server.user.dto.request.FcmDto; import net.sinzak.server.user.dto.request.ReportRequestDto; @@ -23,15 +21,12 @@ import net.sinzak.server.common.error.UserNotFoundException; import net.sinzak.server.user.repository.*; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import org.json.simple.JSONObject; -import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; -import java.security.NoSuchAlgorithmException; -import java.util.List; import java.util.Optional; @Service @@ -56,10 +51,10 @@ public JSONObject updateUser(UpdateUserDto dto){ Long userId = userUtils.getCurrentUserId(); User user = userRepository.findByIdFetchProductPostList(userId).orElseThrow(); user.updateProfile(dto.getName(),dto.getIntroduction()); - for (Product product : user.getProductPostList()) { + for (Product product : user.getProductPosts()) { product.updateUserNickName(dto.getName()); } - return PropertyUtil.response(true); + return SinzakResponse.success(true); } public JSONObject updateUserImage(MultipartFile multipartFile){ @@ -70,24 +65,24 @@ public JSONObject updateUserImage(MultipartFile multipartFile){ userRepository.save(loginUser); } catch (Exception e){ - return PropertyUtil.responseMessage("이미지 저장 실패"); + return SinzakResponse.error("이미지 저장 실패"); } JSONObject obj = new JSONObject(); obj.put("picture", loginUser.getPicture()); - return PropertyUtil.response(obj); + return SinzakResponse.success(obj); } public JSONObject updateCategoryLike(CategoryDto categoryDto){ User user = userUtils.getCurrentUser(); user.updateCategoryLike(categoryDto.getCategoryLike()); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } public JSONObject setToken(FcmDto fcmDto){ User loginUser = userRepository.findByIdNotDeleted(fcmDto.getUserId()).orElseThrow(UserNotFoundException::new); loginUser.setFcm(fcmDto.getFcmToken()); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } @@ -95,7 +90,7 @@ public JSONObject setToken(FcmDto fcmDto){ public JSONObject follow(Long currentUserId, Long userId){ User findUser = userRepository.findByIdNotDeleted(userId).orElseThrow(UserNotFoundException::new); if(currentUserId.equals(findUser.getId())) - return PropertyUtil.responseMessage("본인한테는 팔로우 불가능"); + return SinzakResponse.error("본인한테는 팔로우 불가능"); return addFollow(findUser); } @@ -104,7 +99,7 @@ public JSONObject follow(Long currentUserId, Long userId){ public JSONObject unFollow(Long currentUserId, Long userId){ User findUser = userRepository.findByIdNotDeleted(userId).orElseThrow(UserNotFoundException::new); if(currentUserId.equals(findUser.getId())) - return PropertyUtil.responseMessage("본인한테는 언팔로우 불가능"); + return SinzakResponse.error("본인한테는 언팔로우 불가능"); return removeFollow(findUser, currentUserId); } @@ -115,7 +110,7 @@ public JSONObject removeFollow(User findUser, Long loginUserId){ followRepository.delete(follow.get()); user.updateFollowNumber(-1); findUser.updateFollowNumber(-1); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } public JSONObject addFollow(User findUser){ @@ -129,14 +124,14 @@ public JSONObject addFollow(User findUser){ findUser.updateFollowNumber(1); alarmService.makeAlarm(findUser,loginUser.getPicture(),loginUser.getId().toString(), AlarmType.FOLLOW, loginUser.getNickName()); // fireBaseService.sendIndividualNotification(findUser,"팔로우 알림",loginUser.getNickName(),loginUser.getId().toString()); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } @Transactional(readOnly = true) public JSONObject checkNickName(String nickName){ if(userRepository.findByNickName(nickName).isPresent()) - return PropertyUtil.responseMessage("이미 존재하는 닉네임입니다."); - return PropertyUtil.response(true); + return SinzakResponse.error("이미 존재하는 닉네임입니다."); + return SinzakResponse.success(true); } @@ -144,30 +139,30 @@ public JSONObject report(ReportRequestDto dto){ Long opponentUserId = dto.getUserId(); User loginUser = userUtils.getCurrentUser(); if(loginUser.getId().equals(opponentUserId)) - return PropertyUtil.responseMessage("본인을 신고할 수 없습니다."); + return SinzakResponse.error("본인을 신고할 수 없습니다."); if(checkReportHistory(opponentUserId, loginUser).isPresent()) - return PropertyUtil.responseMessage("이미 신고한 회원입니다."); + return SinzakResponse.error("이미 신고한 회원입니다."); User opponentUser = userRepository.findByIdNotDeleted(opponentUserId).orElseThrow(UserNotFoundException::new); // chatRoomCommandService.makeChatRoomBlocked(loginUser,opponentUser,true); Report connect = Report.createConnect(loginUser, opponentUser); reportRepository.save(connect); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } public JSONObject reportCancel(ReportRequestDto dto){ Long opponentUserId = dto.getUserId(); User loginUser = userUtils.getCurrentUser(); if(loginUser.getId().equals(opponentUserId)) - return PropertyUtil.responseMessage("본인을 신고 취소 할 수 없습니다."); + return SinzakResponse.error("본인을 신고 취소 할 수 없습니다."); Report report = checkReportHistory(opponentUserId, loginUser).orElseThrow(InstanceNotFoundException::new); User opponentUser = userRepository.findByIdNotDeleted(opponentUserId).orElseThrow(UserNotFoundException::new); chatRoomCommandService.makeChatRoomBlocked(loginUser,opponentUser,false); reportRepository.delete(report); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } private Optional checkReportHistory(Long id, User loginUser) { - for (Report report : loginUser.getReportList()) { + for (Report report : loginUser.getReports()) { if(report.getOpponentUser().getId().equals(id)) return Optional.of(report); } @@ -178,17 +173,17 @@ private Optional checkReportHistory(Long id, User loginUser) { public JSONObject deleteSearchHistory(Long id){ User user = userUtils.getCurrentUser(); - user.getHistoryList().stream() + user.getHistories().stream() .filter(history -> history.getId().equals(id)) .findFirst() .ifPresent(historyRepository::delete); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } public JSONObject deleteSearchHistory(){ User user = userUtils.getCurrentUser(); - historyRepository.deleteAll(user.getHistoryList()); - return PropertyUtil.response(true); + historyRepository.deleteAll(user.getHistories()); + return SinzakResponse.success(true); } @Transactional(rollbackFor = Exception.class) @@ -197,10 +192,10 @@ public JSONObject resign(){ try{ User loginUser = userUtils.getCurrentUser(); loginUser.setDelete(); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } catch (Exception e){ - return PropertyUtil.responseMessage("탈퇴 처리가 되지 않았습니다. sinzakofficial@gmail.com 으로 문의주세요."); + return SinzakResponse.error("탈퇴 처리가 되지 않았습니다. sinzakofficial@gmail.com 으로 문의주세요."); } } diff --git a/src/main/java/net/sinzak/server/user/service/UserQueryService.java b/src/main/java/net/sinzak/server/user/service/UserQueryService.java index 07783615..b62ed55f 100644 --- a/src/main/java/net/sinzak/server/user/service/UserQueryService.java +++ b/src/main/java/net/sinzak/server/user/service/UserQueryService.java @@ -2,7 +2,7 @@ import lombok.RequiredArgsConstructor; import net.sinzak.server.CustomJSONArray; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.common.UserUtils; import net.sinzak.server.common.error.InstanceNotFoundException; import net.sinzak.server.common.error.UserNotFoundException; @@ -37,46 +37,46 @@ public class UserQueryService { private final WorkWishRepository workWishRepository; private final ProductWishRepository productWishRepository; private final ReportRepository reportRepository; - private final UserQDSLRepositoryImpl QDSLRepository; private final FollowRepository followRepository; - public JSONObject getMyProfile(){ + public JSONObject getMyProfile() { JSONObject obj = new JSONObject(); - User findUser = userRepository.findByIdFetchProductPostList(userUtils.getCurrentUserId()).orElseThrow(()-> new UserNotFoundException(UserNotFoundException.USER_NOT_LOGIN)); - List productShowForms = makeProductShowForm(findUser.getProductPostList()); + User findUser = userRepository.findByIdFetchProductPostList(userUtils.getCurrentUserId()) + .orElseThrow(() -> new UserNotFoundException(UserNotFoundException.USER_NOT_LOGIN)); + List productShowForms = makeProductShowForm(findUser.getProductPosts()); obj.put("products", productShowForms); - List workShowForms = makeWorkShowForm(findUser.getWorkPostList(),false); + List workShowForms = makeWorkShowForm(findUser.getWorkPosts(), false); obj.put("works", workShowForms); - List workEmployShowForms = makeWorkShowForm(findUser.getWorkPostList(),true); - obj.put("workEmploys",workEmployShowForms); - obj.put("profile",makeUserDto(userUtils.getCurrentUserId(), findUser)); - return PropertyUtil.response(obj); + List workEmployShowForms = makeWorkShowForm(findUser.getWorkPosts(), true); + obj.put("workEmploys", workEmployShowForms); + obj.put("profile", makeUserDto(userUtils.getCurrentUserId(), findUser)); + return SinzakResponse.success(obj); } - public JSONObject getWishList(){ - List workWishes= Optional - .ofNullable(workWishRepository.findByUserIdFetchWork(userUtils.getCurrentUserId())) + public JSONObject getWishes() { + List workWishes = Optional.ofNullable(workWishRepository.findByUserIdFetchWork(userUtils.getCurrentUserId())) .orElseThrow(() -> new UserNotFoundException(UserNotFoundException.USER_NOT_LOGIN)); List productWishes = productWishRepository.findByUserIdFetchProduct(userUtils.getCurrentUserId()); JSONObject obj = new JSONObject(); List workWishShowForms = makeWorkWishShowForms(workWishes); - obj.put("workWishes",workWishShowForms); + obj.put("workWishes", workWishShowForms); List productWishShowForms = makeProductWishShowForms(productWishes); - obj.put("productWishes",productWishShowForms); - return PropertyUtil.response(obj); + obj.put("productWishes", productWishShowForms); + return SinzakResponse.success(obj); } - public JSONObject getWorkEmploys(){ + public JSONObject getWorkEmploys() { JSONObject obj = new JSONObject(); - User loginUser = userRepository.findByIdFetchWorkPostList(userUtils.getCurrentUserId()).orElseThrow(()->new UserNotFoundException(UserNotFoundException.USER_NOT_LOGIN)); - List workEmploys = makeWorkShowForm(loginUser.getWorkPostList(),true); - obj.put("workEmploys",workEmploys); - return PropertyUtil.response(obj); + User loginUser = userRepository.findByIdFetchWorkPostList(userUtils.getCurrentUserId()) + .orElseThrow(() -> new UserNotFoundException(UserNotFoundException.USER_NOT_LOGIN)); + List workEmploys = makeWorkShowForm(loginUser.getWorkPosts(), true); + obj.put("workEmploys", workEmploys); + return SinzakResponse.success(obj); } - public boolean checkReported(User postUser,User loginUser){ + public boolean checkReported(User postUser, User loginUser) { List report = reportRepository.findByUserIdAndOpponentUserIdBoth(postUser.getId(), loginUser.getId()); - if(report.isEmpty()){ + if (report.isEmpty()) { return false; } return true; @@ -120,7 +120,8 @@ private List makeProductShowForm(List productList) { .complete(product.isComplete()) .date(product.getCreatedDate()) .thumbnail(product.getThumbnail()) - .title(product.getTitle()).build()) + .title(product.getTitle()) + .build()) .collect(Collectors.toList()); } @@ -132,33 +133,37 @@ private List makeWorkShowForm(Set workList, boolean isEmp .complete(work.isComplete()) .date(work.getCreatedDate()) .thumbnail(work.getThumbnail()) - .title(work.getTitle()).build()) - .sorted((o1, o2) -> (int) (o2.getId()-o1.getId())) + .title(work.getTitle()) + .build()) + .sorted((o1, o2) -> (int) (o2.getId() - o1.getId())) .collect(Collectors.toList()); } public JSONObject getUserProfileForUser(Long currentUserId, Long userId) { JSONObject obj = new JSONObject(); - User findUser = userRepository.findByIdFetchProductPostList(userId).orElseThrow(()->new UserNotFoundException(UserNotFoundException.USER_NOT_FOUND)); - List productShowForms = makeProductShowForm(findUser.getProductPostList()); + User findUser = userRepository.findByIdFetchProductPostList(userId) + .orElseThrow(() -> new UserNotFoundException(UserNotFoundException.USER_NOT_FOUND)); + List productShowForms = makeProductShowForm(findUser.getProductPosts()); obj.put("products", productShowForms); - List workShowForms = makeWorkShowForm(findUser.getWorkPostList(),false); + List workShowForms = makeWorkShowForm(findUser.getWorkPosts(), false); obj.put("works", workShowForms); - obj.put("profile",makeUserDto(currentUserId, findUser)); - return PropertyUtil.response(obj); + obj.put("profile", makeUserDto(currentUserId, findUser)); + return SinzakResponse.success(obj); } public JSONObject getUserProfileForGuest(Long userId) { JSONObject obj = new JSONObject(); - User findUser = userRepository.findByIdFetchProductPostList(userId).orElseThrow(()->new UserNotFoundException(UserNotFoundException.USER_NOT_FOUND)); - List productShowForms = makeProductShowForm(findUser.getProductPostList()); + User findUser = userRepository.findByIdFetchProductPostList(userId) + .orElseThrow(() -> new UserNotFoundException(UserNotFoundException.USER_NOT_FOUND)); + List productShowForms = makeProductShowForm(findUser.getProductPosts()); obj.put("products", productShowForms); - List workShowForms = makeWorkShowForm(findUser.getWorkPostList(),false); + List workShowForms = makeWorkShowForm(findUser.getWorkPosts(), false); obj.put("works", workShowForms); - obj.put("profile",makeUserDto(0L, findUser)); - return PropertyUtil.response(obj); + obj.put("profile", makeUserDto(0L, findUser)); + return SinzakResponse.success(obj); } + private UserDto makeUserDto(Long loginUserId, User findUser) { return UserDto.builder() .userId(findUser.getId()) @@ -166,39 +171,41 @@ private UserDto makeUserDto(Long loginUserId, User findUser) { .introduction(findUser.getIntroduction()) .followingNumber(findUser.getFollowingNum()) .followerNumber(findUser.getFollowerNum()) - .myProfile(checkIfMyProfile(loginUserId,findUser)) + .myProfile(checkIfMyProfile(loginUserId, findUser)) .imageUrl(findUser.getPicture()) .univ(findUser.getUniv()) - .isFollow(checkIfFollowFindUser(loginUserId,findUser)) + .isFollow(checkIfFollowFindUser(loginUserId, findUser)) .cert_uni(findUser.isCert_uni()) .cert_author(findUser.isCert_author()) .categoryLike(findUser.getCategoryLike()) .build(); } - public boolean checkIfFollowFindUser(Long loginUserId,User findUser){ - if(loginUserId.equals(0L)){ + + public boolean checkIfFollowFindUser(Long loginUserId, User findUser) { + if (loginUserId.equals(0L)) { return false; } - return findUser - .getFollowers() + return findUser.getFollowers() .stream() .map(Follow::getFollowerUser) .map(User::getId) .peek(System.out::println) .anyMatch(x -> x.equals(loginUserId)); } - public boolean checkIfMyProfile(Long loginUserId, User findUser){ - if(loginUserId.equals(0L)){ + + public boolean checkIfMyProfile(Long loginUserId, User findUser) { + if (loginUserId.equals(0L)) { return false; } - if(findUser.getId().equals(loginUserId)){ + if (findUser.getId() + .equals(loginUserId)) { return true; } return false; } - public JSONObject getFollowerDtoList(Long userId){ + public JSONObject getFollowerDtos(Long userId) { Set followers = followRepository.findByFollowingUserIdFetchFollower(userId); List users = followers.stream() .map(Follow::getFollowerUser) @@ -206,72 +213,78 @@ public JSONObject getFollowerDtoList(Long userId){ return makeFollowDtos(users); } - public JSONObject getFollowingDtoList(Long userId){ + public JSONObject getFollowingDtos(Long userId) { Set followings = followRepository.findByFollowerUserIdFetchFollowings(userId); List users = followings.stream() .map(Follow::getFollowingUser) .collect(Collectors.toList()); return makeFollowDtos(users); } + private JSONObject makeFollowDtos(List users) { List getFollowDtoList = new ArrayList<>(); - for(User user :users){ - getFollowDtoList.add( - GetFollowDto.builder() - .userId(user.getId()) - .name(user.getNickName()) - .picture(user.getPicture()) - .build() - ); + for (User user : users) { + getFollowDtoList.add(GetFollowDto.builder() + .userId(user.getId()) + .name(user.getNickName()) + .picture(user.getPicture()) + .build()); } - return PropertyUtil.response(getFollowDtoList); + return SinzakResponse.success(getFollowDtoList); } - public JSONObject showReportList(){ - User loginUser = userRepository.findByIdFetchReportList(userUtils.getCurrentUserId()).orElseThrow(UserNotFoundException::new); + public JSONObject showReports() { + User loginUser = userRepository.findByIdFetchReportList(userUtils.getCurrentUserId()) + .orElseThrow(UserNotFoundException::new); List reportList = reportRepository.findByUserIdFetchOpponent(loginUser.getId()); List reportRespondDtos = reportList.stream() - .filter(report -> !report.getOpponentUser().isDelete()) - .map(report -> new ReportRespondDto(report.getOpponentUser().getId(), report.getOpponentUser().getNickName(), report.getOpponentUser().getPicture())) + .filter(report -> !report.getOpponentUser() + .isDelete()) + .map(report -> new ReportRespondDto(report.getOpponentUser() + .getId(), report.getOpponentUser() + .getNickName(), report.getOpponentUser() + .getPicture())) .collect(Collectors.toList()); - return PropertyUtil.response(reportRespondDtos); + return SinzakResponse.success(reportRespondDtos); } - public JSONObject showSearchHistory(){ - User user = historyRepository.findByIdFetchHistoryList(userUtils.getCurrentUserId()).orElseThrow(InstanceNotFoundException::new); - List searchHistoryList = getUserHistoryList(user); + public JSONObject showSearchHistories() { + User user = historyRepository.findByIdFetchHistoryList(userUtils.getCurrentUserId()) + .orElseThrow(InstanceNotFoundException::new); + List searchHistoryList = getUserHistories(user); List histories = searchHistoryList.stream() .map(history -> new CustomJSONArray(history.getId(), history.getWord())) .collect(Collectors.toList()); - return PropertyUtil.response(histories); + return SinzakResponse.success(histories); } - private List getUserHistoryList(User user) { - List historyList = new ArrayList<>(user.getHistoryList()); - historyList.sort((o1, o2) -> (int) (o2.getId()-o1.getId())); + private List getUserHistories(User user) { + List historyList = new ArrayList<>(user.getHistories()); + historyList.sort((o1, o2) -> (int) (o2.getId() - o1.getId())); return historyList; } - public JSONObject getAllUser(){ + public JSONObject getAllUser() { List users = userRepository.findAll(); List obj = new ArrayList<>(); - for(User user : users){ - JSONObject jsonObject =new JSONObject(); - jsonObject.put("id",user.getId()); - jsonObject.put("email",user.getEmail()); + for (User user : users) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id", user.getId()); + jsonObject.put("email", user.getEmail()); obj.add(jsonObject); } - return PropertyUtil.response(obj); + return SinzakResponse.success(obj); } - public Optional getUserNickName(Long id){ - User user = userRepository.findById(id).orElseThrow(UserNotFoundException::new); + public Optional getUserNickName(Long id) { + User user = userRepository.findById(id) + .orElseThrow(UserNotFoundException::new); return Optional.of(user.getNickName()); } @@ -281,8 +294,7 @@ public Optional getCertifiedRandomUser() throws NoSuchAlgorithmException { List certUsers = users.stream() .filter(User::isCert_author) .collect(Collectors.toList()); - if(certUsers.size() == 0) - return Optional.empty(); + if (certUsers.size() == 0) return Optional.empty(); Random random = SecureRandom.getInstanceStrong(); int randomNumber = random.nextInt(certUsers.size()); User randomUser = certUsers.get(randomNumber); diff --git a/src/main/java/net/sinzak/server/work/controller/WorkController.java b/src/main/java/net/sinzak/server/work/controller/WorkController.java index f5cfe414..10b873b6 100644 --- a/src/main/java/net/sinzak/server/work/controller/WorkController.java +++ b/src/main/java/net/sinzak/server/work/controller/WorkController.java @@ -6,11 +6,11 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import net.sinzak.server.common.UserUtils; +import net.sinzak.server.common.dto.ActionForm; import net.sinzak.server.common.dto.SuggestDto; import net.sinzak.server.common.error.UserNotFoundException; import net.sinzak.server.common.error.UserNotLoginException; import net.sinzak.server.common.resource.ApiDocumentResponse; -import net.sinzak.server.common.dto.ActionForm; import net.sinzak.server.product.dto.ImageUrlDto; import net.sinzak.server.product.dto.SellDto; import net.sinzak.server.product.dto.ShowForm; @@ -36,7 +36,7 @@ public class WorkController { private final WorkService workService; @ApiDocumentResponse - @ApiOperation(value = "의뢰 모집 글 생성", notes = "{\"success\":true, \"id\":52}\n해당 글의 id를 전해드리니 이 /works/{id}/image 에 넘겨주세요\n" + + @ApiOperation(value = "의뢰 모집 글 생성", notes = "{\"success\":true, \"id\":52}\n해당 글의 id를 전해드리니 이 /works/{id}/image 에 넘겨주세요\n" + "category = portrait, illustration, logo, poster, design, editorial, label, other 주의점은 콤마로 구분하되 공백은 삽입X") @PostMapping(value = "/works/build", consumes = {MediaType.APPLICATION_JSON_VALUE}) public JSONObject makePost(@Valid @RequestBody WorkPostDto postDto) { @@ -76,11 +76,10 @@ public JSONObject deletePost(@PathVariable("id") Long workId) { @PostMapping("/works/{id}") @ApiOperation(value = "의뢰 상세 조회") public JSONObject showWorks(@PathVariable Long id) { - try{ + try { Long currentUserId = UserUtils.getContextHolderId(); return workService.showDetailForUser(currentUserId, id); - } - catch (UserNotFoundException | UserNotLoginException e){ + } catch (UserNotFoundException | UserNotLoginException e) { return workService.showDetailForGuest(id); /** 비회원용 **/ } } @@ -122,8 +121,8 @@ public JSONObject suggest(@RequestBody SuggestDto dto) { @ApiImplicitParam(name = "size", dataType = "integer", paramType = "query", value = "3", defaultValue = "5"), @ApiImplicitParam(name = "align", dataType = "string", paramType = "query", - value = "정렬 기준\n" +"recent - 최신순\n"+ - "recommend - 신작추천순\n" , defaultValue = "recent"), + value = "정렬 기준\n" + "recent - 최신순\n" + + "recommend - 신작추천순\n", defaultValue = "recent"), @ApiImplicitParam(name = "categories", dataType = "string", paramType = "query", value = "categories(최대 3개)\n" + "portrait\n" + @@ -137,13 +136,12 @@ public JSONObject suggest(@RequestBody SuggestDto dto) { @ApiImplicitParam(name = "search", dataType = "string", paramType = "query", value = "String 값으로 주시고 최소 2글자 이상은 받아야 합니다. contain 메서드로 db에서 검색할 예정.") }) - public PageImpl showWorks(@RequestParam(required=false, defaultValue="") String search, @RequestParam(required=false, defaultValue="") List categories, @RequestParam(required=false, defaultValue="recommend") String align, @RequestParam(required=false, defaultValue="true") Boolean employment, @ApiIgnore Pageable pageable) { - try{ + public PageImpl showWorks(@RequestParam(required = false, defaultValue = "") String search, @RequestParam(required = false, defaultValue = "") List categories, @RequestParam(required = false, defaultValue = "recommend") String align, @RequestParam(required = false, defaultValue = "true") Boolean employment, @ApiIgnore Pageable pageable) { + try { UserUtils.getContextHolderId(); - return workService.workListForUser(search, categories, align, employment, pageable); - } - catch (UserNotFoundException | UserNotLoginException e) { - return workService.workListForGuest(search, categories, align, employment, pageable); + return workService.worksForUser(search, categories, align, employment, pageable); + } catch (UserNotFoundException | UserNotLoginException e) { + return workService.worksForGuest(search, categories, align, employment, pageable); } } diff --git a/src/main/java/net/sinzak/server/work/domain/Work.java b/src/main/java/net/sinzak/server/work/domain/Work.java index 2a3b2f91..752b3599 100644 --- a/src/main/java/net/sinzak/server/work/domain/Work.java +++ b/src/main/java/net/sinzak/server/work/domain/Work.java @@ -81,7 +81,7 @@ public class Work extends BaseTimeEntity { /** 외주 **/ private List images = new ArrayList<>(); //수취인 @OneToMany(mappedBy = "work", cascade = CascadeType.REMOVE) - private List workWishList = new ArrayList<>(); + private List workWishes = new ArrayList<>(); @OneToMany(mappedBy = "work") private List chatRooms = new ArrayList<>(); @@ -99,7 +99,7 @@ public Work(String title, String content, String category, int price, boolean su } public void setUser(User user) { - user.getWorkPostList().add(this); + user.getWorkPosts().add(this); this.user = user; } diff --git a/src/main/java/net/sinzak/server/work/domain/WorkSell.java b/src/main/java/net/sinzak/server/work/domain/WorkSell.java index 619c63e2..20991fce 100644 --- a/src/main/java/net/sinzak/server/work/domain/WorkSell.java +++ b/src/main/java/net/sinzak/server/work/domain/WorkSell.java @@ -31,7 +31,7 @@ public static WorkSell createConnect(Work work, User user){ //생성메서드 } private void setUser(User user){ - user.getWorkSellList().add(this); //구매목록에 추가 + user.getWorkSells().add(this); //구매목록에 추가 this.user=user; } diff --git a/src/main/java/net/sinzak/server/work/domain/WorkWish.java b/src/main/java/net/sinzak/server/work/domain/WorkWish.java index bacc0a69..022eceae 100644 --- a/src/main/java/net/sinzak/server/work/domain/WorkWish.java +++ b/src/main/java/net/sinzak/server/work/domain/WorkWish.java @@ -39,7 +39,7 @@ public static WorkWish createConnect(Work work, User user){ //생성메서드 } private void setUser(User user){ - user.getWorkWishList().add(this); //스크랩! + user.getWorkWishes().add(this); //스크랩! this.user=user; } diff --git a/src/main/java/net/sinzak/server/work/repository/WorkImageRepository.java b/src/main/java/net/sinzak/server/work/repository/WorkImageRepository.java index 705847d1..809017b4 100644 --- a/src/main/java/net/sinzak/server/work/repository/WorkImageRepository.java +++ b/src/main/java/net/sinzak/server/work/repository/WorkImageRepository.java @@ -7,7 +7,7 @@ import java.util.List; -public interface WorkImageRepository extends JpaRepository { +public interface WorkImageRepository extends JpaRepository { @Query("select i from WorkImage i where i.work.id = :id") - List findByWorkId(@Param("id")Long id); + List findByWorkId(@Param("id") Long id); } diff --git a/src/main/java/net/sinzak/server/work/repository/WorkQDSLRepositoryImpl.java b/src/main/java/net/sinzak/server/work/repository/WorkQDSLRepositoryImpl.java index 59527d48..fb7aebea 100644 --- a/src/main/java/net/sinzak/server/work/repository/WorkQDSLRepositoryImpl.java +++ b/src/main/java/net/sinzak/server/work/repository/WorkQDSLRepositoryImpl.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Repository; import java.util.List; + import static net.sinzak.server.work.domain.QWork.work; @@ -33,7 +34,7 @@ public Page findSearchingByEmploymentAndCategoriesAligned(boolean employme .select(work.count()) .from(work) .where(work.employment.eq(employment), eqCategories(categories), eqSearch(keyword)); - return PageableExecutionUtils.getPage(result, pageable, countQuery::fetchOne) ; + return PageableExecutionUtils.getPage(result, pageable, countQuery::fetchOne); //PageableExecutionUtils.getPage로 맨 첫 페이지 content 개수가 size 미달이거나, 마지막 page인 경우 count query 실행 X하여 최적화 } @@ -42,7 +43,7 @@ private BooleanBuilder eqCategories(List categories) { BooleanBuilder builder = new BooleanBuilder(); for (String category : categories) { - if(category != null) + if (category != null) builder.or(work.category.contains(category)); } @@ -52,10 +53,11 @@ private BooleanBuilder eqCategories(List categories) { private BooleanBuilder eqSearch(String keyword) { //complete 가 true면 where complete = false 로 가져온다. BooleanBuilder builder = new BooleanBuilder(); - if (keyword.isEmpty()){ + if (keyword.isEmpty()) { return null; } - return builder.or(work.title.contains(keyword)).or(work.content.contains(keyword)); + return builder.or(work.title.contains(keyword)) + .or(work.content.contains(keyword)); } private OrderSpecifier standardAlign(String align) { @@ -63,7 +65,7 @@ private OrderSpecifier standardAlign(String align) { return work.popularity.desc(); else if (align.equals("recent")) return work.id.desc(); - else if(align.equals("popular")) + else if (align.equals("popular")) return work.likesCnt.desc(); return work.id.desc(); diff --git a/src/main/java/net/sinzak/server/work/repository/WorkRepository.java b/src/main/java/net/sinzak/server/work/repository/WorkRepository.java index 57b4797d..1b0c39a0 100644 --- a/src/main/java/net/sinzak/server/work/repository/WorkRepository.java +++ b/src/main/java/net/sinzak/server/work/repository/WorkRepository.java @@ -1,6 +1,5 @@ package net.sinzak.server.work.repository; -import net.sinzak.server.product.domain.Product; import net.sinzak.server.work.domain.Work; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -12,7 +11,7 @@ public interface WorkRepository extends JpaRepository { - @Query("select w from Work w left join fetch w.workWishList left join fetch w.user where w.id = :id and w.isDeleted = false") + @Query("select w from Work w left join fetch w.workWishes left join fetch w.user where w.id = :id and w.isDeleted = false") Optional findByIdFetchWorkNotDeletedWishAndUser(@Param("id")Long id); /** 해당 외주 찜을 누른 유저 목록까지 불러오기 **/ @Query("select w from Work w order by w.id desc") diff --git a/src/main/java/net/sinzak/server/work/repository/WorkSuggestRepository.java b/src/main/java/net/sinzak/server/work/repository/WorkSuggestRepository.java index a8946e59..242de5c4 100644 --- a/src/main/java/net/sinzak/server/work/repository/WorkSuggestRepository.java +++ b/src/main/java/net/sinzak/server/work/repository/WorkSuggestRepository.java @@ -9,5 +9,5 @@ public interface WorkSuggestRepository extends JpaRepository { @Query("select w from WorkSuggest w where w.user.id = :userId and w.work.id = :workId and w.work.isDeleted =false") - Optional findByUserIdAndWorkId(@Param("userId")Long userId, @Param("workId")Long workId); + Optional findByUserIdAndWorkId(@Param("userId") Long userId, @Param("workId") Long workId); } diff --git a/src/main/java/net/sinzak/server/work/repository/WorkWishRepository.java b/src/main/java/net/sinzak/server/work/repository/WorkWishRepository.java index 9fec8335..c121878b 100644 --- a/src/main/java/net/sinzak/server/work/repository/WorkWishRepository.java +++ b/src/main/java/net/sinzak/server/work/repository/WorkWishRepository.java @@ -8,7 +8,6 @@ import java.util.List; public interface WorkWishRepository extends JpaRepository { - @Query("select ww from WorkWish ww left join fetch ww.work where ww.user.id = :userId and ww.work.isDeleted =false") List findByUserIdFetchWork(@Param("userId") Long userId); } diff --git a/src/main/java/net/sinzak/server/work/service/WorkService.java b/src/main/java/net/sinzak/server/work/service/WorkService.java index 03e5a7e7..888b897e 100644 --- a/src/main/java/net/sinzak/server/work/service/WorkService.java +++ b/src/main/java/net/sinzak/server/work/service/WorkService.java @@ -3,7 +3,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.sinzak.server.common.PostService; -import net.sinzak.server.common.PropertyUtil; +import net.sinzak.server.common.SinzakResponse; import net.sinzak.server.common.UserUtils; import net.sinzak.server.common.dto.ActionForm; import net.sinzak.server.common.error.PostNotFoundException; @@ -70,22 +70,22 @@ public JSONObject makePost(WorkPostDto postDto){ .employment(postDto.isEmployment()).build(); work.setUser(user); Long workId = workRepository.save(work).getId(); - return PropertyUtil.response(workId); + return SinzakResponse.success(workId); } public JSONObject saveImageInS3AndWork(List multipartFiles, Long id) { Work work = workRepository.findByIdNotDeleted(id).orElseThrow(PostNotFoundException::new); if(!userUtils.getCurrentUserId().equals(work.getUser().getId())) - return PropertyUtil.responseMessage("작성자가 아닙니다."); + return SinzakResponse.error("작성자가 아닙니다."); for (MultipartFile img : multipartFiles) { try{ uploadImageAndSaveUrl(multipartFiles, work, img); } catch (Exception e){ - return PropertyUtil.responseMessage("이미지 저장 실패"); + return SinzakResponse.error("이미지 저장 실패"); } } - return PropertyUtil.response(true); + return SinzakResponse.success(true); } private void uploadImageAndSaveUrl(List multipartFiles, Work work, MultipartFile img) { @@ -110,9 +110,9 @@ private void saveImageUrl(Work work, String url) { public JSONObject deleteImage(Long workId, String url){ // 글 생성 Work work = workRepository.findByIdNotDeleted(workId).orElseThrow(PostNotFoundException::new); if(!userUtils.getCurrentUserId().equals(work.getUser().getId())) - return PropertyUtil.responseMessage("해당 작품의 작가가 아닙니다."); + return SinzakResponse.error("해당 작품의 작가가 아닙니다."); if(work.getImages().size()==1) - return PropertyUtil.responseMessage("최소 1개 이상의 이미지를 보유해야 합니다."); + return SinzakResponse.error("최소 1개 이상의 이미지를 보유해야 합니다."); for (WorkImage image : work.getImages()) { if(image.getImageUrl().equals(url)){ @@ -122,7 +122,7 @@ public JSONObject deleteImage(Long workId, String url){ // 글 생성 } } s3Service.deleteImage(url); - return PropertyUtil.response(workId); + return SinzakResponse.success(workId); } @Transactional(rollbackFor = {Exception.class}) @@ -130,11 +130,11 @@ public JSONObject editPost(Long workId, WorkEditDto editDto){ User user = userUtils.getCurrentUser(); Work work = workRepository.findByIdNotDeleted(workId).orElseThrow(PostNotFoundException::new); if(!user.getId().equals(work.getUser().getId()) && user.getRole() != Role.ADMIN) - return PropertyUtil.responseMessage("글 작성자가 아닙니다."); + return SinzakResponse.error("글 작성자가 아닙니다."); work.editPost(editDto); workRepository.save(work); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } @Transactional(rollbackFor = {Exception.class}) @@ -142,10 +142,10 @@ public JSONObject deletePost(Long workId){ // 글 생성 User user = userUtils.getCurrentUser(); Work work = workRepository.findByIdFetchChatRooms(workId).orElseThrow(PostNotFoundException::new); if(!user.getId().equals(work.getUser().getId()) && user.getRole() != Role.ADMIN) - return PropertyUtil.responseMessage("글 작성자가 아닙니다."); + return SinzakResponse.error("글 작성자가 아닙니다."); deleteImagesInPost(work); work.setDeleted(true); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } @@ -171,14 +171,14 @@ public JSONObject showDetailForUser(Long currentUserId, Long id){ // 글 상 detailForm.setMyPost(); boolean isLike = checkIsLikes(user.getWorkLikesList(), work); - boolean isWish = checkIsWish(user, work.getWorkWishList()); + boolean isWish = checkIsWish(user, work.getWorkWishes()); boolean isFollowing = false; if(work.getUser()!=null) isFollowing =checkIsFollowing(user.getFollowings(), work); detailForm.setUserAction(isLike, isWish, isFollowing); work.addViews(); - return PropertyUtil.response(detailForm); + return SinzakResponse.success(detailForm); } private DetailWorkForm makeWorkDetailForm(Work work, List images) { @@ -213,11 +213,11 @@ public JSONObject showDetailForGuest(Long id){ // 글 상세 확인 } else{ detailForm.setUserInfo(null, "탈퇴한 회원", null, "??", false, false, "0"); - return PropertyUtil.response(detailForm); + return SinzakResponse.success(detailForm); } detailForm.setUserAction(false,false,false); work.addViews(); - return PropertyUtil.response(detailForm); + return SinzakResponse.success(detailForm); } public boolean checkIsLikes(List userLikesList, Work work) { @@ -245,7 +245,7 @@ public List getImages(List images) { public JSONObject wish(@RequestBody ActionForm form){ JSONObject obj = new JSONObject(); User user = userRepository.findByIdFetchWorkWishList(userUtils.getCurrentUserId()).orElseThrow(UserNotFoundException::new); - List wishList = user.getWorkWishList(); + List wishList = user.getWorkWishes(); boolean isWish = false; boolean success = false; Work work = workRepository.findByIdNotDeleted(form.getId()).orElseThrow(PostNotFoundException::new); @@ -313,27 +313,27 @@ public JSONObject sell(@RequestBody SellDto dto){ User user = userRepository.findByIdFetchProductSellList(userUtils.getCurrentUserId()).orElseThrow(UserNotFoundException::new); Work work = workRepository.findByIdNotDeleted(dto.getPostId()).orElseThrow(PostNotFoundException::new); if(work.isComplete()) - return PropertyUtil.responseMessage("이미 판매완료된 작품입니다."); + return SinzakResponse.error("이미 판매완료된 작품입니다."); WorkSell connect = WorkSell.createConnect(work, user); workSellRepository.save(connect); work.setComplete(true); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } @Transactional public JSONObject suggest(@RequestBody SuggestDto dto){ User user = userUtils.getCurrentUser(); if(suggestRepository.findByUserIdAndWorkId(user.getId(),dto.getId()).isPresent()) - return PropertyUtil.responseMessage("이미 제안을 하신 작품입니다."); + return SinzakResponse.error("이미 제안을 하신 작품입니다."); Work work = workRepository.findByIdNotDeleted(dto.getId()).orElseThrow(); WorkSuggest connect = WorkSuggest.createConnect(work, user); work.setTopPrice(dto.getPrice()); suggestRepository.save(connect); - return PropertyUtil.response(true); + return SinzakResponse.success(true); } @Transactional - public PageImpl workListForUser(String keyword, List categories, String align, boolean employment, Pageable pageable){ + public PageImpl worksForUser(String keyword, List categories, String align, boolean employment, Pageable pageable){ User user = userRepository.findByIdFetchLikesList(userUtils.getCurrentUserId()).orElseThrow(UserNotFoundException::new); if(!keyword.isEmpty()) saveSearchHistory(keyword, user); @@ -347,7 +347,7 @@ public void saveSearchHistory(String keyword, User user) { } @Transactional(readOnly = true) - public PageImpl workListForGuest(String keyword, List categories, String align, boolean employment, Pageable pageable){ + public PageImpl worksForGuest(String keyword, List categories, String align, boolean employment, Pageable pageable){ Page workList = QDSLRepository.findSearchingByEmploymentAndCategoriesAligned(employment, keyword, categories, align, pageable); List showList = makeShowForms(workList); return new PageImpl<>(showList, pageable, workList.getTotalElements());