[CowAPI] 8-1. Notice Code review

준돌·2022년 5월 31일
0

오늘의 Cow

목록 보기
12/45
post-thumbnail

1. [CowAPI] Notice 코드 리뷰


  • 게시글 하나에 작성하기에는 양이 많아지기 때문에 코드 리뷰를 분리했습니다.
  • 자세한 코드는 Github에서 확인하실 수 있습니다.

😎 2. StringBoot Security


  • 현재는 Table의 admin (true/false)를 통해서 권한을 확인합니다.
  • Springboot Security를 통한 권한 접근 제어를 구현해볼 예정입니다.

3. Code review


요구사항 분석

  • 일반유저는 공지 생성, 수정, 삭제가 불가능합니다. (O)

코드분석

😎 어노테이션에 대한 자세한 설명은 [CowAPI] User 코드 리뷰 에서 확인할 수 있습니다.
😎 Notice는 Springboot security를 공부하는 것이 목적인 기능입니다. 그리고 이전의 블로그에서 설명했기 때문에 자세한 설명은 넘어가겠습니다.

Controller

NoticeController.java

@RestController
@RequiredArgsConstructor
public class QnAController {
    private final QnAService qnAService;
    
    @PostMapping("/notices/notice")
    public NoticeDto createNotice(@RequestHeader("Authorization") String userToken, @RequestBody NoticeDto noticeDto) {
        return noticeService.createNotice(userToken, noticeDto);
    }
    
	@GetMapping("/notices/notice")
    public NoticeDto readNotice(@RequestHeader("Authorization") String userToken, @RequestParam("noticeId") Long noticeId) {
        return noticeService.readNotice(userToken, noticeId);
    }
    
	@PutMapping("/notices/notice")
    public NoticeDto updateNotice(@RequestHeader("Authorization") String userToken, @RequestBody NoticeDto noticeDto) {
        return noticeService.updateNotice(userToken, noticeDto);
    }
    
	@DeleteMapping("/notices/notice")
    public NoticeDto deleteNotice(@RequestHeader("Authorization") String userToken, @RequestParam("noticeId") Long noticeId) {
        return noticeService.deleteNotice(userToken, noticeId, "API");
    }
}

😎 API 문서 : Swagger
😎 공지 생성, 조회, 수정, 삭제는 Jwt 토큰을 받습니다.

Service

NoticeService.java

@Service
@RequiredArgsConstructor
@Transactional
public class NoticeService {
    private final NoticeRepository noticeRepository;
    private final UserRepository userRepository;
    
    public NoticeDto createNotice(String userToken, NoticeDto noticeDto) { ... }
    public NoticeDto readNotice(String userToken, Long noticeId) {... }
    public NoticeDto updateNotice(String userToken, NoticeDto noticeDto) {... }
    public NoticeDto deleteNotice(String userToken, Long noticeId, String updater) {... }
}

😎 JWT 토큰 인증 및 인가 코드 수정하고 있습니다.
😎 각각의 기능에 따른 필요한 로직을 수행합니다.


Domain

Entity

Notice.java

@Entity
@DynamicUpdate
public class Notice {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    ...
    
    @ManyToOne
    @JoinColumn(name = "User_email")
    private User user;
}
    

Repository

NoticeRepository.java

@Repository
public interface NoticeRepository extends JpaRepository<Notice, Long> {
	default void updateNotice(Notice notice, NoticeDto noticeDto) { ... }
	default void deleteNotice(Notice notice, String updater) { ... }
}

profile
눈 내리는 겨울이 좋아!

0개의 댓글