plugai_updsrv/pkg/dal/dao/deploy.go

156 lines
4.2 KiB
Go

package dao
import (
"fmt"
"intent-system/pkg/dal/models"
"github.com/civet148/log"
"github.com/civet148/sqlca/v2"
)
const (
LoginType_Admin1 = 0
LoginType_Customer1 = 1
)
type DeployDAO struct {
db *sqlca.Engine
}
func NewDeployDAO(db *sqlca.Engine) *DeployDAO {
return &DeployDAO{
db: db,
}
}
func (dao *DeployDAO) Insert(dos ...*models.DeployDO) (lastId int64, err error) {
if lastId, err = dao.db.Model(&dos).Table(models.TableNameDeploy).Insert(); err != nil {
log.Errorf(err.Error())
return
}
return
}
func (dao *DeployDAO) UpdateByNid(do *models.DeployDO, columns ...string) (err error) {
if _, err = dao.db.Model(do).
Table(models.TableNameDeploy).
Select(columns...).
Eq(models.DEPLOY_COLUMN_NID, do.Nid).
Update(); err != nil {
log.Errorf(err.Error())
return
}
return
}
func (dao *DeployDAO) UpdateStatusByAppID(appID int64, newStatus string) error {
var record models.DeployDO
_, err := dao.db.Model(&record).
Table(models.TableNameDeploy).
Where("n_id = ?", appID).
Limit(1).
Query()
if err != nil {
log.Errorf("根据 appID 查询 DeployDO 失败: %v", err)
return err
}
if record.Id == 0 {
log.Warnf("找不到 appID=%d 对应的部署记录", appID)
return fmt.Errorf("无部署记录")
}
// 🔧 修正拼接,避免语法错误
updateObj := &models.DeployDO{
Status: newStatus,
}
_, err = dao.db.Model(updateObj).
Table(models.TableNameDeploy).
Select(models.DEPLOY_COLUMN_STATUS).
Where("mb_uuid = ? AND repo_name = ? AND user_name = ?", record.MbUuid, record.RepoName, record.UserName).
Update()
if err != nil {
log.Errorf("批量更新状态失败: %v", err)
return err
}
return nil
}
// SelectDeployById
func (dao *DeployDAO) SelectDeployById(id int64, columns ...string) (do *models.DeployDO, err error) {
log.Infof(".......dal_dao.................Deploy.......................\n\n")
if _, err = dao.db.Model(&do).Table(models.TableNameDeploy).Id(id).Select(columns...).Query(); err != nil {
return nil, log.Errorf(err.Error())
}
return
}
// query records by n_id
func (dao *DeployDAO) QueryByNid(id int64, columns ...string) (do *models.DeployDO, err error) {
if _, err = dao.db.Model(&do).Table(models.TableNameDeploy).Where("n_id = ?", id).Select(columns...).Query(); err != nil {
return nil, log.Errorf(err.Error())
}
return
}
func (dao *DeployDAO) DeleteByNid(nid int64) error {
_, err := dao.db.Where("n_id = ?", nid).Table(models.TableNameDeploy).Delete()
return err
}
func (dao *DeployDAO) DeleteByFields(mbUuid, repoName, userName string) error {
_, err := dao.db.
Table(models.TableNameDeploy).
Where("mb_uuid = ? AND repo_name = ? AND user_name = ?", mbUuid, repoName, userName).
Delete()
return err
}
func (dao *DeployDAO) UpdateStatusByFields(mbUuid, repoName, userName string, strStatus string) error {
updates := map[string]interface{}{
"status": strStatus,
}
_, err := dao.db.
Model(&updates).
Table(models.TableNameDeploy).
And("mb_uuid = ?", mbUuid).
And("repo_name = ?", repoName).
And("user_name = ?", userName).
Update()
return err
}
func (dao *DeployDAO) DeleteByUserRepoUUIDAndStatus(user, repo, uuid, status string) error {
log.Infof("🔥 Start to delete record from 'deploy' table")
log.Infof("🧩 Conditions: user_name=%s, repo_name=%s, mb_uuid=%s, status=%s", user, repo, uuid, status)
affected, err := dao.db.Table(models.TableNameDeploy).
Where("user_name = ? AND repo_name = ? AND mb_uuid = ? AND status = ?", user, repo, uuid, status).
Delete()
if err != nil {
log.Errorf("❌ Delete failed: %v", err)
return err
}
log.Infof("✅ Successfully deleted %d record(s) with user_name=%s, repo_name=%s, mb_uuid=%s, status=%s",
affected, user, repo, uuid, status)
return nil
}
func (dao *DeployDAO) CountByUserRepoUUIDAndStatus(user, repo, uuid, status string) (int64, error) {
var count int64
_, err := dao.db.Model(&count).
Table(models.TableNameDeploy).
Where("user_name = ? AND repo_name = ? AND mb_uuid = ? AND status = ?", user, repo, uuid, status).
Count("id").
Query()
if err != nil {
log.Errorf("❌ Count failed: %v", err)
return 0, err
}
log.Infof("✅ Counted %d record(s) with user_name=%s, repo_name=%s, mb_uuid=%s, status=%s",
count, user, repo, uuid, status)
return count, nil
}