Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feat] post 상세보기 api #27

Merged
merged 7 commits into from
Aug 26, 2024
Merged

[feat] post 상세보기 api #27

merged 7 commits into from
Aug 26, 2024

Conversation

ssunnykku
Copy link
Contributor

Issue

PR 타입(하나 이상의 PR 타입을 선택해주세요)

  • 기능 추가
  • 기능 삭제
  • 버그 수정
  • 의존성, 환경 변수, 빌드 관련 코드 업데이트

반영 브랜치

feat/content_detail -> dev

변경 사항

  • post 상세보기 api 작성

테스트 결과

Request

HTTP : GET
URL: /api/posts/{postId}

Response : 성공시

{
   "postId": "test",
   "type": "TWITTER",
   "title": "제목",
   "post": "내용",
   "hashtags": null,
   "likeCount": 10,
   "viewCount": 6,
   "shareCount": 3,
   "updatedAt": null,
   "createdAt": null,
   "userId": "13c23bfb-987c-4994-89ec-4a05d094f26c",
   "account": "sun",
   "email": "[email protected]"
}

Response : 실패시

{
   "statusCode": 404,
   "message": "존재하지 않는 엔티티입니다."
}

@ssunnykku ssunnykku linked an issue Aug 26, 2024 that may be closed by this pull request
4 tasks
.gitignore Outdated Show resolved Hide resolved
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class DetailResponse {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

record 클래스에 대해 찾아보시고 적용하시면 더 깔끔할 것 같습니당
그리고 DatailResponse보단 PostDetailResponse가 ㅇ어떤 엔티티에 대한 Response인지 더 명확할 것 같습니다!


}

}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EOL이 안지켜졌네요 ~! 64,66라인 불필요한 공백도 제거해주세요


@SpringBootTest
@ActiveProfiles("test")
class PostRepositoryTest {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

repository 테스트랑 service 테스트랑 다른게 없는 것 같아요 service 테스트만 있어도 될 것 같습니다~!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

삭제해야 한다고 생각하시나요?? 테스트는 촘촘하면 더 좋지 않을까요~?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

옴.. 테스트는 촘촘하면 좋지만 repository 테스트는 일반적으로 작성하지 않아서 드린 말씀이었어요 !!
service 테스트만으로도 충분한 것 같아서 드린 말씀이었습니다 ㅎㅎ

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 필수적이진 않지만 repository도 테스트를 작성하는게 좋다고 생각합니다. 그런데 이렇게 단순한 로직의 경우는 필요 없을 수도 있겠네요!

public class PostNotFoundException extends RuntimeException {
private final ErrorCode errorCode;

}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Post라고 한정 짓는거 보단 NotFoundException으로 클래스명을 변경하고 전역에서 사용하는게 더 좋을 것 같습니당
여기도 EOL이 안지켜졌어요~!

import lombok.Getter;
import lombok.NoArgsConstructor;

@NoArgsConstructor
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

access레벨 설정해주세용

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이부분도 공백 제거만 하겠습니다.

@Entity
@Table(name = "tokens")
public class Token {

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

불필요한 공백 제거해주세용


@NoArgsConstructor
@AllArgsConstructor
@Builder
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Builder와 AllArgsConstructor 둘다 사용하시나요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 Builder를 사용했습니다. 다른 분들과 사용하는 공통 코드라 남겨두겠습니다.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사용하실 분들이 추가하시면 되니까 사용하지 않는 AllArgs는 제거하셔도 괜찮을 것 같아요 ~!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AllArgsConstructor 삭제하면 에러가 납니다. Builder의 동작 방식 때문인 것 같은데 좀 더 찾아봐야겠네요

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

헉 그러겠네용 그럼 NoArgs에 access레벨만 설정하면 될 것 같습니다 !

@Service
@RequiredArgsConstructor
public class UserService {

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

불필요한 공백 제거해주세용

@Autowired
private PostRepository postRepository;


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

21,30 불필요한 공백 제거해주세용

@jw427
Copy link
Contributor

jw427 commented Aug 26, 2024

수고하셨습니다!

- 공백 제거
- dto record로 변경
- DetailResponse 반환 코드 PostService -> PostController 수정 작성
- .gitignore 수정
- PostNotFoundException -> NotFoundException
@ssunnykku ssunnykku changed the base branch from main to dev August 26, 2024 06:46
Copy link
Contributor

@rhaehf rhaehf left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!

Copy link
Contributor

@jeongeungyeong jeongeungyeong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!

@ssunnykku ssunnykku merged commit 5e16349 into dev Aug 26, 2024
@ssunnykku ssunnykku deleted the feat/content_detail branch August 26, 2024 08:00
jeongeungyeong added a commit that referenced this pull request Aug 26, 2024
* feat : 사용자 로그인 기능
- accessToken을 이용한 로그인 기능 먼저 구현
- UserDetail과 UserDetailService 생성
- UserRepository 작성
- 토큰 생성, 유효성 검증, 토큰에서 필요한 정보 가져오는 TokenProvider 클래스 생성
- 발급받은 토큰을 검증하고 다음 필터로 전달하는 TokenAuthenticationFilter 클래스 생성
- Spring Security 설정을 위한 SecurityConfig 작성
- UserController 작성

* refactor : 파일명과 변수명에서 게시물을 뜻하는 content를 post로 변경

* refactor : Long에서 String으로 자료형 변경

* feat : 로그인시 리프레시토큰 저장 및 리프레시토큰과 액세스토큰 재발급
- 기존의 로그인시 액세스토큰만 발급되던 코드에 리프레시토큰도 발급되어 저장되는 로직 UserService에 추가
- 로그인해도 토큰이 바뀌지 않는 문제 TokenProvider에서 수정
-- claim에 발급 시간과 만료 시간 추가
- TokenService에서 리프레시 토큰을 검증해 액세스토큰과 리프레시토큰 재발급하는 로직 추가

* feat : users SecurityConfig 비밀번호 암호화 기능 추가

* refactor : Post 엔티티 수정

- Content -> Post로 클래스 네임 변경
- PK : Long -> String 으로 타입 변경
- ContentController -> PostController 클래스 네임 변경

* refactor : ContentRepository 삭제

* build : QueryDsl dependency 추가

- Q클래스 폴더 ignore 처리

* chore : QueryDslConfig 클래스 생성

* feat : String으로 받아온 파라미터를 LocalDateTime으로 바꿔주는 Converter 설정

* feat : 게시물 통계 기능 구현

* refactor : ErrorResponse 클래스를 record 클래스로 변경

* feat : 400에러를 처리하기 위한 Exception 생성

- StatParam : 사용하지 않는 Exception 제거
- Handler : 잘못된 import 변경

* feat : api 테스트를 위한 security 임의 설정

* refactor : 리뷰사항 반영

post 테이블 명 변경 post -> posts

* refactor : 리뷰사항 반영

post 테이블의 id 타입을 String으로 변경하면서 GeneratedValue 어노테이션 제거

* feat : api 테스트를 위한 security 임시 설정

* feat : Code 클래스 @builder 추가

* feat : 사용자 회원가입 기능 구현

* refactor : 가독성 위한 코드 수정 및 에러 핸들링 추가
- TokenProvider의 makeToken 메서드 가독성을 위한 수정
- 회원이 존재하지 않는 경우의 에러 핸들링 추가

* refactor : 토큰 만료시간 수정

* refactor : 필드 공백 제거

* refactor : 코드 재발급 메서드 명칭 수정
- TokenController과 TokenService의 재발급 메서드 명칭 getToken으로 수정
- 직관성을 위해 URL도 수정

* refactor : 로그인 메서드 명칭 ㅅ정

* refactor : TokenRequestDto record 클래스로 수정

* fix : String 타입은 IDENTITY 적용할 수 없어서 제거함

* refactor : JPA 변경 감지 기능에 따른 save() 메서드 삭제

* refactor : Service에 트랜잭션 설정 추가

* feat : 게시글 좋아요 기능 구현

* refactor :TokenProvider에 상수 변경

* refactor : TokenRepository 쿼리문 삭제

* refactor :  UserCreateDto → UserInfoDto로 이름 변경

* refactor : UserCreateDto → UserInfoDto로 이름 변경

* feat : 회원등급 속성 추가

* feat : UserInfoDto 회원등급 속성 추가

* feat : 사용자 가입승인 기능 구현

* style : 패키지명 변경

* refactor : yml 파일 추가

* fix : 동시성 문제로 인한 에러 해결
- @query 대신 addLikeCount()를 사용하여 JPA 변경 감지를 통해 업데이트 반영하여 해결

* refactor : 게시물 좋아요 기능 로직 파일 변경 PostLike~ → Post~

* feat : PostIdResponse를 사용하여 응답 형식 구조 개선

* refactor : dev yml파일 수정

* refactor :  필드 공백 제거

* refactor : addLikeCount()의 파라미터 제거로 간결하게 개선

* no message

* refactor : SignUpRequset, SignUpResponse, UserCreateDto record 클래스로 변경

* refactor : access level 설정

* refactor : 통상적으로 자주 사용되는 비밀번호 검사 코드 수정

* feat : 인증코드 발급 방식을 uuid로 변경

* refactor : record 클래스 변경으로 회원가입 api 코드 수정

* refactor : 필드 공백 제거

* refactor : 필드 공백 제거

* refactor : PostIdResponse를 에러 반환에 적용하여 응답 형식 개선

* refactor : 통상적으로 사용되는 비밀번호 검증 삭제

* refactor : 로그인시 비밀번호 암호화 적용 추가

* [feat] post 상세보기 api (#27)

* feat: post 상세보기 api

* refactor: 테스트용 security 설정

* refactor: review 반영

- 공백 제거
- dto record로 변경
- DetailResponse 반환 코드 PostService -> PostController 수정 작성
- .gitignore 수정
- PostNotFoundException -> NotFoundException

* refactor: repository test code 삭제

* refactor: Entity, DTO Colum post -> content 변경

* fix: conflict 해결

* feat : 에러를 처리하기 위한 Exception 생성

* refactor : VerifyRequest, VerifyResponse, UserInfoDto radio 클래스로 변경

* refactor : Exception 코드 수정

* feat : 사용자 인증코드 조회 쿼리 추가

* feat : 인증코드 재발급 기능 추가

* Changes

* feat : 회원등급 속성 추가

* Changes

* Changes

* refactor : VerifyRequest, VerifyResponse, UserInfoDto radio 클래스로 변경

* Changes

* feat : 사용자 인증코드 조회 쿼리 추가

* Changes

---------

Co-authored-by: LeeJiWon <[email protected]>
Co-authored-by: Jinhui <[email protected]>
Co-authored-by: pie <[email protected]>
Co-authored-by: pie <[email protected]>
Co-authored-by: ssunnykku <[email protected]>
Co-authored-by: jiwon <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[feat] 게시물 상세(API)
5 participants