Setpoint API #1
No reviewers
Labels
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: on.nemtina/persistence#1
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "Setpoint"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@ -0,0 +15,4 @@
this.setpointRepository = setpointRepository;
}
[HttpPost("current")]
Здесь метод [HttpGet]
@ -0,0 +23,4 @@
return Ok(result);
}
[HttpPost("history")]
Здесь метод [HttpGet]
@ -0,0 +31,4 @@
return Ok(result);
}
[HttpPost("log")]
Здесь метод [HttpGet]
@ -0,0 +39,4 @@
return Ok(result);
}
[HttpPost("save")]
Здесь можно просто [HttpPost]
@ -0,0 +42,4 @@
[HttpPost("save")]
public async Task<ActionResult<int>> Save(Guid setpointKey, object newValue, CancellationToken token)
{
var result = await setpointRepository.Save(setpointKey, newValue, 0, token);
Добавить todo, что необходимо решить вопрос с получением пользователя и авторизацией
@ -0,0 +13,4 @@
[Column(TypeName = "jsonb"), Comment("Значение уставки")]
public required object Value { get; set; }
[Comment("Дата изменения уставки")]
Должно быть "Дата создания уставки"
@ -0,0 +4,4 @@
namespace Persistence.Database.Model
{
public class SetpointDictionary
Этот класс решено удалить
@ -0,0 +5,4 @@
{
public interface ISetpointClient
{
[Post("/current")]
Заголовки методов запроса должны соответствовать тем, что в контроллере (там часть нужно поменять с post на get)
@ -0,0 +16,4 @@
}
public SetpointControllerTest(WebAppFactoryFixture factory) : base(factory)
{
factory.ClientOptions.BaseAddress = new Uri($"http://localhost/api/Setpoint");
Эту строчку лучше убрать, а в интерфейсе ISetpointClient прописать так:
@ -0,0 +99,4 @@
}
[Fact]
public async Task General_test_success()
General_test_success не нужен, вместо него нужно для каждого кейса написать свой тест.
Данные тесты должны быть аналогичны GetCurrent_returns_success, GetHistory_returns_success, GetLog_returns_success, только внутри блока //arrange вызвать метод Save.
Метод Save сделать отдельным приватным методом.
@ -0,0 +1,10 @@
namespace Persistence.Repository.Data
{
public class SetpointDto
Решили, что для всех protected и public классов (а также для интерфейсов) нужно писать комментарии
@ -0,0 +31,4 @@
{
var query = GetQueryReadOnly();
var entities = await query
.Where(e => setpointKeys.Contains(e.Key) && e.Created.Date == historyMoment.Date)
Здесь не строгое равенство дат.
Нужно отсортировать уставки по возрастанию дат.
Взять те, у которых Created меньше historyMoment
Из отсортированного и отфильтрованного списка взять последнюю
@ -0,0 +44,4 @@
var entities = await query
.Where(e => setpointKeys.Contains(e.Key))
.ToArrayAsync(token);
var dtos = entities
Лучше так:
var dtos = entities
.GroupBy(e => e.Key)
.ToDictionary(e => e.Key, v => v.Select(z => z.Adapt()))
@ -0,0 +63,4 @@
Key = setpointKey,
Value = newValue,
IdUser = idUser,
Created = DateTimeOffset.Now.ToUniversalTime()
Можно так: Created = DateTimeOffset.UtcNow
@ -0,0 +71,4 @@
return result;
}
catch (Exception)
Пока try catch решили убрать
@ -41,3 +41,3 @@
/// <param name="token"></param>
/// <returns></returns>
Task<ActionResult<int>> SaveAsync(Guid setpointKey, object newValue, CancellationToken token);
Task<ActionResult<int>> Save(Guid setpointKey, object newValue, CancellationToken token);
Решили, что метод Save не должен ничего возвращать
@ -0,0 +122,4 @@
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
Assert.NotNull(response.Content);
Assert.NotEmpty(response.Content);
Assert.Equal(response.Content.FirstOrDefault().Value.FirstOrDefault()?.Key, setpointKey);
Assert.Equal(expected, actual)
@ -0,0 +35,4 @@
.ToArrayAsync(token);
var filteredEntities = entities
.GroupBy(e => e.Key)
.Select(e => e.Where(e => e.Created <= historyMoment).Last());
Здесь нужно еще просортировать, чтобы гарантированно взять нужную близлежайшую к historyMoment уставку