-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
…ion-crud Feat/#43 notification crud
- Loading branch information
Showing
10 changed files
with
258 additions
and
9 deletions.
There are no files selected for viewing
51 changes: 51 additions & 0 deletions
51
src/main/java/com/example/beginnerfitbe/alarm/controller/AlarmController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
package com.example.beginnerfitbe.alarm.controller; | ||
|
||
import com.example.beginnerfitbe.alarm.domain.Alarm; | ||
import com.example.beginnerfitbe.alarm.dto.AlarmDTO; | ||
import com.example.beginnerfitbe.alarm.service.AlarmService; | ||
import com.example.beginnerfitbe.jwt.util.JwtUtil; | ||
import jakarta.servlet.http.HttpServletRequest; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
|
||
@RestController | ||
@RequestMapping("/alarm") | ||
@RequiredArgsConstructor | ||
public class AlarmController { | ||
|
||
private final AlarmService alarmService; | ||
private final JwtUtil jwtUtil; // JwtUtil 주입 | ||
|
||
@GetMapping | ||
public ResponseEntity<List<AlarmDTO>> getAlarms(HttpServletRequest request) { | ||
// JWT 토큰에서 사용자 ID 추출 | ||
String token = jwtUtil.resolveToken(request); | ||
Long userId = jwtUtil.getUserId(token.substring(7)); | ||
|
||
// 사용자 ID로 알림 조회 | ||
List<Alarm> alarms = alarmService.getAlarmsByUserId(userId); | ||
List<AlarmDTO> alarmDTOs = alarms.stream() | ||
.map(AlarmDTO::fromEntity) | ||
.collect(Collectors.toList()); | ||
return ResponseEntity.ok(alarmDTOs); | ||
} | ||
|
||
// 알림 체크 처리 | ||
@PutMapping("/{alarmId}/check") | ||
public ResponseEntity<Void> checkAlarm(HttpServletRequest request, @PathVariable Long alarmId) { | ||
|
||
String token = jwtUtil.resolveToken(request); | ||
Long userId = jwtUtil.getUserId(token.substring(7)); | ||
|
||
// 알림 체크 처리 | ||
alarmService.checkAlarm(userId, alarmId); | ||
|
||
return ResponseEntity.ok().build(); | ||
} | ||
|
||
|
||
} |
44 changes: 44 additions & 0 deletions
44
src/main/java/com/example/beginnerfitbe/alarm/domain/Alarm.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package com.example.beginnerfitbe.alarm.domain; | ||
|
||
import com.example.beginnerfitbe.user.domain.User; | ||
import jakarta.persistence.*; | ||
import lombok.*; | ||
|
||
import java.time.LocalDateTime; | ||
|
||
@Entity | ||
@Getter | ||
@Setter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
public class Alarm { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Long alarmId; | ||
|
||
@Column(nullable = false) | ||
private boolean alarmChecked; | ||
|
||
@Column(nullable = false) | ||
private LocalDateTime alarmDate; | ||
|
||
@Column(nullable = false) | ||
private String alarmMessage; | ||
|
||
@ManyToOne(fetch = FetchType.LAZY) | ||
@JoinColumn(name = "userId") | ||
private User user; | ||
|
||
@Column(nullable = false) | ||
@Enumerated(EnumType.STRING) // Enum 값을 문자열로 저장 | ||
private AlarmType alarmType; // 추가된 enum 필드 | ||
|
||
@Builder | ||
public Alarm(User user, boolean alarmChecked, String alarmMessage, AlarmType alarmType) { | ||
this.user = user; | ||
this.alarmChecked = alarmChecked; | ||
this.alarmDate = LocalDateTime.now(); | ||
this.alarmMessage = alarmMessage; | ||
this.alarmType = alarmType; | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
src/main/java/com/example/beginnerfitbe/alarm/domain/AlarmType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package com.example.beginnerfitbe.alarm.domain; | ||
|
||
public enum AlarmType { | ||
FRIEND_REQUEST, // 친구 요청 | ||
COMMENT_ALARM, // 게시글 댓글 알림 | ||
CHALLENGE_REMINDER, // 오늘의 챌린지 남은 알림 | ||
FRIEND_ACCEPTANCE // 친구 수락 알림 | ||
} |
34 changes: 34 additions & 0 deletions
34
src/main/java/com/example/beginnerfitbe/alarm/dto/AlarmDTO.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package com.example.beginnerfitbe.alarm.dto; | ||
|
||
import com.example.beginnerfitbe.alarm.domain.Alarm; | ||
import com.example.beginnerfitbe.alarm.domain.AlarmType; | ||
import lombok.*; | ||
|
||
import java.time.LocalDateTime; | ||
|
||
@Getter | ||
@Setter | ||
@NoArgsConstructor | ||
@AllArgsConstructor | ||
@Builder | ||
public class AlarmDTO { | ||
|
||
private Long alarmId; | ||
private boolean alarmChecked; | ||
private LocalDateTime alarmDate; | ||
private String alarmMessage; | ||
private Long userId; | ||
private AlarmType alarmType; | ||
|
||
public static AlarmDTO fromEntity(Alarm alarm) { | ||
return AlarmDTO.builder() | ||
.alarmId(alarm.getAlarmId()) | ||
.alarmChecked(alarm.isAlarmChecked()) | ||
.alarmDate(alarm.getAlarmDate()) | ||
.alarmMessage(alarm.getAlarmMessage()) | ||
.userId(alarm.getUser().getId()) | ||
.alarmType(alarm.getAlarmType()) | ||
.build(); | ||
} | ||
|
||
} |
14 changes: 14 additions & 0 deletions
14
src/main/java/com/example/beginnerfitbe/alarm/repository/AlarmRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package com.example.beginnerfitbe.alarm.repository; | ||
|
||
import com.example.beginnerfitbe.alarm.domain.Alarm; | ||
import com.example.beginnerfitbe.user.domain.User; | ||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.stereotype.Repository; | ||
|
||
import java.util.List; | ||
|
||
@Repository | ||
public interface AlarmRepository extends JpaRepository<Alarm, Long> { | ||
|
||
List<Alarm> findByUser(User user); | ||
} |
52 changes: 52 additions & 0 deletions
52
src/main/java/com/example/beginnerfitbe/alarm/service/AlarmService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package com.example.beginnerfitbe.alarm.service; | ||
|
||
import com.example.beginnerfitbe.alarm.domain.Alarm; | ||
import com.example.beginnerfitbe.alarm.domain.AlarmType; | ||
import com.example.beginnerfitbe.alarm.repository.AlarmRepository; | ||
import com.example.beginnerfitbe.user.domain.User; | ||
import com.example.beginnerfitbe.user.repository.UserRepository; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
import java.util.List; | ||
|
||
@Service | ||
@Transactional | ||
@RequiredArgsConstructor | ||
public class AlarmService { | ||
|
||
private final AlarmRepository alarmRepository; | ||
private final UserRepository userRepository; | ||
|
||
public void createAlarm(User receiver, String alarmMessage, AlarmType alarmType) { | ||
Alarm alarm = Alarm.builder() | ||
.user(receiver) | ||
.alarmChecked(false) | ||
.alarmMessage(alarmMessage) | ||
.alarmType(alarmType) // 알림 타입 추가 | ||
.build(); | ||
alarmRepository.save(alarm); | ||
} | ||
|
||
public List<Alarm> getAlarmsByUserId(Long userId) { | ||
User user = userRepository.findById(userId) | ||
.orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다.")); | ||
return alarmRepository.findByUser(user); | ||
} | ||
|
||
public void checkAlarm(Long userId, Long alarmId) { | ||
// alarmId에 해당하는 알림 객체 찾기 | ||
Alarm alarm = alarmRepository.findById(alarmId) | ||
.orElseThrow(() -> new RuntimeException("해당 알림이 존재하지 않습니다.")); | ||
|
||
// 알림의 userId와 일치하는지 확인 | ||
if (!alarm.getUser().getId().equals(userId)) { | ||
throw new RuntimeException("해당 알림을 가진 사용자를 찾을 수 없습니다."); | ||
} | ||
|
||
// alarmChecked를 true로 변경 | ||
alarm.setAlarmChecked(true); | ||
alarmRepository.save(alarm); // 변경사항 저장 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters