개요
사용자가 건물의 결함을 신고할 수 있는 API를 구현합니다.
사용자는 결함 유형, 위치, 설명과 함께 이미지를 첨부하여 신고할 수 있습니다.
신고하기 API
작업 내용
세부 내용
- 모델 정의:
@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<>();
}
@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 응답 형식 사용
개요
사용자가 건물의 결함을 신고할 수 있는 API를 구현합니다.
사용자는 결함 유형, 위치, 설명과 함께 이미지를 첨부하여 신고할 수 있습니다.
신고하기 API
작업 내용
세부 내용
응답 형식
{ "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": "필수 정보가 누락되었습니다" }참고