public static async Task ProcessImportedVendor( [QueueTrigger("importvendor", Connection = "SosCafeStorage")] VendorDetailsCsv vendorToImport, [Table("Vendors", Connection = "SosCafeStorage")] CloudTable vendorDetailsTable, [Table("VendorUserAssignments", Connection = "SosCafeStorage")] CloudTable vendorUserAssignmentsTable, ILogger log) { log.LogInformation("Processing vendor ID {VendorShopifyId}.", vendorToImport.ShopifyId); // Convert the data to the entity format. var vendorEntity = new VendorDetailsEntity { ShopifyId = vendorToImport.ShopifyId, RegisteredDate = vendorToImport.RegisteredDate, BusinessName = vendorToImport.BusinessName, ContactName = vendorToImport.ContactName, EmailAddress = vendorToImport.EmailAddress.Trim(), PhoneNumber = vendorToImport.PhoneNumber, BankAccountNumber = vendorToImport.BankAccountNumber, DateAcceptedTerms = vendorToImport.DateAcceptedTerms }; // Upsert vendor table entity. var upsertVendorDetailsEntityOperation = TableOperation.InsertOrReplace(vendorEntity); var upsertVendorDetailsEntityOperationResult = await vendorDetailsTable.ExecuteAsync(upsertVendorDetailsEntityOperation); if (upsertVendorDetailsEntityOperationResult.HttpStatusCode < 200 || upsertVendorDetailsEntityOperationResult.HttpStatusCode > 299) { log.LogError("Failed to upsert entity into Vendors table. Status code={UpsertStatusCode}, Result={InsertResult}", upsertVendorDetailsEntityOperationResult.HttpStatusCode, upsertVendorDetailsEntityOperationResult.Result); } else { log.LogInformation("Upserted entity into Vendors table."); } // Create vendor role assignment for this user. var vendorUserAssignmentEntity = new VendorUserAssignmentEntity { VendorShopifyId = vendorToImport.ShopifyId, VendorName = vendorToImport.BusinessName, UserId = vendorToImport.EmailAddress.Trim() }; // Upsert vendor user assignment entity. var upsertVendorUserAssignmentEntityOperation = TableOperation.InsertOrReplace(vendorUserAssignmentEntity); var upsertVendorUserAssignmentEntityOperationResult = await vendorUserAssignmentsTable.ExecuteAsync(upsertVendorUserAssignmentEntityOperation); if (upsertVendorUserAssignmentEntityOperationResult.HttpStatusCode < 200 || upsertVendorDetailsEntityOperationResult.HttpStatusCode > 299) { log.LogError("Failed to upsert entity into VendorUserAssignments table. Status code={UpsertStatusCode}, Result={InsertResult}", upsertVendorDetailsEntityOperationResult.HttpStatusCode, upsertVendorDetailsEntityOperationResult.Result); } else { log.LogInformation("Upserted entity into VendorUserAssignments table."); } }
public static async Task <IActionResult> UpdateVendor( [HttpTrigger(AuthorizationLevel.Anonymous, "put", Route = "vendors/{vendorId}")] UpdateVendorDetailsApiModel vendorDetailsApiModel, HttpRequest req, ClaimsPrincipal claimsPrincipal, string vendorId, [Table("Vendors", "Vendors", "{vendorId}", Connection = "SosCafeStorage")] VendorDetailsEntity vendorDetailsEntity, [Table("Vendors", Connection = "SosCafeStorage")] CloudTable vendorDetailsTable, [Table("VendorUserAssignments", Connection = "SosCafeStorage")] CloudTable vendorUserAssignmentsTable, ILogger log) { // Get the user principal ID. var userId = UserManagement.GetUserId(claimsPrincipal, log); log.LogInformation("Received PUT vendors request for vendor {VendorId} from user {UserId}.", vendorId, userId); // Authorise the request. var isAuthorised = await UserManagement.IsUserAuthorisedForVendor(vendorUserAssignmentsTable, userId, vendorId); if (!isAuthorised) { log.LogInformation("Received unauthorised request from user {UserId} for vendor {VendorId}. Denying request.", userId, vendorId); return(new NotFoundResult()); } // Perform validation on the properties. if (vendorDetailsApiModel.DateAcceptedTerms == null) { return(new BadRequestErrorMessageResult("The terms must be accepted in order to update the vendor.")); } else if (!BankAccountRegex.IsMatch(vendorDetailsApiModel.BankAccountNumber)) { return(new BadRequestErrorMessageResult("The bank account number is invalid.")); } // Update entity. vendorDetailsEntity.BankAccountNumber = vendorDetailsApiModel.BankAccountNumber; vendorDetailsEntity.DateAcceptedTerms = vendorDetailsApiModel.DateAcceptedTerms; // Submit entity update to table. var replaceVendorDetailsEntityOperation = TableOperation.Replace(vendorDetailsEntity); var replaceVendorDetailsEntityOperationResult = await vendorDetailsTable.ExecuteAsync(replaceVendorDetailsEntityOperation); if (replaceVendorDetailsEntityOperationResult.HttpStatusCode < 200 || replaceVendorDetailsEntityOperationResult.HttpStatusCode > 299) { log.LogError("Failed to replace entity in Vendors table. Status code={InsertStatusCode}, Result={InsertResult}", replaceVendorDetailsEntityOperationResult.HttpStatusCode, replaceVendorDetailsEntityOperationResult.Result); return(new InternalServerErrorResult()); } else { log.LogInformation("Replaced entity in Vendors table."); return(new OkResult()); } }