feat: 实现前端卡密管理界面
- 卡密列表展示与分页功能 - 单个/批量创建卡密 - 卡密删除与批量删除 - 卡密导出功能 (file-saver) - 启用/禁用状态切换 - 状态判断 (有效/已使用/已失效) - Toast 通知系统 (vue-sonner) - 登录页面错误提示优化 - 后端登录错误消息中文化
This commit is contained in:
43
backend/cmd/main.go
Normal file
43
backend/cmd/main.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"gpt-manager-go/internal/config"
|
||||
"gpt-manager-go/internal/db"
|
||||
"gpt-manager-go/internal/router"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 加载 .env 文件
|
||||
if err := config.LoadEnv(".env"); err != nil {
|
||||
log.Printf("Warning: Failed to load .env file: %v", err)
|
||||
}
|
||||
|
||||
// 初始化数据库连接
|
||||
if err := db.Init(); err != nil {
|
||||
log.Fatalf("Failed to initialize database: %v", err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
// 执行数据库迁移
|
||||
if err := db.Migrate(db.DB); err != nil {
|
||||
log.Fatalf("Failed to run migrations: %v", err)
|
||||
}
|
||||
|
||||
// 设置路由
|
||||
handler := router.SetupRoutes(db.DB)
|
||||
|
||||
// 获取端口
|
||||
port := os.Getenv("PORT")
|
||||
if port == "" {
|
||||
port = "8080"
|
||||
}
|
||||
|
||||
log.Printf("Server starting on port %s...", port)
|
||||
if err := http.ListenAndServe(":"+port, handler); err != nil {
|
||||
log.Fatalf("Server failed: %v", err)
|
||||
}
|
||||
}
|
||||
60
backend/cmd/seed/main.go
Normal file
60
backend/cmd/seed/main.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"gpt-manager-go/internal/auth"
|
||||
"gpt-manager-go/internal/config"
|
||||
"gpt-manager-go/internal/db"
|
||||
"gpt-manager-go/internal/models"
|
||||
"gpt-manager-go/internal/repository"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 加载配置
|
||||
config.LoadEnv(".env")
|
||||
|
||||
// 连接数据库
|
||||
if err := db.Init(); err != nil {
|
||||
log.Fatalf("Failed to connect database: %v", err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
// 执行迁移
|
||||
if err := db.Migrate(db.DB); err != nil {
|
||||
log.Fatalf("Failed to migrate: %v", err)
|
||||
}
|
||||
|
||||
// 创建测试管理员
|
||||
adminRepo := repository.NewAdminRepository(db.DB)
|
||||
|
||||
// 检查是否已存在
|
||||
existing, _ := adminRepo.FindByUsername("admin")
|
||||
if existing != nil {
|
||||
fmt.Println("Admin user already exists!")
|
||||
return
|
||||
}
|
||||
|
||||
// 创建密码哈希
|
||||
hash, err := auth.HashPassword("admin123")
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to hash password: %v", err)
|
||||
}
|
||||
|
||||
admin := &models.Admin{
|
||||
Username: "admin",
|
||||
Email: "admin@example.com",
|
||||
PasswordHash: hash,
|
||||
IsSuperAdmin: true,
|
||||
IsActive: true,
|
||||
}
|
||||
|
||||
if err := adminRepo.Create(admin); err != nil {
|
||||
log.Fatalf("Failed to create admin: %v", err)
|
||||
}
|
||||
|
||||
fmt.Println("✅ Test admin created successfully!")
|
||||
fmt.Println(" Username: admin")
|
||||
fmt.Println(" Password: admin123")
|
||||
}
|
||||
Reference in New Issue
Block a user