-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
159 changed files
with
33,774 additions
and
17,793 deletions.
There are no files selected for viewing
44 changes: 44 additions & 0 deletions
44
backend/src/main/java/com/votogether/domain/alarm/controller/AlarmCommandController.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.votogether.domain.alarm.controller; | ||
|
||
import com.votogether.domain.alarm.dto.ReportActionAlarmResponse; | ||
import com.votogether.domain.alarm.dto.ReportActionResponse; | ||
import com.votogether.domain.alarm.service.AlarmService; | ||
import com.votogether.domain.member.entity.Member; | ||
import com.votogether.global.jwt.Auth; | ||
import jakarta.validation.constraints.PositiveOrZero; | ||
import java.util.List; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.validation.annotation.Validated; | ||
import org.springframework.web.bind.annotation.PathVariable; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RequestParam; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@Validated | ||
@RequiredArgsConstructor | ||
@RequestMapping("/alarms") | ||
@RestController | ||
public class AlarmCommandController implements AlarmCommandControllerDocs { | ||
|
||
private final AlarmService alarmService; | ||
|
||
@RequestMapping("/report") | ||
public ResponseEntity<List<ReportActionAlarmResponse>> getReportActionAlarms( | ||
@RequestParam @PositiveOrZero(message = "페이지는 0이상 정수만 가능합니다.") final int page, | ||
@Auth final Member member | ||
) { | ||
final List<ReportActionAlarmResponse> response = alarmService.getReportActionAlarms(member, page); | ||
return ResponseEntity.ok(response); | ||
} | ||
|
||
@RequestMapping("/report/{id}") | ||
public ResponseEntity<ReportActionResponse> getReportActionAlarm( | ||
@PathVariable("id") final Long reportActionAlarmId, | ||
@Auth final Member member | ||
) { | ||
final ReportActionResponse response = alarmService.getReportActionAlarm(reportActionAlarmId, member); | ||
return ResponseEntity.ok(response); | ||
} | ||
|
||
} |
32 changes: 32 additions & 0 deletions
32
backend/src/main/java/com/votogether/domain/alarm/controller/AlarmCommandControllerDocs.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,32 @@ | ||
package com.votogether.domain.alarm.controller; | ||
|
||
import com.votogether.domain.alarm.dto.ReportActionAlarmResponse; | ||
import com.votogether.domain.alarm.dto.ReportActionResponse; | ||
import com.votogether.domain.member.entity.Member; | ||
import io.swagger.v3.oas.annotations.Operation; | ||
import io.swagger.v3.oas.annotations.Parameter; | ||
import io.swagger.v3.oas.annotations.responses.ApiResponse; | ||
import io.swagger.v3.oas.annotations.tags.Tag; | ||
import jakarta.validation.constraints.PositiveOrZero; | ||
import java.util.List; | ||
import org.springframework.http.ResponseEntity; | ||
|
||
@Tag(name = "알림", description = "알림 API") | ||
public interface AlarmCommandControllerDocs { | ||
|
||
@Operation(summary = "신고조치알림 조회", description = "신고조치알림목록을 조회한다.") | ||
@ApiResponse(responseCode = "201", description = "조회 성공") | ||
ResponseEntity<List<ReportActionAlarmResponse>> getReportActionAlarms( | ||
@Parameter(description = "현재 페이지 위치", example = "0") | ||
@PositiveOrZero(message = "페이지는 0이상 정수만 가능합니다.") final int page, | ||
final Member member | ||
); | ||
|
||
@Operation(summary = "신고조치알림 상세 조회", description = "신고조치알림를 상세 조회한다.") | ||
@ApiResponse(responseCode = "201", description = "조회 성공") | ||
public ResponseEntity<ReportActionResponse> getReportActionAlarm( | ||
@Parameter(description = "신고조치알림 ID", example = "1") final Long reportActionAlarmId, | ||
final Member member | ||
); | ||
|
||
} |
28 changes: 28 additions & 0 deletions
28
backend/src/main/java/com/votogether/domain/alarm/dto/ReportActionAlarmResponse.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,28 @@ | ||
package com.votogether.domain.alarm.dto; | ||
|
||
import com.votogether.domain.alarm.entity.ReportActionAlarm; | ||
import io.swagger.v3.oas.annotations.media.Schema; | ||
|
||
@Schema(description = "신고조치알림 응답") | ||
public record ReportActionAlarmResponse( | ||
@Schema(description = "알림 ID", example = "1") | ||
Long alarmId, | ||
|
||
@Schema(description = "확인 여부", example = "false") | ||
boolean isChecked, | ||
|
||
@Schema(description = "신고조치 세부정보") | ||
ReportActionResponse detail | ||
) { | ||
|
||
public static ReportActionAlarmResponse from( | ||
final ReportActionAlarm reportActionAlarm | ||
) { | ||
return new ReportActionAlarmResponse( | ||
reportActionAlarm.getId(), | ||
reportActionAlarm.isChecked(), | ||
ReportActionResponse.from(reportActionAlarm) | ||
); | ||
} | ||
|
||
} |
42 changes: 42 additions & 0 deletions
42
backend/src/main/java/com/votogether/domain/alarm/dto/ReportActionResponse.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,42 @@ | ||
package com.votogether.domain.alarm.dto; | ||
|
||
import com.votogether.domain.alarm.entity.ReportActionAlarm; | ||
import com.votogether.domain.report.entity.vo.ReportType; | ||
import io.swagger.v3.oas.annotations.media.Schema; | ||
import java.time.LocalDateTime; | ||
import java.util.Set; | ||
import java.util.stream.Collectors; | ||
import java.util.stream.Stream; | ||
|
||
@Schema(description = "신고조치 응답") | ||
public record ReportActionResponse( | ||
@Schema(description = "신고조치 ID", example = "1") | ||
Long reportActionId, | ||
|
||
@Schema(description = "신고조치타입", example = "POST") | ||
ReportType type, | ||
|
||
@Schema(description = "신고대상내용", example = "1") | ||
String content, | ||
|
||
@Schema(description = "신고사유") | ||
Set<String> reasons, | ||
|
||
@Schema(description = "신고조치시간", example = "2023-08-01 13:56") | ||
LocalDateTime createdAt | ||
) { | ||
|
||
public static ReportActionResponse from(final ReportActionAlarm reportActionAlarm) { | ||
final Set<String> reasons = Stream.of(reportActionAlarm.getReasons().split(",")) | ||
.map(String::strip) | ||
.collect(Collectors.toSet()); | ||
|
||
return new ReportActionResponse( | ||
reportActionAlarm.getId(), | ||
reportActionAlarm.getReportType(), | ||
reportActionAlarm.getTarget(), | ||
reasons, | ||
reportActionAlarm.getCreatedAt() | ||
); | ||
} | ||
} |
64 changes: 64 additions & 0 deletions
64
backend/src/main/java/com/votogether/domain/alarm/entity/ReportActionAlarm.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,64 @@ | ||
package com.votogether.domain.alarm.entity; | ||
|
||
import com.votogether.domain.common.BaseEntity; | ||
import com.votogether.domain.member.entity.Member; | ||
import com.votogether.domain.report.entity.vo.ReportType; | ||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.EnumType; | ||
import jakarta.persistence.Enumerated; | ||
import jakarta.persistence.FetchType; | ||
import jakarta.persistence.GeneratedValue; | ||
import jakarta.persistence.GenerationType; | ||
import jakarta.persistence.Id; | ||
import jakarta.persistence.JoinColumn; | ||
import jakarta.persistence.ManyToOne; | ||
import lombok.AccessLevel; | ||
import lombok.Builder; | ||
import lombok.EqualsAndHashCode; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
@Entity | ||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@EqualsAndHashCode(of = {"id"}, callSuper = false) | ||
public class ReportActionAlarm extends BaseEntity { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Long id; | ||
|
||
@ManyToOne(fetch = FetchType.LAZY) | ||
@JoinColumn(name = "member_id", nullable = false) | ||
private Member member; | ||
|
||
@Enumerated(value = EnumType.STRING) | ||
@Column(length = 20, nullable = false) | ||
private ReportType reportType; | ||
|
||
@Column(length = 500, nullable = false) | ||
private String target; | ||
|
||
@Column(length = 500, nullable = false) | ||
private String reasons; | ||
|
||
@Column(nullable = false) | ||
private boolean isChecked; | ||
|
||
@Builder | ||
private ReportActionAlarm( | ||
final Member member, | ||
final ReportType reportType, | ||
final String target, | ||
final String reasons, | ||
final boolean isChecked | ||
) { | ||
this.member = member; | ||
this.reportType = reportType; | ||
this.target = target; | ||
this.reasons = reasons; | ||
this.isChecked = isChecked; | ||
} | ||
|
||
} |
20 changes: 20 additions & 0 deletions
20
...d/src/main/java/com/votogether/domain/alarm/exception/ReportActionAlarmExceptionType.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,20 @@ | ||
package com.votogether.domain.alarm.exception; | ||
|
||
import com.votogether.global.exception.ExceptionType; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
public enum ReportActionAlarmExceptionType implements ExceptionType { | ||
|
||
NOT_FOUND(1300, "신고조치알림이 존재하지 않습니다."), | ||
; | ||
|
||
private final int code; | ||
private final String message; | ||
|
||
ReportActionAlarmExceptionType(final int code, final String message) { | ||
this.code = code; | ||
this.message = message; | ||
} | ||
|
||
} |
16 changes: 16 additions & 0 deletions
16
...end/src/main/java/com/votogether/domain/alarm/repository/ReportActionAlarmRepository.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,16 @@ | ||
package com.votogether.domain.alarm.repository; | ||
|
||
import com.votogether.domain.alarm.entity.ReportActionAlarm; | ||
import com.votogether.domain.member.entity.Member; | ||
import java.util.List; | ||
import java.util.Optional; | ||
import org.springframework.data.domain.Pageable; | ||
import org.springframework.data.jpa.repository.JpaRepository; | ||
|
||
public interface ReportActionAlarmRepository extends JpaRepository<ReportActionAlarm, Long> { | ||
|
||
List<ReportActionAlarm> findByMember(final Member member, final Pageable pageable); | ||
|
||
Optional<ReportActionAlarm> findByIdAndMember(final Long Id, final Member member); | ||
|
||
} |
45 changes: 45 additions & 0 deletions
45
backend/src/main/java/com/votogether/domain/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,45 @@ | ||
package com.votogether.domain.alarm.service; | ||
|
||
import com.votogether.domain.alarm.dto.ReportActionAlarmResponse; | ||
import com.votogether.domain.alarm.dto.ReportActionResponse; | ||
import com.votogether.domain.alarm.entity.ReportActionAlarm; | ||
import com.votogether.domain.alarm.exception.ReportActionAlarmExceptionType; | ||
import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; | ||
import com.votogether.domain.member.entity.Member; | ||
import com.votogether.global.exception.NotFoundException; | ||
import java.util.List; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.data.domain.PageRequest; | ||
import org.springframework.data.domain.Sort; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@RequiredArgsConstructor | ||
@Service | ||
public class AlarmService { | ||
|
||
private static final int BASIC_PAGE_SIZE = 10; | ||
private final ReportActionAlarmRepository reportActionAlarmRepository; | ||
|
||
@Transactional(readOnly = true) | ||
public List<ReportActionAlarmResponse> getReportActionAlarms(final Member member, final int page) { | ||
final PageRequest pageRequest = PageRequest.of(page, BASIC_PAGE_SIZE, | ||
Sort.by(Sort.Direction.DESC, "createdAt")); | ||
final List<ReportActionAlarm> reportActionAlarms = reportActionAlarmRepository | ||
.findByMember(member, pageRequest); | ||
|
||
return reportActionAlarms.stream() | ||
.map(ReportActionAlarmResponse::from) | ||
.toList(); | ||
} | ||
|
||
@Transactional(readOnly = true) | ||
public ReportActionResponse getReportActionAlarm(final Long reportActionAlarmId, final Member member) { | ||
final ReportActionAlarm reportActionAlarm = reportActionAlarmRepository | ||
.findByIdAndMember(reportActionAlarmId, member) | ||
.orElseThrow(() -> new NotFoundException(ReportActionAlarmExceptionType.NOT_FOUND)); | ||
|
||
return ReportActionResponse.from(reportActionAlarm); | ||
} | ||
|
||
} |
55 changes: 55 additions & 0 deletions
55
backend/src/main/java/com/votogether/domain/notice/controller/NoticeCommandController.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,55 @@ | ||
package com.votogether.domain.notice.controller; | ||
|
||
import com.votogether.domain.member.entity.Member; | ||
import com.votogether.domain.notice.dto.request.NoticeRequest; | ||
import com.votogether.domain.notice.service.NoticeCommandService; | ||
import com.votogether.global.jwt.Auth; | ||
import jakarta.validation.Valid; | ||
import jakarta.validation.constraints.Positive; | ||
import java.net.URI; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.validation.annotation.Validated; | ||
import org.springframework.web.bind.annotation.DeleteMapping; | ||
import org.springframework.web.bind.annotation.PathVariable; | ||
import org.springframework.web.bind.annotation.PostMapping; | ||
import org.springframework.web.bind.annotation.PutMapping; | ||
import org.springframework.web.bind.annotation.RequestBody; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@Validated | ||
@RequiredArgsConstructor | ||
@RequestMapping("/notices") | ||
@RestController | ||
public class NoticeCommandController implements NoticeCommandControllerDocs { | ||
|
||
private final NoticeCommandService noticeCommandService; | ||
|
||
@PostMapping | ||
public ResponseEntity<Void> createNotice( | ||
@RequestBody @Valid final NoticeRequest noticeRequest, | ||
@Auth final Member loginMember | ||
) { | ||
final Long noticeId = noticeCommandService.createNotice(noticeRequest, loginMember); | ||
return ResponseEntity.created(URI.create("/notices/" + noticeId)).build(); | ||
} | ||
|
||
@PutMapping("/{id}") | ||
public ResponseEntity<Void> updateNotice( | ||
@PathVariable("id") @Positive(message = "공지사항 ID는 양수만 가능합니다.") final Long noticeId, | ||
@RequestBody @Valid final NoticeRequest noticeRequest | ||
) { | ||
noticeCommandService.updateNotice(noticeId, noticeRequest); | ||
return ResponseEntity.noContent().build(); | ||
} | ||
|
||
@DeleteMapping("/{id}") | ||
public ResponseEntity<Void> deleteNotice( | ||
@PathVariable("id") @Positive(message = "공지사항 ID는 양수만 가능합니다.") final Long noticeId | ||
) { | ||
noticeCommandService.deleteNotice(noticeId); | ||
return ResponseEntity.noContent().build(); | ||
} | ||
|
||
} |
Oops, something went wrong.