package relation import ( "context" "errors" "muyu-apiserver/gateway/internal/repo" "muyu-apiserver/gateway/internal/svc" "muyu-apiserver/gateway/internal/types" "muyu-apiserver/pkg/ctxdata" "github.com/zeromicro/go-zero/core/logx" ) type CreateRelationLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewCreateRelationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateRelationLogic { return &CreateRelationLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *CreateRelationLogic) CreateRelation(req *types.CrmCreateRelationReq) (*types.IdResp, error) { if req.FromTenantId == "" || req.ToTenantId == "" || req.RelationType == "" { return nil, errors.New("fromTenantId/toTenantId/relationType are required") } if req.FromTenantId == req.ToTenantId { return nil, errors.New("fromTenantId and toTenantId cannot be equal") } tenantId := ctxdata.GetTenantId(l.ctx) userId := ctxdata.GetUserId(l.ctx) relID, err := l.svcCtx.CrmRepo.CreateRelation(l.ctx, repo.CreateRelationInput{ OwnerTenantId: tenantId, FromTenantId: req.FromTenantId, ToTenantId: req.ToTenantId, RelationType: req.RelationType, Status: 1, ValidFrom: parseTimeOrNow(req.ValidFrom), ValidTo: parseNullTime(req.ValidTo), Source: "manual", CreatedBy: userId, }) if err != nil { return nil, err } return &types.IdResp{Id: relID}, nil }