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