feat: 删除旧的配置文件并添加新的数据库迁移脚本以支持用户、会话和审计日志功能

This commit is contained in:
Rogee
2025-09-23 17:36:24 +08:00
parent e25004df5b
commit 64ae2d6d44
3 changed files with 50 additions and 99 deletions

View File

@@ -1,99 +0,0 @@
# =========================
# 应用基础配置
# =========================
[App]
# 应用运行模式development | production | testing
Mode = "development"
# 应用基础URI用于生成完整URL
BaseURI = "http://localhost:8080"
# =========================
# HTTP 服务器配置
# =========================
[Http]
# HTTP服务监听端口
Port = 8080
# 监听地址(可选,默认 0.0.0.0
# Host = "0.0.0.0"
# 全局路由前缀(可选)
# BaseURI = "/api/v1"
# =========================
# 数据库配置
# =========================
[Database]
# 数据库主机地址
Host = "localhost"
# 数据库端口
Port = 5432
# 数据库名称
Database = "{{.ProjectName}}"
# 数据库用户名
Username = "postgres"
# 数据库密码
Password = "password"
# SSL模式disable | require | verify-ca | verify-full
SslMode = "disable"
# 时区
TimeZone = "Asia/Shanghai"
# 连接池配置(可选)
MaxIdleConns = 10
MaxOpenConns = 100
ConnMaxLifetime = "1800s"
ConnMaxIdleTime = "300s"
# =========================
# JWT 认证配置
# =========================
[JWT]
# JWT签名密钥生产环境请使用强密钥
SigningKey = "your-secret-key-change-in-production"
# Token过期时间72h, 168h, 720h
ExpiresTime = "168h"
# 签发者(可选)
Issuer = "{{.ProjectName}}"
# =========================
# HashIDs 配置
# =========================
[HashIDs]
# 盐值用于ID加密请使用随机字符串
Salt = "your-random-salt-here"
# 最小长度(可选)
MinLength = 8
# 自定义字符集(可选)
# Alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
# =========================
# Redis 缓存配置
# =========================
[Redis]
# Redis主机地址
Host = "localhost"
# Redis端口
Port = 6379
# Redis密码可选
Password = ""
# 数据库编号
DB = 0
# 连接池配置(可选)
PoolSize = 50
MinIdleConns = 10
MaxRetries = 3
# 超时配置(可选)
DialTimeout = "5s"
ReadTimeout = "3s"
WriteTimeout = "3s"
# =========================
# 日志配置
# =========================
[Log]
# 日志级别debug | info | warn | error
Level = "info"
# 日志格式json | text
Format = "json"
# 输出文件(可选,未配置则输出到控制台)
# Output = "./logs/app.log"
# 是否启用调用者信息(文件名:行号)
EnableCaller = true

View File

@@ -0,0 +1,50 @@
-- +goose Up
-- +goose StatementBegin
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(255) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS sessions (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
token VARCHAR(255) UNIQUE NOT NULL,
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS audit_logs (
id SERIAL PRIMARY KEY,
action VARCHAR(100) NOT NULL,
entity_type VARCHAR(100) NOT NULL,
entity_id INTEGER,
user_id INTEGER REFERENCES users(id),
metadata JSONB,
ip_address INET,
user_agent TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Create indexes for better performance
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
CREATE INDEX IF NOT EXISTS idx_users_username ON users(username);
CREATE INDEX IF NOT EXISTS idx_sessions_token ON sessions(token);
CREATE INDEX IF NOT EXISTS idx_sessions_expires_at ON sessions(expires_at);
CREATE INDEX IF NOT EXISTS idx_audit_logs_created_at ON audit_logs(created_at);
CREATE INDEX IF NOT EXISTS idx_audit_logs_user_id ON audit_logs(user_id);
CREATE INDEX IF NOT EXISTS idx_audit_logs_entity ON audit_logs(entity_type, entity_id);
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS audit_logs;
DROP TABLE IF EXISTS sessions;
DROP TABLE IF EXISTS users;
-- +goose StatementEnd