Skip to content

Commit c4c287a

Browse files
authored
revert: Remove MySQL support and revert to pre-modification state (#226)
1 parent ae37735 commit c4c287a

7 files changed

Lines changed: 40 additions & 237 deletions

File tree

docker-compose.local.yml

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
version: '3'
2-
31
services:
42
newsnow:
53
build: .
@@ -13,35 +11,7 @@ services:
1311
- JWT_SECRET=
1412
- INIT_TABLE=true
1513
- ENABLE_CACHE=true
16-
# MySQL Database Configuration (uncomment to use MySQL instead of SQLite)
17-
# - MYSQL_HOST=newsnow_mysql
18-
# - MYSQL_PORT=3306
19-
# - MYSQL_USER=newsnow
20-
# - MYSQL_PASSWORD=your_password
21-
# - MYSQL_DATABASE=newsnow
22-
# - MYSQL_SSL=false
23-
# Uncomment the following lines to use MySQL database
24-
# depends_on:
25-
# - mysql
26-
27-
# Uncomment the following service to use MySQL database
28-
# mysql:
29-
# image: mysql:8.0
30-
# container_name: newsnow_mysql
31-
# restart: always
32-
# environment:
33-
# MYSQL_ROOT_PASSWORD: root_password
34-
# MYSQL_DATABASE: newsnow
35-
# MYSQL_USER: newsnow
36-
# MYSQL_PASSWORD: your_password
37-
# ports:
38-
# - "3306:3306"
39-
# volumes:
40-
# - mysql_data:/var/lib/mysql
41-
# command: --default-authentication-plugin=mysql_native_password
4214

4315
volumes:
4416
newsnow_data:
45-
name: newsnow_data
46-
# mysql_data:
47-
# name: newsnow_mysql_data
17+
name: newsnow_data

docker-compose.yml

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,35 +15,7 @@ services:
1515
- JWT_SECRET=
1616
- INIT_TABLE=true
1717
- ENABLE_CACHE=true
18-
# MySQL Database Configuration (uncomment to use MySQL instead of SQLite)
19-
- MYSQL_HOST=newsnow_mysql
20-
- MYSQL_PORT=3306
21-
- MYSQL_USER=newsnow
22-
- MYSQL_PASSWORD=root_password
23-
- MYSQL_DATABASE=newsnow
24-
- MYSQL_SSL=false
25-
# Uncomment the following lines to use MySQL database
26-
# depends_on:
27-
# - mysql
28-
29-
# Uncomment the following service to use MySQL database
30-
# mysql:
31-
# image: mysql:8.0
32-
# container_name: newsnow_mysql
33-
# restart: always
34-
# environment:
35-
# MYSQL_ROOT_PASSWORD: root_password
36-
# MYSQL_DATABASE: newsnow
37-
# MYSQL_USER: newsnow
38-
# MYSQL_PASSWORD: your_password
39-
# ports:
40-
# - "3306:3306"
41-
# volumes:
42-
# - mysql_data:/var/lib/mysql
43-
# command: --default-authentication-plugin=mysql_native_password
4418

4519
volumes:
4620
newsnow_data:
4721
name: newsnow_data
48-
# mysql_data:
49-
# name: newsnow_mysql_data

example.env.server

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,4 @@ G_CLIENT_ID=
22
G_CLIENT_SECRET=
33
JWT_SECRET=
44
INIT_TABLE=true
5-
ENABLE_CACHE=true
6-
# MySQL Database Configuration
7-
# Uncomment and configure these variables to use MySQL instead of SQLite
8-
# MYSQL_HOST=localhost
9-
# MYSQL_PORT=3306
10-
# MYSQL_USER=newsnow
11-
# MYSQL_PASSWORD=your_password
12-
# MYSQL_DATABASE=newsnow
13-
# MYSQL_SSL=false
5+
ENABLE_CACHE=true

nitro.config.ts

Lines changed: 11 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,6 @@ import viteNitro from "vite-plugin-with-nitro"
44
import { RollopGlob } from "./tools/rollup-glob"
55
import { projectDir } from "./shared/dir"
66

7-
// 检测是否配置了 MySQL
8-
function isMySQLConfigured(): boolean {
9-
return !!(process.env.MYSQL_HOST &&
10-
process.env.MYSQL_USER &&
11-
process.env.MYSQL_PASSWORD &&
12-
process.env.MYSQL_DATABASE)
13-
}
14-
15-
// 根据环境变量动态配置数据库
16-
function getDatabaseConfig() {
17-
if (isMySQLConfigured()) {
18-
console.log('🔗 Using MySQL connector')
19-
return {
20-
default: {
21-
connector: "mysql2",
22-
options: {
23-
host: process.env.MYSQL_HOST,
24-
port: parseInt(process.env.MYSQL_PORT || "3306"),
25-
user: process.env.MYSQL_USER,
26-
password: process.env.MYSQL_PASSWORD,
27-
database: process.env.MYSQL_DATABASE,
28-
ssl: process.env.MYSQL_SSL === "true" ? {} : false,
29-
},
30-
},
31-
}
32-
} else {
33-
console.log('🗃️ Using SQLite connector')
34-
return {
35-
default: {
36-
connector: "better-sqlite3",
37-
},
38-
}
39-
}
40-
}
41-
427
const nitroOption: Parameters<typeof viteNitro>[0] = {
438
experimental: {
449
database: true,
@@ -47,8 +12,16 @@ const nitroOption: Parameters<typeof viteNitro>[0] = {
4712
plugins: [RollopGlob()],
4813
},
4914
sourceMap: false,
50-
database: getDatabaseConfig(),
51-
devDatabase: getDatabaseConfig(),
15+
database: {
16+
default: {
17+
connector: "better-sqlite3",
18+
},
19+
},
20+
devDatabase: {
21+
default: {
22+
connector: "better-sqlite3",
23+
},
24+
},
5225
imports: {
5326
dirs: ["server/utils", "shared"],
5427
},
@@ -94,4 +67,4 @@ if (process.env.VERCEL) {
9467

9568
export default function () {
9669
return viteNitro(nitroOption)
97-
}
70+
}

scripts/init-mysql.sql

Lines changed: 0 additions & 33 deletions
This file was deleted.

server/database/cache.ts

Lines changed: 11 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -3,68 +3,28 @@ import type { NewsItem } from "@shared/types"
33
import type { Database } from "db0"
44
import type { CacheInfo, CacheRow } from "../types"
55

6-
// 改进的数据库类型检测函数
7-
function isMySQLDatabase(): boolean {
8-
const hasMySQLConfig = process.env.MYSQL_HOST &&
9-
process.env.MYSQL_USER &&
10-
process.env.MYSQL_PASSWORD &&
11-
process.env.MYSQL_DATABASE
12-
13-
if (hasMySQLConfig) {
14-
console.log('🔗 Using MySQL database')
15-
return true
16-
} else {
17-
console.log('🗃️ Using SQLite database')
18-
return false
19-
}
20-
}
21-
226
export class Cache {
237
private db
24-
private isMySQL: boolean
25-
268
constructor(db: Database) {
279
this.db = db
28-
this.isMySQL = isMySQLDatabase()
2910
}
3011

3112
async init() {
32-
if (this.isMySQL) {
33-
// MySQL syntax
34-
await this.db.prepare(`
35-
CREATE TABLE IF NOT EXISTS cache (
36-
id VARCHAR(255) PRIMARY KEY,
37-
updated BIGINT,
38-
data TEXT
39-
);
40-
`).run()
41-
} else {
42-
// SQLite syntax
43-
await this.db.prepare(`
44-
CREATE TABLE IF NOT EXISTS cache (
45-
id TEXT PRIMARY KEY,
46-
updated INTEGER,
47-
data TEXT
48-
);
49-
`).run()
50-
}
13+
await this.db.prepare(`
14+
CREATE TABLE IF NOT EXISTS cache (
15+
id TEXT PRIMARY KEY,
16+
updated INTEGER,
17+
data TEXT
18+
);
19+
`).run()
5120
logger.success(`init cache table`)
5221
}
5322

5423
async set(key: string, value: NewsItem[]) {
5524
const now = Date.now()
56-
57-
if (this.isMySQL) {
58-
// MySQL syntax - use ON DUPLICATE KEY UPDATE
59-
await this.db.prepare(
60-
`INSERT INTO cache (id, data, updated) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE data = VALUES(data), updated = VALUES(updated)`,
61-
).run(key, JSON.stringify(value), now)
62-
} else {
63-
// SQLite syntax - use INSERT OR REPLACE
64-
await this.db.prepare(
65-
`INSERT OR REPLACE INTO cache (id, data, updated) VALUES (?, ?, ?)`,
66-
).run(key, JSON.stringify(value), now)
67-
}
25+
await this.db.prepare(
26+
`INSERT OR REPLACE INTO cache (id, data, updated) VALUES (?, ?, ?)`,
27+
).run(key, JSON.stringify(value), now)
6828
logger.success(`set ${key} cache`)
6929
}
7030

@@ -122,4 +82,4 @@ export async function getCacheTable() {
12282
} catch (e) {
12383
logger.error("failed to init database ", e)
12484
}
125-
}
85+
}

server/database/user.ts

Lines changed: 16 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import process from "node:process"
21
import type { Database } from "db0"
32
import type { UserInfo } from "#/types"
43

@@ -9,58 +8,28 @@ export class UserTable {
98
}
109

1110
async init() {
12-
// Check if we're using MySQL by looking for MySQL environment variables
13-
const isMySQL = process.env.MYSQL_HOST && process.env.MYSQL_USER && process.env.MYSQL_PASSWORD && process.env.MYSQL_DATABASE
14-
15-
if (isMySQL) {
16-
// MySQL syntax
17-
await this.db.prepare(`
18-
CREATE TABLE IF NOT EXISTS user (
19-
id VARCHAR(255) PRIMARY KEY,
20-
email VARCHAR(255),
21-
data TEXT,
22-
type VARCHAR(50),
23-
created BIGINT,
24-
updated BIGINT
25-
);
26-
`).run()
27-
await this.db.prepare(`
28-
CREATE INDEX IF NOT EXISTS idx_user_id ON user(id);
29-
`).run()
30-
} else {
31-
// SQLite syntax
32-
await this.db.prepare(`
33-
CREATE TABLE IF NOT EXISTS user (
34-
id TEXT PRIMARY KEY,
35-
email TEXT,
36-
data TEXT,
37-
type TEXT,
38-
created INTEGER,
39-
updated INTEGER
40-
);
41-
`).run()
42-
await this.db.prepare(`
43-
CREATE INDEX IF NOT EXISTS idx_user_id ON user(id);
44-
`).run()
45-
}
11+
await this.db.prepare(`
12+
CREATE TABLE IF NOT EXISTS user (
13+
id TEXT PRIMARY KEY,
14+
email TEXT,
15+
data TEXT,
16+
type TEXT,
17+
created INTEGER,
18+
updated INTEGER
19+
);
20+
`).run()
21+
await this.db.prepare(`
22+
CREATE INDEX IF NOT EXISTS idx_user_id ON user(id);
23+
`).run()
4624
logger.success(`init user table`)
4725
}
4826

4927
async addUser(id: string, email: string, type: "github") {
5028
const u = await this.getUser(id)
5129
const now = Date.now()
52-
const isMySQL = process.env.MYSQL_HOST && process.env.MYSQL_USER && process.env.MYSQL_PASSWORD && process.env.MYSQL_DATABASE
53-
5430
if (!u) {
55-
if (isMySQL) {
56-
// MySQL syntax - use ON DUPLICATE KEY UPDATE
57-
await this.db.prepare(`INSERT INTO user (id, email, data, type, created, updated) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE email = VALUES(email), updated = VALUES(updated)`)
58-
.run(id, email, "", type, now, now)
59-
} else {
60-
// SQLite syntax
61-
await this.db.prepare(`INSERT INTO user (id, email, data, type, created, updated) VALUES (?, ?, ?, ?, ?, ?)`)
62-
.run(id, email, "", type, now, now)
63-
}
31+
await this.db.prepare(`INSERT INTO user (id, email, data, type, created, updated) VALUES (?, ?, ?, ?, ?, ?)`)
32+
.run(id, email, "", type, now, now)
6433
logger.success(`add user ${id}`)
6534
} else if (u.email !== email && u.type !== type) {
6635
await this.db.prepare(`UPDATE user SET email = ?, updated = ? WHERE id = ?`).run(email, now, id)
@@ -97,4 +66,4 @@ export class UserTable {
9766
if (!state.success) throw new Error(`delete user ${key} failed`)
9867
logger.success(`delete user ${key}`)
9968
}
100-
}
69+
}

0 commit comments

Comments
 (0)