// udeServer: DeleteService 走事务 —— 同一事务内先删该服务下的 t_directory, // 再删 t_service。任一步失败全部回滚,不会残留孤儿目录数据。 package logic import ( "context" "fmt" "udeServer/internal/svc" "udeServer/internal/types" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/stores/sqlx" ) type DeleteServiceLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewDeleteServiceLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteServiceLogic { return &DeleteServiceLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *DeleteServiceLogic) DeleteService(req *types.ServiceIdReq) (*types.DeleteResp, error) { if err := checkId(req.Id); err != nil { return nil, err } if _, err := findService(l.ctx, l.svcCtx.ServiceModel, req.Id); err != nil { return nil, err } err := l.svcCtx.DB.Transact(func(session sqlx.Session) error { dirModel := l.svcCtx.DirectoryModel.WithSession(session) svcModel := l.svcCtx.ServiceModel.WithSession(session) if err := dirModel.DeleteByServiceId(l.ctx, req.Id); err != nil { return fmt.Errorf("delete t_directory of service %d: %w", req.Id, err) } if err := svcModel.Delete(l.ctx, req.Id); err != nil { return fmt.Errorf("delete t_service %d: %w", req.Id, err) } return nil }) if err != nil { l.Errorf("delete service tx failed: %v", err) return nil, err } return &types.DeleteResp{Ok: true}, nil }