Skip to content

Commit

Permalink
Merge pull request #59 from Donut-DONationUTile/feature/report
Browse files Browse the repository at this point in the history
Feat: 신고 기능 구현
  • Loading branch information
Ganghee-Lee-0522 authored Apr 24, 2024
2 parents f9f1f79 + ee0d871 commit 9805eec
Show file tree
Hide file tree
Showing 9 changed files with 108 additions and 28 deletions.
10 changes: 7 additions & 3 deletions src/main/java/zero/eight/donut/controller/ReportController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import zero.eight.donut.common.response.ApiResponse;
import zero.eight.donut.dto.report.ReportedRequestDto;
import zero.eight.donut.service.ReportService;

@RestController
Expand All @@ -11,8 +12,11 @@
public class ReportController {
private final ReportService reportService;
@PostMapping("/use")
public ApiResponse<?> createReport(@RequestParam(name = "giftId") Long giftId ){
return reportService.createReport(giftId);
public ApiResponse<?> createUsed(@RequestParam(name = "giftId") Long giftId ){
return reportService.createUsed(giftId);
}
@PostMapping("/cheat")
public ApiResponse<?> createReport(@RequestBody ReportedRequestDto requestDto){
return reportService.createReport(requestDto);
}

}
6 changes: 2 additions & 4 deletions src/main/java/zero/eight/donut/domain/Report.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
package zero.eight.donut.domain;

import lombok.Getter;
import zero.eight.donut.common.domain.BaseTimeEntity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;


@Entity
@Builder
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class Report extends BaseTimeEntity {
Expand All @@ -32,7 +31,6 @@ public class Report extends BaseTimeEntity {
private Receiver receiver;

//기프티콘
// @OneToOne(mappedBy = "report")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "gift_id")
private Gift gift;
Expand Down
13 changes: 0 additions & 13 deletions src/main/java/zero/eight/donut/dto/report/ReportRequestDto.java

This file was deleted.

23 changes: 23 additions & 0 deletions src/main/java/zero/eight/donut/dto/report/ReportedRequestDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package zero.eight.donut.dto.report;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import zero.eight.donut.domain.Gift;
import zero.eight.donut.domain.Giver;
import zero.eight.donut.domain.Receiver;
import zero.eight.donut.domain.Report;

@Getter
@AllArgsConstructor
@NoArgsConstructor
public class ReportedRequestDto {
private Long giftId;
public Report toEntity(Giver giver, Receiver receiver, Gift gift){
return Report.builder()
.giver(giver)
.receiver(receiver)
.gift(gift)
.build();
}
}
17 changes: 17 additions & 0 deletions src/main/java/zero/eight/donut/dto/report/ReportedResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package zero.eight.donut.dto.report;

import lombok.Builder;
import lombok.Getter;

@Getter
public class ReportedResponseDto {
private Long reportId;
private Long giftId;
private Boolean isLast;
@Builder
public ReportedResponseDto(Long reportId, Long giftId, Boolean isLast){
this.reportId = reportId;
this.giftId = giftId;
this.isLast=isLast;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import lombok.Getter;

@Getter
public class ReportResponseDto {
public class UsedResponseDto {
private Boolean isLast;
@Builder
public ReportResponseDto(Boolean isLast){
public UsedResponseDto(Boolean isLast){
this.isLast=isLast;
}
}
2 changes: 1 addition & 1 deletion src/main/java/zero/eight/donut/exception/Error.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public enum Error {

// 409 CONFLICT
DUPLICATED_ID(HttpStatus.CONFLICT, "Failed due to duplicate ID"),
ALREADY_USED_GIFT_EXCEPTION(HttpStatus.BAD_REQUEST, "Already Used Gift"),
ALREADY_USED_GIFT_EXCEPTION(HttpStatus.CONFLICT, "Already used gift"),
GIFT_EXIST_EXCEPTION(HttpStatus.CONFLICT, "이미 존재하는 기프티콘입니다."),


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package zero.eight.donut.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import zero.eight.donut.domain.Report;

public interface ReportRepository extends JpaRepository<Report, Long> {
}
54 changes: 49 additions & 5 deletions src/main/java/zero/eight/donut/service/ReportService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,30 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import zero.eight.donut.common.response.ApiResponse;
import zero.eight.donut.domain.Gift;
import zero.eight.donut.domain.Giftbox;
import zero.eight.donut.config.jwt.AuthUtils;
import zero.eight.donut.domain.*;
import zero.eight.donut.domain.enums.Status;
import zero.eight.donut.dto.report.ReportResponseDto;
import zero.eight.donut.dto.auth.Role;
import zero.eight.donut.dto.report.ReportedRequestDto;
import zero.eight.donut.dto.report.ReportedResponseDto;
import zero.eight.donut.dto.report.UsedResponseDto;
import zero.eight.donut.exception.Error;
import zero.eight.donut.exception.Success;
import zero.eight.donut.repository.GiftRepository;
import zero.eight.donut.repository.GiftboxRepository;
import zero.eight.donut.repository.ReportRepository;

import java.util.Optional;

@Service
@RequiredArgsConstructor
public class ReportService {
private final AuthUtils authUtils;
private final ReportRepository reportRepository;
private final GiftRepository giftRepository;
private final GiftboxRepository giftboxRepository;
@Transactional
public ApiResponse<?> createReport(Long giftId){
public ApiResponse<?> createUsed(Long giftId){
//Gift 있는지 확인
Optional<Gift> gift = giftRepository.findById(giftId);
if(gift.isEmpty())
Expand All @@ -42,7 +48,45 @@ public ApiResponse<?> createReport(Long giftId){

giftbox.updateAmountAndIsAvailable(amount, availability);

ReportResponseDto responseDto = ReportResponseDto.builder()
UsedResponseDto responseDto = UsedResponseDto.builder()
.isLast(!availability)
.build();
return ApiResponse.success(Success.CREATE_REPORT_SUCCESS, responseDto);
}
@Transactional
public ApiResponse<?> createReport(ReportedRequestDto requestDto){
//수혜자 여부 조회
if (!authUtils.getCurrentUserRole().equals(Role.ROLE_RECEIVER)) {
return ApiResponse.failure(Error.NOT_AUTHENTICATED_EXCEPTION);
}

//Gift 있는지 확인
Optional<Gift> gift = giftRepository.findById(requestDto.getGiftId());
if(gift.isEmpty())
return ApiResponse.failure(Error.GIFT_NOT_FOUND_EXCEPTION);

//할당된 Giftbox 확인
Giftbox giftbox = giftboxRepository.findByGiftId(requestDto.getGiftId());
if(giftbox.getId() == 0L)
return ApiResponse.failure(Error.GIFTBOX_NOT_FOUND_EXCEPTION);

// Report gift
gift.get().updateStatus("REPORTED");

//Create Report
Giver giver = gift.get().getGiver();
Receiver receiver = authUtils.getReceiver();
Report report = requestDto.toEntity(giver, receiver, gift.get());
reportRepository.save(report);

//Giftbox info updated
Integer amount = giftbox.getAmount() - gift.get().getPrice();
Boolean availability = amount > 0 ? true:false;
giftbox.updateAmountAndIsAvailable(amount, availability);

ReportedResponseDto responseDto = ReportedResponseDto.builder()
.reportId(report.getId())
.giftId(report.getGift().getId())
.isLast(!availability)
.build();
return ApiResponse.success(Success.CREATE_REPORT_SUCCESS, responseDto);
Expand Down

0 comments on commit 9805eec

Please sign in to comment.