Пример #1
0
        public async Task <IActionResult> Get(string key)
        {
            // Get the version stamp of the entity
            string entityTag = string.Empty;

            if (Request.Headers.ContainsKey("If-None-Match"))
            {
                entityTag = Request.Headers["If-None-Match"].First();
            }

            var cosmosCollection = new CosmosCollection <Auction>("AuctionsCollection");
            var resultantSet     = await cosmosCollection.GetItemsAsync(item => item.Id == key);

            var auction = resultantSet.FirstOrDefault();

            if (auction == null)
            {
                return(NotFound());
            }

            if (int.TryParse(entityTag, out int timeStamp) && auction.TimeStamp == timeStamp)
            {
                return(StatusCode((int)HttpStatusCode.NotModified));
            }

            return(Ok(auction));
        }
Пример #2
0
        public async Task <IActionResult> Get()
        {
            var cosmosCollection = new CosmosCollection <User>("UsersCollection");
            var items            = await cosmosCollection.GetItemsAsync();

            return(Ok(items.AsQueryable()));
        }
        public IActionResult Get()
        {
            var cosmosCollection = new CosmosCollection <Auction>("AuctionsCollection");
            var items            = cosmosCollection.GetItemsAsync();

            return(Ok(items.AsQueryable()));
        }
        internal string GetContainerName(CosmosCollection collection)
        {
            switch (collection)
            {
            case CosmosCollection.Session:
            default:
                return(_settings.UserSessionsCollection);

            case CosmosCollection.LmiData:
                return(_settings.LmiDataCollection);
            }
        }
        public async Task <HttpResponseMessage> UpsertItemAsync(object item, CosmosCollection collection)
        {
            Throw.IfNull(item, nameof(item));

            var container = _client.GetContainer(_settings.DatabaseName, GetContainerName(collection));

            Throw.IfNull(container, nameof(container));

            var result = await container.UpsertItemAsync(item);

            return(result.StatusCode switch
            {
                HttpStatusCode.OK => new HttpResponseMessage(HttpStatusCode.OK),
                HttpStatusCode.Created => new HttpResponseMessage(HttpStatusCode.Created),
                _ => new HttpResponseMessage(HttpStatusCode.InternalServerError)
            });
Пример #6
0
        public async Task <IActionResult> Patch(string key, [FromBody] JsonPatchDocument <Auction> auctionPatch)
        {
            var cosmosCollection = new CosmosCollection <Auction>("AuctionsCollection");
            var auction          = (await cosmosCollection.GetItemsAsync(item => item.Id == key)).FirstOrDefault();

            if (auction == null)
            {
                return(NotFound());
            }

            auctionPatch.ApplyTo(auction);

            await cosmosCollection.UpdateItemAsync(key, auction);

            return(Accepted(auction));
        }
        public async Task <HttpResponseMessage> CreateItemAsync(object item, CosmosCollection collection)
        {
            Throw.IfNull(item, nameof(item));

            var container = _client.GetContainer(_settings.DatabaseName, GetContainerName(collection));

            Throw.IfNull(container, nameof(container));

            var result = await container.CreateItemAsync(item);

            if (result.StatusCode == HttpStatusCode.Created)
            {
                return(new HttpResponseMessage(HttpStatusCode.Created));
            }

            return(new HttpResponseMessage(HttpStatusCode.InternalServerError));
        }
Пример #8
0
        public async Task <IActionResult> Put([FromODataUri] string key, [FromBody] Auction auctionUpdate)
        {
            var cosmosCollection = new CosmosCollection <Auction>("AuctionsCollection");
            var auction          = (await cosmosCollection.GetItemsAsync(item => item.Id == key)).FirstOrDefault();

            if (auction == null)
            {
                return(NotFound());
            }

            if (auction.TimeStamp != auctionUpdate.TimeStamp)
            {
                return(Conflict());
            }

            await cosmosCollection.UpdateItemAsync(key, auctionUpdate);

            return(Accepted(auction));
        }
        public async Task <HttpResponseMessage> ReadItemAsync(string id, string partitionKey, CosmosCollection collection)
        {
            Throw.IfNullOrWhiteSpace(id, nameof(id));

            var container = _client.GetContainer(_settings.DatabaseName, GetContainerName(collection));

            Throw.IfNull(container, nameof(container));
            try
            {
                var result = await container.ReadItemAsync <object>(id, string.IsNullOrEmpty(partitionKey)?PartitionKey.None : new PartitionKey(partitionKey));

                if (result.StatusCode == HttpStatusCode.OK)
                {
                    if (result.Resource == null)
                    {
                        return(new HttpResponseMessage(HttpStatusCode.NotFound));
                    }

                    return(new HttpResponseMessage(HttpStatusCode.OK)
                    {
                        Content = new StringContent(result.Resource.ToString())
                    });
                }
            }
            catch (Exception e)
            {
                _logger.LogError($"Unable to find item with id: {id}, Error message: {e.Message}, Inner Error: {e.InnerException?.Message}");
                return(new HttpResponseMessage(HttpStatusCode.NotFound));
            }

            return(new HttpResponseMessage(HttpStatusCode.NotFound));
        }
Пример #10
0
        public IActionResult Get(string key)
        {
            var cosmosCollection = new CosmosCollection <User>("UsersCollection");

            return(Ok(cosmosCollection.GetItemAsync(key)));
        }
Пример #11
0
        public async Task <IActionResult> LoadAll()
        {
            var cosmosAccounts = await _cosmosService.GetAllCosmosAccounts();

            var response = new List <CosmosDatabaseAccount>();

            foreach (var account in cosmosAccounts)
            {
                var databases    = new List <CosmosDatabase>();
                var cosmosClient = _clientHolder.GetClient(account.Endpoint);
                var allOffers    = (await cosmosClient.QueryOffersV2Async()).ToList();
                var dbs          = await cosmosClient.QueryDatabasesAsync();

                foreach (var db in dbs)
                {
                    var databaseOffer = allOffers.SingleOrDefault(x => x.ResourceLink == db.SelfLink);
                    var database      = new CosmosDatabase
                    {
                        Id          = db.Id,
                        ResourceId  = db.ResourceId,
                        Collections = new List <CosmosCollection>(),
                        Offer       = databaseOffer != null ? new CosmosOffer
                        {
                            Id         = databaseOffer.Id,
                            ResourceId = databaseOffer.ResourceId,
                            Throughput = databaseOffer.Content.OfferThroughput
                        } : null
                    };

                    var collections         = new List <CosmosCollection>();
                    var documentCollections = await cosmosClient.QueryCollectionsAsync(database.Id);

                    foreach (var documentCollection in documentCollections)
                    {
                        var collectionOffer = allOffers.SingleOrDefault(x => x.ResourceLink == documentCollection.SelfLink);

                        var collection = new CosmosCollection
                        {
                            Id               = documentCollection.Id,
                            ResourceId       = documentCollection.ResourceId,
                            PartitionKey     = documentCollection.PartitionKey?.Paths?.FirstOrDefault() ?? "",
                            DatabaseHasOffer = database.HasOffer,
                            Offer            = collectionOffer != null ? new CosmosOffer
                            {
                                Id         = collectionOffer.Id,
                                ResourceId = collectionOffer.ResourceId,
                                Throughput = collectionOffer.Content.OfferThroughput
                            } : null
                        };
                        collections.Add(collection);
                    }

                    database.Collections = collections;
                    databases.Add(database);
                }

                var databaseAccount = new CosmosDatabaseAccount
                {
                    Databases  = databases,
                    ServiceUrl = account.Endpoint
                };
                response.Add(databaseAccount);
            }

            return(Ok(response));
        }