2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-07 10:37:14 +08:00

feat: 数据库管理优化2

This commit is contained in:
耗子
2024-11-27 01:45:58 +08:00
parent cd8a10d799
commit 3677d0317c
12 changed files with 90 additions and 6 deletions

View File

@@ -20,10 +20,12 @@ type Database struct {
Server string `json:"server"`
ServerID uint `json:"server_id"`
Encoding string `json:"encoding"`
Comment string `json:"comment"`
}
type DatabaseRepo interface {
List(page, limit uint) ([]*Database, int64, error)
Create(req *request.DatabaseCreate) error
Delete(serverID uint, name string) error
Comment(req *request.DatabaseComment) error
}

View File

@@ -1,6 +1,7 @@
package data
import (
"errors"
"fmt"
"slices"
@@ -53,6 +54,7 @@ func (r databaseRepo) List(page, limit uint) ([]*biz.Database, int64, error) {
Server: server.Name,
ServerID: server.ID,
Encoding: item.Encoding,
Comment: item.Comment,
})
}
}
@@ -134,3 +136,23 @@ func (r databaseRepo) Delete(serverID uint, name string) error {
return nil
}
func (r databaseRepo) Comment(req *request.DatabaseComment) error {
server, err := NewDatabaseServerRepo().Get(req.ServerID)
if err != nil {
return err
}
switch server.Type {
case biz.DatabaseTypeMysql:
return errors.New("mysql not support database comment")
case biz.DatabaseTypePostgresql:
postgres, err := db.NewPostgres(server.Username, server.Password, server.Host, server.Port)
if err != nil {
return err
}
return postgres.DatabaseComment(req.Name, req.Comment)
}
return nil
}

View File

@@ -14,3 +14,9 @@ type DatabaseDelete struct {
ServerID uint `form:"server_id" json:"server_id" validate:"required,exists=database_servers id"`
Name string `form:"name" json:"name" validate:"required"`
}
type DatabaseComment struct {
ServerID uint `form:"server_id" json:"server_id" validate:"required,exists=database_servers id"`
Name string `form:"name" json:"name" validate:"required"`
Comment string `form:"comment" json:"comment"`
}

View File

@@ -67,6 +67,7 @@ func Http(r chi.Router) {
r.Get("/", database.List)
r.Post("/", database.Create)
r.Delete("/", database.Delete)
r.Post("/comment", database.Comment)
})
r.Route("/databaseServer", func(r chi.Router) {

View File

@@ -39,6 +39,7 @@ func Success(w http.ResponseWriter, data any) {
func Error(w http.ResponseWriter, code int, format string, args ...any) {
render := chix.NewRender(w)
defer render.Release()
render.Header(chix.HeaderContentType, chix.MIMEApplicationJSONCharsetUTF8) // must before Status()
render.Status(code)
render.JSON(&ErrorResponse{
Message: fmt.Sprintf(format, args...),
@@ -49,6 +50,7 @@ func Error(w http.ResponseWriter, code int, format string, args ...any) {
func ErrorSystem(w http.ResponseWriter) {
render := chix.NewRender(w)
defer render.Release()
render.Header(chix.HeaderContentType, chix.MIMEApplicationJSONCharsetUTF8) // must before Status()
render.Status(http.StatusInternalServerError)
render.JSON(&ErrorResponse{
Message: "系统内部错误",

View File

@@ -68,3 +68,18 @@ func (s *Database) Delete(w http.ResponseWriter, r *http.Request) {
Success(w, nil)
}
func (s *Database) Comment(w http.ResponseWriter, r *http.Request) {
req, err := Bind[request.DatabaseComment](r)
if err != nil {
Error(w, http.StatusUnprocessableEntity, "%v", err)
return
}
if err = s.databaseRepo.Comment(req); err != nil {
Error(w, http.StatusInternalServerError, "%v", err)
return
}
Success(w, nil)
}