[KT AIVLE] 빅프로젝트(12)

onlyJoon·2023년 6월 26일
0

KT AIVLE

목록 보기
28/31
post-thumbnail

작성일: 2023.06.26(월)

KT AIVLE AI 개발자 트랙 3기 과정의 마지막인 빅프로젝트를 진행하고 있습니다.


Daily Scrum

내 역할, 협업 내용, 나머지는 팀원 담당

What did you do yesterday?

  • 게시글 작성, 수정, 조회, 삭제 API 구현
  • 로그인, 회원가입 API 구현
  • 보안 사항 구현

What will you do today?

  • 게시글 조회 시 댓글 정보 가져오기
  • 댓글 작성, 수정, 삭제 API
  • 게시판 페이징 API
  • 첨부파일 관련 API
  • 검색 필터 API
  • 회원 정보 수정 API
  • 비밀번호 초기화 API

Are there any impediments in your way?

  • 게시판 파일 업로드 기능 구현

What I did today

노션 정리

전체 - 스프린트

5주차 스프린트

게시글 API

  • 게시글 등록, 수정, 조회, 삭제가 모두 가능하게 구현함
  • 게시글 조회 시 댓글 정보도 가져오도록 설정함
@RestController
@RequiredArgsConstructor
@RequestMapping("/posts")
public class PostController {

    private final PostService postService;

    /**
     * 게시글 등록
     */
    @PostMapping("/new")
    @ResponseStatus(HttpStatus.CREATED)
    public void register(@Valid @RequestBody PostSaveDto postSaveDto){
        Post post = Post.builder()
                .title(postSaveDto.getTitle())
                .content(postSaveDto.getContent())
                .build();
        postService.register(post);
    }

    /**
     * 게시글 수정
     */
    @ResponseStatus(HttpStatus.OK)
    @PutMapping("/edit/{postId}")
    public void update(@PathVariable("postId") Long postId,
                       @RequestBody PostUpdateDto postUpdateDto){

        postService.update(postId, postUpdateDto);
    }

    /**
     * 게시글 조회
     */
    @GetMapping("/post/{postId}")
    public ResponseEntity getInfo(@PathVariable("postId") Long postId){
        return ResponseEntity.ok(postService.getPostInfo(postId));
    }

    /**
     * 게시글 삭제
     */
    @ResponseStatus(HttpStatus.OK)
    @DeleteMapping("/post/{postId}")
    @Transactional
    public void delete(@PathVariable("postId") Long postId){
        postService.delete(postId);
    }
}

댓글 API

  • 댓글 등록, 수정, 삭제가 가능하도록 구현함
  • 댓글은 삭제가 되면 사라지지 않고 '삭제된 댓글입니다'로 표시
  • 게시글이 삭제될 경우, 게시글의 댓글도 모두 삭제됨
@RestController
@RequiredArgsConstructor
@RequestMapping("/comments")
public class CommentController {


    private final CommentService commentService;

    /**
     * 댓글 등록
     */
    @PostMapping("/{postId}")
    @ResponseStatus(HttpStatus.CREATED)
    public void commentSave(@PathVariable("postId") Long postId,
                            @RequestBody CommentSaveDto commentSaveDto){
        Comment comment = Comment.builder()
                .content(commentSaveDto.getContent())
                .build();

        commentService.save(postId, comment);
    }


    /**
     * 댓글 수정
     */
    @PutMapping("/{commentId}")
    public void update(@PathVariable("commentId") Long commentId,
                       @RequestBody CommentUpdateDto commentUpdateDto){

        commentService.update(commentId, commentUpdateDto);
    }


    /**
     * 댓글 삭제
     */
    @DeleteMapping("/{commentId}")
    public void delete(@PathVariable("commentId") Long commentId){
        commentService.remove(commentId);
    }
}

회원가입, 로그인 API

  • 회원가입 시, 비밀번호가 암호화되어 저장됨
  • 로그인 시, access token과 refresh token이 발급되어 이후에 사용됨
  • 회원정보 수정, 비밀번호 초기화, 회원 탈퇴 등을 더 구현할 예정
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/users")
public class UserController {
    private final UserService userService;
    private final PasswordEncoder passwordEncoder;

    /**
     * 회원가입
     */
    @PostMapping("/signup")
    @ResponseStatus(HttpStatus.CREATED)
    public void singUp(@RequestBody UserSignUpRequestDto userSignUpRequestDto) {
        String encodedPassword = passwordEncoder.encode(userSignUpRequestDto.getPassword());
        User user = User.builder()
                .name(userSignUpRequestDto.getName())
                .nickname(userSignUpRequestDto.getNickname())
                .password(encodedPassword)
                .serialNumber(userSignUpRequestDto.getSerialNumber())
                .phoneNumber(userSignUpRequestDto.getPhoneNumber())
                .email(userSignUpRequestDto.getEmail())
                .build();
        user.getRoles().add("USER");
        userService.join(user);

    }

    /**
     * 로그인
     */
    @PostMapping("/login")
    public TokenInfo login(@RequestBody UserLoginRequestDto userLoginRequestDto) {
        TokenInfo tokenInfo = userService.login(userLoginRequestDto.getEmail(), userLoginRequestDto.getPassword());

        return tokenInfo;
    }
}

기타

  • AWS와 연동하여 배포할 수 있는 상태
  • 기존 h2 DB에서 AWS의 RDS(MySQL)에 연결함
  • AWS의 S3를 사용하여 '첨부파일 업로드 및 삭제'기능을 구현 중

마치며

주말동안 진행된 사항들을 공유하고, 이번 스프린트(5주차)에 할 일들을 논의하는 시간을 가졌다.
이번주 목요일이 마지막 코칭 시간이므로 사실상 이번주에 구현을 마친다는 마음가짐으로 해야하지만, 계획대로 해나가고 있기 때문에 큰 어려움 없이 완성할 수 있을 것으로 생각한다.
오늘 가장 어려웠던 것은 git 정리... BE에서 나뉘어진 브랜치들을 통합하는 과정에서 시간이 오래걸렸다.
git은 쓸수록 쉬워지는 듯 하면서도 물음표가 더 늘어나는 느낌이다. 다행히 별 오류나 충돌없이 마쳤고, 이제 API 구현도 막바지이다. API 구현이 마무리되면 'API 문서'까지 만들어서 팀원에게 공유할 예정이다.

profile
A smooth sea never made a skilled sailor

0개의 댓글