콘텐츠로 이동

커뮤니티 API

커뮤니티 JSON은 /api/v1/community 아래에 있습니다. 공개 콘텐츠를 읽을 때는 세션이 필요 없습니다. 변경에는 Better Auth 세션, 인증된 이메일, 활성 커뮤니티 프로필, 같은 출처의 요청이 필요합니다.

공개 GET 응답은 서버에서도, Haneoka의 페이지에서도 읽을 수 있습니다. 현재 커뮤니티 응답은 다른 사이트의 브라우저에 CORS 허가를 주지 않으므로 교차 출처에서 직접 fetch하면 차단됩니다. 세션, 비공개 데이터, 변경은 아래의 같은 출처 요건을 따릅니다.

메서드경로인증용도
GET/api/v1/community/posts선택피드, 검색, 태그, 커서 페이지 나누기.
POST/api/v1/community/posts필수게시물을 작성한다.
GET/api/v1/community/posts/{postId}선택게시물과 댓글을 읽는다.
PATCH / DELETE/api/v1/community/posts/{postId}작성자게시물을 수정하거나 삭제한다.
POST/api/v1/community/posts/{postId}/comments필수댓글이나 답글을 작성한다.
PUT/api/v1/community/posts/{postId}/reaction필수좋아요를 전환한다.
PUT/api/v1/community/posts/{postId}/bookmark필수북마크를 전환한다.
PUT/api/v1/community/posts/{postId}/pin작성자고정하거나 고정 해제한다.
POST/api/v1/community/posts/{postId}/archive작성자보관한다.
POST/api/v1/community/posts/{postId}/restore작성자복원한다.
GET/api/v1/community/notifications필수알림을 나열하거나 개수를 센다.
PUT/api/v1/community/notifications/{notificationId}/read필수알림 하나를 읽음으로 표시한다.
PUT/api/v1/community/notifications/read-all필수보이는 알림을 모두 읽음으로 표시한다.
GET/api/v1/community/tags선택보이는 게시물 수와 함께 태그를 나열한다.
GET/api/v1/community/tags/preferences필수태그 설정을 나열한다.
PUT/api/v1/community/tags/{tag}/preference필수follow, mute, null을 설정한다.
PUT/api/v1/community/users/{uid}/{follow|block|mute}필수사용자 관계를 설정한다.
PUT/api/v1/community/posts/{postId}/feedback필수추천 피드백을 설정한다.
DELETE/api/v1/community/me/post-feedback필수추천 피드백을 지운다.
POST/api/v1/community/reports필수게시물, 댓글, 사용자를 신고한다.
PATCH / DELETE/api/v1/community/comments/{commentId}작성자댓글을 수정하거나 삭제한다.
PUT/api/v1/community/comments/{commentId}/reaction필수댓글 좋아요를 전환한다.
GET/api/v1/community/me/comments필수로그인한 사용자의 댓글을 나열한다.

요청과 응답 필드의 자세한 내용은 게시물, 프로필, 업로드를 참고하세요.

게시물 응답에는 정식 커뮤니티 DTO 필드가 들어 있습니다.

{
"id": "post-uuid-from-the-service",
"title": "A post title",
"body": "Post body",
"visibility": "public",
"moderationStatus": "allow",
"state": "active",
"version": 1,
"createdAt": 1730000000000,
"updatedAt": 1730000000000,
"lastEditedAt": 1730000000000,
"commentCount": 0,
"likeCount": 0,
"pinnedAt": null,
"archivedAt": null,
"commentsLockedAt": null,
"authorUid": 1001,
"authorName": "Example user",
"authorImage": null,
"avatarSeed": "opaque-avatar-seed",
"device": null,
"ipLocation": null,
"tags": [],
"attachments": []
}

이 예의 ID와 아바타 시드는 응답 필드를 가리키는 라벨이며 클라이언트가 만들어 내는 값이 아닙니다. 게시물 상세 엔벌로프는 보는 사람별 플래그를 viewer에 따로 담고, 목록 항목은 목록 응답 안에 각자의 플래그를 담습니다.

사용자가 쓴 글은 공개 전에 검사됩니다. 응답은 201이거나 moderationQueued가 붙은 202입니다. 게시물이나 댓글은 모더레이션이 끝날 때까지 pending일 수 있습니다. 쓰기에 성공했다고 바로 검색되는 것은 아니니, 반환된 객체와 그 상태를 표시하세요.