示例#1
0
        public async Task <bool> HandleAsync(DeleteAnAatf message)
        {
            authorization.EnsureCanAccessInternalArea();
            authorization.EnsureUserInRole(Roles.InternalAdmin);

            using (var transaction = context.Database.BeginTransaction())
            {
                try
                {
                    var aatfDeletionStatus = await getAatfDeletionStatus.Validate(message.AatfId);

                    if (!aatfDeletionStatus.HasFlag(CanAatfBeDeletedFlags.CanDelete))
                    {
                        throw new InvalidOperationException();
                    }

                    await aatfDataAccess.RemoveAatf(message.AatfId);

                    if (aatfDeletionStatus.HasFlag(CanAatfBeDeletedFlags.CanDeleteOrganisation))
                    {
                        await organisationDataAccess.Delete(message.OrganisationId);
                    }

                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();

                    if (ex.InnerException != null)
                    {
                        throw ex.InnerException;
                    }

                    throw;
                }
                finally
                {
                    transaction.Dispose();
                }
            }

            return(true);
        }