コード例 #1
0
 /// <inheritdoc />
 public RtEntityDtoType GetOrCreate(string ckId)
 {
     return(_types.GetOrAdd(ckId, s =>
     {
         var rtEntityType = new RtEntityDtoType(ckId);
         return rtEntityType;
     }));
 }
コード例 #2
0
        private async Task <object> ResolveGenericRtEntitiesQuery(IResolveConnectionContext <object> arg)
        {
            Logger.Debug("GraphQL query handling for generic runtime entity started");

            var graphQlUserContext = (GraphQLUserContext)arg.UserContext;
            var ckId = arg.GetArgument <string>(Statics.CkIdArg);

            using var session = await graphQlUserContext.TenantContext.Repository.StartSessionAsync();

            session.StartTransaction();

            int?offset = arg.GetOffset();
            DataQueryOperation dataQueryOperation = arg.GetDataQueryOperation();

            arg.TryGetArgument(Statics.RtIdArg, out OspObjectId? key);
            arg.TryGetArgument(Statics.RtIdsArg, new List <ObjectId>(), out IEnumerable <ObjectId> keys);

            var keysList = keys.ToList();

            if (keysList.Any())
            {
                var resultSetIds =
                    await graphQlUserContext.TenantContext.Repository.GetRtEntitiesByIdAsync(session, ckId, keysList, dataQueryOperation,
                                                                                             offset, arg.First);

                Logger.Debug("GraphQL query handling returning data by keys");
                return(ConnectionUtils.ToConnection(resultSetIds.Result.Select(RtEntityDtoType.CreateRtEntityDto), arg,
                                                    resultSetIds.TotalCount > 0 ? offset.GetValueOrDefault(0) : 0, (int)resultSetIds.TotalCount));
            }

            if (key.HasValue)
            {
                var result = await graphQlUserContext.TenantContext.Repository.GetRtEntityAsync(session, new RtEntityId(ckId, key.Value));

                var resultList = new List <RtEntityDto>();
                if (result != null)
                {
                    resultList.Add(RtEntityDtoType.CreateRtEntityDto(result));
                }

                Logger.Debug("GraphQL query handling returning data by key");
                return(ConnectionUtils.ToConnection(resultList, arg));
            }

            var resultSet =
                await graphQlUserContext.TenantContext.Repository.GetRtEntitiesByTypeAsync(session, ckId, dataQueryOperation, offset,
                                                                                           arg.First);

            await session.CommitTransactionAsync();

            Logger.Debug("GraphQL query handling returning data");
            return(ConnectionUtils.ToConnection(resultSet.Result.Select(RtEntityDtoType.CreateRtEntityDto), arg,
                                                resultSet.TotalCount > 0 ? offset.GetValueOrDefault(0) : 0, (int)resultSet.TotalCount));
        }