提交 f76f80ca 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

zentao site admin

上级 184a4907
package controller
import (
commConsts "github.com/aaronchen2k/deeptest/internal/comm/consts"
serverDomain "github.com/aaronchen2k/deeptest/internal/server/modules/v1/domain"
"github.com/aaronchen2k/deeptest/internal/server/modules/v1/service"
"github.com/kataras/iris/v12"
)
type SiteCtrl struct {
SiteService *service.SiteService `inject:""`
BaseCtrl
}
func NewSiteCtrl() *SiteCtrl {
return &SiteCtrl{}
}
// List 分页列表
func (c *SiteCtrl) List(ctx iris.Context) {
projectPath := ctx.URLParam("currProject")
if projectPath == "" {
ctx.JSON(c.SuccessResp(make([]serverDomain.TestReportSummary, 0)))
return
}
data, err := c.SiteService.List(projectPath)
if err != nil {
ctx.JSON(c.ErrResp(commConsts.Failure, err.Error()))
return
}
ctx.JSON(c.SuccessResp(data))
}
// Get 详情
func (c *SiteCtrl) Get(ctx iris.Context) {
projectPath := ctx.URLParam("currProject")
seq := ctx.Params().Get("seq")
if seq == "" {
c.ErrResp(commConsts.ParamErr, "seq")
return
}
exec, err := c.SiteService.Get(projectPath, seq)
if err != nil {
ctx.JSON(c.ErrResp(commConsts.Failure, err.Error()))
return
}
ctx.JSON(c.SuccessResp(exec))
}
// Delete 删除
func (c *SiteCtrl) Delete(ctx iris.Context) {
projectPath := ctx.URLParam("currProject")
seq := ctx.Params().Get("seq")
if seq == "" {
c.ErrResp(commConsts.ParamErr, "seq")
return
}
err := c.SiteService.Delete(projectPath, seq)
if err != nil {
ctx.JSON(c.ErrResp(commConsts.Failure, err.Error()))
return
}
ctx.JSON(c.SuccessResp(nil))
}
......@@ -13,6 +13,8 @@ import (
type IndexModule struct {
FileModule *index.FileModule `inject:""`
SiteModule *index.SiteModule `inject:""`
ZentaoModule *index.ZentaoModule `inject:""`
ConfigModule *index.ConfigModule `inject:""`
SyncModule *index.SyncModule `inject:""`
......@@ -42,6 +44,7 @@ func (m *IndexModule) Party() module.WebModule {
modules := []module.WebModule{
m.FileModule.Party(),
m.SiteModule.Party(),
m.ZentaoModule.Party(),
m.ConfigModule.Party(),
m.SyncModule.Party(),
......
package index
import (
"github.com/aaronchen2k/deeptest/internal/server/core/module"
"github.com/aaronchen2k/deeptest/internal/server/middleware"
"github.com/aaronchen2k/deeptest/internal/server/modules/v1/controller"
"github.com/kataras/iris/v12"
)
type SiteModule struct {
SiteCtrl *controller.SiteCtrl `inject:""`
}
func NewSiteModule() *SiteModule {
return &SiteModule{}
}
// Party 执行
func (m *SiteModule) Party() module.WebModule {
handler := func(index iris.Party) {
index.Use(middleware.InitCheck())
index.Get("/", m.SiteCtrl.List).Name = "执行列表"
index.Get("/{seq:string}", m.SiteCtrl.Get).Name = "执行详情"
index.Delete("/{seq:string}", m.SiteCtrl.Delete).Name = "删除执行"
}
return module.NewModule("/sites", handler)
}
......@@ -3,5 +3,6 @@ package model
var (
Models = []interface{}{
&Project{},
&Site{},
}
)
package model
type Site struct {
BaseModel
Name string `json:"name"`
Url string `json:"url"`
Username string `json:"username"`
Password string `json:"password"`
IsDefault bool `json:"isDefault"`
}
func (Site) TableName() string {
return "biz_site"
}
package repo
import (
"errors"
"fmt"
logUtils "github.com/aaronchen2k/deeptest/internal/pkg/lib/log"
"github.com/aaronchen2k/deeptest/internal/server/modules/v1/model"
"github.com/fatih/color"
"gorm.io/gorm"
)
type SiteRepo struct {
DB *gorm.DB `inject:""`
}
func NewSiteRepo() *SiteRepo {
return &SiteRepo{}
}
func (r *SiteRepo) List() (sites []model.Site, err error) {
err = r.DB.Model(&model.Site{}).
Where("NOT deleted").
Find(&sites).Error
return
}
func (r *SiteRepo) FindById(id uint) (po model.Site, err error) {
err = r.DB.Model(&model.Site{}).
Where("id = ?", id).
Where("NOT deleted").
First(&po).Error
if err != nil {
logUtils.Errorf(color.RedString("find site by id failed, error: %s.", err.Error()))
return
}
return
}
func (r *SiteRepo) Create(project model.Site) (id uint, err error) {
po, err := r.FindDuplicate(project.Name, project.Url, 0)
if po.ID != 0 {
return 0, errors.New(fmt.Sprintf("站点%s(%s)已存在", project.Name, project.Url))
}
err = r.DB.Model(&model.Site{}).Create(&project).Error
if err != nil {
logUtils.Errorf(color.RedString("create project failed, error: %s.", err.Error()))
return 0, err
}
id = project.ID
return
}
func (r *SiteRepo) Update(id uint, project model.Site) error {
po, err := r.FindDuplicate(project.Name, project.Url, id)
if po.ID != 0 {
return errors.New(fmt.Sprintf("站点%s(%s)已存在", project.Name, project.Url))
}
err = r.DB.Model(&model.Site{}).Where("id = ?", id).Updates(&project).Error
if err != nil {
logUtils.Errorf(color.RedString("update project failed, error: %s.", err.Error()))
return err
}
return nil
}
func (r *SiteRepo) DeleteByPath(pth string) (err error) {
err = r.DB.Where("path = ?", pth).
Delete(&model.Site{}).
Error
if err != nil {
logUtils.Errorf(color.RedString("delete project failed, error: %s.", err.Error()))
return
}
return
}
func (r *SiteRepo) FindDuplicate(name, url string, id uint) (po model.Site, err error) {
db := r.DB.Model(&model.Site{}).
Where("NOT deleted").
Where("name = ? OR url = ?", name, url)
if id != 0 {
db.Where("id != ?", id)
}
err = db.First(&po).Error
return
}
func (r *SiteRepo) GetCurrSiteByUser() (currSite model.Site, err error) {
err = r.DB.Model(&model.Site{}).
Where("is_default").
Where("NOT deleted").
First(&currSite).Error
return
}
func (r *SiteRepo) RemoveDefaultTag() (err error) {
err = r.DB.Model(&model.Site{}).
Where("true").
Update("is_default", false).Error
return err
}
func (r *SiteRepo) SetCurrSite(id uint) (err error) {
r.RemoveDefaultTag()
if id == 0 {
po := model.Site{}
err := r.DB.Model(&model.Site{}).
Where("NOT deleted").
Order("id DESC").
First(&po).Error
if err == nil {
id = po.ID
}
}
err = r.DB.Model(&model.Site{}).
Where("id = ?", id).
Update("is_default", true).Error
return err
}
package service
import (
commConsts "github.com/aaronchen2k/deeptest/internal/comm/consts"
commDomain "github.com/aaronchen2k/deeptest/internal/comm/domain"
analysisUtils "github.com/aaronchen2k/deeptest/internal/comm/helper/analysis"
fileUtils "github.com/aaronchen2k/deeptest/internal/pkg/lib/file"
serverDomain "github.com/aaronchen2k/deeptest/internal/server/modules/v1/domain"
"github.com/aaronchen2k/deeptest/internal/server/modules/v1/repo"
"github.com/jinzhu/copier"
"path/filepath"
)
type SiteService struct {
ProjectRepo *repo.ProjectRepo `inject:""`
}
func NewSiteService() *SiteService {
return &SiteService{}
}
func (s *SiteService) List(projectPath string) (ret []serverDomain.TestReportSummary, err error) {
reportFiles := analysisUtils.ListReport(projectPath)
for _, seq := range reportFiles {
var summary serverDomain.TestReportSummary
report, err1 := analysisUtils.ReadReportByProjectSeq(projectPath, seq)
if err1 != nil { // ignore wrong json result
continue
}
copier.Copy(&summary, report)
summary.Seq = seq
ret = append(ret, summary)
}
return
}
func (s *SiteService) Get(projectPath string, seq string) (report commDomain.ZtfReport, err error) {
return analysisUtils.ReadReportByProjectSeq(projectPath, seq)
}
func (s *SiteService) Delete(projectPath string, seq string) (err error) {
dir := filepath.Join(projectPath, commConsts.LogDirName)
di := filepath.Join(dir, seq)
err = fileUtils.RmDir(di)
return
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册