Пример #1
0
        ////////////////////////////////////////////////////////////////////////////////////////////////
        /*--------------------------------------------------------------------------------------------*/
        public void Perform(IOperationContext pOpCtx, string pPass, string pMemId, string pDelete)
        {
            vOpCtx = pOpCtx;

#if LIVE && !DEBUG
            vResult = new {
                Error = "Not allowed in Release mode."
            };

            return;
#endif

            if (pPass != "internalFab030")
            {
                vResult = new {
                    Error = "Password required."
                };

                return;
            }

            long memId  = long.Parse(pMemId);
            bool delete = (pDelete == "1");

            Member mem = pOpCtx.Data.GetVertexById <Member>(memId);

            if (mem == null)
            {
                vResult = new {
                    Error = "Member " + memId + " not found."
                };
                return;
            }

            const string qName = "Internal-RemoveMember-";

            IWeaverQuery getUser = Weave.Inst.Graph
                                   .V.ExactIndex <Member>(x => x.VertexId, memId)
                                   .DefinedByUser.ToUser
                                   .ToQuery();

            IWeaverQuery getApp = Weave.Inst.Graph
                                  .V.ExactIndex <Member>(x => x.VertexId, memId)
                                  .DefinedByApp.ToApp
                                  .ToQuery();

            User user = pOpCtx.Data.Get <User>(getUser, qName + "GetUser");
            App  app  = pOpCtx.Data.Get <App>(getApp, qName + "GetApp");

            if (user == null || app == null)
            {
                vResult = new {
                    Member = new {
                        VertexId = mem.VertexId + "",
                    },
                    NullUser = (user == null),
                    NullApp  = (app == null),
                };

                return;
            }
            ;

            IWeaverQuery getUserEdge = Weave.Inst.Graph
                                       .V.ExactIndex <User>(x => x.VertexId, user.VertexId)
                                       .DefinesMembers
                                       .Has(x => x.AppId, WeaverStepHasOp.EqualTo, app.VertexId)
                                       .ToQuery();

            IWeaverQuery getAppEdge = Weave.Inst.Graph
                                      .V.ExactIndex <App>(x => x.VertexId, app.VertexId)
                                      .DefinesMembers
                                      .Has(x => x.UserId, WeaverStepHasOp.EqualTo, user.VertexId)
                                      .ToQuery();

            IDataResult userEdge = pOpCtx.Data.Execute(getUserEdge, qName + "GetUserEdge");
            IDataResult appEdge  = pOpCtx.Data.Execute(getAppEdge, qName + "GetAppEdge");

            IList <UserDefinesMember> userDefs = userEdge.ToElementList <UserDefinesMember>();
            IList <AppDefinesMember>  appDefs  = appEdge.ToElementList <AppDefinesMember>();

            if (userDefs.Count != 1 && appDefs.Count != 1)
            {
                delete = false;
            }

            UserDefinesMember remUserDef = null;
            AppDefinesMember  remAppDef  = null;
            Member            remMem     = null;

            if (delete)
            {
                IWeaverQuery removeUserDefQ = Weave.Inst.Graph
                                              .E.Id <UserDefinesMember>(userDefs[0].Id)
                                              .Remove()
                                              .ToQuery();

                IWeaverQuery removeAppDefQ = Weave.Inst.Graph
                                             .E.Id <AppDefinesMember>(appDefs[0].Id)
                                             .Remove()
                                             .ToQuery();

                IWeaverQuery removeMemQ = Weave.Inst.Graph
                                          .V.ExactIndex <Member>(x => x.VertexId, memId)
                                          .Remove()
                                          .ToQuery();

                remUserDef = pOpCtx.Data.Get <UserDefinesMember>(removeUserDefQ, qName + "RemUserDef");
                remAppDef  = pOpCtx.Data.Get <AppDefinesMember>(removeAppDefQ, qName + "RemAppDef");
                remMem     = pOpCtx.Data.Get <Member>(removeMemQ, qName + "RemMem");
            }

            vResult = new {
                Member = new {
                    VertexId              = mem.VertexId + "",
                    Type                  = mem.MemberType,
                    OauthGrantCode        = mem.OauthGrantCode,
                    OauthGrantExpires     = mem.OauthGrantExpires,
                    OauthGrantRedirectUri = mem.OauthGrantRedirectUri,
                    OauthScopeAllow       = mem.OauthScopeAllow
                },
                User = new {
                    VertexId = user.VertexId + "",
                    Name     = user.Name
                },
                App = new {
                    VertexId = app.VertexId + "",
                    Name     = app.Name
                },
                UserEdges  = userEdge.ToMap(),
                AppEdges   = appEdge.ToMap(),
                RemUserDef = (remUserDef == null ? null : new {
                    Id = remUserDef.Id
                }),
                RemAppDef = (remAppDef == null ? null : new {
                    Id = remAppDef.Id
                }),
                RemMem = (remMem == null ? null : new {
                    Id = remMem.VertexId + ""
                }),
                Delete = delete
            };
        }