package kr.itn.itnhub.memo; 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; /** * 기관관리 상세의 업무메모 탭이 쓰는 서비스. 전화 통화 등 담당자와의 연락 내용을 * 기관별로 남겨두는 단순 CRUD이며, Mattermost와는 무관한 순수 DB 기능이다. */ @Service public class WorkMemoService { private final WorkMemoMapper memoMapper; private final OrganizationMapper orgMapper; public WorkMemoService(WorkMemoMapper memoMapper, OrganizationMapper orgMapper) { this.memoMapper = memoMapper; this.orgMapper = orgMapper; } public List list(Long orgId) { requireOrg(orgId); return memoMapper.findByOrg(orgId); } @Transactional public WorkMemo create(Long orgId, MemoRequest request) { requireOrg(orgId); WorkMemo memo = new WorkMemo(); memo.setOrgId(orgId); memo.setContactName(request.contactName()); memo.setBody(request.body()); memoMapper.insert(memo); // 방금 넣은 행이 created_at 기준 가장 최신이므로 목록의 첫 행이 곧 이 메모다. return memoMapper.findByOrg(orgId).get(0); } @Transactional public void delete(Long orgId, Long memoId) { requireOrg(orgId); int deleted = memoMapper.delete(orgId, memoId); if (deleted == 0) { throw new OrgNotFoundException("메모를 찾을 수 없습니다: " + memoId); } } private void requireOrg(Long orgId) { if (orgMapper.findById(orgId) == null) { throw new OrgNotFoundException("기관을 찾을 수 없습니다: " + orgId); } } }