Skip to content

[BE] Report Upload : 신고 게시판 업로드 API #2

@KK-Hoon

Description

@KK-Hoon

개요

사용자가 건물의 결함을 신고할 수 있는 API를 구현합니다.
사용자는 결함 유형, 위치, 설명과 함께 이미지를 첨부하여 신고할 수 있습니다.


신고하기 API

작업 내용

  • 모델 정의:
    • Report 엔티티 작성 및 DB 매핑
    • ReportImage 엔티티 작성 (이미지 저장용)
  • 이미지 처리:
    • 이미지 업로드 및 저장
    • 이미지 URL 생성
  • 신고 처리:
    • 신고 정보 검증
    • 이미지와 함께 신고 정보 저장
    • 신고 완료 응답

세부 내용

  1. 모델 정의:
    • Report 엔티티:
@Entity
@Table(name = "reports")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class Report {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long reportId;
    private LocalDateTime reportDate;
    private String reportDescription;
    private String reportDetailAddress;
    private String defectType;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private User user;

    @OneToMany(mappedBy = "report", cascade = CascadeType.ALL)
    private List<ReportImage> images = new ArrayList<>();
}
  • ReportImage 엔티티:
@Entity
@Table(name = "reports_images")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class ReportImage {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long reportImageId;
    private String reportImageName;
    private String reportImageUrl;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "report_id")
    private Report report;
}

응답 형식

  • 성공 응답:
{
    "status": 200,
    "message": "신고가 성공적으로 접수되었습니다",
    "data": {
        "reportId": 2,
        "userId": 1,
        "reportDetailAddress": "부산시",
        "defectType": "균열",
        "reportDescription": "벽면에 균열이 발생했습니다",
        "reportDate": "2025-01-16T17:26:03.735",
        "images": [
            {
                "reportImageName": "crack.png",
                "reportImageUrl": "/uploads/images/e574034c-8c65-47af-a5bf-3cfa779d4d7a_crack.png"
            }
        ]
    }
}
  • 실패 응답:
{
    "status": 400,
    "message": "신고 처리 중 오류가 발생했습니다",
    "error": "필수 정보가 누락되었습니다"
}

참고

  • 권한 확인: 인증된 사용자만 신고 가능
  • 이미지 처리: 이미지 파일 크기 제한 및 형식 검증
  • 데이터 검증: 필수 입력 항목 검증
  • 예외 처리: 파일 업로드 실패, 잘못된 입력값 등 예외 상황 처리
  • 응답 구조: 표준화된 API 응답 형식 사용

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions