Skip to content

Commit

Permalink
feat(api): add contentPreview field for resource data
Browse files Browse the repository at this point in the history
  • Loading branch information
mrcfps committed Jul 21, 2024
1 parent 59466db commit b665599
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 28 deletions.
7 changes: 2 additions & 5 deletions apps/api/src/knowledge/knowledge.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,11 +120,8 @@ export class KnowledgeController {
@User() user: UserModel,
@Query('resourceId') resourceId: string,
): Promise<GetResourceDetailResponse> {
const resource = await this.knowledgeService.getResourceDetail(user, {
resourceId,
needDoc: true,
});
return buildSuccessResponse(resourcePO2DTO(resource));
const resource = await this.knowledgeService.getResourceDetail(user, { resourceId });
return buildSuccessResponse(resourcePO2DTO(resource, true));
}

@UseGuards(JwtAuthGuard)
Expand Down
22 changes: 11 additions & 11 deletions apps/api/src/knowledge/knowledge.dto.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
import { Collection as CollectionModel, Resource as ResourceModel } from '@prisma/client';
import { UpsertResourceRequest, Collection, Resource } from '@refly/openapi-schema';
import { omit } from '../utils';
import { omit } from '@/utils';

export type FinalizeResourceParam = UpsertResourceRequest & {
uid: string;
};

type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;

type ResourceWithOptionalContent = MakeOptional<ResourceModel, 'content'>;

export const collectionPO2DTO = (
coll: CollectionModel & { resources?: ResourceWithOptionalContent[] },
coll: CollectionModel & { resources?: ResourceModel[] },
): Collection => {
if (!coll) {
return null;
Expand All @@ -20,20 +16,24 @@ export const collectionPO2DTO = (
...omit(coll, ['id', 'uid', 'deletedAt']),
createdAt: coll.createdAt.toJSON(),
updatedAt: coll.updatedAt.toJSON(),
resources: coll.resources?.map(resourcePO2DTO),
resources: coll.resources?.map((resource) => resourcePO2DTO(resource)),
};
};

export const resourcePO2DTO = (resource: ResourceWithOptionalContent): Resource => {
export const resourcePO2DTO = (resource: ResourceModel, showFullContent?: boolean): Resource => {
if (!resource) {
return null;
}
return {
...omit(resource, ['id', 'uid', 'stateStorageKey', 'deletedAt']),
content: resource.content as string,
const res: Resource = {
...omit(resource, ['id', 'uid', 'content', 'stateStorageKey', 'deletedAt']),
contentPreview: resource.content ? resource.content.slice(0, 250) + '...' : '',
data: JSON.parse(resource.meta),
collabEnabled: !!resource.stateStorageKey,
createdAt: resource.createdAt.toJSON(),
updatedAt: resource.updatedAt.toJSON(),
};
if (showFullContent) {
res.content = resource.content;
}
return res;
};
11 changes: 2 additions & 9 deletions apps/api/src/knowledge/knowledge.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ export class KnowledgeService {
}

let resources = await this.prisma.resource.findMany({
omit: { content: true },
where: { collectionId, deletedAt: null },
orderBy: { updatedAt: 'desc' },
});
Expand Down Expand Up @@ -115,7 +114,6 @@ export class KnowledgeService {
// Query resources by collection
if (collectionId) {
return this.prisma.resource.findMany({
omit: { content: true },
where: {
collectionId,
resourceType,
Expand All @@ -129,7 +127,6 @@ export class KnowledgeService {
}

const resources = await this.prisma.resource.findMany({
omit: { content: true },
where: { resourceId, resourceType, uid: user.uid, deletedAt: null },
skip: (page - 1) * pageSize,
take: pageSize,
Expand All @@ -142,13 +139,9 @@ export class KnowledgeService {
}));
}

async getResourceDetail(
user: Pick<User, 'uid'>,
param: { resourceId: string; needDoc?: boolean },
) {
const { resourceId, needDoc } = param;
async getResourceDetail(user: Pick<User, 'uid'>, param: { resourceId: string }) {
const { resourceId } = param;
const resource = await this.prisma.resource.findFirst({
omit: { content: !needDoc },
where: { resourceId, deletedAt: null },
});

Expand Down
5 changes: 4 additions & 1 deletion packages/openapi-schema/schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -980,9 +980,12 @@ components:
type: string
format: date-time
description: Collection update time
contentPreview:
type: string
description: Preview content for this resource
content:
type: string
description: Document content for this resource
description: Document content for this resource (only returned in detail API)
Collection:
type: object
required:
Expand Down
6 changes: 5 additions & 1 deletion packages/openapi-schema/src/schemas.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,13 @@ export const $Resource = {
format: 'date-time',
description: 'Collection update time',
},
contentPreview: {
type: 'string',
description: 'Preview content for this resource',
},
content: {
type: 'string',
description: 'Document content for this resource',
description: 'Document content for this resource (only returned in detail API)',
},
},
} as const;
Expand Down
6 changes: 5 additions & 1 deletion packages/openapi-schema/src/types.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,11 @@ export type Resource = {
*/
updatedAt: string;
/**
* Document content for this resource
* Preview content for this resource
*/
contentPreview?: string;
/**
* Document content for this resource (only returned in detail API)
*/
content?: string;
};
Expand Down

0 comments on commit b665599

Please sign in to comment.