coai/connection/database.go
2023-08-13 12:10:40 +08:00

111 lines
2.2 KiB
Go

package connection
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/spf13/viper"
"log"
)
var _ *sql.DB
func ConnectMySQL() *sql.DB {
// connect to MySQL
db, err := sql.Open("mysql", fmt.Sprintf(
"%s:%s@tcp(%s:%d)/%s",
viper.GetString("mysql.user"),
viper.GetString("mysql.password"),
viper.GetString("mysql.host"),
viper.GetInt("mysql.port"),
viper.GetString("mysql.db"),
))
if err != nil {
log.Fatalln("Failed to connect to MySQL server: ", err)
} else {
log.Println("Connected to MySQL server successfully")
}
CreateUserTable(db)
CreateConversationTable(db)
CreateSubscriptionTable(db)
CreatePackageTable(db)
CreatePaymentLogTable(db)
return db
}
func CreateUserTable(db *sql.DB) {
_, err := db.Exec(`
CREATE TABLE IF NOT EXISTS auth (
id INT PRIMARY KEY AUTO_INCREMENT,
bind_id INT UNIQUE,
username VARCHAR(24) UNIQUE,
token VARCHAR(255) NOT NULL,
password VARCHAR(64) NOT NULL
);
`)
if err != nil {
log.Fatal(err)
}
}
func CreatePaymentLogTable(db *sql.DB) {
_, err := db.Exec(`
CREATE TABLE IF NOT EXISTS payment_log (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
amount DECIMAL(12,2) DEFAULT 0,
description VARCHAR(3600),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
`)
if err != nil {
log.Fatal(err)
}
}
func CreateSubscriptionTable(db *sql.DB) {
_, err := db.Exec(`
CREATE TABLE IF NOT EXISTS subscription (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
plan_id INT,
expired_at DATETIME,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
`)
if err != nil {
log.Fatal(err)
}
}
func CreatePackageTable(db *sql.DB) {
_, err := db.Exec(`
CREATE TABLE IF NOT EXISTS package (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
money DECIMAL(12,2) DEFAULT 0,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
`)
if err != nil {
log.Fatal(err)
}
}
func CreateConversationTable(db *sql.DB) {
_, err := db.Exec(`
CREATE TABLE IF NOT EXISTS conversation (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
conversation_id INT UNIQUE,
conversation_name VARCHAR(255),
data TEXT,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
`)
if err != nil {
log.Fatal(err)
}
}