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)); }
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)); }
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))); } }
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))); } }
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))); } }
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))); } }