package kr.itn.itnhub.re;
import kr.itn.itnhub.org.OrgNotFoundException;
import kr.itn.itnhub.org.OrganizationMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 기관관리 상세의 RE 탭이 쓰는 서비스.
*
*
요구사항 [4]: 별도 양식 없이 메모장처럼 등록한다. 메모 1개가 RE 1개다.
*/
@Service
public class ReMemoService {
private final ReMemoMapper mapper;
private final OrganizationMapper orgMapper;
public ReMemoService(ReMemoMapper mapper, OrganizationMapper orgMapper) {
this.mapper = mapper;
this.orgMapper = orgMapper;
}
public List list(Long orgId) {
requireOrg(orgId);
return mapper.findByOrg(orgId);
}
@Transactional
public List add(Long orgId, ReMemoRequest request) {
requireOrg(orgId);
mapper.insert(orgId, request.content().trim(), request.author().trim(),
blankToNull(request.memoDate()), request.resolved());
return mapper.findByOrg(orgId);
}
@Transactional
public List update(Long orgId, Long memoId, ReMemoRequest request) {
requireOrg(orgId);
int updated = mapper.update(orgId, memoId, request.content().trim(),
request.author().trim(), blankToNull(request.memoDate()), request.resolved());
if (updated == 0) {
throw new ReMemoNotFoundException("RE 메모를 찾을 수 없습니다: " + memoId);
}
return mapper.findByOrg(orgId);
}
@Transactional
public void delete(Long orgId, Long memoId) {
requireOrg(orgId);
if (mapper.delete(orgId, memoId) == 0) {
throw new ReMemoNotFoundException("RE 메모를 찾을 수 없습니다: " + memoId);
}
}
private String blankToNull(String value) {
return (value == null || value.isBlank()) ? null : value.trim();
}
private void requireOrg(Long orgId) {
if (orgMapper.findById(orgId) == null) {
throw new OrgNotFoundException("기관을 찾을 수 없습니다: " + orgId);
}
}
}