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); } } }