diff --git a/AsbCloudApp/Services/IUserSettingsRepository.cs b/AsbCloudApp/Services/IUserSettingsRepository.cs index 04b1962b..b2287918 100644 --- a/AsbCloudApp/Services/IUserSettingsRepository.cs +++ b/AsbCloudApp/Services/IUserSettingsRepository.cs @@ -28,24 +28,14 @@ namespace AsbCloudApp.Services Task GetOrDefaultAsync(int userId, string key, CancellationToken token); /// - /// Добавить настройки с ключем для пользователя + /// Добавить или изменить настройки с ключем для пользователя /// /// /// /// /// /// - Task InsertAsync(int userId, string key, System.Text.Json.JsonDocument value, CancellationToken token); - - /// - /// Отредактировать настройки с ключем для пользователя - /// - /// - /// - /// - /// - /// - Task UpdateAsync(int userId, string key, System.Text.Json.JsonDocument value, CancellationToken token); + Task UpsertAsync(int userId, string key, System.Text.Json.JsonDocument value, CancellationToken token); /// /// Удалить настройки с ключем для пользователя diff --git a/AsbCloudInfrastructure/Repository/UserSettingsRepository.cs b/AsbCloudInfrastructure/Repository/UserSettingsRepository.cs index 16995e9b..f8451d02 100644 --- a/AsbCloudInfrastructure/Repository/UserSettingsRepository.cs +++ b/AsbCloudInfrastructure/Repository/UserSettingsRepository.cs @@ -22,37 +22,27 @@ namespace AsbCloudInfrastructure.Repository .Select(s => s.Value) .FirstOrDefaultAsync(token); - public async Task InsertAsync(int userId, string key, System.Text.Json.JsonDocument value, CancellationToken token) - { - var set = context.Set(); - - if (await set.AnyAsync(s => s.IdUser == userId && s.Key == key, token)) - return IUserSettingsRepository.ErrorKeyIsUsed; - - var entity = new UserSetting - { - IdUser = userId, - Key = key, - Value = value, - }; - - context.Set() - .Add(entity); - - return await context.SaveChangesAsync(token); - } - - public async Task UpdateAsync(int userId, string key, System.Text.Json.JsonDocument value, CancellationToken token) + public async Task UpsertAsync(int userId, string key, System.Text.Json.JsonDocument value, CancellationToken token) { var set = context.Set(); var updatingItem = await set .FirstOrDefaultAsync(s => s.IdUser == userId && s.Key == key, token); if (updatingItem is null) - return IUserSettingsRepository.ErrorKeyNotFound; - - updatingItem.Value = value; - set.Update(updatingItem); + { + var settings = new UserSetting + { + IdUser = userId, + Key = key, + Value = value, + }; + set.Add(settings); + } + else + { + updatingItem.Value = value; + set.Update(updatingItem); + } return await context.SaveChangesAsync(token); } diff --git a/AsbCloudWebApi/Controllers/UserSettingsController.cs b/AsbCloudWebApi/Controllers/UserSettingsController.cs index 7e016803..7d5cc7e5 100644 --- a/AsbCloudWebApi/Controllers/UserSettingsController.cs +++ b/AsbCloudWebApi/Controllers/UserSettingsController.cs @@ -8,6 +8,9 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { + /// + /// Контроллер настроек для пользователя + /// [Route("api/[controller]")] [ApiController] [Authorize] @@ -20,6 +23,12 @@ namespace AsbCloudWebApi.Controllers this.service = service; } + /// + /// Получить настройки + /// + /// + /// + /// [HttpGet("{key}")] [ProducesResponseType(typeof(object), (int)System.Net.HttpStatusCode.OK)] [Produces("application/json")] @@ -38,32 +47,32 @@ namespace AsbCloudWebApi.Controllers return actionResult; } - [HttpPost("{key}")] - public virtual async Task> InsertAsync(string key, [FromBody] System.Text.Json.JsonDocument value, CancellationToken token) - { - var userId = User.GetUserId(); - if (userId is null) - return Forbid(); - - var result = await service.InsertAsync((int)userId, key, value, token).ConfigureAwait(false); - if (result == IUserSettingsRepository.ErrorKeyIsUsed) - return BadRequest(ArgumentInvalidException.MakeValidationError(nameof(key), "is already used")); - return Ok(result); - } - + /// + /// записать новые или обновить старые + /// + /// + /// + /// + /// [HttpPut("{key}")] - public virtual async Task> UpdateAsync(string key, [FromBody] System.Text.Json.JsonDocument value, CancellationToken token) + public virtual async Task> UpsertAsync(string key, [FromBody] System.Text.Json.JsonDocument value, CancellationToken token) { var userId = User.GetUserId(); if (userId is null) return Forbid(); - var result = await service.UpdateAsync((int)userId, key, value, token).ConfigureAwait(false); + var result = await service.UpsertAsync((int)userId, key, value, token).ConfigureAwait(false); if (result < 0) return BadRequest(ArgumentInvalidException.MakeValidationError(nameof(key), "not found")); return Ok(result); } + /// + /// Удалить настройки пользователя по ключу + /// + /// + /// + /// [HttpDelete("{key}")] public virtual async Task> DeleteAsync(string key, CancellationToken token) {