コード例 #1
0
        public async Task <IActionResult> Update(int organizationId, OrganizationSettingValueDto dto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.FormatErrors()));
            }

            await _organizationRetrievalService
            .GetOrganizationByIdAsync(organizationId);     // to check for org existence

            await _organizationAccessControlService
            .CheckOrganizationUpdateAccessAsync(organizationId);

            var settings = (await _organizationSettingsCache
                            .GetAllSettingsForOrganizationAsync(organizationId))
                           .ToDictionary(s => s.Name, s => s);

            var entry = _organizationSettingsRegistry.GetEntries()
                        .FirstOrDefault(e => e.Name == dto.Name);

            if (entry == null)
            {
                throw new NotFoundException($"Setting name {dto.Name} doesn't exist");
            }

            if (string.IsNullOrWhiteSpace(dto.Value))
            {
                if (settings.ContainsKey(dto.Name))
                {
                    await _organizationSettingsManagementService.RemoveOrganizationSettingAsync(settings[dto.Name]);
                }

                return(Ok(new OrganizationSettingDto(entry)
                {
                    Value = null
                }));
            }

            if (settings.ContainsKey(dto.Name))
            {
                var setting = settings[dto.Name];
                setting.Value = dto.Value;
                await _organizationSettingsManagementService.UpdateOrganizationSettingAsync(setting);
            }
            else
            {
                await _organizationSettingsManagementService
                .CreateOrganizationSettingAsync(new OrganizationSetting
                {
                    OrganizationId = organizationId,
                    Name           = dto.Name,
                    Value          = dto.Value
                });
            }

            return(Ok(new OrganizationSettingDto(entry)
            {
                Value = dto.Value
            }));
        }
コード例 #2
0
        public async Task CreateOrganizationSettingAsync(
            OrganizationSetting setting,
            CancellationToken cancellationToken = default)
        {
            if (setting == null)
            {
                throw new ArgumentNullException(nameof(setting));
            }

            await _organizationAccessControlService.CheckOrganizationUpdateAccessAsync(setting.OrganizationId);

            if (await _context.OrganizationSettings
                .AnyAsync(s => s.OrganizationId == setting.OrganizationId &&
                          s.Name == setting.Name, cancellationToken))
            {
                throw new DuplicateException(
                          $"Setting {setting.Name} already exists for organization {setting.OrganizationId}");
            }

            try
            {
                await _context.OrganizationSettings.AddAsync(setting, cancellationToken);

                await _context.SaveChangesAsync(cancellationToken);

                _organizationSettingsCache.InvalidateCacheForOrganization(setting.OrganizationId);
            }
            catch (DbUpdateException e) when(e.IsUniqueKeyViolation())
            {
                _context.OrganizationSettings.Remove(setting);
                throw new DuplicateException(
                          $"Setting {setting.Name} already exists for organization {setting.OrganizationId}", e);
            }
        }
コード例 #3
0
        public async Task CreateNewOrganizationAsync(Organization organization)
        {
            if (organization == null)
            {
                throw new ArgumentNullException(nameof(organization));
            }

            await _organizationAccessControlService
            .CheckOrganizationUpdateAccessAsync(organization.OrganizationId);

            try
            {
                await _context.CreateAsync(organization);
            }
            catch (DbUpdateException e) when(e.IsUniqueKeyViolation())
            {
                _logger.LogWarning(e, e.Message);
                _context.Remove(organization);
                throw new DuplicateException();
            }
        }