Skip to content

Commit 58d31a8

Browse files
authored
Merge pull request #55 from SKU-Homepage/feature/53
✨ 키워드 관련 api 개발
2 parents bf1a572 + 679c057 commit 58d31a8

7 files changed

Lines changed: 57 additions & 27 deletions

File tree

src/main/java/org/example/skuhomepage/domain/firebase/controller/FCMController.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,14 @@ public ApiResponse<Void> topicRegister(TopicRequestDTO topicReq, CustomUserDetai
5858
}
5959

6060
@Override
61-
public ApiResponse<Void> topicDelete(String keyword, CustomUserDetails userDetails) {
62-
keywordService.deleteKeyword(keyword, userDetails);
61+
public ApiResponse<Void> topicDelete(Long keywordId, CustomUserDetails userDetails) {
62+
keywordService.deleteKeyword(keywordId, userDetails);
6363
return ApiResponse.onSuccess(null);
6464
}
65-
//
66-
// @Override
67-
// public ApiResponse<Void> topicList(TopicGroup topicGroup, CustomUserDetails userDetails) {
68-
// return ApiResponse.onSuccess(null);
69-
// }
65+
66+
@Override
67+
public ApiResponse<NotificationResponseDTO.keywordDTO> topicList(CustomUserDetails userDetails) {
68+
NotificationResponseDTO.keywordDTO result = keywordService.getUserKeywords(userDetails);
69+
return ApiResponse.onSuccess(result);
70+
}
7071
}

src/main/java/org/example/skuhomepage/domain/firebase/controller/FCMControllerSpec.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.springframework.web.bind.annotation.*;
1010

1111
import io.swagger.v3.oas.annotations.Operation;
12+
import io.swagger.v3.oas.annotations.Parameter;
1213
import io.swagger.v3.oas.annotations.tags.Tag;
1314

1415
@Tag(name = "알림", description = "FCM 알림 관련 API")
@@ -40,16 +41,15 @@ ApiResponse<Void> topicRegister(
4041
@RequestBody TopicRequestDTO keywordReq,
4142
@AuthenticationPrincipal CustomUserDetails userDetails);
4243

43-
@DeleteMapping("/keyword")
44+
@DeleteMapping("/keyword/{keywordId}")
4445
@Operation(summary = "키워드 삭제", description = "키워드를 삭제하는 API")
4546
ApiResponse<Void> topicDelete(
46-
@RequestBody String keyword, @AuthenticationPrincipal CustomUserDetails userDetails);
47-
48-
// @GetMapping("/keyword")
49-
// @Operation(summary = "키워드 조회", description = "키워드를 조회하는 API")
50-
// ApiResponse<Void> topicList(
51-
// @Parameter(description = "주제", example = "SKU_NOTICE", required = true) @RequestParam
52-
// TopicGroup topicGroup,
53-
// @Parameter(description = "사용자 정보", hidden = true) @AuthenticationPrincipal
54-
// CustomUserDetails userDetails);
47+
@Parameter(description = "삭제할 키워드", example = "1") @PathVariable Long keywordId,
48+
@AuthenticationPrincipal CustomUserDetails userDetails);
49+
50+
@GetMapping("/keyword")
51+
@Operation(summary = "키워드 조회", description = "키워드를 조회하는 API")
52+
ApiResponse<NotificationResponseDTO.keywordDTO> topicList(
53+
@Parameter(description = "사용자 정보", hidden = true) @AuthenticationPrincipal
54+
CustomUserDetails userDetails);
5555
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.example.skuhomepage.domain.firebase.dto;
2+
3+
import java.util.List;
4+
5+
import lombok.AllArgsConstructor;
6+
import lombok.Getter;
7+
8+
public class NotificationRequestDTO {
9+
@Getter
10+
@AllArgsConstructor
11+
public static class AddSubjectDTO {
12+
private List<Long> subjectIds;
13+
}
14+
}

src/main/java/org/example/skuhomepage/domain/firebase/dto/NotificationResponseDTO.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,7 @@ public record keywordDTO(
2222
@ArraySchema(
2323
schema = @Schema(implementation = UserKeyword.class),
2424
arraySchema = @Schema(description = "키워드 리스트"))
25-
List<UserKeyword> userKeywordList) {}
25+
List<UserKeywordDTO> userKeywordList) {}
26+
27+
public record UserKeywordDTO(@Schema(description = "키워드", example = "대학혁신") String name) {}
2628
}

src/main/java/org/example/skuhomepage/domain/firebase/entity/UserKeyword.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import org.example.skuhomepage.domain.mypage.entity.User;
66
import org.example.skuhomepage.global.common.BaseTimeEntity;
7-
import org.example.skuhomepage.global.enums.TopicGroup;
87

98
import lombok.*;
109

@@ -23,6 +22,6 @@ public class UserKeyword extends BaseTimeEntity {
2322
@Column(nullable = false)
2423
private String keyword;
2524

26-
@Column(nullable = false)
27-
private TopicGroup topicGroup;
25+
// @Column(nullable = false)
26+
// private TopicGroup topicGroup;
2827
}

src/main/java/org/example/skuhomepage/domain/firebase/repository/UserKeywordRepository.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,15 @@
66
import org.example.skuhomepage.domain.firebase.entity.UserKeyword;
77
import org.example.skuhomepage.domain.mypage.entity.User;
88
import org.springframework.data.jpa.repository.JpaRepository;
9+
import org.springframework.data.jpa.repository.Query;
10+
import org.springframework.data.repository.query.Param;
911

1012
public interface UserKeywordRepository extends JpaRepository<UserKeyword, Long> {
1113
boolean existsByUserAndKeyword(User user, String keyword);
1214

1315
List<UserKeyword> findAllByUser(User user);
1416

15-
Optional<UserKeyword> findByUserAndKeyword(User user, String keyword);
17+
@Query("SELECT us FROM UserKeyword us WHERE us.user = :user AND us.id = :keywordId")
18+
Optional<UserKeyword> findByUserAndKeywordId(
19+
@Param("user") User user, @Param("keywordId") Long keywordId);
1620
}

src/main/java/org/example/skuhomepage/domain/firebase/service/KeywordService.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.List;
44
import java.util.stream.Collectors;
55

6+
import org.example.skuhomepage.domain.firebase.dto.NotificationResponseDTO;
67
import org.example.skuhomepage.domain.firebase.dto.TopicRequestDTO;
78
import org.example.skuhomepage.domain.firebase.entity.UserKeyword;
89
import org.example.skuhomepage.domain.firebase.exception.FirebaseErrorStatus;
@@ -34,30 +35,39 @@ public void registerKeyword(TopicRequestDTO request, UserDetails userDetails) {
3435
throw new GeneralException(FirebaseErrorStatus.KEYWORD_NOT_VALID);
3536
}
3637

37-
UserKeyword keyword = UserKeyword.builder().user(user).keyword(request.getKeyword()).build();
38+
UserKeyword keyword =
39+
UserKeyword.builder()
40+
.user(user)
41+
.keyword(request.getKeyword())
42+
// .topicGroup(TopicGroup.COMMON)
43+
.build();
3844

3945
keywordRepository.save(keyword);
4046
}
4147

42-
public List<String> getUserKeywords(UserDetails userDetails) {
48+
public NotificationResponseDTO.keywordDTO getUserKeywords(UserDetails userDetails) {
4349
User user =
4450
userRepository
4551
.findByAccount(userDetails.getUsername())
4652
.orElseThrow(() -> new GeneralException(MyPageErrorStatus.USER_NOT_FOUND));
4753

4854
List<UserKeyword> keywords = keywordRepository.findAllByUser(user);
49-
return keywords.stream().map(UserKeyword::getKeyword).collect(Collectors.toList());
55+
List<NotificationResponseDTO.UserKeywordDTO> dtos =
56+
keywords.stream()
57+
.map(keyword -> new NotificationResponseDTO.UserKeywordDTO(keyword.getKeyword()))
58+
.collect(Collectors.toList());
59+
return new NotificationResponseDTO.keywordDTO(dtos);
5060
}
5161

52-
public void deleteKeyword(String keywordToDelete, UserDetails userDetails) {
62+
public void deleteKeyword(Long keywordId, UserDetails userDetails) {
5363
User user =
5464
userRepository
5565
.findByAccount(userDetails.getUsername())
5666
.orElseThrow(() -> new GeneralException(MyPageErrorStatus.USER_NOT_FOUND));
5767

5868
UserKeyword keyword =
5969
keywordRepository
60-
.findByUserAndKeyword(user, keywordToDelete)
70+
.findByUserAndKeywordId(user, keywordId)
6171
.orElseThrow(() -> new GeneralException(FirebaseErrorStatus.KEYWORD_NOT_FOUND));
6272

6373
keywordRepository.delete(keyword);

0 commit comments

Comments
 (0)