feat: 实现应用管理功能并重构API结构

- 新增应用管理页面,支持创建、查看、搜索和删除应用
- 重构API结构,将auth和app相关接口分离到独立模块
- 实现应用列表过滤和短ID生成功能
- 优化路由守卫和全局消息提示
- 更新登录页面样式和表单验证逻辑
This commit is contained in:
MaYu
2026-03-11 00:47:06 +08:00
parent d006d205c1
commit c7b0672db9
14 changed files with 725 additions and 272 deletions

View File

@@ -16,7 +16,17 @@ func NewAppHandler(service *app.AppService) *AppHandler {
}
func (h *AppHandler) List(c *gin.Context) {
apps, err := h.service.List()
params := make(map[string]any)
// 从查询参数中获取过滤条件
if name := c.Query("name"); name != "" {
params["name"] = name
}
if description := c.Query("description"); description != "" {
params["description"] = description
}
apps, err := h.service.List(params)
if err != nil {
response.FailServer(c, err.Error())
return

View File

@@ -1,6 +1,10 @@
package app
import "gorm.io/gorm"
import (
"nebula/pkg/util"
"gorm.io/gorm"
)
type AppService struct {
db *gorm.DB
@@ -10,9 +14,19 @@ func NewService(db *gorm.DB) *AppService {
return &AppService{db: db}
}
func (s *AppService) List() ([]App, error) {
func (s *AppService) List(params map[string]any) ([]App, error) {
var apps []App
err := s.db.Find(&apps).Error
query := s.db
// 只处理name和description参数使用模糊查询
if name, ok := params["name"]; ok {
query = query.Where("name LIKE ?", "%"+name.(string)+"%")
}
if description, ok := params["description"]; ok {
query = query.Where("description LIKE ?", "%"+description.(string)+"%")
}
err := query.Order("updated_at desc").Find(&apps).Error
return apps, err
}
@@ -26,6 +40,30 @@ func (s *AppService) Get(id string) (*App, error) {
}
func (s *AppService) Create(app App) error {
// 生成唯一的短ID作为应用ID
var appExists App
var err error
var id string
for {
// 生成短ID
id = util.GenerateShortID()
// 检查ID是否已存在
err = s.db.First(&appExists, "id = ?", id).Error
if err != nil {
// 如果错误是记录未找到说明ID可用
if err == gorm.ErrRecordNotFound {
break
}
// 其他错误直接返回
return err
}
// 如果ID已存在继续循环生成新ID
}
// 使用生成的唯一ID
app.ID = id
return s.db.Create(&app).Error
}