Skip to content

Commit e98ece8

Browse files
♻️ refactor: Refactor services code style (#5180)
* ♻️ refactor: Refactor services code style * ✅ test: Fix test * 🐛 fix: Fix review problem
1 parent df3ac87 commit e98ece8

File tree

36 files changed

+524
-600
lines changed

36 files changed

+524
-600
lines changed

src/server/routers/lambda/agent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export const agentRouter = router({
101101
if (!session) throw new Error('Session not found');
102102
const sessionId = session.id;
103103

104-
return await ctx.agentModel.findBySessionId(sessionId);
104+
return ctx.agentModel.findBySessionId(sessionId);
105105
}),
106106

107107
getKnowledgeBasesAndFiles: agentProcedure

src/services/__tests__/chat.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -904,7 +904,7 @@ describe('ChatService', () => {
904904
* initialization of AgentRuntime with different providers
905905
*/
906906
vi.mock('../_auth', async (importOriginal) => {
907-
return await importOriginal();
907+
return importOriginal();
908908
});
909909
describe('AgentRuntimeOnClient', () => {
910910
describe('initializeWithClientStore', () => {

src/services/_auth.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ const createAuthTokenWithPayload = async (payload = {}) => {
7878
const accessCode = keyVaultsConfigSelectors.password(useUserStore.getState());
7979
const userId = userProfileSelectors.userId(useUserStore.getState());
8080

81-
return await createJWT<JWTPayload>({ accessCode, userId, ...payload });
81+
return createJWT<JWTPayload>({ accessCode, userId, ...payload });
8282
};
8383

8484
interface AuthParams {

src/services/agent.ts

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,49 @@
11
import { lambdaClient } from '@/libs/trpc/client';
22

33
class AgentService {
4-
async createAgentKnowledgeBase(agentId: string, knowledgeBaseId: string, enabled?: boolean) {
5-
return await lambdaClient.agent.createAgentKnowledgeBase.mutate({
4+
createAgentKnowledgeBase = async (
5+
agentId: string,
6+
knowledgeBaseId: string,
7+
enabled?: boolean,
8+
) => {
9+
return lambdaClient.agent.createAgentKnowledgeBase.mutate({
610
agentId,
711
enabled,
812
knowledgeBaseId,
913
});
10-
}
14+
};
1115

12-
async deleteAgentKnowledgeBase(agentId: string, knowledgeBaseId: string) {
13-
return await lambdaClient.agent.deleteAgentKnowledgeBase.mutate({ agentId, knowledgeBaseId });
14-
}
16+
deleteAgentKnowledgeBase = async (agentId: string, knowledgeBaseId: string) => {
17+
return lambdaClient.agent.deleteAgentKnowledgeBase.mutate({ agentId, knowledgeBaseId });
18+
};
1519

16-
async toggleKnowledgeBase(agentId: string, knowledgeBaseId: string, enabled?: boolean) {
17-
return await lambdaClient.agent.toggleKnowledgeBase.mutate({
20+
toggleKnowledgeBase = async (agentId: string, knowledgeBaseId: string, enabled?: boolean) => {
21+
return lambdaClient.agent.toggleKnowledgeBase.mutate({
1822
agentId,
1923
enabled,
2024
knowledgeBaseId,
2125
});
22-
}
26+
};
2327

24-
async createAgentFiles(agentId: string, fileIds: string[], enabled?: boolean) {
25-
return await lambdaClient.agent.createAgentFiles.mutate({ agentId, enabled, fileIds });
26-
}
28+
createAgentFiles = async (agentId: string, fileIds: string[], enabled?: boolean) => {
29+
return lambdaClient.agent.createAgentFiles.mutate({ agentId, enabled, fileIds });
30+
};
2731

28-
async deleteAgentFile(agentId: string, fileId: string) {
29-
return await lambdaClient.agent.deleteAgentFile.mutate({ agentId, fileId });
30-
}
32+
deleteAgentFile = async (agentId: string, fileId: string) => {
33+
return lambdaClient.agent.deleteAgentFile.mutate({ agentId, fileId });
34+
};
3135

32-
async toggleFile(agentId: string, fileId: string, enabled?: boolean) {
33-
return await lambdaClient.agent.toggleFile.mutate({
36+
toggleFile = async (agentId: string, fileId: string, enabled?: boolean) => {
37+
return lambdaClient.agent.toggleFile.mutate({
3438
agentId,
3539
enabled,
3640
fileId,
3741
});
38-
}
42+
};
3943

40-
async getFilesAndKnowledgeBases(agentId: string) {
41-
return await lambdaClient.agent.getKnowledgeBasesAndFiles.query({ agentId });
42-
}
44+
getFilesAndKnowledgeBases = async (agentId: string) => {
45+
return lambdaClient.agent.getKnowledgeBasesAndFiles.query({ agentId });
46+
};
4347
}
4448

4549
export const agentService = new AgentService();

src/services/chat.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ class ChatService {
499499
return this.reorderToolMessages(postMessages);
500500
};
501501

502-
private mapTrace(trace?: TracePayload, tag?: TraceTagMap): TracePayload {
502+
private mapTrace = (trace?: TracePayload, tag?: TraceTagMap): TracePayload => {
503503
const tags = sessionMetaSelectors.currentAgentMeta(useSessionStore.getState()).tags || [];
504504

505505
const enabled = preferenceSelectors.userAllowTrace(useUserStore.getState());
@@ -512,7 +512,7 @@ class ChatService {
512512
tags: [tag, ...(trace?.tags || []), ...tags].filter(Boolean) as string[],
513513
userId: userProfileSelectors.userId(useUserStore.getState()),
514514
};
515-
}
515+
};
516516

517517
/**
518518
* Fetch chat completion on the client side.

src/services/file/ClientS3/index.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,21 @@ export class BrowserS3Storage {
1717
* @param key 文件 hash
1818
* @param file File 对象
1919
*/
20-
async putObject(key: string, file: File): Promise<void> {
20+
putObject = async (key: string, file: File): Promise<void> => {
2121
try {
2222
const data = await file.arrayBuffer();
2323
await set(key, { data, name: file.name, type: file.type }, this.store);
2424
} catch (e) {
2525
throw new Error(`Failed to put file ${file.name}: ${(e as Error).message}`);
2626
}
27-
}
27+
};
2828

2929
/**
3030
* 获取文件
3131
* @param key 文件 hash
3232
* @returns File 对象
3333
*/
34-
async getObject(key: string): Promise<File | undefined> {
34+
getObject = async (key: string): Promise<File | undefined> => {
3535
try {
3636
const res = await get<{ data: ArrayBuffer; name: string; type: string }>(key, this.store);
3737
if (!res) return;
@@ -40,19 +40,19 @@ export class BrowserS3Storage {
4040
} catch (e) {
4141
throw new Error(`Failed to get object (key=${key}): ${(e as Error).message}`);
4242
}
43-
}
43+
};
4444

4545
/**
4646
* 删除文件
4747
* @param key 文件 hash
4848
*/
49-
async deleteObject(key: string): Promise<void> {
49+
deleteObject = async (key: string): Promise<void> => {
5050
try {
5151
await del(key, this.store);
5252
} catch (e) {
5353
throw new Error(`Failed to delete object (key=${key}): ${(e as Error).message}`);
5454
}
55-
}
55+
};
5656
}
5757

5858
export const clientS3Storage = new BrowserS3Storage();

src/services/file/client.ts

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { clientDB } from '@/database/client/db';
22
import { FileModel } from '@/database/server/models/file';
33
import { BaseClientService } from '@/services/baseClientService';
44
import { clientS3Storage } from '@/services/file/ClientS3';
5-
import { FileItem, UploadFileParams } from '@/types/files';
65

76
import { IFileService } from './type';
87

@@ -11,7 +10,7 @@ export class ClientService extends BaseClientService implements IFileService {
1110
return new FileModel(clientDB as any, this.userId);
1211
}
1312

14-
async createFile(file: UploadFileParams) {
13+
createFile: IFileService['createFile'] = async (file) => {
1514
// save to local storage
1615
// we may want to save to a remote server later
1716
const res = await this.fileModel.create(
@@ -34,9 +33,9 @@ export class ClientService extends BaseClientService implements IFileService {
3433
id: res.id,
3534
url: `data:${file.fileType};base64,${base64}`,
3635
};
37-
}
36+
};
3837

39-
async getFile(id: string): Promise<FileItem> {
38+
getFile: IFileService['getFile'] = async (id) => {
4039
const item = await this.fileModel.findById(id);
4140
if (!item) {
4241
throw new Error('file not found');
@@ -57,28 +56,28 @@ export class ClientService extends BaseClientService implements IFileService {
5756
updatedAt: new Date(item.updatedAt),
5857
url,
5958
};
60-
}
59+
};
6160

62-
async removeFile(id: string) {
61+
removeFile: IFileService['removeFile'] = async (id) => {
6362
await this.fileModel.delete(id, false);
64-
}
63+
};
6564

66-
async removeFiles(ids: string[]) {
65+
removeFiles: IFileService['removeFiles'] = async (ids) => {
6766
await this.fileModel.deleteMany(ids, false);
68-
}
67+
};
6968

70-
async removeAllFiles() {
69+
removeAllFiles: IFileService['removeAllFiles'] = async () => {
7170
return this.fileModel.clear();
72-
}
71+
};
7372

74-
async checkFileHash(hash: string) {
73+
checkFileHash: IFileService['checkFileHash'] = async (hash) => {
7574
return this.fileModel.checkHash(hash);
76-
}
75+
};
7776

78-
private async getBase64ByFileHash(hash: string) {
77+
private getBase64ByFileHash = async (hash: string) => {
7978
const fileItem = await clientS3Storage.getObject(hash);
8079
if (!fileItem) throw new Error('file not found');
8180

8281
return Buffer.from(await fileItem.arrayBuffer()).toString('base64');
83-
}
82+
};
8483
}

src/services/file/server.ts

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
import { lambdaClient } from '@/libs/trpc/client';
2-
import {
3-
FileItem,
4-
QueryFileListParams,
5-
QueryFileListSchemaType,
6-
UploadFileParams,
7-
} from '@/types/files';
2+
import { QueryFileListParams, QueryFileListSchemaType, UploadFileParams } from '@/types/files';
83

94
import { IFileService } from './type';
105

@@ -14,45 +9,45 @@ interface CreateFileParams extends Omit<UploadFileParams, 'url'> {
149
}
1510

1611
export class ServerService implements IFileService {
17-
async createFile(params: UploadFileParams, knowledgeBaseId?: string) {
12+
createFile: IFileService['createFile'] = async (params, knowledgeBaseId) => {
1813
return lambdaClient.file.createFile.mutate({ ...params, knowledgeBaseId } as CreateFileParams);
19-
}
14+
};
2015

21-
async getFile(id: string): Promise<FileItem> {
16+
getFile: IFileService['getFile'] = async (id) => {
2217
const item = await lambdaClient.file.findById.query({ id });
2318

2419
if (!item) {
2520
throw new Error('file not found');
2621
}
2722

2823
return { ...item, type: item.fileType };
29-
}
24+
};
3025

31-
async removeFile(id: string) {
26+
removeFile: IFileService['removeFile'] = async (id) => {
3227
await lambdaClient.file.removeFile.mutate({ id });
33-
}
28+
};
3429

35-
async removeFiles(ids: string[]) {
30+
removeFiles: IFileService['removeFiles'] = async (ids) => {
3631
await lambdaClient.file.removeFiles.mutate({ ids });
37-
}
32+
};
3833

39-
async removeAllFiles() {
34+
removeAllFiles: IFileService['removeAllFiles'] = async () => {
4035
await lambdaClient.file.removeAllFiles.mutate();
41-
}
36+
};
4237

43-
async getFiles(params: QueryFileListParams) {
38+
getFiles = async (params: QueryFileListParams) => {
4439
return lambdaClient.file.getFiles.query(params as QueryFileListSchemaType);
45-
}
40+
};
4641

47-
async getFileItem(id: string) {
42+
getFileItem = async (id: string) => {
4843
return lambdaClient.file.getFileItemById.query({ id });
49-
}
44+
};
5045

51-
async checkFileHash(hash: string) {
46+
checkFileHash: IFileService['checkFileHash'] = async (hash) => {
5247
return lambdaClient.file.checkFileHash.mutate({ hash });
53-
}
48+
};
5449

55-
async removeFileAsyncTask(id: string, type: 'embedding' | 'chunk') {
56-
return await lambdaClient.file.removeFileAsyncTask.mutate({ id, type });
57-
}
50+
removeFileAsyncTask = async (id: string, type: 'embedding' | 'chunk') => {
51+
return lambdaClient.file.removeFileAsyncTask.mutate({ id, type });
52+
};
5853
}

src/services/import/client.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,20 @@ import { clientDB } from '@/database/client/db';
22
import { DataImporterRepos } from '@/database/repositories/dataImporter';
33
import { BaseClientService } from '@/services/baseClientService';
44
import { useUserStore } from '@/store/user';
5-
import { ImportStage, ImporterEntryData, OnImportCallbacks } from '@/types/importer';
6-
import { UserSettings } from '@/types/user/settings';
5+
import { ImportStage } from '@/types/importer';
76

8-
export class ClientService extends BaseClientService {
7+
import { IImportService } from './type';
8+
9+
export class ClientService extends BaseClientService implements IImportService {
910
private get dataImporter(): DataImporterRepos {
1011
return new DataImporterRepos(clientDB as any, this.userId);
1112
}
1213

13-
importSettings = async (settings: UserSettings) => {
14+
importSettings: IImportService['importSettings'] = async (settings) => {
1415
await useUserStore.getState().importAppSettings(settings);
1516
};
1617

17-
importData = async (data: ImporterEntryData, callbacks?: OnImportCallbacks) => {
18+
importData: IImportService['importData'] = async (data, callbacks) => {
1819
callbacks?.onStageChange?.(ImportStage.Importing);
1920
const time = Date.now();
2021
try {

src/services/import/server.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@ import { DefaultErrorShape } from '@trpc/server/unstable-core-do-not-import';
22

33
import { edgeClient, lambdaClient } from '@/libs/trpc/client';
44
import { useUserStore } from '@/store/user';
5-
import { ImportStage, ImporterEntryData, OnImportCallbacks } from '@/types/importer';
6-
import { UserSettings } from '@/types/user/settings';
5+
import { ImportStage, OnImportCallbacks } from '@/types/importer';
76
import { uuid } from '@/utils/uuid';
87

9-
export class ServerService {
10-
importSettings = async (settings: UserSettings) => {
8+
import { IImportService } from './type';
9+
10+
export class ServerService implements IImportService {
11+
importSettings: IImportService['importSettings'] = async (settings) => {
1112
await useUserStore.getState().importAppSettings(settings);
1213
};
1314

14-
importData = async (data: ImporterEntryData, callbacks?: OnImportCallbacks): Promise<void> => {
15+
importData: IImportService['importData'] = async (data, callbacks) => {
1516
const handleError = (e: unknown) => {
1617
callbacks?.onStageChange?.(ImportStage.Error);
1718
const error = e as DefaultErrorShape;

src/services/import/type.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { ImporterEntryData, OnImportCallbacks } from '@/types/importer';
2+
import { UserSettings } from '@/types/user/settings';
3+
4+
export interface IImportService {
5+
importData(data: ImporterEntryData, callbacks?: OnImportCallbacks): Promise<void>;
6+
importSettings(settings: UserSettings): Promise<void>;
7+
}

0 commit comments

Comments
 (0)