Files
sb-front/src/api/boardApi.js
T
ByungCheol f07cb349e2 feat: 게시판 공지 UI (관리자) — 작성 체크박스/상세 토글/목록 배지
- BoardWriteView: 관리자가 커뮤니티 새 글 작성 시 '공지로 등록' 체크박스
- BoardDetailView: 관리자 공지 등록/해제 버튼 + 제목 공지 배지
- BoardListView: 공지 배지 + 행 강조(최상단은 백엔드 정렬)
- boardApi: setNotice/unsetNotice

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 22:07:03 +09:00

64 lines
1.7 KiB
JavaScript

import http from './http'
// 백엔드 /api/board 엔드포인트와 매핑
export const boardApi = {
list({ category = '', page = 1, size = 10, tag = '', keyword = '', searchType = '' } = {}) {
return http.get('/board/posts', {
params: {
category: category || undefined,
page,
size,
tag: tag || undefined,
keyword: keyword || undefined,
searchType: keyword ? searchType || 'title' : undefined,
},
})
},
get(id) {
return http.get(`/board/posts/${id}`)
},
create(payload) {
return http.post('/board/posts', payload)
},
update(id, payload) {
return http.put(`/board/posts/${id}`, payload)
},
remove(id) {
return http.delete(`/board/posts/${id}`)
},
// 본문 인라인 이미지 업로드(서버 DB 저장) → { url } (예: /api/images/123)
uploadImage(blob) {
const fd = new FormData()
fd.append('image', blob, 'image.jpg')
return http.post('/board/images', fd, {
headers: { 'Content-Type': 'multipart/form-data' },
timeout: 30000,
})
},
tags() {
return http.get('/board/tags')
},
tagGroups() {
return http.get('/board/tag-groups')
},
addComment(id, content) {
return http.post(`/board/posts/${id}/comments`, { content })
},
removeComment(commentId) {
return http.delete(`/board/comments/${commentId}`)
},
block(id, reason) {
return http.post(`/board/posts/${id}/block`, { reason })
},
unblock(id) {
return http.post(`/board/posts/${id}/unblock`)
},
// 공지 설정/해제 (관리자) — 목록 최상단 고정
setNotice(id) {
return http.post(`/board/posts/${id}/notice`)
},
unsetNotice(id) {
return http.post(`/board/posts/${id}/unnotice`)
},
}