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
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *DomainDao) List() []*model.Domain {
|
func (_ *DomainDao) List() *[]model.Domain {
|
||||||
conn := db.Db()
|
conn := db.Db()
|
||||||
res := make([]*model.Domain, 0)
|
var res []model.Domain
|
||||||
conn.Find(&res)
|
conn.Find(&res)
|
||||||
return res
|
return &res
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *DomainDao) Edit(newDomain *model.Domain) *model.Domain {
|
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 {
|
if err != nil {
|
||||||
panic("failed to connect database")
|
panic("failed to connect database")
|
||||||
}
|
}
|
||||||
err = conn.AutoMigrate(&model.Domain{})
|
err = conn.AutoMigrate(&model.Domain{}, &model.AcmeUser{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
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 (
|
import (
|
||||||
"acme-mana-server-go/vo"
|
"acme-mana-server-go/vo"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/go-acme/lego/v4/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GlobalPanicHandler() gin.HandlerFunc {
|
func GlobalPanicHandler() gin.HandlerFunc {
|
||||||
return func(ctx *gin.Context) {
|
return func(ctx *gin.Context) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
|
//debug.PrintStack()
|
||||||
|
log.Infof("panic: %v", err)
|
||||||
ctx.JSON(500, vo.Fail(err.(error).Error()))
|
ctx.JSON(500, vo.Fail(err.(error).Error()))
|
||||||
ctx.Abort()
|
ctx.Abort()
|
||||||
}
|
}
|
||||||
|
@ -21,13 +24,9 @@ func GlobalErrorHandler() gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
c.Next()
|
c.Next()
|
||||||
if len(c.Errors) > 0 {
|
if len(c.Errors) > 0 {
|
||||||
|
log.Printf("error: %v", c.Errors)
|
||||||
c.JSON(500, vo.Fail(c.Errors.String()))
|
c.JSON(500, vo.Fail(c.Errors.String()))
|
||||||
c.Abort()
|
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")
|
api := r.Group("/api/v1")
|
||||||
domainHandler := DomainHandler{}
|
domainHandler := DomainHandler{}
|
||||||
domainHandler.Register(api)
|
domainHandler.Register(api)
|
||||||
|
|
||||||
|
acmeUserHandler := AcmeUserHandler{}
|
||||||
|
acmeUserHandler.Register(api)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,7 @@ type Domain struct {
|
||||||
Id uint `gorm:"primary_key;auto_increment"`
|
Id uint `gorm:"primary_key;auto_increment"`
|
||||||
Name string `gorm:"type:varchar(255);not null"`
|
Name string `gorm:"type:varchar(255);not null"`
|
||||||
Hosts string `gorm:"type:varchar(255);not null"`
|
Hosts string `gorm:"type:varchar(255);not null"`
|
||||||
Provider string `gorm:"type:varchar(32);not null"`
|
Provider string `gorm:"type:varchar(32);not null;default:''"`
|
||||||
ProviderConf string `gorm:"type:text;not null"`
|
ProviderConf string `gorm:"type:text;not null;default:''"`
|
||||||
AcmeEmail string `gorm:"type:varchar(255);not null"`
|
Resource string `gorm:"type:text;not null;default:''"`
|
||||||
AcmePriKey string `gorm:"type:text;not null"`
|
|
||||||
Registration string `gorm:"type:text;not null"`
|
|
||||||
Resource string `gorm:"type:text;not null"`
|
|
||||||
}
|
}
|
||||||
|
|
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 {
|
func (_ *DomainService) Get(id int) *model.Domain {
|
||||||
return domainDao.Get(id)
|
return domainDao.Get(id)
|
||||||
}
|
}
|
||||||
func (_ *DomainService) List() []*model.Domain {
|
func (_ *DomainService) List() *[]model.Domain {
|
||||||
return domainDao.List()
|
return domainDao.List()
|
||||||
}
|
}
|
||||||
func (_ *DomainService) Add(domain *model.Domain) *model.Domain {
|
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