-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
개요
사용자가 건물의 결함을 신고할 수 있는 API를 구현합니다.
사용자는 결함 유형, 위치, 설명과 함께 이미지를 첨부하여 신고할 수 있습니다.
신고하기 API
작업 내용
- 모델 정의:
- Report 엔티티 작성 및 DB 매핑
- ReportImage 엔티티 작성 (이미지 저장용)
- 이미지 처리:
- 이미지 업로드 및 저장
- 이미지 URL 생성
- 신고 처리:
- 신고 정보 검증
- 이미지와 함께 신고 정보 저장
- 신고 완료 응답
세부 내용
- 모델 정의:
- 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
Labels
No labels