Skip to content

Commit 2ffc9b6

Browse files
authored
Merge branch 'develop' into feat/#46-getMember-ys
2 parents e0e3289 + 1a5a11d commit 2ffc9b6

27 files changed

Lines changed: 431 additions & 30 deletions

src/main/java/com/example/FixLog/config/JwtAuthenticationFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ protected void doFilterInternal(HttpServletRequest request,
3737
if (token != null && jwtUtil.isTokenValid(token)) {
3838
String email = jwtUtil.getEmailFromToken(token);
3939
Member member = memberRepository.findByEmail(email)
40-
.orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND));
40+
.orElseThrow(() -> new CustomException(ErrorCode.USER_NICKNAME_NOT_FOUND));
4141

4242
Authentication auth = new UsernamePasswordAuthenticationToken(member, null, member.getAuthorities());
4343
SecurityContextHolder.getContext().setAuthentication(auth);

src/main/java/com/example/FixLog/config/SecurityConfig.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
2727
http
2828
.csrf(csrf -> csrf.disable())
2929
.authorizeHttpRequests(auth -> auth
30-
.requestMatchers(HttpMethod.POST, "/api/members/signup").permitAll()
31-
.requestMatchers(HttpMethod.POST, "/api/auth/login").permitAll()
32-
.requestMatchers(HttpMethod.GET, "/api/members/check-email").permitAll()
33-
.requestMatchers(HttpMethod.GET, "/api/members/check-nickname").permitAll()
30+
.requestMatchers(HttpMethod.POST, "/members/signup").permitAll()
31+
.requestMatchers(HttpMethod.POST, "/auth/login").permitAll()
32+
.requestMatchers(HttpMethod.GET, "/members/check-email").permitAll()
33+
.requestMatchers(HttpMethod.GET, "/members/check-nickname").permitAll()
3434
.requestMatchers(HttpMethod.GET, "/h2-console/**").permitAll()
3535
.anyRequest().authenticated()
3636
)

src/main/java/com/example/FixLog/controller/AuthController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.springframework.web.bind.annotation.*;
1010

1111
@RestController
12-
@RequestMapping("/api/auth")
12+
@RequestMapping("/auth")
1313
@RequiredArgsConstructor
1414
public class AuthController {
1515

src/main/java/com/example/FixLog/controller/FollowController.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import com.example.FixLog.service.FollowService;
1010
import lombok.RequiredArgsConstructor;
1111
import org.springframework.http.ResponseEntity;
12+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
13+
import org.springframework.security.core.userdetails.UserDetails;
1214
import org.springframework.web.bind.annotation.*;
1315

1416
import java.util.List;
@@ -23,8 +25,9 @@ public class FollowController {
2325
@PostMapping
2426
public ResponseEntity<Response<FollowResponseDto>> follow(
2527
@RequestBody FollowRequestDto followRequestDto,
26-
@RequestParam String requesterEmail // jwt 구현 전까지 임시 사용 -> 이후 AuthenticationPrincipal 사용 예정
28+
@AuthenticationPrincipal UserDetails userDetails // jwt 구현 전까지 임시 사용 -> 이후 AuthenticationPrincipal 사용 예정
2729
){
30+
String requesterEmail = userDetails.getUsername();
2831
FollowResponseDto result = followService.follow(requesterEmail, followRequestDto.getTargetMemberId());
2932
return ResponseEntity.ok(Response.success("팔로우 완료", result));
3033
}
@@ -33,26 +36,29 @@ public ResponseEntity<Response<FollowResponseDto>> follow(
3336
@PostMapping("/unfollow")
3437
public ResponseEntity<Response<Void>> unfollow(
3538
@RequestBody UnfollowRequestDto requestDto,
36-
@RequestParam String requesterEmail) {
37-
39+
@AuthenticationPrincipal UserDetails userDetails
40+
) {
41+
String requesterEmail = userDetails.getUsername();
3842
followService.unfollow(requesterEmail, requestDto.getTargetMemberId());
3943
return ResponseEntity.ok(Response.success("언팔로우 완료", null));
4044
}
4145

4246
// 나를 팔로우하는 목록 조회
4347
@GetMapping("/followers")
4448
public ResponseEntity<Response<List<FollowerListResponseDto>>> getMyFollowers(
45-
@RequestParam String requesterEmail) {
46-
49+
@AuthenticationPrincipal UserDetails userDetails
50+
) {
51+
String requesterEmail = userDetails.getUsername();
4752
List<FollowerListResponseDto> followers = followService.getMyFollowers(requesterEmail);
4853
return ResponseEntity.ok(Response.success("나를 팔로우하는 목록 조회 성공", followers));
4954
}
5055

5156
// 내가 팔로우하는 목록 조회
5257
@GetMapping("/followings")
5358
public ResponseEntity<Response<List<FollowingListResponseDto>>> getMyFollowings(
54-
@RequestParam String requesterEmail) {
55-
59+
@AuthenticationPrincipal UserDetails userDetails
60+
) {
61+
String requesterEmail = userDetails.getUsername();
5662
List<FollowingListResponseDto> followings = followService.getMyFollowings(requesterEmail);
5763
return ResponseEntity.ok(Response.success("내가 팔로우 중인 목록 조회 성공", followings));
5864
}

src/main/java/com/example/FixLog/controller/MemberController.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.example.FixLog.controller;
22

3-
43
import com.example.FixLog.domain.member.Member;
54
import com.example.FixLog.dto.Response;
65
import com.example.FixLog.dto.member.MemberInfoResponseDto;
@@ -13,7 +12,7 @@
1312
import org.springframework.web.bind.annotation.*;
1413

1514
@RestController
16-
@RequestMapping("/api/members")
15+
@RequestMapping("/members")
1716
@RequiredArgsConstructor
1817
public class MemberController {
1918

@@ -50,4 +49,10 @@ public ResponseEntity<Response<MemberInfoResponseDto>> getMyInfo(@Authentication
5049
);
5150
return ResponseEntity.ok(Response.success("회원 정보 조회 성공", responseDto));
5251
}
53-
}
52+
53+
@DeleteMapping("/me")
54+
public ResponseEntity<Response<Void>> withdraw(@AuthenticationPrincipal Member member) {
55+
memberService.withdraw(member);
56+
return ResponseEntity.ok(Response.success("회원 탈퇴 성공", null));
57+
}
58+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.example.FixLog.controller;
2+
3+
import com.example.FixLog.dto.PageResponseDto;
4+
import com.example.FixLog.dto.Response;
5+
import com.example.FixLog.dto.post.MyPostPageResponseDto;
6+
import com.example.FixLog.service.MypagePostService;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
10+
import org.springframework.security.core.userdetails.UserDetails;
11+
import org.springframework.web.bind.annotation.GetMapping;
12+
import org.springframework.web.bind.annotation.RequestMapping;
13+
import org.springframework.web.bind.annotation.RequestParam;
14+
import org.springframework.web.bind.annotation.RestController;
15+
16+
@RestController
17+
@RequiredArgsConstructor
18+
@RequestMapping("/mypage")
19+
public class MypagePostController {
20+
21+
private final MypagePostService mypagePostService;
22+
23+
// 내가 쓴 글 보기
24+
@GetMapping("/posts")
25+
public ResponseEntity<Response<PageResponseDto<MyPostPageResponseDto>>> getMyPosts(
26+
@AuthenticationPrincipal UserDetails userDetails,
27+
@RequestParam(defaultValue = "0") int page,
28+
@RequestParam(defaultValue = "4") int size,
29+
@RequestParam(defaultValue = "0") int sort
30+
) {
31+
String email = userDetails.getUsername();
32+
PageResponseDto<MyPostPageResponseDto> data = mypagePostService.getMyPosts(email, page, sort, size);
33+
return ResponseEntity.ok(Response.success("내가 작성한 글 보기 성공", data));
34+
}
35+
36+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.example.FixLog.controller;
2+
3+
import com.example.FixLog.dto.Response;
4+
import com.example.FixLog.dto.tag.TagResponseDto;
5+
import com.example.FixLog.service.TagService;
6+
import org.springframework.web.bind.annotation.*;
7+
8+
@RestController
9+
@RequestMapping("/tags")
10+
public class TagController {
11+
private final TagService tagService;
12+
13+
public TagController(TagService tagService){
14+
this.tagService = tagService;
15+
}
16+
17+
@GetMapping
18+
public Response<Object> viewTags(@RequestParam("page") int page){
19+
TagResponseDto tags = tagService.viewTags(page);
20+
return Response.success("태그 모아보기 성공", tags);
21+
}
22+
}

src/main/java/com/example/FixLog/domain/member/Member.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ public class Member implements UserDetails {
4141
@Column(nullable = false)
4242
private Boolean isDeleted = false;
4343

44+
public void setIsDeleted(boolean isDeleted) {
45+
this.isDeleted = isDeleted;
46+
}
47+
4448
@Enumerated(EnumType.STRING)
4549
@Column(nullable = false)
4650
private SocialType socialType = SocialType.EMAIL;

src/main/java/com/example/FixLog/domain/post/Post.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
import com.example.FixLog.domain.like.PostLike;
55
import com.example.FixLog.domain.member.Member;
66
import jakarta.persistence.*;
7-
import lombok.AccessLevel;
8-
import lombok.Getter;
9-
import lombok.NoArgsConstructor;
7+
import lombok.*;
108

119
import java.time.LocalDateTime;
1210
import java.util.ArrayList;
1311
import java.util.List;
1412

1513
@Entity
1614
@Getter
15+
@Builder
16+
@AllArgsConstructor
1717
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1818
public class Post {
1919

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.example.FixLog.dto;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import lombok.Getter;
5+
import org.springframework.data.domain.Page;
6+
7+
import java.util.List;
8+
import java.util.function.Function;
9+
10+
@Getter
11+
@JsonInclude(JsonInclude.Include.NON_NULL)
12+
public class PageResponseDto<T> {
13+
14+
private final List<T> content;
15+
private final int page;
16+
private final int size;
17+
private final long totalElements;
18+
19+
@JsonInclude(JsonInclude.Include.NON_NULL)
20+
private final Integer totalPages;
21+
22+
private PageResponseDto(Page<T> page) {
23+
this.content = page.getContent();
24+
this.page = page.getNumber() + 1; // 1부터 시작
25+
this.size = page.getSize();
26+
this.totalElements = page.getTotalElements();
27+
this.totalPages = page.getTotalPages() == 0 ? null : page.getTotalPages();
28+
}
29+
30+
public static <T, R> PageResponseDto<R> from(Page<T> page, Function<T, R> mapper) {
31+
Page<R> mapped = page.map(mapper);
32+
return new PageResponseDto<>(mapped);
33+
}
34+
}
35+

0 commit comments

Comments
 (0)