feat(user): 新增 acme 用户相关功能
- 添加 acme_user 模型和相关数据库迁移- 实现 acme 用户的 CRUD 功能 - 新增 acme 用户相关的 handler 和 service -优化 domain 模型,移除冗余字段 - 更新全局异常处理,增加日志记录
This commit is contained in:
parent
a288f5b6da
commit
61a17cfa5e
69
dao/acme_user.go
Normal file
69
dao/acme_user.go
Normal file
|
@ -0,0 +1,69 @@
|
|||
package dao
|
||||
|
||||
import (
|
||||
"acme-mana-server-go/db"
|
||||
"acme-mana-server-go/model"
|
||||
"acme-mana-server-go/vo"
|
||||
)
|
||||
|
||||
type AcmeUserDao struct {
|
||||
}
|
||||
|
||||
func (dao *AcmeUserDao) Add(user *model.AcmeUser) *model.AcmeUser {
|
||||
conn := db.Db()
|
||||
conn.Create(user)
|
||||
return user
|
||||
}
|
||||
|
||||
func (dao *AcmeUserDao) Get(id int) *model.AcmeUser {
|
||||
res := &model.AcmeUser{}
|
||||
conn := db.Db()
|
||||
tx := conn.First(res, id)
|
||||
if tx.Error != nil {
|
||||
panic(tx.Error)
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func (dao *AcmeUserDao) List() *[]model.AcmeUser {
|
||||
conn := db.Db()
|
||||
var res []model.AcmeUser
|
||||
conn.Find(&res)
|
||||
return &res
|
||||
}
|
||||
|
||||
func (dao *AcmeUserDao) Edit(acmeUser *model.AcmeUser) *model.AcmeUser {
|
||||
conn := db.Db()
|
||||
conn.Save(acmeUser)
|
||||
return acmeUser
|
||||
}
|
||||
|
||||
func (dao *AcmeUserDao) Delete(id int) {
|
||||
conn := db.Db()
|
||||
conn.Delete(&model.AcmeUser{}, id)
|
||||
}
|
||||
|
||||
func (dao *AcmeUserDao) Page(req *vo.AcmeUserPageReq) (int64, *[]model.AcmeUser) {
|
||||
var total int64
|
||||
var list []model.AcmeUser
|
||||
|
||||
conn := db.Db()
|
||||
bean := req.Bean
|
||||
|
||||
query := conn.Model(&model.Domain{})
|
||||
|
||||
if bean.Email != "" {
|
||||
query = query.Where("email like ?", "%"+bean.Email+"%")
|
||||
}
|
||||
|
||||
query.Count(&total)
|
||||
if total == 0 {
|
||||
return total, &list
|
||||
}
|
||||
|
||||
page := req.Page
|
||||
query.Offset(page.Size * (page.Page - 1)).Limit(page.Size)
|
||||
|
||||
query.Find(&list)
|
||||
return total, &list
|
||||
}
|
|
@ -25,11 +25,11 @@ func (_ *DomainDao) Get(id int) *model.Domain {
|
|||
return res
|
||||
}
|
||||
|
||||
func (_ *DomainDao) List() []*model.Domain {
|
||||
func (_ *DomainDao) List() *[]model.Domain {
|
||||
conn := db.Db()
|
||||
res := make([]*model.Domain, 0)
|
||||
var res []model.Domain
|
||||
conn.Find(&res)
|
||||
return res
|
||||
return &res
|
||||
}
|
||||
|
||||
func (_ *DomainDao) Edit(newDomain *model.Domain) *model.Domain {
|
||||
|
|
2
db/db.go
2
db/db.go
|
@ -24,7 +24,7 @@ func initDb() {
|
|||
if err != nil {
|
||||
panic("failed to connect database")
|
||||
}
|
||||
err = conn.AutoMigrate(&model.Domain{})
|
||||
err = conn.AutoMigrate(&model.Domain{}, &model.AcmeUser{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
72
handler/acme_user.go
Normal file
72
handler/acme_user.go
Normal file
|
@ -0,0 +1,72 @@
|
|||
package handler
|
||||
|
||||
import (
|
||||
"acme-mana-server-go/model"
|
||||
"acme-mana-server-go/service"
|
||||
"acme-mana-server-go/vo"
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
var acmeUserService = &service.AcmeUserService{}
|
||||
|
||||
type AcmeUserHandler struct {
|
||||
}
|
||||
|
||||
func (a *AcmeUserHandler) Register(r *gin.RouterGroup) {
|
||||
group := r.Group("/acme_user")
|
||||
group.GET("/", a.List)
|
||||
group.POST("/", a.Add)
|
||||
group.GET("/:id", a.Get)
|
||||
group.DELETE("/:id", a.Delete)
|
||||
group.POST("/page", a.Page)
|
||||
}
|
||||
|
||||
func (a *AcmeUserHandler) List(c *gin.Context) {
|
||||
acmeUsers := acmeUserService.List()
|
||||
c.JSON(200, vo.Success(acmeUsers))
|
||||
}
|
||||
|
||||
func (a *AcmeUserHandler) Add(c *gin.Context) {
|
||||
acmeUser := &model.AcmeUser{}
|
||||
err := c.BindJSON(acmeUser)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
acmeUser = acmeUserService.Add(acmeUser)
|
||||
c.JSON(200, vo.Success(acmeUser))
|
||||
}
|
||||
|
||||
func (a *AcmeUserHandler) Get(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := strconv.Atoi(idStr)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
acmeUser := acmeUserService.Get(id)
|
||||
c.JSON(200, vo.Success(acmeUser))
|
||||
}
|
||||
|
||||
func (a *AcmeUserHandler) Delete(c *gin.Context) {
|
||||
idStr := c.Param("id")
|
||||
id, err := strconv.Atoi(idStr)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
acmeUserService.Delete(id)
|
||||
c.JSON(200, vo.Success(""))
|
||||
}
|
||||
|
||||
func (a *AcmeUserHandler) Page(c *gin.Context) {
|
||||
req := &vo.AcmeUserPageReq{}
|
||||
err := c.BindJSON(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
total, acmeUsers := acmeUserService.Page(req)
|
||||
result := vo.PageResult{
|
||||
Total: total,
|
||||
List: acmeUsers,
|
||||
}
|
||||
c.JSON(200, vo.Success(&result))
|
||||
}
|
|
@ -3,12 +3,15 @@ package handler
|
|||
import (
|
||||
"acme-mana-server-go/vo"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-acme/lego/v4/log"
|
||||
)
|
||||
|
||||
func GlobalPanicHandler() gin.HandlerFunc {
|
||||
return func(ctx *gin.Context) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
//debug.PrintStack()
|
||||
log.Infof("panic: %v", err)
|
||||
ctx.JSON(500, vo.Fail(err.(error).Error()))
|
||||
ctx.Abort()
|
||||
}
|
||||
|
@ -21,13 +24,9 @@ func GlobalErrorHandler() gin.HandlerFunc {
|
|||
return func(c *gin.Context) {
|
||||
c.Next()
|
||||
if len(c.Errors) > 0 {
|
||||
log.Printf("error: %v", c.Errors)
|
||||
c.JSON(500, vo.Fail(c.Errors.String()))
|
||||
c.Abort()
|
||||
}
|
||||
err := recover()
|
||||
if err != nil {
|
||||
c.JSON(500, vo.Fail(err.(error).Error()))
|
||||
c.Abort()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,4 +10,7 @@ func RegisterRouter(r *gin.Engine) {
|
|||
api := r.Group("/api/v1")
|
||||
domainHandler := DomainHandler{}
|
||||
domainHandler.Register(api)
|
||||
|
||||
acmeUserHandler := AcmeUserHandler{}
|
||||
acmeUserHandler.Register(api)
|
||||
}
|
||||
|
|
|
@ -4,10 +4,7 @@ type Domain struct {
|
|||
Id uint `gorm:"primary_key;auto_increment"`
|
||||
Name string `gorm:"type:varchar(255);not null"`
|
||||
Hosts string `gorm:"type:varchar(255);not null"`
|
||||
Provider string `gorm:"type:varchar(32);not null"`
|
||||
ProviderConf string `gorm:"type:text;not null"`
|
||||
AcmeEmail string `gorm:"type:varchar(255);not null"`
|
||||
AcmePriKey string `gorm:"type:text;not null"`
|
||||
Registration string `gorm:"type:text;not null"`
|
||||
Resource string `gorm:"type:text;not null"`
|
||||
Provider string `gorm:"type:varchar(32);not null;default:''"`
|
||||
ProviderConf string `gorm:"type:text;not null;default:''"`
|
||||
Resource string `gorm:"type:text;not null;default:''"`
|
||||
}
|
||||
|
|
9
model/user.go
Normal file
9
model/user.go
Normal file
|
@ -0,0 +1,9 @@
|
|||
package model
|
||||
|
||||
type AcmeUser struct {
|
||||
Id uint `gorm:"primary_key;auto_increment"`
|
||||
Email string `gorm:"type:varchar(255);not null;index:idx_email,unique"`
|
||||
PrivateKey string `gorm:"type:text;not null"`
|
||||
Registration string `gorm:"type:text;not null"`
|
||||
Status int `gorm:"type:int;not null"`
|
||||
}
|
41
service/acme_user.go
Normal file
41
service/acme_user.go
Normal file
|
@ -0,0 +1,41 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"acme-mana-server-go/dao"
|
||||
"acme-mana-server-go/model"
|
||||
"acme-mana-server-go/vo"
|
||||
)
|
||||
|
||||
var acmeUserDao = &dao.AcmeUserDao{}
|
||||
|
||||
type AcmeUserService struct {
|
||||
}
|
||||
|
||||
func (_ *AcmeUserService) Get(id int) *model.AcmeUser {
|
||||
return acmeUserDao.Get(id)
|
||||
}
|
||||
func (_ *AcmeUserService) List() *[]model.AcmeUser {
|
||||
return acmeUserDao.List()
|
||||
}
|
||||
func (service *AcmeUserService) Add(acmeUser *model.AcmeUser) *model.AcmeUser {
|
||||
acmeUser = &model.AcmeUser{
|
||||
Email: acmeUser.Email,
|
||||
Status: 0,
|
||||
}
|
||||
acmeUser = acmeUserDao.Add(acmeUser)
|
||||
acmeUser.PrivateKey = "PrivateKey"
|
||||
acmeUser.Registration = "Registration"
|
||||
acmeUser.Status = 1
|
||||
service.Edit(acmeUser)
|
||||
return acmeUser
|
||||
}
|
||||
func (_ *AcmeUserService) Edit(acmeUser *model.AcmeUser) *model.AcmeUser {
|
||||
return acmeUserDao.Edit(acmeUser)
|
||||
}
|
||||
func (_ *AcmeUserService) Delete(id int) {
|
||||
acmeUserDao.Delete(id)
|
||||
}
|
||||
|
||||
func (_ *AcmeUserService) Page(req *vo.AcmeUserPageReq) (int64, *[]model.AcmeUser) {
|
||||
return acmeUserDao.Page(req)
|
||||
}
|
|
@ -14,7 +14,7 @@ var domainDao = &dao.DomainDao{}
|
|||
func (_ *DomainService) Get(id int) *model.Domain {
|
||||
return domainDao.Get(id)
|
||||
}
|
||||
func (_ *DomainService) List() []*model.Domain {
|
||||
func (_ *DomainService) List() *[]model.Domain {
|
||||
return domainDao.List()
|
||||
}
|
||||
func (_ *DomainService) Add(domain *model.Domain) *model.Domain {
|
||||
|
|
8
vo/acme_user.go
Normal file
8
vo/acme_user.go
Normal file
|
@ -0,0 +1,8 @@
|
|||
package vo
|
||||
|
||||
type AcmeUserPageReq struct {
|
||||
Bean struct {
|
||||
Email string `json:"email"`
|
||||
}
|
||||
Page Page
|
||||
}
|
Loading…
Reference in New Issue
Block a user