-
Notifications
You must be signed in to change notification settings - Fork 466
fix: fixed material generation and database connection for components #1152
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
1c4b640
67760dc
e5a10d7
3ab1c1b
94980d7
27b4320
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -15,9 +15,9 @@ dotenv.config({ path: `${pathsDotenv}.local` }) | |
| const { SQL_HOST, SQL_PORT, SQL_USER, SQL_PASSWORD, SQL_DATABASE } = process.env | ||
|
|
||
| // 组件表名称 | ||
| const componentsTableName = 'user_components' | ||
| const componentsTableName = 't_component' | ||
| // 组件关联到物料资产包的id | ||
| const materialHistoryId = 639 | ||
| const materialHistoryId = 1 | ||
| // 数据库配置 | ||
| const mysqlConfig = { | ||
| host: SQL_HOST, // 主机名(服务器地址) | ||
|
|
@@ -202,9 +202,10 @@ class MysqlConnection { | |
|
|
||
| /** | ||
| * 新建的组件关联物料资产包 | ||
| * @deprecated 物料资产包已废弃,使用relationMaterialHistory替代 | ||
| * @param {number} id 新建的组件id | ||
| */ | ||
| relationMaterialHistory(id) { | ||
| relationMaterialBlockHistory(id) { | ||
| const uniqSql = `SELECT * FROM \`material_histories_components__user_components_mhs\` WHERE \`material-history_id\`=${materialHistoryId} AND \`user-component_id\`=${id}` | ||
| this.query(uniqSql).then((result) => { | ||
| if (!result.length) { | ||
|
|
@@ -215,6 +216,20 @@ class MysqlConnection { | |
| }) | ||
| } | ||
|
|
||
| /** | ||
| * 新建的组件关联物料资产包 | ||
| * @param {number} id 新建的组件id | ||
| */ | ||
| relationMaterialHistory(id) { | ||
| const uniqSql = `SELECT * FROM \`r_material_history_component\` WHERE \`material_history_id\`=${materialHistoryId} AND \`component_id\`=${id}` | ||
| this.query(uniqSql).then((result) => { | ||
| if (!result.length) { | ||
| const sqlContent = `INSERT INTO \`r_material_history_component\` (\`material_history_id\`, \`component_id\`) VALUES (${materialHistoryId}, ${id})` | ||
| this.query(sqlContent) | ||
| } | ||
| }) | ||
| } | ||
|
|
||
| /** | ||
| * 生成新增组件的sql语句 | ||
| * @param {object} component 组件数据 | ||
|
|
@@ -282,10 +297,15 @@ class MysqlConnection { | |
| isOfficial = 0, | ||
| isDefault = 0, | ||
| tiny_reserved = 0, | ||
| tenant = 1, | ||
| createBy = 86, | ||
| updatedBy = 86 | ||
| component_metadata = null, | ||
| library_id = 1, | ||
| tenant_id = 1, | ||
| renter_id = 1, | ||
| site_id = 1, | ||
| created_by = 1, | ||
| last_updated_by = 1 | ||
| } = component | ||
|
|
||
| const values = `('${version}', | ||
| '${this.formatSingleQuoteValue(JSON.stringify(name))}', | ||
| '${componentName}', | ||
|
|
@@ -308,15 +328,19 @@ class MysqlConnection { | |
| '${isOfficial}', | ||
| '${isDefault}', | ||
| '${tiny_reserved}', | ||
| '${tenant}', | ||
| '${createBy}', | ||
| '${updatedBy}' | ||
| '${component_metadata}', | ||
| '${library_id}', | ||
| '${tenant_id}', | ||
| '${renter_id}', | ||
| '${site_id}', | ||
| '${created_by}', | ||
| '${last_updated_by}' | ||
| );` | ||
|
|
||
| const sqlContent = `INSERT INTO ${componentsTableName} (version, name, component, icon, description, doc_url, | ||
| const sqlContent = `INSERT INTO ${componentsTableName} (version, name, name_en, icon, description, doc_url, | ||
| screenshot, tags, keywords, dev_mode, npm, \`group\`, \`category\`, priority, snippets, | ||
| schema_fragment, configure, \`public\`, framework, isOfficial, isDefault, tiny_reserved, | ||
| tenant, createdBy, updatedBy) VALUES ${values}`.replace(/\n/g, '') | ||
| schema_fragment, configure, \`public\`, framework, is_official, is_default, tiny_reserved,component_metadata, | ||
| library_id, tenant_id, renter_id, site_id, created_by, last_updated_by) VALUES ${values}`.replace(/\n/g, '') | ||
|
Comment on lines
+340
to
+343
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Schema mismatch for “name_en” and “component_metadata”. A possible fix in your CREATE TABLE statement might be: CREATE TABLE t_component (
...
+ name_en varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
component_metadata longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
...
);
|
||
|
|
||
| this.query(sqlContent, componentName) | ||
| .then((result) => { | ||
|
|
@@ -335,7 +359,7 @@ class MysqlConnection { | |
| * @param {object} component 组件数据 | ||
| */ | ||
| initDB(component) { | ||
| const selectSqlContent = `SELECT * FROM ${this.config.database}.${componentsTableName} WHERE component = '${component.component}'` | ||
| const selectSqlContent = `SELECT * FROM ${this.config.database}.${componentsTableName} WHERE name_en = '${component.component}'` | ||
chilingling marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| this.query(selectSqlContent) | ||
| .then((result) => { | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use parameterized queries to prevent SQL injection.
Directly concatenating
idinto the SQL statement may be risky if the value is not guaranteed to be an integer. Parameterized queries will secure this method and help avoid potential injection vulnerabilities.Possible fix using placeholders (for example in MySQL Node libraries):