Beispiel #1
0
        public async Task <IActionResult> GetMany([FromQuery(Name = "name")] string name = null)
        {
            var query      = "SELECT VALUE c FROM c WHERE c['@type'] = @Type and (NOT IS_DEFINED(c.deleted) or c.deleted = false)";
            var parameters = new CosmosDb.SqlParameterCollection()
            {
                new CosmosDb.SqlParameter("@Type", typeof(Customer).Name),
            };

            if (name != null)
            {
                name = name.Trim();
            }
            if (!string.IsNullOrEmpty(name))
            {
                query = $"{query} and CONTAINS(LOWER(c.name), @Name)";

                parameters.Add(new CosmosDb.SqlParameter("@Name", name.ToLower()));
            }

            var response = await _customerDbAccess.SearchQueryAsync(query, parameters);

            if (response == null)
            {
                return(BadRequest(new Error("The customers do not exist or you don't have permission to view them")));
            }

            return(Ok(response));
        }
Beispiel #2
0
        public async Task <IActionResult> GetMany([FromQuery(Name = "customer_id")] string customerId = null)
        {
            var query      = "SELECT VALUE c FROM c WHERE c['@type'] = @Type and (NOT IS_DEFINED(c.deleted) or c.deleted = false)";
            var parameters = new CosmosDb.SqlParameterCollection()
            {
                new CosmosDb.SqlParameter("@Type", typeof(Order).Name),
            };

            if (customerId != null)
            {
                customerId = customerId.Trim();
            }
            if (!string.IsNullOrEmpty(customerId))
            {
                query = $"{query} and c.customer.id = @CustomerId";

                parameters.Add(new CosmosDb.SqlParameter("@CustomerId", customerId));
            }

            var response = await _orderDbAccess.SearchQueryAsync(query, parameters);

            if (response == null)
            {
                return(BadRequest(new Error("The orders do not exist or you don't have permission to view them")));
            }

            return(Ok(response));
        }
Beispiel #3
0
        public async Task <IActionResult> Put(string id, [FromBody] Order order)
        {
            try
            {
                if (id != null)
                {
                    id = id.Trim();
                }
                if (string.IsNullOrEmpty(id))
                {
                    return(BadRequest(new Error("Missing parameter: ID")));
                }

                var validationResult = Validate(id, order);
                if (validationResult != null)
                {
                    return(BadRequest(validationResult));
                }

                var dbOrder = await _orderDbAccess.ReadAsync(order.Id);

                if (dbOrder == null || (dbOrder.Deleted.HasValue && dbOrder.Deleted.Value))
                {
                    return(BadRequest(new Error("The order does not exist")));
                }

                order.OrderDate = dbOrder.OrderDate;

                var query = "SELECT VALUE c FROM c WHERE c['@type'] = @Type and (NOT IS_DEFINED(c.deleted) or c.deleted = false) and c.id <> @Id and c.customer.id = @CustomerId and c.orderDate.epoch = @OrderDate";

                var parameters = new CosmosDb.SqlParameterCollection()
                {
                    new CosmosDb.SqlParameter("@Type", typeof(Order).Name),
                    new CosmosDb.SqlParameter("@Id", order.Id),
                    new CosmosDb.SqlParameter("@CustomerId", order.Customer.Id),
                    new CosmosDb.SqlParameter("@OrderDate", order.OrderDate.Value.ToUnixEpoch())
                };

                var dbOrders = await _orderDbAccess.SearchQueryAsync(query, parameters);

                if (dbOrders != null && dbOrders.Any())
                {
                    return(BadRequest(new Error("An order for the same customer and timestamp already exists")));
                }

                return(Ok(await _orderDbAccess.SaveAsync(order)));
            }
            catch (Exception exception)
            {
                return(StatusCode(500, new Error(exception)));
            }
        }
Beispiel #4
0
        public async Task <IActionResult> Put(string id, [FromBody] Customer customer)
        {
            try
            {
                if (id != null)
                {
                    id = id.Trim();
                }
                if (string.IsNullOrEmpty(id))
                {
                    return(BadRequest(new Error("Missing parameter: ID")));
                }

                var validationResult = Validate(id, customer);
                if (validationResult != null)
                {
                    return(BadRequest(validationResult));
                }

                var dbCustomer = await _customerDbAccess.ReadAsync(customer.Id);

                if (dbCustomer == null || (dbCustomer.Deleted.HasValue && dbCustomer.Deleted.Value))
                {
                    return(BadRequest(new Error("The customer does not exist")));
                }

                var query = "SELECT VALUE c FROM c WHERE c['@type'] = @Type and (NOT IS_DEFINED(c.deleted) or c.deleted = false) and c.id <> @Id and LOWER(c.name) = @Name";

                var parameters = new CosmosDb.SqlParameterCollection()
                {
                    new CosmosDb.SqlParameter("@Type", typeof(Customer).Name),
                    new CosmosDb.SqlParameter("@Id", customer.Id),
                    new CosmosDb.SqlParameter("@Name", customer.Name.ToLower())
                };

                var dbCustomers = await _customerDbAccess.SearchQueryAsync(query, parameters);

                if (dbCustomers != null && dbCustomers.Any())
                {
                    return(BadRequest(new Error("A customer with the same name already exists")));
                }

                return(Ok(await _customerDbAccess.SaveAsync(customer)));
            }
            catch (Exception exception)
            {
                return(StatusCode(500, new Error(exception)));
            }
        }
Beispiel #5
0
        public async Task <IActionResult> Post([FromBody] Order order)
        {
            try
            {
                var validationResult = Validate(null, order);
                if (validationResult != null)
                {
                    return(BadRequest(validationResult));
                }

                Order dbOrder = null;

                if (!string.IsNullOrEmpty(order.Id))
                {
                    dbOrder = await _orderDbAccess.ReadAsync(order.Id);
                }

                if (dbOrder != null)
                {
                    return(BadRequest(new Error("The order already exists")));
                }

                order.OrderDate = DateTime.UtcNow;

                var query = "SELECT VALUE c FROM c WHERE c['@type'] = @Type and (NOT IS_DEFINED(c.deleted) or c.deleted = false) and c.customer.id = @CustomerId and c.orderDate.epoch = @OrderDate";

                var parameters = new CosmosDb.SqlParameterCollection()
                {
                    new CosmosDb.SqlParameter("@Type", typeof(Order).Name),
                    new CosmosDb.SqlParameter("@CustomerId", order.Customer.Id),
                    new CosmosDb.SqlParameter("@OrderDate", order.OrderDate.Value.ToUnixEpoch())
                };

                var dbOrders = await _orderDbAccess.SearchQueryAsync(query, parameters);

                if (dbOrders != null && dbOrders.Any())
                {
                    return(BadRequest(new Error("An order for the same customer and timestamp already exists")));
                }

                return(Created("", await _orderDbAccess.SaveAsync(order)));
            }
            catch (Exception exception)
            {
                return(StatusCode(500, new Error(exception)));
            }
        }
Beispiel #6
0
        public async Task <IActionResult> Post([FromBody] Customer customer)
        {
            try
            {
                var validationResult = Validate(null, customer);
                if (validationResult != null)
                {
                    return(BadRequest(validationResult));
                }

                Customer dbCustomer = null;

                if (!string.IsNullOrEmpty(customer.Id))
                {
                    dbCustomer = await _customerDbAccess.ReadAsync(customer.Id);
                }

                if (dbCustomer != null)
                {
                    return(BadRequest(new Error("The customer already exists")));
                }

                var query = "SELECT VALUE c FROM c WHERE c['@type'] = @Type and (NOT IS_DEFINED(c.deleted) or c.deleted = false) and LOWER(c.name) = @Name";

                var parameters = new CosmosDb.SqlParameterCollection()
                {
                    new CosmosDb.SqlParameter("@Type", typeof(Customer).Name),
                    new CosmosDb.SqlParameter("@Name", customer.Name.ToLower())
                };

                var dbCustomers = await _customerDbAccess.SearchQueryAsync(query, parameters);

                if (dbCustomers != null && dbCustomers.Any())
                {
                    return(BadRequest(new Error("A customer with the same name already exists")));
                }

                return(Created("", await _customerDbAccess.SaveAsync(customer)));
            }
            catch (Exception exception)
            {
                return(StatusCode(500, new Error(exception)));
            }
        }