Files
jiapuapp/services/api/family-article-service.js
T
2026-09-13 17:45:52 +08:00

147 lines
5.5 KiB
JavaScript

import {
normalizeAppArticle,
normalizeAppArticles,
normalizeArticleCategoryOptions,
normalizeArticleCreatePayload
} from './family-article-contract.js'
import { normalizeGenealogyPathId } from './genealogy-contract.js'
import { normalizeResourcePathId } from './request-normalizers.js'
import {
contentAccessHeader,
normalizeContentAccessGrant,
normalizeContentPasswordPayload
} from './protected-content-contract.js'
import { requestStrict } from './request-client.js'
const requestArticleContentProtection = async ({
genealogyId,
articleId,
method,
data,
requestOptions
}) => {
return requestStrict({
url: `/genealogy/app/genealogies/${genealogyId}/articles/${articleId}/content-protection`,
method,
...(data === undefined ? {} : { data })
}, {
requireData: false,
requestController: requestOptions.requestController ?? null
})
}
export const familyArticleApi = {
async createArticle(genealogyId, payload, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const article = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/articles`,
method: 'POST',
data: normalizeArticleCreatePayload(payload)
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeAppArticle(article, normalizedGenealogyId)
},
async getArticles(genealogyId, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const articles = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/articles`,
method: 'GET'
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeAppArticles(articles, normalizedGenealogyId)
},
async getArticleDetail(genealogyId, articleId, accessToken = '', requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedArticleId = normalizeResourcePathId(articleId, '谱文标识')
const article = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/articles/${normalizedArticleId}`,
method: 'GET',
header: contentAccessHeader(accessToken)
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeAppArticle(article, normalizedGenealogyId, normalizedArticleId)
},
async updateArticle(genealogyId, articleId, payload, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedArticleId = normalizeResourcePathId(articleId, '谱文标识')
const article = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/articles/${normalizedArticleId}`,
method: 'PUT',
data: normalizeArticleCreatePayload(payload)
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeAppArticle(article, normalizedGenealogyId, normalizedArticleId)
},
async deleteArticle(genealogyId, articleId, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedArticleId = normalizeResourcePathId(articleId, '谱文标识')
await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/articles/${normalizedArticleId}`,
method: 'DELETE'
}, {
requireData: false,
requestController: requestOptions.requestController ?? null
})
return null
},
async setArticlePassword(genealogyId, articleId, password, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedArticleId = normalizeResourcePathId(articleId, '谱文标识')
const passwordPayload = normalizeContentPasswordPayload(password)
await requestArticleContentProtection({
genealogyId: normalizedGenealogyId,
articleId: normalizedArticleId,
method: 'PUT',
data: passwordPayload,
requestOptions
})
return null
},
async unlockArticle(genealogyId, articleId, password, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedArticleId = normalizeResourcePathId(articleId, '谱文标识')
const passwordPayload = normalizeContentPasswordPayload(password)
const accessGrant = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/articles/${normalizedArticleId}/content-unlock`,
method: 'POST',
data: passwordPayload
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeContentAccessGrant(accessGrant)
},
async disableArticlePassword(genealogyId, articleId, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const normalizedArticleId = normalizeResourcePathId(articleId, '谱文标识')
await requestArticleContentProtection({
genealogyId: normalizedGenealogyId,
articleId: normalizedArticleId,
method: 'DELETE',
requestOptions
})
return null
},
async getArticleCategories(genealogyId, requestOptions = {}) {
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
const categories = await requestStrict({
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/article-categories`,
method: 'GET'
}, {
requestController: requestOptions.requestController ?? null
})
return normalizeArticleCategoryOptions(categories)
}
}