mirror of
https://github.com/coaidev/coai.git
synced 2025-05-20 05:20:15 +09:00
134 lines
2.9 KiB
Go
134 lines
2.9 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)
|
|
CreatePackageTable(db)
|
|
CreateQuotaTable(db)
|
|
CreateSubscriptionTable(db)
|
|
CreateApiKeyTable(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 CreatePackageTable(db *sql.DB) {
|
|
_, err := db.Exec(`
|
|
CREATE TABLE IF NOT EXISTS package (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
user_id INT,
|
|
type VARCHAR(255),
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES auth(id),
|
|
UNIQUE KEY (user_id, type)
|
|
);
|
|
`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func CreateQuotaTable(db *sql.DB) {
|
|
_, err := db.Exec(`
|
|
CREATE TABLE IF NOT EXISTS quota (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
user_id INT UNIQUE,
|
|
quota DECIMAL(10, 4),
|
|
used DECIMAL(10, 4),
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES auth(id)
|
|
);
|
|
`)
|
|
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,
|
|
conversation_name VARCHAR(255),
|
|
data TEXT,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE KEY (user_id, conversation_id)
|
|
);
|
|
`)
|
|
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 UNIQUE,
|
|
expired_at DATETIME,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
total_month INT DEFAULT 0,
|
|
FOREIGN KEY (user_id) REFERENCES auth(id)
|
|
);
|
|
`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func CreateApiKeyTable(db *sql.DB) {
|
|
_, err := db.Exec(`
|
|
CREATE TABLE IF NOT EXISTS apikey (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
user_id INT UNIQUE,
|
|
api_key VARCHAR(255) UNIQUE,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES auth(id)
|
|
);
|
|
`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|