package kr.itn.itnhub.mattermost; import kr.itn.itnhub.feed.FileRef; import kr.itn.itnhub.feed.FileView; import kr.itn.itnhub.feed.PostView; import java.util.List; import java.util.Optional; public interface MattermostClient { Optional findChannelIdByInternalName(String internalName); Optional findChannelIdByDisplayName(String displayName); String createPrivateChannel(String internalName, String displayName); /** 채널의 최근 게시글 한 페이지를 오래된순(화면 표시 순서)으로 돌려준다. */ List getRecentPosts(String channelId, int perPage); /** 채널 전체를 페이지네이션하며 첨부파일을 전부 모아 최신순으로 돌려준다. */ List collectChannelFiles(String channelId); byte[] downloadFile(String fileId); FileRef fileInfo(String fileId); /** 파일을 채널에 업로드하고 file id를 돌려준다. 아직 어떤 게시글에도 첨부되지 않은 상태다. */ String uploadFile(String channelId, String filename, byte[] data, String contentType); /** 채널에 게시글을 올리고 post id를 돌려준다. {@code fileIds}는 비어 있어도 된다. */ String createPost(String channelId, String message, List fileIds); void pinPost(String postId); void unpinPost(String postId); /** 채널의 고정된 게시글을 최신순으로 돌려준다. */ List getPinnedPosts(String channelId); void updateChannelHeader(String channelId, String header); /** 이메일로 사용자를 찾는다. 없으면 빈 값이다. */ Optional findUserIdByEmail(String email); /** 사용자를 새로 만들고 user id를 돌려준다. */ String createUser(String email, String username, String password); /** 사용자를 (설정된) 팀에 추가한다. 채널 추가 전에 반드시 선행되어야 한다. */ void addUserToTeam(String userId); /** 사용자를 채널에 추가한다. 이미 멤버여도 안전하다(idempotent). */ void addUserToChannel(String channelId, String userId); }