Skip to content

Commit 77b09c7

Browse files
committed
1.添加图标,修改标题 2.apikey配置修改为pawsql用户名密码配置
1 parent 42e7743 commit 77b09c7

12 files changed

Lines changed: 317 additions & 88 deletions

package.json

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88
"vscode": "^1.80.0"
99
},
1010
"categories": [
11-
"Data Science", "Programming Languages", "Other", "Linters", "Snippets", "Testing"
11+
"Data Science",
12+
"Programming Languages",
13+
"Other",
14+
"Linters",
15+
"Snippets",
16+
"Testing"
1217
],
1318
"activationEvents": [
1419
"onStartupFinished"
@@ -103,28 +108,42 @@
103108
"default": "",
104109
"description": "%config.initialization.apiKey.description%",
105110
"markdownDescription": "%config.initialization.apiKey.markdownDescription%",
106-
"order": 1
111+
"order": 5
112+
},
113+
"pawsql.email": {
114+
"type": "string",
115+
"default": "",
116+
"description": "%config.initialization.email.description%",
117+
"markdownDescription": "%config.initialization.email.markdownDescription%",
118+
"order": 3
119+
},
120+
"pawsql.password": {
121+
"type": "string",
122+
"markdownDescription": "%config.initialization.password.markdownDescription%",
123+
"description": "%config.initialization.password.description%",
124+
"order": 4,
125+
"scope": "user",
126+
"secret": true
107127
},
108128
"pawsql.backendUrl": {
109129
"type": "string",
110130
"default": "",
111131
"description": "%config.initialization.backendUrl.description%",
112132
"markdownDescription": "%config.initialization.backendUrl.markdownDescription%",
113-
"order": 2
133+
"order": 1
114134
},
115135
"pawsql.frontendUrl": {
116136
"type": "string",
117137
"default": "",
118138
"description": "%config.initialization.frontendUrl.description%",
119139
"markdownDescription": "%config.initialization.frontendUrl.markdownDescription%",
120-
"order": 3
140+
"order": 2
121141
}
122142
}
123143
},
124144
{
125145
"id": "pawsqlWorkspace",
126146
"title": "%config.workspace.title%",
127-
"description": "%config.workspace.description%",
128147
"properties": {
129148
"pawsql.defaultWorkspace": {
130149
"type": "object",
@@ -169,6 +188,11 @@
169188
}
170189
}
171190
],
191+
"capabilities": {
192+
"untrustedWorkspaces": {
193+
"supported": true
194+
}
195+
},
172196
"menus": {
173197
"view/title": [
174198
{

package.nls.en.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,17 @@
1010
"config.initialization.description": "Set up the URL of PawSQL Engine and ApiKey for user",
1111
"config.initialization.apiKey.description": "ApiKey for this user to use PawSQL Engine",
1212
"config.initialization.apiKey.markdownDescription": "ApiKey for this user to use PawSQL Engine. You can find it in your PawSQL account settings menu.",
13+
"config.initialization.email.description": "Email address used for authentication with the PawSQL optimization engine service",
14+
"config.initialization.email.markdownDescription": "The email address used to authenticate with the PawSQL service. Please use the email linked to your PawSQL account.",
15+
"config.initialization.password.description": "Password used for authentication with the PawSQL optimization engine service",
16+
"config.initialization.password.markdownDescription": "The password used to authenticate with the PawSQL service. Please use the password set in your PawSQL account.",
17+
1318
"config.initialization.backendUrl.description": "URL of the PawSQL Engine service",
1419
"config.initialization.backendUrl.markdownDescription": "The URL for PawSQL Engine service.",
1520
"config.initialization.frontendUrl.description": "URL of the PawSQL front page",
1621
"config.initialization.frontendUrl.markdownDescription": "The base URL for PawSQL front page to display result of SQL optimization.",
1722

18-
23+
"config.workspace.title": "Workspace Setup",
1924
"config.workspace.default.title": "Default Workspace",
2025
"config.workspace.default.description": "Default workspace configuration settings",
2126
"config.workspace.default.markdownDescription": "Configure the default workspace that will be used when opening new files",

package.nls.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,16 @@
1010
"config.initialization.description": "配置 PawSQL 优化引擎的地址和用户的ApiKey",
1111
"config.initialization.apiKey.description": "用于 PawSQL 优化引擎服务认证的ApiKey",
1212
"config.initialization.apiKey.markdownDescription": "用于 PawSQL 服务认证的ApiKey。您可以在 PawSQL 账户设置中获取此密钥。",
13+
"config.initialization.email.description": "用于 PawSQL 优化引擎服务认证的电子邮箱地址",
14+
"config.initialization.email.markdownDescription": "用于 PawSQL 服务认证的电子邮箱地址。请使用您的 PawSQL 账户绑定的邮箱地址。",
15+
"config.initialization.password.description": "用于 PawSQL 优化引擎服务认证的密码",
16+
"config.initialization.password.markdownDescription": "用于 PawSQL 服务认证的密码。请使用您在 PawSQL 账户中设置的密码。",
1317
"config.initialization.backendUrl.description": "PawSQL 优化引擎的后端服务地址",
1418
"config.initialization.backendUrl.markdownDescription": "PawSQL 优化引擎的后端服务地址,用于提供SQL优化能力",
1519
"config.initialization.frontendUrl.description": "PawSQL 优化引擎的前端服务地址",
1620
"config.initialization.frontendUrl.markdownDescription": "PawSQL 优化引擎的前端服务地址,用于展示优化结果",
1721

22+
"config.workspace.title": "工作空间配置",
1823
"config.workspace.default.title": "默认工作空间",
1924
"config.workspace.default.description": "默认工作空间配置设置",
2025
"config.workspace.default.markdownDescription": "配置打开新文件时将使用的默认工作空间",

src/PasswordManager.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// 在扩展代码中使用 SecretStorage
2+
import * as vscode from "vscode";
3+
4+
export class PasswordManager {
5+
constructor(private context: vscode.ExtensionContext) {}
6+
7+
// 存储密码
8+
async storePassword(password: string) {
9+
await this.context.secrets.store("pawsql-password", password);
10+
}
11+
12+
// 获取密码
13+
async getPassword(): Promise<string | undefined> {
14+
return await this.context.secrets.get("pawsql-password");
15+
}
16+
17+
// 删除密码
18+
async deletePassword() {
19+
await this.context.secrets.delete("pawsql-password");
20+
}
21+
}

src/PawSQLSidebarProvider.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ import { getUrls } from "./constants";
1212
// Previous classes remain unchanged...
1313
class WorkspaceManagerItem extends vscode.TreeItem {
1414
constructor() {
15-
const iconPath = path.join(__dirname, "../resources/icon/paw.svg"); // 向上移动到 src 同级
15+
const iconPath = path.join(
16+
__dirname,
17+
"../resources/icon/pawsql-black-icon.svg"
18+
); // 向上移动到 src 同级
1619

1720
super(
1821
// LanguageService.getMessage("sidebar.workspace.manager"),
@@ -133,6 +136,7 @@ class StatementItem extends vscode.TreeItem {
133136
public readonly label: string,
134137
public readonly statementId: string,
135138
public readonly analysisId: string,
139+
public readonly analysisName: string,
136140
public readonly workspaceId: string,
137141
public readonly sql: string
138142
) {
@@ -145,6 +149,7 @@ class StatementItem extends vscode.TreeItem {
145149
arguments: [
146150
this.statementId,
147151
this.analysisId,
152+
this.analysisName,
148153
this.workspaceId,
149154
this.sql,
150155
],
@@ -673,6 +678,7 @@ export class PawSQLTreeProvider
673678
`${stmt.stmtName}`,
674679
stmt.analysisStmtId,
675680
analysis.analysisId,
681+
analysis.analysisName,
676682
analysis.workspaceId,
677683
stmt.stmtText
678684
);
@@ -689,6 +695,7 @@ export class PawSQLTreeProvider
689695
arguments: [
690696
firstStatement.statementId,
691697
firstStatement.analysisId,
698+
analysis.analysisName,
692699
firstStatement.workspaceId,
693700
firstStatement.sql,
694701
],
@@ -759,6 +766,7 @@ export class PawSQLTreeProvider
759766
`${stmt.stmtName}`,
760767
stmt.analysisStmtId,
761768
analysis.analysisId,
769+
analysis.label,
762770
analysis.workspaceId,
763771
stmt.sql
764772
)
@@ -822,4 +830,22 @@ export class PawSQLTreeProvider
822830
// 刷新 Tree View
823831
this._onDidChangeTreeData.fire(undefined);
824832
}
833+
834+
async updateApikey(config: {
835+
email: string;
836+
password: string;
837+
backendUrl: string;
838+
frontendUrl: string;
839+
}) {
840+
const apiKey = await ApiService.getUserKey(config.email, config.password);
841+
console.log(apiKey);
842+
if (!apiKey) {
843+
throw Error("error.login.invalidCredentials");
844+
}
845+
await vscode.workspace
846+
.getConfiguration("pawsql")
847+
.update("apiKey", apiKey, true);
848+
849+
return apiKey;
850+
}
825851
}

src/apiService.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ export const createAnalysis = async (
183183

184184
export interface AnalysisSummaryRead {
185185
status: string; // 分析状态
186+
analysisName: string;
186187
basicSummary: AnalysisSummary; // AnalysisSummary 信息
187188
analysisRuleInfo: RuleQueries[]; // 规则信息
188189
analysisIndexInfo: string[]; // 索引推荐信息
@@ -308,6 +309,28 @@ export const validateUserKey = async (userKey: string): Promise<boolean> => {
308309
}
309310
};
310311

312+
export const getUserKey = async (
313+
email: string,
314+
password: string
315+
): Promise<string | null> => {
316+
const { DOMAIN } = getUrls();
317+
const url = `${DOMAIN.Backend}/api/v1/getUserKey`;
318+
319+
try {
320+
// 发送请求以验证 userKey
321+
const response = await axios.post(
322+
url,
323+
{ email, password },
324+
{ timeout: 3000 }
325+
);
326+
327+
return response.data.data; // 假设返回码 200 表示有效
328+
} catch (error: any) {
329+
console.log(error);
330+
return null;
331+
}
332+
};
333+
311334
interface ValidationResult {
312335
isAvailable: boolean;
313336
error?: string;
@@ -517,4 +540,5 @@ export const ApiService = {
517540
getAnalysisSummary,
518541
getStatementDetails,
519542
validateUserKey,
543+
getUserKey,
520544
};

src/i18n/en.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"CONFIG_FILE_DEFAULT_WORKSPACE_PLACEHOLDER": "Setup a default workspace for PawSQL.",
2727
"OPTIMIZING_SQL": "$(sync~spin) Optimizing SQL...",
2828
"error.create.analysis.failed": "Fail to optimize",
29+
"error.login.invalidCredentials": "PawSQL registration email or password is incorrect. Please check your PawSQL configuration to ensure that the information is correct.",
2930
"error.backendUrl.invalid": "The PawSQL engine is not responding.",
3031
"error.frontendUrl.invalid": "The PawSQL website is not responding.",
3132
"license.code.not.valid": "The license code is invalid. Please contact the administrator.",
@@ -46,10 +47,16 @@
4647
"webview.anlysis.result.title": "PawSQL Result",
4748
"webview.settings.save.config.success": "PawSQL Setup Completed",
4849
"webview.settings.save.config.failed": "PawSQL Setup Failded",
49-
"form.config.title": "PawSQL Client",
50+
"form.config.title": "PawSQL Setup",
51+
"form.config.email.label": "PawSQL Email",
52+
"form.config.password.label": "Password",
53+
"form.config.backendUrl.label": "PawSQL Engine",
54+
"form.config.frontendUrl.label": "PawSQL Website",
5055
"form.config.description": "PawSQL Client enables developers to access core capabilities of the PawSQL directly within their VS Code development environment. PawSQL provides sophisticated SQL optimization features including smart index recommendations and query rewriting suggestions. More about PawSQL's capabilities, please visit ",
5156
"form.config.documentation.link": "docs.pawsql.com",
5257
"form.config.save": "Save",
5358
"workspaces.isLoading": "Loading Workspaces",
54-
"analyses.isLoading": "Loading Analyses"
59+
"analyses.isLoading": "Loading Analyses",
60+
"nonexistent": "Email not exist.",
61+
"unactive": "Sorry, your email address has not been activated yet. Please log in with your registered email address to complete the activation."
5562
}

src/i18n/zh-cn.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"CONFIG_FILE_DEFAULT_WORKSPACE_PLACEHOLDER": "请选择一个工作空间作为当前SQL文件的默认工作空间",
2727
"OPTIMIZING_SQL": "$(sync~spin) 正在优化SQL...",
2828
"error.create.analysis.failed": "SQL优化失败",
29+
"error.login.invalidCredentials": "PawSQL注册邮箱或密码错误。请检查您的PawSQL配置,确保信息正确无误。",
2930
"error.backendUrl.invalid": "请检查 backendUrl 是否正确配置或服务器是否运行",
3031
"error.frontendUrl.invalid": "请检查 frontendUrl 是否正确配置或服务器是否运行",
3132
"license.code.not.valid": "许可证代码无效,请联系管理员获取",
@@ -45,11 +46,17 @@
4546
"codelens.optimize.sql.with.selected.workspace": "⚡Optimize in ...",
4647
"webview.anlysis.result.title": "SQL优化结果",
4748
"webview.settings.save.config.success": "保存成功",
48-
"webview.settings.save.config.failed": "保存配失败",
49+
"webview.settings.save.config.failed": "保存配置失败",
4950
"form.config.title": "PawSQL 配置",
51+
"form.config.email.label": "PawSQL注册邮箱",
52+
"form.config.password.label": "密码",
53+
"form.config.backendUrl.label": "PawSQL 引擎地址",
54+
"form.config.frontendUrl.label": "PawSQL 前端地址",
5055
"form.config.description": "PawSQL Client让开发者能够在VS Code开发环境中直接使用PawSQL优化引擎的强大功能,包括智能索引推荐、查询重写建议、自动化性能验证等。想要了解更详细的PawSQL的SQL优化能力,请参考",
5156
"form.config.documentation.link": "PawSQL官方文档",
5257
"form.config.save": "保存",
5358
"workspaces.isLoading": "工作空间列表加载中...",
54-
"analyses.isLoading": "优化列表加载中..."
59+
"analyses.isLoading": "优化列表加载中...",
60+
"nonexistent": "邮箱不存在.",
61+
"unactive": "很抱歉,您的邮箱尚未激活,请登录您的注册邮箱完成激活。"
5562
}

src/main.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ export class PawSQLExtension {
9696
this.context.subscriptions.push(
9797
vscode.commands.registerCommand(
9898
"pawsql.showStatementDetail",
99-
async (statementId: string) => {
100-
await this.showStatementResult(statementId);
99+
async (statementId, analysisId, analysisName) => {
100+
await this.showStatementResult(statementId, analysisName);
101101
}
102102
)
103103
);
@@ -220,8 +220,11 @@ export class PawSQLExtension {
220220
const { URLS } = getUrls();
221221
await vscode.env.openExternal(vscode.Uri.parse(URLS.NEW_WORKSPACE));
222222
}
223-
private async showStatementResult(analysisStmtId: string): Promise<void> {
224-
this.webviewProvider.createResultPanel(analysisStmtId);
223+
private async showStatementResult(
224+
analysisStmtId: string,
225+
analysisName: string
226+
): Promise<void> {
227+
this.webviewProvider.createResultPanel(analysisStmtId, analysisName);
225228
}
226229

227230
private async handleConfigurationChange(
@@ -354,14 +357,20 @@ export class PawSQLExtension {
354357
const statementId =
355358
result.analysisSummary.data.summaryStatementInfo[0]?.analysisStmtId;
356359
if (statementId) {
357-
this.webviewProvider.createResultPanel(statementId);
360+
this.webviewProvider.createResultPanel(
361+
statementId,
362+
result.analysisSummary.data.analysisName
363+
);
358364
await this.treeProvider.revealAnalysis(result.analysis.data.analysisId);
359365
}
360366
} else {
361367
const statementId =
362368
result.analysisSummary.data.summaryStatementInfo[0]?.analysisStmtId;
363369
if (statementId) {
364-
this.webviewProvider.createResultPanel(statementId);
370+
this.webviewProvider.createResultPanel(
371+
statementId,
372+
result.analysisSummary.data.analysisName
373+
);
365374
await this.treeProvider.revealStatement(statementId);
366375
}
367376
}

0 commit comments

Comments
 (0)