예제 #1
0
        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.");
            }
        }
예제 #2
0
        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());
            }
        }