Darayo Backend Convention - DDD-Community/DDD-12-Darayo-Backend GitHub Wiki

디렉토리 ꡬ쑰

festival/
β”œβ”€β”€ domain/                    # 도메인 둜직 μ „λ°˜ (μ—”ν‹°ν‹°, μ„œλΉ„μŠ€), μ˜μ†μ„± 둜직
β”‚   β”œβ”€β”€ constant/              # enum classλ“€
β”‚   β”œβ”€β”€ entity/                # JPA Entity λ“± λΉ„μ¦ˆλ‹ˆμŠ€ λͺ¨λΈ
β”‚   β”œβ”€β”€ repository/            # JPA Repository λ˜λŠ” QueryDSL λ“± 데이터 μ €μž₯/쑰회 κ΅¬ν˜„μ²΄
β”‚   └── service/               # 도메인 μ„œλΉ„μŠ€ (Controllerκ°€ 직접 의쑴, UseCase 역할을 λŒ€μ‹  함)
β”‚
β”œβ”€β”€ infra/                      # 기술 μ„ΈλΆ€ 사항
β”‚   └── fcm/                    # fcm
β”‚   └── ext-library/            # 기타 μ™ΈλΆ€ 쒅속성
β”‚
└── presentation/              # μ™ΈλΆ€ μš”μ²­μ„ λ°›λŠ” 계측 (REST API ONLY)
    β”œβ”€β”€ artist/                
    β”‚   β”œβ”€β”€ ArtistController.java
    β”‚   └── exchanges/         # μš”μ²­/응닡 DTO
    └── performance/
        β”œβ”€β”€ PerformanceController.java
        └── exchanges/
    

Presentation

Exchanges (μš”μ²­, 응닡 λ©”μ‹œμ§€ ν˜•μ‹)

  • Record νƒ€μž… ν™œμš©
  • μš”μ²­ νƒ€μž…μ€ Req, 응닡 νƒ€μž…μ€ Res
  • Inner Record둜 ν•„μš”ν•œ ν•˜μœ„ 응닡 νƒ€μž… μ •μ˜

μš”μ²­ μ˜ˆμ‹œ)

public record EditReservationInfoReq(
        // ....
) { }

응닡 μ˜ˆμ‹œ)

public record UserGetTimetableRes(
        // ...
        List<UserTimetableArtistRes> artists
) {
    public record UserTimetableArtistRes(
           //...
    ) { }
}

Controller

νŒŒλΌλ―Έν„°κ°€ μ—¬λŸ¬κ°œ μžˆλŠ” 경우

@RestController
@RequestMapping("/api/admin/timetable")
@RequiredArgsConstructor
public class TimetableAdminController {
    private final TimetableManagement timetableManagement;

    @PutMapping("/{timetableId}")
    public ResponseEntity<Void> editTimetable(
            @PathVariable("timetableId") Long timetableId,
            @RequestBody EditTimetableReq req
    ) {
        /** κ΅¬ν˜„λΆ€ **/
        return ResponseEntity.ok().build();
    }
}

νŒŒλΌλ―Έν„°κ°€ ν•˜λ‚˜λ§Œ μžˆλŠ” 경우

@GetMapping("/{festivalId}/timetable")
public ResponseEntity<BaseResponse<List<UserGetTimetableRes>>> getPerformancesForFestival(
        @PathVariable Long festivalId
) {
    List<UserGetTimetableRes> data = timetableManagement.getUserGetTimetables(festivalId);
    return ResponseEntity.ok(BaseResponse.success(data));
}
⚠️ **GitHub.com Fallback** ⚠️