package com.zioinfo.mes.member; import com.zioinfo.mes.admin.dto.UserDto; import com.zioinfo.mes.admin.mapper.AdminUserMapper; import com.zioinfo.mes.common.ApiResponse; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * 구성원(작업자) 조회 API — 작업 배정·실적 입력 시 작업자 선택용. * *

관리자 CRUD 는 /api/admin/users(SuperAdmin)가 담당하고, 본 API 는 조회 전용(Viewer+). * 보안: {@link UserDto} 로만 반환하여 password_hash 노출 차단. */ @RestController @RequestMapping("/api/mes/members") @RequiredArgsConstructor public class MemberController { private final AdminUserMapper mapper; /** 활성 구성원 목록(작업자 배정 드롭다운용). role 필터 가능. */ @GetMapping public ApiResponse> list(@RequestParam(required = false) String role) { List all = mapper.findAll().stream() .filter(u -> u.isActive()) .filter(u -> role == null || role.isBlank() || role.equalsIgnoreCase(u.getRole())) .map(UserDto::from) .toList(); return ApiResponse.ok(all); } /** 현장 작업자(WORKER) 목록 — 작업 배정 전용. */ @GetMapping("/workers") public ApiResponse> workers() { List workers = mapper.findAll().stream() .filter(u -> u.isActive()) .filter(u -> "WORKER".equalsIgnoreCase(u.getRole()) || "MANAGER".equalsIgnoreCase(u.getRole())) .map(UserDto::from) .toList(); return ApiResponse.ok(workers); } }