| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- // 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
- }
|