Skip to content

Commit

Permalink
Merge branch 'develop' into feature/#14
Browse files Browse the repository at this point in the history
# Conflicts:
#	src/main/java/com/semtleapp/semtleapp/semtlenotice/entity/SemtleNotice.java
#	src/main/java/com/semtleapp/semtleapp/semtlepost/repository/SemtlePostRepository.java
#	src/main/java/com/semtleapp/semtleapp/semtlestudy/entity/SemtleStudyPost.java
#	src/main/java/com/semtleapp/semtleapp/semtleuser/entity/SemtleUser.java
  • Loading branch information
tokyj515 committed Aug 7, 2023
2 parents 3e83cd2 + 32158ac commit 6f78b7b
Show file tree
Hide file tree
Showing 27 changed files with 473 additions and 158 deletions.
Original file line number Diff line number Diff line change
@@ -1,22 +1,15 @@
package com.semtleapp.semtleapp.file.controller;

import com.semtleapp.semtleapp.file.entity.PhotoType;
import com.semtleapp.semtleapp.file.service.FileService;
import com.semtleapp.semtleapp.file.service.FileServiceImpl;
import com.semtleapp.semtleapp.file.service.FileUserService;
import com.semtleapp.semtleapp.file.service.FileUserServiceImpl;
import com.semtleapp.semtleapp.global.entity.CustomResponse;
import com.semtleapp.semtleapp.semtlebook.repository.SemtleBookRepository;
import com.semtleapp.semtleapp.semtlepost.dto.SemtlePostDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.security.Principal;
import java.util.List;
import java.util.Map;

@RestController
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
public class BaseTimeEntity {

@CreatedDate
@Column(name = "created_date")
@Column(name = "created_date", updatable = false)
private LocalDateTime createdDate;

@LastModifiedDate
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ public enum ErrorCode {
DUPLICATE_EMAIL(400, "중복된 이메일입니다.", HttpStatus.BAD_REQUEST),
REGISTERED_EMAIL(400, "등록된 회원입니다.", HttpStatus.BAD_REQUEST),

NOT_EXIST_POST(400, "존재하지 않는 게시글입니다", HttpStatus.BAD_REQUEST),

;

private int code;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import com.semtleapp.semtleapp.semtlebook.dto.SemtleBookDto;
import com.semtleapp.semtleapp.semtlebook.service.SemtleBookService;
import com.semtleapp.semtleapp.semtlebook.service.SemtleBookServiceImpl;
import com.semtleapp.semtleapp.semtlepost.dto.SemtlePostDto;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.semtleapp.semtleapp.semtlenotice.controller;

import com.semtleapp.semtleapp.global.entity.ApiResponse;
import com.semtleapp.semtleapp.global.exception.CustomException;
import com.semtleapp.semtleapp.global.jwt.JwtService;
import com.semtleapp.semtleapp.semtlenotice.dto.SemtleNoticeReq;
import com.semtleapp.semtleapp.semtlenotice.dto.SemtleNoticeRes;
import com.semtleapp.semtleapp.semtlenotice.service.SemtleNoticeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.security.Principal;
import java.util.List;


@RequiredArgsConstructor
@RestController
@Api(tags={"03.Notice❤"})
@RequestMapping("/notice")
public class SemtleNoticeController {

private final SemtleNoticeService semtleNoticeService;

@ApiOperation(value = "공지사항 글작성", notes = "공지사항 글작성")
@PreAuthorize("hasAnyRole('ADMIN','ASEM','DSEM')")
@PostMapping
public ApiResponse<SemtleNoticeRes.PostNoticeRes> registerNoticePost(Principal principal, @RequestPart(value = "file", required = false) List<MultipartFile> files, @RequestPart(value = "postNoticeReq") SemtleNoticeReq.PostNoticeReq postNoticeReq) throws Exception {
try{
return new ApiResponse<>(semtleNoticeService.registerNoticePost(principal.getName(), postNoticeReq, files));
} catch(Exception e){
throw new Exception(e.getMessage());
}
}

@ApiOperation(value = "공지사항 글수정", notes = "공지사항 글수정")
@PreAuthorize("hasAnyRole('ADMIN','ASEM','DSEM')")
@PatchMapping
public ApiResponse<SemtleNoticeRes.PostNoticeRes> modifyNoticePost(Principal principal, @RequestPart(value = "file", required = false) List<MultipartFile> files, @RequestPart(value = "patchNoticeReq") SemtleNoticeReq.PatchNoticeReq patchNoticeReq) throws Exception {
try{
return new ApiResponse<>(semtleNoticeService.modifyNoticePost(principal.getName(), patchNoticeReq, files));
} catch(Exception e){
throw new Exception(e.getMessage());
}
}

@ApiOperation(value = "공지사항 글삭제", notes = "공지사항 글삭제")
@PreAuthorize("hasAnyRole('ADMIN','ASEM','DSEM')")
@DeleteMapping("/{postId}")
public ApiResponse<SemtleNoticeRes.PostNoticeRes> deleteNoticePost(Principal principal, @PathVariable(name = "postId") Long postId) throws Exception {
try{
return new ApiResponse<>(semtleNoticeService.deleteNoticePost(principal.getName(), postId));
} catch(Exception e){
throw new Exception(e.getMessage());
}
}



}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.semtleapp.semtleapp.semtlenotice.convertor;

import com.semtleapp.semtleapp.semtlenotice.dto.SemtleNoticeReq;
import com.semtleapp.semtleapp.semtlenotice.entity.SemtleNotice;
import com.semtleapp.semtleapp.semtlestudy.dto.RegisterStudyPostReqDto;
import com.semtleapp.semtleapp.semtlestudy.dto.RegisterStudyRoomReqDto;
import com.semtleapp.semtleapp.semtlestudy.entity.SemtleStudyBelong;
import com.semtleapp.semtleapp.semtlestudy.entity.SemtleStudyPost;
import com.semtleapp.semtleapp.semtlestudy.entity.SemtleStudyRoom;
import com.semtleapp.semtleapp.semtleuser.entity.SemtleUser;

public class SemtleNoticeConvertor {

public static SemtleNotice registerNoticePost(SemtleUser semtleUser, SemtleNoticeReq.PostNoticeReq postNoticeReq) {
return SemtleNotice.builder()
.semtleUser(semtleUser)
.title(postNoticeReq.getTitle())
.content(postNoticeReq.getContent())
.build();
}

public static SemtleNotice modifyNoticePost(SemtleUser semtleUser, SemtleNoticeReq.PatchNoticeReq patchNoticeReq) {
return SemtleNotice.builder()
.postId(patchNoticeReq.getPostId())
.semtleUser(semtleUser)
.title(patchNoticeReq.getTitle())
.content(patchNoticeReq.getContent())
.build();
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.semtleapp.semtleapp.semtlenotice.dto;

import com.semtleapp.semtleapp.file.entity.PhotoDto;
import lombok.*;

import java.util.List;

public class SemtleNoticeReq {

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public static class PostNoticeReq {
private String title;
private String content;
private List<PhotoDto> photoDtoList;
}

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public static class PatchNoticeReq {
private Long postId;
private String title;
private String content;
private List<PhotoDto> photoDtoList;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.semtleapp.semtleapp.semtlenotice.dto;

import lombok.*;

public class SemtleNoticeRes {

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public static class PostNoticeRes {
private String message;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.semtleapp.semtleapp.global.entity.BaseTimeEntity;
import com.semtleapp.semtleapp.semtlepost.dto.SemtlePostDto;
import com.semtleapp.semtleapp.semtlestudy.entity.SemtleStudyRoom;
import com.semtleapp.semtleapp.semtleuser.entity.SemtleUser;
import lombok.*;
import org.hibernate.annotations.DynamicInsert;
Expand All @@ -18,8 +18,8 @@
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "semtle_post")
public class SemtlePost extends BaseTimeEntity {
@Table(name = "semtle_notice")
public class SemtleNotice extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -31,6 +31,7 @@ public class SemtlePost extends BaseTimeEntity {
@JsonBackReference
private SemtleUser semtleUser;


@Column(name = "title")
private String title;

Expand All @@ -45,6 +46,7 @@ public class SemtlePost extends BaseTimeEntity {
// this.semtleUser = semtleUser;
// }


public SemtlePostDto toDto() {
return SemtlePostDto.builder()
.postId(postId)
Expand All @@ -60,4 +62,4 @@ public void setSemtleUser(SemtleUser semtleUser) {
}


}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.semtleapp.semtleapp.semtlenotice.repository;

import com.semtleapp.semtleapp.semtlenotice.entity.SemtleNotice;
import org.springframework.data.jpa.repository.JpaRepository;

public interface SemtleNoticeRepository extends JpaRepository<SemtleNotice, Long> {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.semtleapp.semtleapp.semtlenotice.service;

import com.semtleapp.semtleapp.semtlenotice.dto.SemtleNoticeReq;
import com.semtleapp.semtleapp.semtlenotice.dto.SemtleNoticeRes;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface SemtleNoticeService {
SemtleNoticeRes.PostNoticeRes registerNoticePost(String email, SemtleNoticeReq.PostNoticeReq postNoticeReq, List<MultipartFile> files);
SemtleNoticeRes.PostNoticeRes modifyNoticePost(String email, SemtleNoticeReq.PatchNoticeReq patchNoticeReq, List<MultipartFile> files);
SemtleNoticeRes.PostNoticeRes deleteNoticePost(String email, Long postId);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package com.semtleapp.semtleapp.semtlenotice.service;

import com.semtleapp.semtleapp.file.entity.PhotoType;
import com.semtleapp.semtleapp.file.service.FileUserService;
import com.semtleapp.semtleapp.global.exception.CustomException;
import com.semtleapp.semtleapp.global.exception.ErrorCode;
import com.semtleapp.semtleapp.semtlenotice.convertor.SemtleNoticeConvertor;
import com.semtleapp.semtleapp.semtlenotice.dto.SemtleNoticeReq;
import com.semtleapp.semtleapp.semtlenotice.dto.SemtleNoticeRes;
import com.semtleapp.semtleapp.semtlenotice.entity.SemtleNotice;
import com.semtleapp.semtleapp.semtlenotice.repository.SemtleNoticeRepository;
import com.semtleapp.semtleapp.semtleuser.entity.SemtleUser;
import com.semtleapp.semtleapp.semtleuser.repository.SemtleUserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

@Service
@Transactional
@RequiredArgsConstructor
public class SemtleNoticeServiceImpl implements SemtleNoticeService {

private final SemtleNoticeRepository semtleNoticeRepository;
private final FileUserService fileUserService;
private final SemtleUserRepository semtleUserRepository;

@Override
public SemtleNoticeRes.PostNoticeRes registerNoticePost(String email, SemtleNoticeReq.PostNoticeReq postNoticeReq, List<MultipartFile> files) {
SemtleUser semtleUser = semtleUserRepository.findByEmail(email).get();
SemtleNotice semtleNotice = SemtleNoticeConvertor.registerNoticePost(semtleUser, postNoticeReq);
Long postId = semtleNoticeRepository.save(semtleNotice).getPostId();
uploadPhotos(files, postId);
return SemtleNoticeRes.PostNoticeRes.builder().message("공지글이 등록되었습니다").build();
}

@Override
public SemtleNoticeRes.PostNoticeRes modifyNoticePost(String email, SemtleNoticeReq.PatchNoticeReq patchNoticeReq, List<MultipartFile> files) {
SemtleUser semtleUser = semtleUserRepository.findByEmail(email).get();
SemtleNotice semtleNotice = semtleNoticeRepository.findById(patchNoticeReq.getPostId()).get();
if(semtleUser.getUserId() == semtleNotice.getSemtleUser().getUserId()){
SemtleNotice saveSemtleNotice = semtleNoticeRepository.save(SemtleNoticeConvertor.modifyNoticePost(semtleUser, patchNoticeReq));
fileUserService.deleteFile(PhotoType.NOTICE, saveSemtleNotice.getPostId());
uploadPhotos(files, saveSemtleNotice.getPostId());
} else {
throw new CustomException(ErrorCode.FORBIDDEN);
}
return SemtleNoticeRes.PostNoticeRes.builder().message("공지글이 수정되었습니다").build();
}

@Override
public SemtleNoticeRes.PostNoticeRes deleteNoticePost(String email, Long postId) {
SemtleUser semtleUser = semtleUserRepository.findByEmail(email).get();
SemtleNotice semtleNotice = semtleNoticeRepository.findById(postId).get();
if(semtleUser.getUserId() == semtleNotice.getSemtleUser().getUserId()){
semtleNoticeRepository.deleteById(postId);
fileUserService.deleteFile(PhotoType.NOTICE, postId);
} else {
throw new CustomException(ErrorCode.FORBIDDEN);
}
return SemtleNoticeRes.PostNoticeRes.builder().message("공지글이 삭제되었습니다").build();
}


private void uploadPhotos(List<MultipartFile> files, Long postId) {
if(files != null) {
try {
fileUserService.saveFile(files, PhotoType.NOTICE, postId);
} catch (IOException e) {
e.printStackTrace();
}
}
}

}

This file was deleted.

Loading

0 comments on commit 6f78b7b

Please sign in to comment.