|
- package core
-
- import (
- "context"
- "github.com/pkg/errors"
- "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models"
- "gorm.io/gorm"
- "time"
-
- "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc"
- "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types"
-
- "github.com/zeromicro/go-zero/core/logx"
- )
-
- type DeleteResourceSpecLogic struct {
- logx.Logger
- ctx context.Context
- svcCtx *svc.ServiceContext
- }
-
- func NewDeleteResourceSpecLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteResourceSpecLogic {
- return &DeleteResourceSpecLogic{
- Logger: logx.WithContext(ctx),
- ctx: ctx,
- svcCtx: svcCtx,
- }
- }
-
- func (l *DeleteResourceSpecLogic) DeleteResourceSpec(req *types.DeletePathId) (resp *types.CommonResp, err error) {
- // 初始化事务
- tx := l.svcCtx.DbEngin.Begin()
- defer func() {
- if r := recover(); r != nil {
- tx.Rollback()
- panic(r)
- }
- }()
-
- // 1. 检查主资源规格是否存在
- var mainSpec models.TResourceSpec
- if err := tx.Where("id = ? AND deleted_at IS NULL", req.Id).
- First(&mainSpec).
- Error; err != nil {
- tx.Rollback()
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return nil, errors.Errorf("资源规格不存在 (ID: %s)", req.Id)
- }
- return nil, errors.Wrapf(err, "查询资源规格失败 (ID: %s)", req.Id)
- }
-
- // 2. 删除主资源规格(软删除)
- if err := tx.Model(&models.TResourceSpec{}).
- Where("id = ?", req.Id).
- Update("deleted_at", time.Now()).
- Error; err != nil {
- tx.Rollback()
- return nil, errors.Wrapf(err, "删除主资源规格失败 (ID: %s)", req.Id)
- }
-
- // 3. 删除关联的基础资源规格(软删除)
- if err := tx.Model(&models.TBaseResourceSpec{}).
- Where("resource_spec_id = ?", req.Id).
- Update("deleted_at", time.Now()).
- Error; err != nil {
- tx.Rollback()
- return nil, errors.Wrapf(err, "删除基础资源规格失败 (ID: %s)", req.Id)
- }
-
- // 提交事务
- if err := tx.Commit().Error; err != nil {
- return nil, errors.Wrap(err, "提交事务失败")
- }
-
- return resp, nil
- }
|