mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-13 12:55:00 +00:00
refactor(server): use DocModel to access doc meta (#10593)
This commit is contained in:
@@ -72,7 +72,7 @@ test('should render page success', async t => {
|
||||
text.insert(5, ' ');
|
||||
|
||||
await adapter.pushDocUpdates(workspace.id, docId, updates, user.id);
|
||||
await models.workspace.publishDoc(workspace.id, docId);
|
||||
await models.doc.publish(workspace.id, docId);
|
||||
|
||||
await app.GET(`/workspace/${workspace.id}/${docId}`).expect(200);
|
||||
t.pass();
|
||||
|
||||
@@ -102,10 +102,7 @@ export class DocRendererController {
|
||||
workspaceId: string,
|
||||
docId: string
|
||||
): Promise<RenderOptions | null> {
|
||||
let allowUrlPreview = await this.models.workspace.isPublicPage(
|
||||
workspaceId,
|
||||
docId
|
||||
);
|
||||
let allowUrlPreview = await this.models.doc.isPublic(workspaceId, docId);
|
||||
|
||||
if (!allowUrlPreview) {
|
||||
// if page is private, but workspace url preview is on
|
||||
|
||||
@@ -88,7 +88,7 @@ test('should fallback to [External] if workspace is public', async t => {
|
||||
});
|
||||
|
||||
test('should return null even if workspace has other public doc', async t => {
|
||||
await models.workspace.publishDoc(ws.id, 'doc1');
|
||||
await models.doc.publish(ws.id, 'doc1');
|
||||
|
||||
const role = await ac.getRole({
|
||||
workspaceId: ws.id,
|
||||
@@ -100,7 +100,7 @@ test('should return null even if workspace has other public doc', async t => {
|
||||
});
|
||||
|
||||
test('should return [External] if doc is public', async t => {
|
||||
await models.workspace.publishDoc(ws.id, 'doc1');
|
||||
await models.doc.publish(ws.id, 'doc1');
|
||||
|
||||
const role = await ac.getRole({
|
||||
workspaceId: ws.id,
|
||||
|
||||
@@ -84,7 +84,7 @@ test('should fallback to [External] if workspace is public', async t => {
|
||||
});
|
||||
|
||||
test('should return null even workspace has public doc', async t => {
|
||||
await models.workspace.publishDoc(ws.id, 'doc1');
|
||||
await models.doc.publish(ws.id, 'doc1');
|
||||
|
||||
const role = await ac.getRole({
|
||||
workspaceId: ws.id,
|
||||
@@ -95,7 +95,7 @@ test('should return null even workspace has public doc', async t => {
|
||||
});
|
||||
|
||||
test('should return mapped external permission for workspace has public docs', async t => {
|
||||
await models.workspace.publishDoc(ws.id, 'doc1');
|
||||
await models.doc.publish(ws.id, 'doc1');
|
||||
|
||||
const { permissions } = await ac.role({
|
||||
workspaceId: ws.id,
|
||||
|
||||
@@ -96,7 +96,12 @@ export class DocAccessController extends AccessController<'doc'> {
|
||||
}
|
||||
|
||||
private async defaultDocRole(workspaceId: string, docId: string) {
|
||||
const doc = await this.models.workspace.getDoc(workspaceId, docId);
|
||||
const doc = await this.models.doc.getMeta(workspaceId, docId, {
|
||||
select: {
|
||||
public: true,
|
||||
defaultRole: true,
|
||||
},
|
||||
});
|
||||
return {
|
||||
external: doc?.public ? DocRole.External : null,
|
||||
workspace: doc?.defaultRole ?? DocRole.Manager,
|
||||
|
||||
@@ -25,10 +25,7 @@ export class WorkspaceAccessController extends AccessController<'ws'> {
|
||||
// NOTE(@forehalo): special case for public page
|
||||
// Currently, we can not only load binary of a public Doc to render in a shared page,
|
||||
// so we need to ensure anyone has basic 'read' permission to a workspace that has public pages.
|
||||
if (
|
||||
!role &&
|
||||
(await this.models.workspace.hasPublicDoc(resource.workspaceId))
|
||||
) {
|
||||
if (!role && (await this.models.doc.hasPublic(resource.workspaceId))) {
|
||||
role = WorkspaceRole.External;
|
||||
}
|
||||
|
||||
|
||||
@@ -101,12 +101,17 @@ export class WorkspacesController {
|
||||
|
||||
if (!docId.isWorkspace) {
|
||||
// fetch the publish page mode for publish page
|
||||
const doc = await this.models.workspace.getDoc(
|
||||
const docMeta = await this.models.doc.getMeta(
|
||||
docId.workspace,
|
||||
docId.guid
|
||||
docId.guid,
|
||||
{
|
||||
select: {
|
||||
mode: true,
|
||||
},
|
||||
}
|
||||
);
|
||||
const publishPageMode =
|
||||
doc?.mode === PublicDocMode.Edgeless ? 'edgeless' : 'page';
|
||||
docMeta?.mode === PublicDocMode.Edgeless ? 'edgeless' : 'page';
|
||||
|
||||
res.setHeader('publish-mode', publishPageMode);
|
||||
}
|
||||
|
||||
@@ -175,7 +175,7 @@ export class WorkspaceDocResolver {
|
||||
complexity: 2,
|
||||
})
|
||||
async publicDocs(@Parent() workspace: WorkspaceType) {
|
||||
return this.models.workspace.getPublicDocs(workspace.id);
|
||||
return this.models.doc.findPublics(workspace.id);
|
||||
}
|
||||
|
||||
@ResolveField(() => DocType, {
|
||||
@@ -199,8 +199,7 @@ export class WorkspaceDocResolver {
|
||||
@Parent() workspace: WorkspaceType,
|
||||
@Args('docId') docId: string
|
||||
): Promise<DocType> {
|
||||
const doc = await this.models.workspace.getDoc(workspace.id, docId);
|
||||
|
||||
const doc = await this.models.doc.getMeta(workspace.id, docId);
|
||||
if (doc) {
|
||||
return doc;
|
||||
}
|
||||
@@ -257,11 +256,7 @@ export class WorkspaceDocResolver {
|
||||
|
||||
await this.ac.user(user.id).doc(workspaceId, docId).assert('Doc.Publish');
|
||||
|
||||
const doc = await this.models.workspace.publishDoc(
|
||||
workspaceId,
|
||||
docId,
|
||||
mode
|
||||
);
|
||||
const doc = await this.models.doc.publish(workspaceId, docId, mode);
|
||||
|
||||
this.logger.log(
|
||||
`Publish page ${docId} with mode ${mode} in workspace ${workspaceId}`
|
||||
@@ -297,7 +292,7 @@ export class WorkspaceDocResolver {
|
||||
|
||||
await this.ac.user(user.id).doc(workspaceId, docId).assert('Doc.Publish');
|
||||
|
||||
const doc = await this.models.workspace.revokePublicDoc(workspaceId, docId);
|
||||
const doc = await this.models.doc.unpublish(workspaceId, docId);
|
||||
|
||||
this.logger.log(`Revoke public doc ${docId} in workspace ${workspaceId}`);
|
||||
|
||||
@@ -575,7 +570,7 @@ export class DocResolver {
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
await this.models.workspace.setDocDefaultRole(
|
||||
await this.models.doc.setDefaultRole(
|
||||
input.workspaceId,
|
||||
input.docId,
|
||||
input.role
|
||||
|
||||
Reference in New Issue
Block a user