Skip to content

Comments

Feature/frb 156#40

Merged
clainyun merged 8 commits intodevelopfrom
feature/FRB-156
May 21, 2025
Merged

Feature/frb 156#40
clainyun merged 8 commits intodevelopfrom
feature/FRB-156

Conversation

@clainyun
Copy link
Member

@clainyun clainyun commented May 21, 2025

📌 PR 제목

[feat] 공간 담당자 정보 조회 API 구현


✨ 변경 사항

🔍 새로운 기능

  • 공간별 담당자 정보 조회 API 구현 (GET /api/workers/zone/{zoneId}/manager)
    • 담당자의 기본 정보 (이름, ID)
    • 연락처 정보 (이메일, 전화번호)
    • 현재 위치 정보 (현재 있는 공간의 ID와 이름)

📝 클래스별 변경 사항

  1. DTO
// ZoneManagerResponseDto.java
@Getter @Builder @NoArgsConstructor @AllArgsConstructor
public class ZoneManagerResponseDto {
    private String workerId;          // 작업자 ID
    private String name;              // 작업자 이름
    private String phoneNumber;       // 연락처
    private String email;             // 이메일
    private String currentZoneId;     // 현재 위치한 공간 ID
    private String currentZoneName;   // 현재 위치한 공간 이름
    
    // Entity → DTO 변환 메서드
    public static ZoneManagerResponseDto fromEntity(Worker worker, Zone currentZone) { ... }
}
  1. Repository
// WorkerZoneRepository.java
public interface WorkerZoneRepository extends JpaRepository<WorkerZone, WorkerZoneId> {
    // 특정 zone_id에 속한 작업자 목록 조회
    List<WorkerZone> findByZoneZoneId(String zoneId);
    
    // 특정 zone_id의 담당자 조회 (manageYn = true)
    Optional<WorkerZone> findByZoneZoneIdAndManageYnIsTrue(String zoneId);
}
  1. Service
// WorkerService.java
@Service @RequiredArgsConstructor
public class WorkerService {
    private final WorkerRepository workerRepository;
    private final WorkerLocationService workerLocationService;
    private final WorkerZoneRepository workerZoneRepository;

    @Transactional(readOnly = true)
    public ZoneManagerResponseDto getZoneManagerWithLocation(String zoneId) {
        // 1. 해당 공간의 담당자 조회
        WorkerZone zoneManager = workerZoneRepository.findByZoneZoneIdAndManageYnIsTrue(zoneId)
                .orElseThrow(() -> new IllegalArgumentException("해당 공간의 담당자를 찾을 수 없습니다: " + zoneId));
        
        // 2. 담당자의 현재 위치 조회
        ZoneHist currentLocation = workerLocationService.getCurrentWorkerLocation(manager.getWorkerId());
        
        // 3. DTO 변환 및 반환
        return ZoneManagerResponseDto.fromEntity(manager, currentZone);
    }
}
  1. Controller
// WorkerController.java
@RestController @RequestMapping("/api/workers")
public class WorkerController {
    @Operation(summary = "공간 담당자 정보 조회")
    @GetMapping("/zone/{zoneId}/manager")
    public ResponseEntity<ZoneManagerResponseDto> getZoneManager(@PathVariable String zoneId) {
        ZoneManagerResponseDto manager = workerService.getZoneManagerWithLocation(zoneId);
        return ResponseEntity.ok(manager);
    }
}

📸 스크린샷

변경 전 변경 후
![변경 전](이미지 URL) ![변경 후](이미지 URL)
  • Swagger UI에서 API 문서화 및 테스트 화면
  • API 응답 결과 화면

✅ 체크리스트

  • 코드에 불필요한 부분은 없는가?
    • 리스트 반환에서 단일 객체 반환으로 변경하여 불필요한 로직 제거
    • 중복되는 코드나 사용하지 않는 메서드 없음
    • 모든 클래스에 적절한 접근 제어자 사용
  • 기능이 정상 동작하는가?
    • Swagger UI를 통한 API 테스트 완료
    • 정상 케이스 테스트 완료
    • 예외 케이스 (담당자가 없는 경우) 테스트 완료
    • 담당자의 현재 위치가 없는 경우 처리 확인
  • 의존성은 문제가 없는가?
    • 기존 엔티티와 레포지토리 활용
    • 순환 참조 없음
    • Lombok 어노테이션 정상 동작 확인
  • 커밋 메시지는 명확한가?
    • 컨벤션에 맞는 커밋 메시지 작성
    • 변경 사항을 명확하게 설명

📎 관련 이슈

없음


💬 추가 설명

  1. 비즈니스 규칙

    • 공간별 담당자는 반드시 한 명만 존재
    • 담당자가 없는 경우 400 Bad Request 응답 반환
    • 담당자의 현재 위치 정보가 없는 경우 null로 반환
  2. API 명세

  • Request
GET /api/workers/zone/{zoneId}/manager
  • Response (200 OK)
{
    "workerId": "20240101-1234",
    "name": "홍길동",
    "phoneNumber": "01012345678",
    "email": "hong@example.com",
    "currentZoneId": "ZONE002",
    "currentZoneName": "2층 작업장"
}
  • Error Response (400 Bad Request)
{
    "message": "해당 공간의 담당자를 찾을 수 없습니다: ZONE001",
    "status": 400
}
  1. 테스트 케이스
    • 정상 케이스: 담당자가 있는 공간 조회
    • 예외 케이스 1: 존재하지 않는 공간 ID로 조회
    • 예외 케이스 2: 담당자가 지정되지 않은 공간 조회
    • 예외 케이스 3: 담당자가 현재 어떤 공간에도 없는 경우

@clainyun clainyun requested a review from JuneSHYoo May 21, 2025 08:16
@clainyun clainyun self-assigned this May 21, 2025
@clainyun clainyun merged commit abbc7c9 into develop May 21, 2025
1 check passed
gwangbu-desu pushed a commit that referenced this pull request May 24, 2025
@wdd1016 wdd1016 deleted the feature/FRB-156 branch June 3, 2025 10:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant