mirror of https://github.com/fantasticit/think.git
chore: improve get wiki home document
This commit is contained in:
parent
f82d30f8c8
commit
914f7dcc00
|
@ -156,29 +156,6 @@ export const useAllPublicWikis = () => {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取知识库首页文档
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
export const getWikiHomeDocument = (wikiId, cookie = null): Promise<IDocument> => {
|
|
||||||
return HttpClient.request({
|
|
||||||
method: WikiApiDefinition.getHomeDocumentById.method,
|
|
||||||
url: WikiApiDefinition.getHomeDocumentById.client(wikiId),
|
|
||||||
cookie,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取知识库首页文档
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
export const useWikiHomeDocument = (wikiId) => {
|
|
||||||
const { data, error, isLoading } = useQuery(WikiApiDefinition.getHomeDocumentById.client(wikiId), () =>
|
|
||||||
getWikiHomeDocument(wikiId)
|
|
||||||
);
|
|
||||||
return { data, error, loading: isLoading };
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取知识库详情
|
* 获取知识库详情
|
||||||
* @param wikiId
|
* @param wikiId
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
import { Spin } from '@douyinfe/semi-ui';
|
||||||
import { IWiki, WikiApiDefinition } from '@think/domains';
|
import { IWiki, WikiApiDefinition } from '@think/domains';
|
||||||
import { DataRender } from 'components/data-render';
|
import { DataRender } from 'components/data-render';
|
||||||
import { DocumentReader } from 'components/document/reader';
|
import { DocumentReader } from 'components/document/reader';
|
||||||
import { WikiTocs } from 'components/wiki/tocs';
|
import { WikiTocs } from 'components/wiki/tocs';
|
||||||
import { getWikiDetail, getWikiHomeDocument, getWikiTocs, useWikiHomeDocument } from 'data/wiki';
|
import { getWikiDetail, getWikiTocs, useWikiDetail } from 'data/wiki';
|
||||||
import { DoubleColumnLayout } from 'layouts/double-column';
|
import { DoubleColumnLayout } from 'layouts/double-column';
|
||||||
import { NextPage } from 'next';
|
import { NextPage } from 'next';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
@ -13,7 +14,7 @@ interface IProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
const Page: NextPage<IProps> = ({ wikiId }) => {
|
const Page: NextPage<IProps> = ({ wikiId }) => {
|
||||||
const { data: doc, loading, error } = useWikiHomeDocument(wikiId);
|
const { data: wiki, loading, error } = useWikiDetail(wikiId);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DoubleColumnLayout
|
<DoubleColumnLayout
|
||||||
|
@ -21,21 +22,30 @@ const Page: NextPage<IProps> = ({ wikiId }) => {
|
||||||
rightNode={
|
rightNode={
|
||||||
<DataRender
|
<DataRender
|
||||||
loading={loading}
|
loading={loading}
|
||||||
|
loadingContent={
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
minHeight: 240,
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
margin: 'auto',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Spin />
|
||||||
|
</div>
|
||||||
|
}
|
||||||
error={error}
|
error={error}
|
||||||
normalContent={() => <DocumentReader key={doc.id} documentId={doc.id} />}
|
normalContent={() => <DocumentReader key={wiki.homeDocumentId} documentId={wiki.homeDocumentId} />}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
></DoubleColumnLayout>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
Page.getInitialProps = async (ctx) => {
|
Page.getInitialProps = async (ctx) => {
|
||||||
const { wikiId } = ctx.query;
|
const { wikiId } = ctx.query;
|
||||||
const res = await serverPrefetcher(ctx, [
|
const res = await serverPrefetcher(ctx, [
|
||||||
{
|
|
||||||
url: WikiApiDefinition.getHomeDocumentById.client(wikiId as IWiki['id']),
|
|
||||||
action: (cookie) => getWikiHomeDocument(cookie),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
url: WikiApiDefinition.getDetailById.client(wikiId as IWiki['id']),
|
url: WikiApiDefinition.getDetailById.client(wikiId as IWiki['id']),
|
||||||
action: (cookie) => getWikiDetail(wikiId, cookie),
|
action: (cookie) => getWikiDetail(wikiId, cookie),
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { IUser } from './user';
|
import { IUser } from './user';
|
||||||
|
import { IDocument } from './document';
|
||||||
/**
|
/**
|
||||||
* 知识库状态枚举
|
* 知识库状态枚举
|
||||||
*/
|
*/
|
||||||
|
@ -32,6 +33,7 @@ export interface IWiki {
|
||||||
createUserId: IUser['id'];
|
createUserId: IUser['id'];
|
||||||
createUser: IUser;
|
createUser: IUser;
|
||||||
status: WikiStatus;
|
status: WikiStatus;
|
||||||
|
homeDocumentId: IDocument['id'];
|
||||||
createdAt: Date;
|
createdAt: Date;
|
||||||
updatedAt: Date;
|
updatedAt: Date;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { IUser } from './user';
|
import { IUser } from './user';
|
||||||
|
import { IDocument } from './document';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 知识库状态枚举
|
* 知识库状态枚举
|
||||||
|
@ -36,6 +37,7 @@ export interface IWiki {
|
||||||
createUserId: IUser['id'];
|
createUserId: IUser['id'];
|
||||||
createUser: IUser;
|
createUser: IUser;
|
||||||
status: WikiStatus;
|
status: WikiStatus;
|
||||||
|
homeDocumentId: IDocument['id'];
|
||||||
createdAt: Date;
|
createdAt: Date;
|
||||||
updatedAt: Date;
|
updatedAt: Date;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,9 @@ export class WikiEntity {
|
||||||
@Column({ type: 'varchar', comment: '创建用户 Id' })
|
@Column({ type: 'varchar', comment: '创建用户 Id' })
|
||||||
public createUserId: string;
|
public createUserId: string;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', comment: '知识库首页文档Id', default: '' })
|
||||||
|
public homeDocumentId: string;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
type: 'enum',
|
type: 'enum',
|
||||||
enum: WikiStatus,
|
enum: WikiStatus,
|
||||||
|
|
|
@ -13,7 +13,7 @@ import { MessageService } from '@services/message.service';
|
||||||
import { UserService } from '@services/user.service';
|
import { UserService } from '@services/user.service';
|
||||||
import { OutUser } from '@services/user.service';
|
import { OutUser } from '@services/user.service';
|
||||||
import { ViewService } from '@services/view.service';
|
import { ViewService } from '@services/view.service';
|
||||||
import { DocumentStatus, IPagination, WikiStatus, WikiUserRole } from '@think/domains';
|
import { CollectType, DocumentStatus, IPagination, WikiStatus, WikiUserRole } from '@think/domains';
|
||||||
import { instanceToPlain } from 'class-transformer';
|
import { instanceToPlain } from 'class-transformer';
|
||||||
import * as lodash from 'lodash';
|
import * as lodash from 'lodash';
|
||||||
import { Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
|
@ -41,7 +41,26 @@ export class WikiService {
|
||||||
|
|
||||||
@Inject(forwardRef(() => ViewService))
|
@Inject(forwardRef(() => ViewService))
|
||||||
private readonly viewService: ViewService
|
private readonly viewService: ViewService
|
||||||
) {}
|
) {
|
||||||
|
this.fixWikiData();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修正脚本
|
||||||
|
async fixWikiData() {
|
||||||
|
const wikis = await this.wikiRepo.find();
|
||||||
|
const needFixWikis = wikis.filter((wiki) => !wiki.homeDocumentId);
|
||||||
|
|
||||||
|
await Promise.all(
|
||||||
|
needFixWikis.map(async (wiki) => {
|
||||||
|
const doc = await this.documentService.findWikiHomeDocument(wiki.id);
|
||||||
|
const homeDocumentId = doc.id;
|
||||||
|
const withHomeDocumentIdWiki = await this.wikiRepo.merge(wiki, { homeDocumentId });
|
||||||
|
await this.wikiRepo.save(withHomeDocumentIdWiki);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('修正完成');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按 id 查取知识库
|
* 按 id 查取知识库
|
||||||
|
@ -310,16 +329,23 @@ export class WikiService {
|
||||||
targetUserRole: WikiUserRole.admin,
|
targetUserRole: WikiUserRole.admin,
|
||||||
});
|
});
|
||||||
// 知识库首页文档
|
// 知识库首页文档
|
||||||
await this.documentService.createDocument(
|
const [doc] = await Promise.all([
|
||||||
user,
|
await this.documentService.createDocument(
|
||||||
{
|
user,
|
||||||
wikiId: wiki.id,
|
{
|
||||||
parentDocumentId: null,
|
wikiId: wiki.id,
|
||||||
title: wiki.name,
|
parentDocumentId: null,
|
||||||
},
|
title: wiki.name,
|
||||||
true
|
},
|
||||||
);
|
true
|
||||||
return wiki;
|
),
|
||||||
|
await this.collectorService.toggleStar(user, { type: CollectType.wiki, targetId: wiki.id }),
|
||||||
|
]);
|
||||||
|
const homeDocumentId = doc.id;
|
||||||
|
const withHomeDocumentIdWiki = await this.wikiRepo.merge(wiki, { homeDocumentId });
|
||||||
|
await this.wikiRepo.save(withHomeDocumentIdWiki);
|
||||||
|
|
||||||
|
return withHomeDocumentIdWiki;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue