diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..0e6020c
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,273 @@
+# Remove the line below if you want to inherit .editorconfig settings from higher directories
+root = true
+
+# C# files
+[*.cs]
+
+#### Core EditorConfig Options ####
+
+# Indentation and spacing
+indent_size = 4
+indent_style = space
+tab_width = 4
+
+# New line preferences
+end_of_line = crlf
+insert_final_newline = false
+
+#### .NET Coding Conventions ####
+
+# Organize usings
+dotnet_separate_import_directive_groups = false
+dotnet_sort_system_directives_first = false
+file_header_template = unset
+
+# this. and Me. preferences
+dotnet_style_qualification_for_event = false
+dotnet_style_qualification_for_field = false
+dotnet_style_qualification_for_method = false
+dotnet_style_qualification_for_property = false
+
+# Language keywords vs BCL types preferences
+dotnet_style_predefined_type_for_locals_parameters_members = true
+dotnet_style_predefined_type_for_member_access = true
+
+# Parentheses preferences
+dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
+dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
+dotnet_style_parentheses_in_other_operators = never_if_unnecessary
+dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity
+
+# Modifier preferences
+dotnet_style_require_accessibility_modifiers = for_non_interface_members
+
+# Expression-level preferences
+dotnet_style_coalesce_expression = true
+dotnet_style_collection_initializer = true
+dotnet_style_explicit_tuple_names = true
+dotnet_style_namespace_match_folder = true
+dotnet_style_null_propagation = true
+dotnet_style_object_initializer = true
+dotnet_style_operator_placement_when_wrapping = beginning_of_line
+dotnet_style_prefer_auto_properties = true
+dotnet_style_prefer_collection_expression = when_types_loosely_match
+dotnet_style_prefer_compound_assignment = true
+dotnet_style_prefer_conditional_expression_over_assignment = true
+dotnet_style_prefer_conditional_expression_over_return = true
+dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed
+dotnet_style_prefer_inferred_anonymous_type_member_names = true
+dotnet_style_prefer_inferred_tuple_names = true
+dotnet_style_prefer_is_null_check_over_reference_equality_method = true
+dotnet_style_prefer_simplified_boolean_expressions = true
+dotnet_style_prefer_simplified_interpolation = true
+
+# Field preferences
+dotnet_style_readonly_field = true
+
+# Parameter preferences
+dotnet_code_quality_unused_parameters = all
+
+# Suppression preferences
+dotnet_remove_unnecessary_suppression_exclusions = none
+
+# New line preferences
+dotnet_style_allow_multiple_blank_lines_experimental = true
+dotnet_style_allow_statement_immediately_after_block_experimental = true
+
+#### C# Coding Conventions ####
+
+# var preferences
+csharp_style_var_elsewhere = false:silent
+csharp_style_var_for_built_in_types = false:silent
+csharp_style_var_when_type_is_apparent = false:silent
+
+# Expression-bodied members
+csharp_style_expression_bodied_accessors = true:silent
+csharp_style_expression_bodied_constructors = false:silent
+csharp_style_expression_bodied_indexers = true:silent
+csharp_style_expression_bodied_lambdas = true:silent
+csharp_style_expression_bodied_local_functions = false:silent
+csharp_style_expression_bodied_methods = false:silent
+csharp_style_expression_bodied_operators = false:silent
+csharp_style_expression_bodied_properties = true:silent
+
+# Pattern matching preferences
+csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
+csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
+csharp_style_prefer_extended_property_pattern = true:suggestion
+csharp_style_prefer_not_pattern = true:suggestion
+csharp_style_prefer_pattern_matching = true:silent
+csharp_style_prefer_switch_expression = true:suggestion
+
+# Null-checking preferences
+csharp_style_conditional_delegate_call = true:suggestion
+
+# Modifier preferences
+csharp_prefer_static_local_function = true:suggestion
+csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async
+csharp_style_prefer_readonly_struct = true:suggestion
+csharp_style_prefer_readonly_struct_member = true:suggestion
+
+# Code-block preferences
+csharp_prefer_braces = true:silent
+csharp_prefer_simple_using_statement = true:suggestion
+csharp_style_namespace_declarations = file_scoped:silent
+csharp_style_prefer_method_group_conversion = true:silent
+csharp_style_prefer_primary_constructors = false:none
+csharp_style_prefer_top_level_statements = true:silent
+
+# Expression-level preferences
+csharp_prefer_simple_default_expression = true:suggestion
+csharp_style_deconstructed_variable_declaration = true:suggestion
+csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
+csharp_style_inlined_variable_declaration = true:suggestion
+csharp_style_prefer_index_operator = true:suggestion
+csharp_style_prefer_local_over_anonymous_function = true:suggestion
+csharp_style_prefer_null_check_over_type_check = true:suggestion
+csharp_style_prefer_range_operator = true:suggestion
+csharp_style_prefer_tuple_swap = true:suggestion
+csharp_style_prefer_utf8_string_literals = true:suggestion
+csharp_style_throw_expression = true:suggestion
+csharp_style_unused_value_assignment_preference = discard_variable:suggestion
+csharp_style_unused_value_expression_statement_preference = discard_variable:silent
+
+# 'using' directive preferences
+csharp_using_directive_placement = outside_namespace:silent
+
+# New line preferences
+csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent
+csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent
+csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent
+csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent
+csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent
+
+#### C# Formatting Rules ####
+
+# New line preferences
+csharp_new_line_before_catch = true
+csharp_new_line_before_else = true
+csharp_new_line_before_finally = true
+csharp_new_line_before_members_in_anonymous_types = true
+csharp_new_line_before_members_in_object_initializers = true
+csharp_new_line_before_open_brace = all
+csharp_new_line_between_query_expression_clauses = true
+
+# Indentation preferences
+csharp_indent_block_contents = true
+csharp_indent_braces = false
+csharp_indent_case_contents = true
+csharp_indent_case_contents_when_block = true
+csharp_indent_labels = one_less_than_current
+csharp_indent_switch_labels = true
+
+# Space preferences
+csharp_space_after_cast = false
+csharp_space_after_colon_in_inheritance_clause = true
+csharp_space_after_comma = true
+csharp_space_after_dot = false
+csharp_space_after_keywords_in_control_flow_statements = true
+csharp_space_after_semicolon_in_for_statement = true
+csharp_space_around_binary_operators = before_and_after
+csharp_space_around_declaration_statements = false
+csharp_space_before_colon_in_inheritance_clause = true
+csharp_space_before_comma = false
+csharp_space_before_dot = false
+csharp_space_before_open_square_brackets = false
+csharp_space_before_semicolon_in_for_statement = false
+csharp_space_between_empty_square_brackets = false
+csharp_space_between_method_call_empty_parameter_list_parentheses = false
+csharp_space_between_method_call_name_and_opening_parenthesis = false
+csharp_space_between_method_call_parameter_list_parentheses = false
+csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
+csharp_space_between_method_declaration_name_and_open_parenthesis = false
+csharp_space_between_method_declaration_parameter_list_parentheses = false
+csharp_space_between_parentheses = false
+csharp_space_between_square_brackets = false
+
+# Wrapping preferences
+csharp_preserve_single_line_blocks = true
+csharp_preserve_single_line_statements = true
+
+#### Naming styles ####
+
+# Naming rules
+
+dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
+dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
+dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
+
+dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.types_should_be_pascal_case.symbols = types
+dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
+
+dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
+dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
+
+# Symbol specifications
+
+dotnet_naming_symbols.interface.applicable_kinds = interface
+dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.interface.required_modifiers =
+
+dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
+dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.types.required_modifiers =
+
+dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
+dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.non_field_members.required_modifiers =
+
+# Naming styles
+
+dotnet_naming_style.pascal_case.required_prefix =
+dotnet_naming_style.pascal_case.required_suffix =
+dotnet_naming_style.pascal_case.word_separator =
+dotnet_naming_style.pascal_case.capitalization = pascal_case
+
+dotnet_naming_style.begins_with_i.required_prefix = I
+dotnet_naming_style.begins_with_i.required_suffix =
+dotnet_naming_style.begins_with_i.word_separator =
+dotnet_naming_style.begins_with_i.capitalization = pascal_case
+
+# Spell check
+
+spelling_languages = en-us,ru-RU
+spelling_exclusion_path = exclusion.dic
+
+[*.{cs,vb}]
+dotnet_style_operator_placement_when_wrapping = beginning_of_line
+tab_width = 4
+indent_size = 4
+end_of_line = crlf
+dotnet_style_coalesce_expression = true:suggestion
+dotnet_style_null_propagation = true:suggestion
+dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
+dotnet_style_prefer_auto_properties = true:silent
+dotnet_style_object_initializer = true:suggestion
+dotnet_style_collection_initializer = true:suggestion
+dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
+dotnet_style_prefer_conditional_expression_over_assignment = true:silent
+dotnet_style_prefer_conditional_expression_over_return = true:silent
+dotnet_style_explicit_tuple_names = true:suggestion
+dotnet_style_prefer_inferred_tuple_names = true:suggestion
+dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
+dotnet_style_prefer_compound_assignment = true:suggestion
+dotnet_style_prefer_simplified_interpolation = true:suggestion
+dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion
+dotnet_style_namespace_match_folder = true:suggestion
+dotnet_code_quality_unused_parameters = all:suggestion
+dotnet_style_predefined_type_for_locals_parameters_members = true:silent
+dotnet_style_predefined_type_for_member_access = true:silent
+dotnet_style_qualification_for_field = false:silent
+dotnet_style_qualification_for_property = false:silent
+dotnet_style_qualification_for_method = false:silent
+dotnet_style_qualification_for_event = false:silent
+dotnet_style_allow_multiple_blank_lines_experimental = true:silent
+dotnet_style_allow_statement_immediately_after_block_experimental = true:silent
+dotnet_style_readonly_field = true:suggestion
+dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
+dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
+dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
+dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
+dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
\ No newline at end of file
diff --git a/Persistence.API/Controllers/ChangeLogController.cs b/Persistence.API/Controllers/ChangeLogController.cs
index 52a68dd..72f0b08 100644
--- a/Persistence.API/Controllers/ChangeLogController.cs
+++ b/Persistence.API/Controllers/ChangeLogController.cs
@@ -12,7 +12,7 @@ namespace Persistence.API.Controllers;
[Route("api/[controller]")]
public class ChangeLogController : ControllerBase, IChangeLogApi
{
- private IChangeLogRepository repository;
+ private readonly IChangeLogRepository repository;
public ChangeLogController(IChangeLogRepository repository)
{
diff --git a/Persistence.API/Controllers/DataSaubController.cs b/Persistence.API/Controllers/DataSaubController.cs
index 202e527..715b1ef 100644
--- a/Persistence.API/Controllers/DataSaubController.cs
+++ b/Persistence.API/Controllers/DataSaubController.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using Persistence.Models;
using Persistence.Repositories;
-using Persistence.Repository.Data;
namespace Persistence.API.Controllers;
diff --git a/Persistence.API/Controllers/SetpointController.cs b/Persistence.API/Controllers/SetpointController.cs
index cb8d479..0ff6878 100644
--- a/Persistence.API/Controllers/SetpointController.cs
+++ b/Persistence.API/Controllers/SetpointController.cs
@@ -1,8 +1,8 @@
-using System.Net;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Persistence.Models;
using Persistence.Repositories;
+using System.Net;
namespace Persistence.API.Controllers;
@@ -14,98 +14,98 @@ namespace Persistence.API.Controllers;
[Route("api/[controller]")]
public class SetpointController : ControllerBase, ISetpointApi
{
- private readonly ISetpointRepository setpointRepository;
+ private readonly ISetpointRepository setpointRepository;
- public SetpointController(ISetpointRepository setpointRepository)
- {
- this.setpointRepository = setpointRepository;
- }
+ public SetpointController(ISetpointRepository setpointRepository)
+ {
+ this.setpointRepository = setpointRepository;
+ }
- ///
- /// Получить актуальные значения уставок
- ///
- ///
- ///
- ///
- [HttpGet("current")]
- public async Task>> GetCurrent([FromQuery] IEnumerable setpointKeys, CancellationToken token)
- {
- var result = await setpointRepository.GetCurrent(setpointKeys, token);
+ ///
+ /// Получить актуальные значения уставок
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("current")]
+ public async Task>> GetCurrent([FromQuery] IEnumerable setpointKeys, CancellationToken token)
+ {
+ var result = await setpointRepository.GetCurrent(setpointKeys, token);
- return Ok(result);
- }
+ return Ok(result);
+ }
- ///
- /// Получить значения уставок за определенный момент времени
- ///
- ///
- ///
- ///
- ///
- [HttpGet("history")]
- public async Task>> GetHistory([FromQuery] IEnumerable setpointKeys, [FromQuery] DateTimeOffset historyMoment, CancellationToken token)
- {
- var result = await setpointRepository.GetHistory(setpointKeys, historyMoment, token);
+ ///
+ /// Получить значения уставок за определенный момент времени
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("history")]
+ public async Task>> GetHistory([FromQuery] IEnumerable setpointKeys, [FromQuery] DateTimeOffset historyMoment, CancellationToken token)
+ {
+ var result = await setpointRepository.GetHistory(setpointKeys, historyMoment, token);
- return Ok(result);
- }
+ return Ok(result);
+ }
- ///
- /// Получить историю изменений значений уставок
- ///
- ///
- ///
- ///
- [HttpGet("log")]
- public async Task>>> GetLog([FromQuery] IEnumerable setpointKeys, CancellationToken token)
- {
- var result = await setpointRepository.GetLog(setpointKeys, token);
+ ///
+ /// Получить историю изменений значений уставок
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("log")]
+ public async Task>>> GetLog([FromQuery] IEnumerable setpointKeys, CancellationToken token)
+ {
+ var result = await setpointRepository.GetLog(setpointKeys, token);
- return Ok(result);
- }
+ return Ok(result);
+ }
- ///
- /// Получить диапазон дат, для которых есть данные в репозитории
- ///
- ///
- ///
- [HttpGet("range")]
- public async Task> GetDatesRangeAsync(CancellationToken token)
- {
- var result = await setpointRepository.GetDatesRangeAsync(token);
+ ///
+ /// Получить диапазон дат, для которых есть данные в репозитории
+ ///
+ ///
+ ///
+ [HttpGet("range")]
+ public async Task> GetDatesRangeAsync(CancellationToken token)
+ {
+ var result = await setpointRepository.GetDatesRangeAsync(token);
- return Ok(result);
- }
+ return Ok(result);
+ }
- ///
- /// Получить порцию записей, начиная с заданной даты
- ///
- ///
- ///
- ///
- ///
- [HttpGet("part")]
- public async Task>> GetPart(DateTimeOffset dateBegin, int take, CancellationToken token)
- {
- var result = await setpointRepository.GetPart(dateBegin, take, token);
+ ///
+ /// Получить порцию записей, начиная с заданной даты
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("part")]
+ public async Task>> GetPart(DateTimeOffset dateBegin, int take, CancellationToken token)
+ {
+ var result = await setpointRepository.GetPart(dateBegin, take, token);
- return Ok(result);
- }
+ return Ok(result);
+ }
- ///
- /// Сохранить уставку
- ///
- ///
- ///
- ///
- ///
- [HttpPost]
- [ProducesResponseType(typeof(int), (int)HttpStatusCode.Created)]
- public async Task Add(Guid setpointKey, object newValue, CancellationToken token)
- {
- var userId = User.GetUserId();
- await setpointRepository.Add(setpointKey, newValue, userId, token);
+ ///
+ /// Сохранить уставку
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ProducesResponseType(typeof(int), (int)HttpStatusCode.Created)]
+ public async Task Add(Guid setpointKey, object newValue, CancellationToken token)
+ {
+ var userId = User.GetUserId();
+ await setpointRepository.Add(setpointKey, newValue, userId, token);
- return CreatedAtAction(nameof(Add), true);
- }
+ return CreatedAtAction(nameof(Add), true);
+ }
}
diff --git a/Persistence.API/Controllers/TechMessagesController.cs b/Persistence.API/Controllers/TechMessagesController.cs
index e5705b9..12b23b3 100644
--- a/Persistence.API/Controllers/TechMessagesController.cs
+++ b/Persistence.API/Controllers/TechMessagesController.cs
@@ -1,48 +1,48 @@
-using System.Net;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Persistence.Models;
using Persistence.Models.Requests;
using Persistence.Repositories;
+using System.Net;
namespace Persistence.API.Controllers;
///
-/// Работа с состояниями систем автобурения (АБ)
+/// Работа с технологическими сообщениями систем автобурения (АБ)
///
[ApiController]
[Authorize]
[Route("api/[controller]")]
public class TechMessagesController : ControllerBase
{
- private readonly ITechMessagesRepository techMessagesRepository;
- private static readonly Dictionary categories = new Dictionary()
- {
- { 0, "System" },
- { 1, "Авария" },
- { 2, "Предупреждение" },
- { 3, "Инфо" },
- { 4, "Прочее" }
- };
+ private readonly ITechMessagesRepository techMessagesRepository;
+ private static readonly Dictionary categories = new()
+ {
+ { 0, "System" },
+ { 1, "Авария" },
+ { 2, "Предупреждение" },
+ { 3, "Инфо" },
+ { 4, "Прочее" }
+ };
- public TechMessagesController(ITechMessagesRepository techMessagesRepository)
- {
- this.techMessagesRepository = techMessagesRepository;
- }
+ public TechMessagesController(ITechMessagesRepository techMessagesRepository)
+ {
+ this.techMessagesRepository = techMessagesRepository;
+ }
- ///
- /// Получить список технологических сообщений в виде страницы
- ///
- ///
- ///
- ///
- [HttpGet]
- public async Task>> GetPage([FromQuery] PaginationRequest request, CancellationToken token)
- {
- var result = await techMessagesRepository.GetPage(request, token);
+ ///
+ /// Получить список технологических сообщений в виде страницы
+ ///
+ ///
+ ///
+ ///
+ [HttpGet]
+ public async Task>> GetPage([FromQuery] PaginationRequest request, CancellationToken token)
+ {
+ var result = await techMessagesRepository.GetPage(request, token);
- return Ok(result);
- }
+ return Ok(result);
+ }
///
/// Получить статистику по системам
@@ -56,49 +56,49 @@ public class TechMessagesController : ControllerBase
{
var result = await techMessagesRepository.GetStatistics(autoDrillingSystem, categoryIds, token);
- return Ok(result);
- }
+ return Ok(result);
+ }
- ///
- /// Получить список всех систем
- ///
- ///
- ///
- [HttpGet("systems")]
- public async Task>> GetSystems(CancellationToken token)
- {
- var result = await techMessagesRepository.GetSystems(token);
+ ///
+ /// Получить список всех систем
+ ///
+ ///
+ ///
+ [HttpGet("systems")]
+ public async Task>> GetSystems(CancellationToken token)
+ {
+ var result = await techMessagesRepository.GetSystems(token);
- return Ok(result);
- }
+ return Ok(result);
+ }
- ///
- /// Получить диапазон дат, для которых есть данные в репозитории
- ///
- ///
- ///
- [HttpGet("range")]
- public async Task> GetDatesRangeAsync(CancellationToken token)
- {
- var result = await techMessagesRepository.GetDatesRangeAsync(token);
+ ///
+ /// Получить диапазон дат, для которых есть данные в репозитории
+ ///
+ ///
+ ///
+ [HttpGet("range")]
+ public async Task> GetDatesRangeAsync(CancellationToken token)
+ {
+ var result = await techMessagesRepository.GetDatesRangeAsync(token);
- return Ok(result);
- }
+ return Ok(result);
+ }
- ///
- /// Получить порцию записей, начиная с заданной даты
- ///
- ///
- ///
- ///
- ///
- [HttpGet("part")]
- public async Task>> GetPart(DateTimeOffset dateBegin, int take, CancellationToken token)
- {
- var result = await techMessagesRepository.GetPart(dateBegin, take, token);
+ ///
+ /// Получить порцию записей, начиная с заданной даты
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("part")]
+ public async Task>> GetPart(DateTimeOffset dateBegin, int take, CancellationToken token)
+ {
+ var result = await techMessagesRepository.GetPart(dateBegin, take, token);
- return Ok(result);
- }
+ return Ok(result);
+ }
///
/// Добавить новые технологические сообщения
@@ -115,16 +115,16 @@ public class TechMessagesController : ControllerBase
var result = await techMessagesRepository.AddRange(systemId, dtos, userId, token);
- return CreatedAtAction(nameof(AddRange), result);
- }
+ return CreatedAtAction(nameof(AddRange), result);
+ }
- ///
- /// Получить словарь категорий
- ///
- ///
- [HttpGet("categories")]
- public ActionResult> GetImportantCategories()
- {
- return Ok(categories);
- }
+ ///
+ /// Получить словарь категорий
+ ///
+ ///
+ [HttpGet("categories")]
+ public ActionResult> GetImportantCategories()
+ {
+ return Ok(categories);
+ }
}
\ No newline at end of file
diff --git a/Persistence.API/Controllers/TimeSeriesController.cs b/Persistence.API/Controllers/TimeSeriesController.cs
index 6991759..f13c641 100644
--- a/Persistence.API/Controllers/TimeSeriesController.cs
+++ b/Persistence.API/Controllers/TimeSeriesController.cs
@@ -11,20 +11,20 @@ namespace Persistence.API.Controllers;
public class TimeSeriesController : ControllerBase, ITimeSeriesDataApi
where TDto : class, ITimeSeriesAbstractDto, new()
{
- private ITimeSeriesDataRepository timeSeriesDataRepository;
+ private readonly ITimeSeriesDataRepository timeSeriesDataRepository;
- public TimeSeriesController(ITimeSeriesDataRepository timeSeriesDataRepository)
- {
- this.timeSeriesDataRepository = timeSeriesDataRepository;
+ public TimeSeriesController(ITimeSeriesDataRepository timeSeriesDataRepository)
+ {
+ this.timeSeriesDataRepository = timeSeriesDataRepository;
}
- ///
- /// Получить список объектов, удовлетворяющий диапазону дат
- ///
- ///
- ///
- ///
- [HttpGet]
+ ///
+ /// Получить список объектов, удовлетворяющий диапазону дат
+ ///
+ ///
+ ///
+ ///
+ [HttpGet]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task Get(DateTimeOffset dateBegin, CancellationToken token)
{
@@ -32,40 +32,40 @@ public class TimeSeriesController : ControllerBase, ITimeSeriesDataApi
- /// Получить диапазон дат, для которых есть данные в репозиторие
- ///
- ///
- ///
- [HttpGet("datesRange")]
+ ///
+ /// Получить диапазон дат, для которых есть данные в репозитории
+ ///
+ ///
+ ///
+ [HttpGet("datesRange")]
public async Task GetDatesRange(CancellationToken token)
{
var result = await timeSeriesDataRepository.GetDatesRange(token);
return Ok(result);
}
- ///
- /// Получить список объектов с прореживанием, удовлетворяющий диапазону дат
- ///
- ///
- ///
- ///
- ///
- ///
- [HttpGet("resampled")]
+ ///
+ /// Получить список объектов с прореживанием, удовлетворяющий диапазону дат
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("resampled")]
public async Task GetResampledData(DateTimeOffset dateBegin, double intervalSec = 600d, int approxPointsCount = 1024, CancellationToken token = default)
{
var result = await timeSeriesDataRepository.GetResampledData(dateBegin, intervalSec, approxPointsCount, token);
return Ok(result);
}
- ///
- /// Добавить записи
- ///
- ///
- ///
- ///
- [HttpPost]
+ ///
+ /// Добавить записи
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
public async Task AddRange(IEnumerable dtos, CancellationToken token)
{
var result = await timeSeriesDataRepository.AddRange(dtos, token);
diff --git a/Persistence.API/Controllers/TimestampedSetController.cs b/Persistence.API/Controllers/TimestampedSetController.cs
index bd0e97e..4687e72 100644
--- a/Persistence.API/Controllers/TimestampedSetController.cs
+++ b/Persistence.API/Controllers/TimestampedSetController.cs
@@ -13,7 +13,7 @@ namespace Persistence.API.Controllers;
[ApiController]
[Authorize]
[Route("api/[controller]/{idDiscriminator}")]
-public class TimestampedSetController : ControllerBase
+public class TimestampedSetController : ControllerBase
{
private readonly ITimestampedSetRepository repository;
@@ -32,7 +32,7 @@ public class TimestampedSetController : ControllerBase
/// кол-во затронутых записей
[HttpPost]
[ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)]
- public async Task AddRange([FromRoute]Guid idDiscriminator, [FromBody]IEnumerable sets, CancellationToken token)
+ public async Task AddRange([FromRoute] Guid idDiscriminator, [FromBody] IEnumerable sets, CancellationToken token)
{
var result = await repository.AddRange(idDiscriminator, sets, token);
return Ok(result);
@@ -50,7 +50,7 @@ public class TimestampedSetController : ControllerBase
/// Фильтрованный набор данных с сортировкой по отметке времени
[HttpGet]
[ProducesResponseType(typeof(IEnumerable), (int)HttpStatusCode.OK)]
- public async Task Get(Guid idDiscriminator, DateTimeOffset? geTimestamp, [FromQuery]IEnumerable? columnNames, int skip, int take, CancellationToken token)
+ public async Task Get(Guid idDiscriminator, DateTimeOffset? geTimestamp, [FromQuery] IEnumerable? columnNames, int skip, int take, CancellationToken token)
{
var result = await repository.Get(idDiscriminator, geTimestamp, columnNames, skip, take, token);
return Ok(result);
@@ -66,7 +66,7 @@ public class TimestampedSetController : ControllerBase
/// Фильтрованный набор данных с сортировкой по отметке времени
[HttpGet("last")]
[ProducesResponseType(typeof(IEnumerable), (int)HttpStatusCode.OK)]
- public async Task GetLast(Guid idDiscriminator, [FromQuery]IEnumerable? columnNames, int take, CancellationToken token)
+ public async Task GetLast(Guid idDiscriminator, [FromQuery] IEnumerable? columnNames, int take, CancellationToken token)
{
var result = await repository.GetLast(idDiscriminator, columnNames, take, token);
return Ok(result);
diff --git a/Persistence.API/Controllers/WitsDataController.cs b/Persistence.API/Controllers/WitsDataController.cs
index 741b35c..9e855b7 100644
--- a/Persistence.API/Controllers/WitsDataController.cs
+++ b/Persistence.API/Controllers/WitsDataController.cs
@@ -1,8 +1,8 @@
-using System.Net;
-using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Persistence.Models;
using Persistence.Services.Interfaces;
+using System.Net;
namespace Persistence.API.Controllers;
@@ -14,73 +14,73 @@ namespace Persistence.API.Controllers;
[Route("api/[controller]")]
public class WitsDataController : ControllerBase, IWitsDataApi
{
- private readonly IWitsDataService witsDataService;
+ private readonly IWitsDataService witsDataService;
- public WitsDataController(IWitsDataService witsDataService)
- {
- this.witsDataService = witsDataService;
- }
+ public WitsDataController(IWitsDataService witsDataService)
+ {
+ this.witsDataService = witsDataService;
+ }
- ///
- /// Получить диапазон дат, для которых есть данные в репозитории
- ///
- ///
- ///
- ///
- [HttpGet("{discriminatorId}/datesRange")]
- public async Task> GetDatesRangeAsync([FromRoute] Guid discriminatorId, CancellationToken token)
- {
- var result = await witsDataService.GetDatesRangeAsync(discriminatorId, token);
+ ///
+ /// Получить диапазон дат, для которых есть данные в репозитории
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("{discriminatorId}/datesRange")]
+ public async Task> GetDatesRangeAsync([FromRoute] Guid discriminatorId, CancellationToken token)
+ {
+ var result = await witsDataService.GetDatesRangeAsync(discriminatorId, token);
- return result == null ? NoContent() : Ok(result);
- }
+ return result == null ? NoContent() : Ok(result);
+ }
- ///
- /// Получить порцию записей, начиная с заданной даты
- ///
- ///
- ///
- ///
- ///
- ///
- [HttpGet("{discriminatorId}/part")]
- public async Task>> GetPart([FromRoute] Guid discriminatorId, [FromQuery] DateTimeOffset dateBegin, [FromQuery] int take, CancellationToken token)
- {
- var result = await witsDataService.GetPart(discriminatorId, dateBegin, take, token);
+ ///
+ /// Получить порцию записей, начиная с заданной даты
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("{discriminatorId}/part")]
+ public async Task>> GetPart([FromRoute] Guid discriminatorId, [FromQuery] DateTimeOffset dateBegin, [FromQuery] int take, CancellationToken token)
+ {
+ var result = await witsDataService.GetPart(discriminatorId, dateBegin, take, token);
- return Ok(result);
- }
+ return Ok(result);
+ }
- ///
- /// Получить набор параметров (Wits) для построения графика
- ///
- /// Дискриминатор системы
- /// Начало временного интервала
- /// Конец временного интервала
- /// Количество точек
- ///
- ///
- [HttpGet("{discriminatorId}/graph")]
- public async Task>> GetValuesForGraph([FromRoute] Guid discriminatorId,
- [FromQuery] DateTimeOffset dateFrom, [FromQuery] DateTimeOffset dateTo, [FromQuery] int approxPointsCount, CancellationToken token)
- {
- var result = await witsDataService.GetValuesForGraph(discriminatorId, dateFrom, dateTo, approxPointsCount, token);
-
- return Ok(result);
- }
+ ///
+ /// Получить набор параметров (Wits) для построения графика
+ ///
+ /// Дискриминатор системы
+ /// Начало временного интервала
+ /// Конец временного интервала
+ /// Количество точек
+ ///
+ ///
+ [HttpGet("{discriminatorId}/graph")]
+ public async Task>> GetValuesForGraph([FromRoute] Guid discriminatorId,
+ [FromQuery] DateTimeOffset dateFrom, [FromQuery] DateTimeOffset dateTo, [FromQuery] int approxPointsCount, CancellationToken token)
+ {
+ var result = await witsDataService.GetValuesForGraph(discriminatorId, dateFrom, dateTo, approxPointsCount, token);
- ///
- /// Сохранить набор параметров (Wits)
- ///
- ///
- ///
- ///
- [HttpPost]
- [ProducesResponseType(typeof(int), (int)HttpStatusCode.Created)]
- public async Task AddRange([FromBody] IEnumerable dtos, CancellationToken token)
- {
- var result = await witsDataService.AddRange(dtos, token);
+ return Ok(result);
+ }
- return CreatedAtAction(nameof(AddRange), result);
- }
+ ///
+ /// Сохранить набор параметров (Wits)
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ [ProducesResponseType(typeof(int), (int)HttpStatusCode.Created)]
+ public async Task AddRange([FromBody] IEnumerable dtos, CancellationToken token)
+ {
+ var result = await witsDataService.AddRange(dtos, token);
+
+ return CreatedAtAction(nameof(AddRange), result);
+ }
}
diff --git a/Persistence.API/DependencyInjection.cs b/Persistence.API/DependencyInjection.cs
index 622a93b..d2960af 100644
--- a/Persistence.API/DependencyInjection.cs
+++ b/Persistence.API/DependencyInjection.cs
@@ -30,12 +30,11 @@ public static class DependencyInjection
c.MapType(() => new OpenApiSchema { Type = "string", Format = "date" });
c.MapType(() => new OpenApiSchema
{
- AnyOf = new OpenApiSchema[]
- {
+ AnyOf = [
new OpenApiSchema {Type = "string", Format = "string" },
new OpenApiSchema {Type = "number", Format = "int32" },
- new OpenApiSchema {Type = "number", Format = "float" },
- }
+ new OpenApiSchema {Type = "number", Format = "float" }
+ ]
});
c.CustomOperationIds(e =>
@@ -47,8 +46,8 @@ public static class DependencyInjection
var needUseKeyCloak = configuration.GetSection("NeedUseKeyCloak").Get();
if (needUseKeyCloak)
- c.AddKeycloackSecurity(configuration);
- else c.AddDefaultSecurity(configuration);
+ c.AddKeycloakSecurity(configuration);
+ else c.AddDefaultSecurity();
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
@@ -57,13 +56,13 @@ public static class DependencyInjection
});
}
- public static void AddServices(this IServiceCollection services)
- {
- services.AddTransient();
- }
+ public static void AddServices(this IServiceCollection services)
+ {
+ services.AddTransient();
+ }
- #region Authentication
- public static void AddJWTAuthentication(this IServiceCollection services, IConfiguration configuration)
+ #region Authentication
+ public static void AddJWTAuthentication(this IServiceCollection services, IConfiguration configuration)
{
var needUseKeyCloak = configuration
.GetSection("NeedUseKeyCloak")
@@ -108,7 +107,7 @@ public static class DependencyInjection
{
OnMessageReceived = context =>
{
- var accessToken = context.Request.Headers["Authorization"]
+ var accessToken = context.Request.Headers.Authorization
.ToString()
.Replace(JwtBearerDefaults.AuthenticationScheme, string.Empty)
.Trim();
@@ -141,12 +140,12 @@ public static class DependencyInjection
}
#endregion
- #region Security (Swagger)
- private static void AddKeycloackSecurity(this SwaggerGenOptions options, IConfiguration configuration)
+ #region Keycloak
+ private static void AddKeycloakSecurity(this SwaggerGenOptions options, IConfiguration configuration)
{
- options.AddSecurityDefinition("Keycloack", new OpenApiSecurityScheme
+ options.AddSecurityDefinition("Keycloak", new OpenApiSecurityScheme
{
- Description = @"JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token in the text input below. Example: 'Bearer 12345abcdef'",
+ Description = @"JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token in the text input below. Example: 'Bearer 12345token'",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.OAuth2,
@@ -167,7 +166,7 @@ public static class DependencyInjection
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
- Id = "Keycloack"
+ Id = "Keycloak"
},
Scheme = "Bearer",
Name = "Bearer",
@@ -178,11 +177,11 @@ public static class DependencyInjection
});
}
- private static void AddDefaultSecurity(this SwaggerGenOptions options, IConfiguration configuration)
+ private static void AddDefaultSecurity(this SwaggerGenOptions options)
{
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
- Description = @"JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token in the text input below. Example: 'Bearer 12345abcdef'",
+ Description = @"JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token in the text input below. Example: 'Bearer 12345token'",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
diff --git a/Persistence.API/Extensions.cs b/Persistence.API/Extensions.cs
index 601a2f4..5fa9fd4 100644
--- a/Persistence.API/Extensions.cs
+++ b/Persistence.API/Extensions.cs
@@ -7,18 +7,15 @@ public static class Extensions
{
public static T GetUserId(this ClaimsPrincipal principal)
{
- if (principal == null)
- throw new ArgumentNullException(nameof(principal));
+ ArgumentNullException.ThrowIfNull(principal, nameof(principal));
var loggedInUserId = principal.FindFirstValue(ClaimTypes.NameIdentifier);
- if (String.IsNullOrEmpty(loggedInUserId))
- throw new ArgumentNullException(nameof(loggedInUserId));
+ ArgumentNullException.ThrowIfNullOrEmpty(loggedInUserId, nameof(loggedInUserId));
var result = TypeDescriptor.GetConverter(typeof(T)).ConvertFromInvariantString(loggedInUserId);
- if (result is null)
- throw new ArgumentNullException(nameof(result));
+ ArgumentNullException.ThrowIfNull(result, nameof(result));
return (T)result;
diff --git a/Persistence.API/Persistence.API.csproj b/Persistence.API/Persistence.API.csproj
index dfff363..fa3b7ad 100644
--- a/Persistence.API/Persistence.API.csproj
+++ b/Persistence.API/Persistence.API.csproj
@@ -9,6 +9,11 @@
$(NoWarn);1591
+
+ 1.0.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH))
+ 1.0.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH))
+
+
diff --git a/Persistence.API/Persistence.API.http b/Persistence.API/Persistence.API.http
deleted file mode 100644
index 0eba8fa..0000000
--- a/Persistence.API/Persistence.API.http
+++ /dev/null
@@ -1,6 +0,0 @@
-@Persistence.API_HostAddress = http://localhost:5032
-
-GET {{Persistence.API_HostAddress}}/weatherforecast/
-Accept: application/json
-
-###
diff --git a/Persistence.API/Program.cs b/Persistence.API/Program.cs
index bc54d92..bb6e9a7 100644
--- a/Persistence.API/Program.cs
+++ b/Persistence.API/Program.cs
@@ -1,6 +1,3 @@
-
-using Persistence.Models;
-
namespace Persistence.API;
public class Program
@@ -18,5 +15,5 @@ public class Program
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup();
- });
+ });
}
diff --git a/Persistence.API/Startup.cs b/Persistence.API/Startup.cs
index 77b3e72..2b522bd 100644
--- a/Persistence.API/Startup.cs
+++ b/Persistence.API/Startup.cs
@@ -1,6 +1,6 @@
-using Persistence.Repository;
-using Persistence.Database.Model;
+using Persistence.Database.Model;
using Persistence.Database.Postgres;
+using Persistence.Repository;
namespace Persistence.API;
diff --git a/Persistence.Client/Clients/Interfaces/Refit/IRefitTimeSeriesClient.cs b/Persistence.Client/Clients/Interfaces/Refit/IRefitTimeSeriesClient.cs
index 3deae09..79135e1 100644
--- a/Persistence.Client/Clients/Interfaces/Refit/IRefitTimeSeriesClient.cs
+++ b/Persistence.Client/Clients/Interfaces/Refit/IRefitTimeSeriesClient.cs
@@ -1,4 +1,4 @@
-using Persistence.Models;
+using Persistence.Models;
using Refit;
namespace Persistence.Client.Clients.Interfaces.Refit;
diff --git a/Persistence.Client/Helpers/ApiTokenHelper.cs b/Persistence.Client/Helpers/ApiTokenHelper.cs
index 32f1fe2..a2f632e 100644
--- a/Persistence.Client/Helpers/ApiTokenHelper.cs
+++ b/Persistence.Client/Helpers/ApiTokenHelper.cs
@@ -1,31 +1,31 @@
-using System.IdentityModel.Tokens.Jwt;
-using System.Net.Http.Headers;
-using System.Security.Claims;
-using System.Text.Json;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using Persistence.Models.Configurations;
using RestSharp;
+using System.IdentityModel.Tokens.Jwt;
+using System.Net.Http.Headers;
+using System.Security.Claims;
+using System.Text.Json;
namespace Persistence.Client.Helpers;
public static class ApiTokenHelper
{
- public static void Authorize(this HttpClient httpClient, IConfiguration configuration)
- {
- var authUser = configuration
- .GetSection(nameof(AuthUser))
- .Get()!;
- var needUseKeyCloak = configuration
- .GetSection("NeedUseKeyCloak")
- .Get()!;
- var keycloakGetTokenUrl = configuration.GetSection("KeycloakGetTokenUrl").Get() ?? string.Empty;
+ public static void Authorize(this HttpClient httpClient, IConfiguration configuration)
+ {
+ var authUser = configuration
+ .GetSection(nameof(AuthUser))
+ .Get()!;
+ var needUseKeyCloak = configuration
+ .GetSection("NeedUseKeyCloak")
+ .Get()!;
+ var keycloakGetTokenUrl = configuration.GetSection("KeycloakGetTokenUrl").Get() ?? string.Empty;
- var jwtToken = needUseKeyCloak
- ? authUser.CreateKeyCloakJwtToken(keycloakGetTokenUrl)
- : authUser.CreateDefaultJwtToken();
+ var jwtToken = needUseKeyCloak
+ ? authUser.CreateKeyCloakJwtToken(keycloakGetTokenUrl)
+ : authUser.CreateDefaultJwtToken();
- httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwtToken);
- }
+ httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwtToken);
+ }
public static void Authorize(this HttpClient httpClient, string jwtToken)
{
@@ -45,36 +45,36 @@ public static class ApiTokenHelper
new(ClaimTypes.NameIdentifier.ToString(), Guid.NewGuid().ToString())
};
- var tokenDescriptor = new SecurityTokenDescriptor
- {
- Issuer = JwtParams.Issuer,
- Audience = JwtParams.Audience,
- Subject = new ClaimsIdentity(claims),
- Expires = DateTime.UtcNow.AddHours(1),
- SigningCredentials = new SigningCredentials(JwtParams.SecurityKey, SecurityAlgorithms.HmacSha256Signature)
- };
- var tokenHandler = new JwtSecurityTokenHandler();
- var token = tokenHandler.CreateToken(tokenDescriptor);
- return tokenHandler.WriteToken(token);
- }
+ var tokenDescriptor = new SecurityTokenDescriptor
+ {
+ Issuer = JwtParams.Issuer,
+ Audience = JwtParams.Audience,
+ Subject = new ClaimsIdentity(claims),
+ Expires = DateTime.UtcNow.AddHours(1),
+ SigningCredentials = new SigningCredentials(JwtParams.SecurityKey, SecurityAlgorithms.HmacSha256Signature)
+ };
+ var tokenHandler = new JwtSecurityTokenHandler();
+ var token = tokenHandler.CreateToken(tokenDescriptor);
+ return tokenHandler.WriteToken(token);
+ }
- private static string CreateKeyCloakJwtToken(this AuthUser authUser, string keycloakGetTokenUrl)
- {
- var restClient = new RestClient();
+ private static string CreateKeyCloakJwtToken(this AuthUser authUser, string keycloakGetTokenUrl)
+ {
+ var restClient = new RestClient();
- var request = new RestRequest(keycloakGetTokenUrl, Method.Post);
- request.AddParameter("username", authUser.Username);
- request.AddParameter("password", authUser.Password);
- request.AddParameter("client_id", authUser.ClientId);
- request.AddParameter("grant_type", authUser.GrantType);
+ var request = new RestRequest(keycloakGetTokenUrl, Method.Post);
+ request.AddParameter("username", authUser.Username);
+ request.AddParameter("password", authUser.Password);
+ request.AddParameter("client_id", authUser.ClientId);
+ request.AddParameter("grant_type", authUser.GrantType);
- var keyCloackResponse = restClient.Post(request);
- if (keyCloackResponse.IsSuccessful && !String.IsNullOrEmpty(keyCloackResponse.Content))
- {
- var token = JsonSerializer.Deserialize(keyCloackResponse.Content)!;
- return token.AccessToken;
- }
+ var keycloakResponse = restClient.Post(request);
+ if (keycloakResponse.IsSuccessful && !String.IsNullOrEmpty(keycloakResponse.Content))
+ {
+ var token = JsonSerializer.Deserialize(keycloakResponse.Content)!;
+ return token.AccessToken;
+ }
- return String.Empty;
- }
+ return String.Empty;
+ }
}
diff --git a/Persistence.Client/Persistence.Client.csproj b/Persistence.Client/Persistence.Client.csproj
index b764e7a..7d81fc3 100644
--- a/Persistence.Client/Persistence.Client.csproj
+++ b/Persistence.Client/Persistence.Client.csproj
@@ -1,4 +1,4 @@
-
+
net8.0
@@ -38,6 +38,11 @@
Readme.md
+
+ 1.0.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH))
+ 1.0.$([System.DateTime]::UtcNow.ToString(yyMM.ddHH))
+
+
diff --git a/Persistence.Client/PersistenceClientFactory.cs b/Persistence.Client/PersistenceClientFactory.cs
index c77ac04..31b6fd9 100644
--- a/Persistence.Client/PersistenceClientFactory.cs
+++ b/Persistence.Client/PersistenceClientFactory.cs
@@ -1,4 +1,3 @@
-using System.Text.Json;
using Microsoft.Extensions.Configuration;
using Persistence.Client.Clients.Interfaces;
using Persistence.Client.Clients;
@@ -8,6 +7,7 @@ using Persistence.Factories;
using Persistence.Client.Clients.Interfaces.Refit;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
+using System.Text.Json;
namespace Persistence.Client
{
diff --git a/Persistence.Database.Postgres/DependencyInjection.cs b/Persistence.Database.Postgres/DependencyInjection.cs
index b308629..e775952 100644
--- a/Persistence.Database.Postgres/DependencyInjection.cs
+++ b/Persistence.Database.Postgres/DependencyInjection.cs
@@ -1,7 +1,6 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
-using Npgsql;
namespace Persistence.Database.Model;
diff --git a/Persistence.Database.Postgres/DesignTimeDbContextFactory.cs b/Persistence.Database.Postgres/DesignTimeDbContextFactory.cs
index 2123efd..b4fbd85 100644
--- a/Persistence.Database.Postgres/DesignTimeDbContextFactory.cs
+++ b/Persistence.Database.Postgres/DesignTimeDbContextFactory.cs
@@ -12,12 +12,14 @@ public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory();
diff --git a/Persistence.Database.Postgres/EFExtensionsInitialization.cs b/Persistence.Database.Postgres/EFExtensionsInitialization.cs
index 99d3f5d..a876f7a 100644
--- a/Persistence.Database.Postgres/EFExtensionsInitialization.cs
+++ b/Persistence.Database.Postgres/EFExtensionsInitialization.cs
@@ -1,11 +1,6 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
-using System;
-using System.Collections.Generic;
using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace Persistence.Database.Postgres;
public static class EFExtensionsInitialization
diff --git a/Persistence.Database.Postgres/Migrations/20241118052225_SetpointMigration.cs b/Persistence.Database.Postgres/Migrations/20241118052225_SetpointMigration.cs
index ea6fccf..fac75d8 100644
--- a/Persistence.Database.Postgres/Migrations/20241118052225_SetpointMigration.cs
+++ b/Persistence.Database.Postgres/Migrations/20241118052225_SetpointMigration.cs
@@ -1,5 +1,4 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
diff --git a/Persistence.Database.Postgres/Migrations/20241126071115_Add_ChangeLog.cs b/Persistence.Database.Postgres/Migrations/20241126071115_Add_ChangeLog.cs
index 0802b00..4750bc3 100644
--- a/Persistence.Database.Postgres/Migrations/20241126071115_Add_ChangeLog.cs
+++ b/Persistence.Database.Postgres/Migrations/20241126071115_Add_ChangeLog.cs
@@ -1,6 +1,4 @@
-using System;
-using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
diff --git a/Persistence.Database.Postgres/Migrations/20241126100631_Init.cs b/Persistence.Database.Postgres/Migrations/20241126100631_Init.cs
index ceca42c..74a549e 100644
--- a/Persistence.Database.Postgres/Migrations/20241126100631_Init.cs
+++ b/Persistence.Database.Postgres/Migrations/20241126100631_Init.cs
@@ -1,5 +1,4 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
diff --git a/Persistence.Database.Postgres/Migrations/20241203120141_ParameterDataMigration.cs b/Persistence.Database.Postgres/Migrations/20241203120141_ParameterDataMigration.cs
index 7e9bde6..8d44be9 100644
--- a/Persistence.Database.Postgres/Migrations/20241203120141_ParameterDataMigration.cs
+++ b/Persistence.Database.Postgres/Migrations/20241203120141_ParameterDataMigration.cs
@@ -1,5 +1,4 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
diff --git a/Persistence.Database.Postgres/Migrations/20241212041758_TechMessageMigration.cs b/Persistence.Database.Postgres/Migrations/20241212041758_TechMessageMigration.cs
index 2ee7a55..c6806a4 100644
--- a/Persistence.Database.Postgres/Migrations/20241212041758_TechMessageMigration.cs
+++ b/Persistence.Database.Postgres/Migrations/20241212041758_TechMessageMigration.cs
@@ -1,5 +1,4 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
diff --git a/Persistence.Database.Postgres/PersistencePostgresContext.cs b/Persistence.Database.Postgres/PersistencePostgresContext.cs
index 862b247..6016a1d 100644
--- a/Persistence.Database.Postgres/PersistencePostgresContext.cs
+++ b/Persistence.Database.Postgres/PersistencePostgresContext.cs
@@ -1,5 +1,4 @@
using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure.Internal;
namespace Persistence.Database.Model;
@@ -10,7 +9,7 @@ public partial class PersistencePostgresContext : PersistenceDbContext
{
public PersistencePostgresContext(DbContextOptions options)
: base(options)
- {}
+ { }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
diff --git a/Persistence.Database/EFExtensions.cs b/Persistence.Database/EFExtensions.cs
index d60d768..decdb39 100644
--- a/Persistence.Database/EFExtensions.cs
+++ b/Persistence.Database/EFExtensions.cs
@@ -1,6 +1,6 @@
using Microsoft.EntityFrameworkCore.ChangeTracking;
-using System.Text.Json.Serialization;
using System.Text.Json;
+using System.Text.Json.Serialization;
namespace Persistence.Database;
diff --git a/Persistence.Database/Entity/ChangeLog.cs b/Persistence.Database/Entity/ChangeLog.cs
index 9a8001b..edffb52 100644
--- a/Persistence.Database/Entity/ChangeLog.cs
+++ b/Persistence.Database/Entity/ChangeLog.cs
@@ -1,8 +1,8 @@
-using System.ComponentModel.DataAnnotations.Schema;
-using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;
using Persistence.Models;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
namespace Persistence.Database.Model;
diff --git a/Persistence.Database/Entity/DataSaub.cs b/Persistence.Database/Entity/DataSaub.cs
index fecda5a..ee18d40 100644
--- a/Persistence.Database/Entity/DataSaub.cs
+++ b/Persistence.Database/Entity/DataSaub.cs
@@ -1,5 +1,4 @@
-using Microsoft.EntityFrameworkCore;
-using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Persistence.Database.Model;
diff --git a/Persistence.Database/Entity/DrillingSystem.cs b/Persistence.Database/Entity/DrillingSystem.cs
index 6588fb0..dc52ce7 100644
--- a/Persistence.Database/Entity/DrillingSystem.cs
+++ b/Persistence.Database/Entity/DrillingSystem.cs
@@ -1,16 +1,16 @@
-using System.ComponentModel.DataAnnotations;
+using Microsoft.EntityFrameworkCore;
+using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace Persistence.Database.Entity;
public class DrillingSystem
{
- [Key, Comment("Id системы автобурения")]
- public Guid SystemId { get; set; }
+ [Key, Comment("Id системы автобурения")]
+ public Guid SystemId { get; set; }
- [Required, Column(TypeName = "varchar(256)"), Comment("Наименование системы автобурения")]
- public required string Name { get; set; }
+ [Required, Column(TypeName = "varchar(256)"), Comment("Наименование системы автобурения")]
+ public required string Name { get; set; }
- [Comment("Описание системы автобурения")]
- public string? Description { get; set; }
+ [Comment("Описание системы автобурения")]
+ public string? Description { get; set; }
}
diff --git a/Persistence.Database/Entity/ParameterData.cs b/Persistence.Database/Entity/ParameterData.cs
index f8257de..eb4fa4c 100644
--- a/Persistence.Database/Entity/ParameterData.cs
+++ b/Persistence.Database/Entity/ParameterData.cs
@@ -1,21 +1,21 @@
-using System.ComponentModel.DataAnnotations;
+using Microsoft.EntityFrameworkCore;
+using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
namespace Persistence.Database.Entity;
[PrimaryKey(nameof(DiscriminatorId), nameof(ParameterId), nameof(Timestamp))]
public class ParameterData
{
- [Required, Comment("Дискриминатор системы")]
- public Guid DiscriminatorId { get; set; }
+ [Required, Comment("Дискриминатор системы")]
+ public Guid DiscriminatorId { get; set; }
- [Comment("Id параметра")]
- public int ParameterId { get; set; }
+ [Comment("Id параметра")]
+ public int ParameterId { get; set; }
- [Column(TypeName = "varchar(256)"), Comment("Значение параметра в виде строки")]
- public required string Value { get; set; }
+ [Column(TypeName = "varchar(256)"), Comment("Значение параметра в виде строки")]
+ public required string Value { get; set; }
- [Comment("Временная отметка")]
- public DateTimeOffset Timestamp { get; set; }
+ [Comment("Временная отметка")]
+ public DateTimeOffset Timestamp { get; set; }
}
diff --git a/Persistence.Database/Entity/Setpoint.cs b/Persistence.Database/Entity/Setpoint.cs
index 6ca2c27..968bdd7 100644
--- a/Persistence.Database/Entity/Setpoint.cs
+++ b/Persistence.Database/Entity/Setpoint.cs
@@ -1,21 +1,21 @@
-using System.ComponentModel.DataAnnotations.Schema;
-using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
+using System.ComponentModel.DataAnnotations.Schema;
namespace Persistence.Database.Model
{
- [PrimaryKey(nameof(Key), nameof(Created))]
- public class Setpoint
- {
- [Comment("Ключ")]
- public Guid Key { get; set; }
+ [PrimaryKey(nameof(Key), nameof(Created))]
+ public class Setpoint
+ {
+ [Comment("Ключ")]
+ public Guid Key { get; set; }
- [Column(TypeName = "jsonb"), Comment("Значение уставки")]
- public required object Value { get; set; }
+ [Column(TypeName = "jsonb"), Comment("Значение уставки")]
+ public required object Value { get; set; }
- [Comment("Дата создания уставки")]
- public DateTimeOffset Created { get; set; }
+ [Comment("Дата создания уставки")]
+ public DateTimeOffset Created { get; set; }
- [Comment("Id автора последнего изменения")]
- public Guid IdUser { get; set; }
- }
+ [Comment("Id автора последнего изменения")]
+ public Guid IdUser { get; set; }
+ }
}
diff --git a/Persistence.Database/Entity/TechMessage.cs b/Persistence.Database/Entity/TechMessage.cs
index 5c8b534..e94d141 100644
--- a/Persistence.Database/Entity/TechMessage.cs
+++ b/Persistence.Database/Entity/TechMessage.cs
@@ -1,19 +1,19 @@
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
namespace Persistence.Database.Entity
{
- public class TechMessage
- {
- [Key, Comment("Id события")]
- public Guid EventId { get; set; }
+ public class TechMessage
+ {
+ [Key, Comment("Id события")]
+ public Guid EventId { get; set; }
- [Comment("Id Категории важности")]
- public int CategoryId { get; set; }
+ [Comment("Id Категории важности")]
+ public int CategoryId { get; set; }
- [Comment("Дата возникновения")]
- public DateTimeOffset Timestamp { get; set; }
+ [Comment("Дата возникновения")]
+ public DateTimeOffset Timestamp { get; set; }
[Column(TypeName = "varchar(512)"), Comment("Текст сообщения")]
public required string Text { get; set; }
@@ -21,8 +21,8 @@ namespace Persistence.Database.Entity
[Required, Comment("Id системы, к которой относится сообщение")]
public required Guid SystemId { get; set; }
- [Required, ForeignKey(nameof(SystemId)), Comment("Система автобурения, к которой относится сообщение")]
- public virtual required DrillingSystem System { get; set; }
+ [Required, ForeignKey(nameof(SystemId)), Comment("Система автобурения, к которой относится сообщение")]
+ public virtual required DrillingSystem System { get; set; }
[Comment("Статус события")]
public int EventState { get; set; }
diff --git a/Persistence.Database/Entity/TimestampedSet.cs b/Persistence.Database/Entity/TimestampedSet.cs
index c9a0dda..09a50ee 100644
--- a/Persistence.Database/Entity/TimestampedSet.cs
+++ b/Persistence.Database/Entity/TimestampedSet.cs
@@ -6,6 +6,6 @@ namespace Persistence.Database.Entity;
[Comment("Общая таблица данных временных рядов")]
[PrimaryKey(nameof(IdDiscriminator), nameof(Timestamp))]
public record TimestampedSet(
- [property: Comment("Дискриминатор ссылка на тип сохраняемых данных")] Guid IdDiscriminator,
- [property: Comment("Отметка времени, строго в UTC")] DateTimeOffset Timestamp,
+ [property: Comment("Дискриминатор ссылка на тип сохраняемых данных")] Guid IdDiscriminator,
+ [property: Comment("Отметка времени, строго в UTC")] DateTimeOffset Timestamp,
[property: Column(TypeName = "jsonb"), Comment("Набор сохраняемых данных")] IDictionary Set);
diff --git a/Persistence.Database/PersistenceDbContext.cs b/Persistence.Database/PersistenceDbContext.cs
index 849865d..a61ea31 100644
--- a/Persistence.Database/PersistenceDbContext.cs
+++ b/Persistence.Database/PersistenceDbContext.cs
@@ -17,11 +17,11 @@ public class PersistenceDbContext : DbContext
public DbSet ChangeLog => Set();
- public DbSet TechMessage => Set();
+ public DbSet TechMessage => Set();
- public DbSet ParameterData => Set();
+ public DbSet ParameterData => Set();
- public PersistenceDbContext(DbContextOptions options)
+ public PersistenceDbContext(DbContextOptions options)
: base(options)
{
diff --git a/Persistence.IntegrationTests/BaseIntegrationTest.cs b/Persistence.IntegrationTests/BaseIntegrationTest.cs
index 0f1152d..9cc68ab 100644
--- a/Persistence.IntegrationTests/BaseIntegrationTest.cs
+++ b/Persistence.IntegrationTests/BaseIntegrationTest.cs
@@ -1,12 +1,10 @@
-using Microsoft.EntityFrameworkCore;
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection;
using Persistence.Database;
using Persistence.Database.Model;
using Xunit;
namespace Persistence.IntegrationTests;
-public abstract class BaseIntegrationTest : IClassFixture,
- IDisposable
+public abstract class BaseIntegrationTest : IClassFixture, IDisposable
{
protected readonly IServiceScope scope;
@@ -23,5 +21,6 @@ public abstract class BaseIntegrationTest : IClassFixture,
{
scope.Dispose();
dbContext.Dispose();
+ GC.SuppressFinalize(this);
}
}
diff --git a/Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs b/Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs
index 6513e7c..51edebd 100644
--- a/Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs
+++ b/Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs
@@ -13,7 +13,7 @@ namespace Persistence.IntegrationTests.Controllers;
public class ChangeLogControllerTest : BaseIntegrationTest
{
private readonly IChangeLogClient client;
- private static Random generatorRandomDigits = new Random();
+ private static readonly Random generatorRandomDigits = new();
public ChangeLogControllerTest(WebAppFactoryFixture factory) : base(factory)
{
@@ -26,11 +26,11 @@ public class ChangeLogControllerTest : BaseIntegrationTest
[Fact]
public async Task ClearAndInsertRange_InEmptyDb()
{
- // arrange
- dbContext.CleanupDbSet();
+ // arrange
+ dbContext.CleanupDbSet();
- var idDiscriminator = Guid.NewGuid();
- var dtos = Generate(2, DateTimeOffset.UtcNow);
+ var idDiscriminator = Guid.NewGuid();
+ var dtos = Generate(2);
// act
var result = await client.ClearAndAddRange(idDiscriminator, dtos, new CancellationToken());
@@ -61,7 +61,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest
// arrange
var count = 1;
var idDiscriminator = Guid.NewGuid();
- var dtos = Generate(count, DateTimeOffset.UtcNow);
+ var dtos = Generate(count);
var dto = dtos.FirstOrDefault()!;
// act
@@ -77,7 +77,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest
// arrange
var count = 3;
var idDiscriminator = Guid.NewGuid();
- var dtos = Generate(count, DateTimeOffset.UtcNow);
+ var dtos = Generate(count);
// act
var result = await client.AddRange(idDiscriminator, dtos, new CancellationToken());
@@ -89,11 +89,11 @@ public class ChangeLogControllerTest : BaseIntegrationTest
[Fact]
public async Task Update_returns_success()
{
- // arrange
- dbContext.CleanupDbSet();
+ // arrange
+ dbContext.CleanupDbSet();
- var idDiscriminator = Guid.NewGuid();
- var dtos = Generate(1, DateTimeOffset.UtcNow);
+ var idDiscriminator = Guid.NewGuid();
+ var dtos = Generate(1);
var dto = dtos.FirstOrDefault()!;
var result = await client.Add(idDiscriminator, dto, new CancellationToken());
@@ -101,7 +101,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest
.Where(x => x.IdDiscriminator == idDiscriminator)
.FirstOrDefault();
dto = entity.Adapt();
- dto.DepthEnd = dto.DepthEnd + 10;
+ dto.DepthEnd += 10;
// act
result = await client.Update(dto, new CancellationToken());
@@ -138,7 +138,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest
{
// arrange
var count = 2;
- var dtos = Generate(count, DateTimeOffset.UtcNow);
+ var dtos = Generate(count);
var entities = dtos.Select(d => d.Adapt()).ToArray();
dbContext.ChangeLog.AddRange(entities);
dbContext.SaveChanges();
@@ -163,7 +163,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest
public async Task Delete_returns_success()
{
// arrange
- var dtos = Generate(1, DateTimeOffset.UtcNow);
+ var dtos = Generate(1);
var dto = dtos.FirstOrDefault()!;
var entity = dto.Adapt();
dbContext.ChangeLog.Add(entity);
@@ -181,7 +181,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest
{
// arrange
var count = 10;
- var dtos = Generate(count, DateTimeOffset.UtcNow);
+ var dtos = Generate(count);
var entities = dtos.Select(d => d.Adapt()).ToArray();
dbContext.ChangeLog.AddRange(entities);
dbContext.SaveChanges();
@@ -223,11 +223,11 @@ public class ChangeLogControllerTest : BaseIntegrationTest
[Fact]
public async Task GetByDate_returns_success()
{
- // arrange
- dbContext.CleanupDbSet();
+ // arrange
+ dbContext.CleanupDbSet();
- //создаем записи
- var count = 5;
+ //создаем записи
+ var count = 5;
var changeLogItems = CreateChangeLogItems(count, (-15, 15));
var idDiscriminator = changeLogItems.Item1;
var entities = changeLogItems.Item2;
@@ -241,8 +241,8 @@ public class ChangeLogControllerTest : BaseIntegrationTest
var filterRequest = new SectionPartRequest()
{
- DepthStart = 0,
- DepthEnd = 1000,
+ DepthStart = 0,
+ DepthEnd = 1000,
};
var paginationRequest = new PaginationRequest()
@@ -276,11 +276,11 @@ public class ChangeLogControllerTest : BaseIntegrationTest
int daysAfterNowFilter,
int changeLogCount)
{
- // arrange
- dbContext.CleanupDbSet();
+ // arrange
+ dbContext.CleanupDbSet();
- //создаем записи
- var count = insertedCount;
+ //создаем записи
+ var count = insertedCount;
var daysRange = (daysBeforeNowChangeLog, daysAfterNowChangeLog);
var changeLogItems = CreateChangeLogItems(count, daysRange);
var idDiscriminator = changeLogItems.Item1;
@@ -288,7 +288,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest
foreach (var entity in entities)
{
- entity.DepthEnd = entity.DepthEnd + 10;
+ entity.DepthEnd += 10;
}
var dtos = entities.Select(e => e.Adapt()).ToArray();
await client.UpdateRange(dtos, new CancellationToken());
@@ -304,7 +304,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest
}
- private static IEnumerable Generate(int count, DateTimeOffset from)
+ private static IEnumerable Generate(int count)
{
for (int i = 0; i < count; i++)
yield return new DataWithWellDepthAndSectionDto()
@@ -326,8 +326,8 @@ public class ChangeLogControllerTest : BaseIntegrationTest
var minDayCount = daysRange.Item1;
var maxDayCount = daysRange.Item2;
- var idDiscriminator = Guid.NewGuid();
- var dtos = Generate(count, DateTimeOffset.UtcNow);
+ Guid idDiscriminator = Guid.NewGuid();
+ var dtos = Generate(count);
var entities = dtos.Select(d =>
{
var entity = d.Adapt();
diff --git a/Persistence.IntegrationTests/Controllers/DataSaubControllerTest.cs b/Persistence.IntegrationTests/Controllers/DataSaubControllerTest.cs
index 9febbb5..49365a8 100644
--- a/Persistence.IntegrationTests/Controllers/DataSaubControllerTest.cs
+++ b/Persistence.IntegrationTests/Controllers/DataSaubControllerTest.cs
@@ -1,12 +1,11 @@
-using Persistence.Client;
-using Persistence.Database.Model;
-using Persistence.Repository.Data;
+using Persistence.Database.Model;
+using Persistence.Models;
using Xunit;
namespace Persistence.IntegrationTests.Controllers;
public class DataSaubControllerTest : TimeSeriesBaseControllerTest
{
- private readonly DataSaubDto dto = new DataSaubDto()
+ private readonly DataSaubDto dto = new()
{
AxialLoad = 1,
BitDepth = 2,
@@ -29,7 +28,7 @@ public class DataSaubControllerTest : TimeSeriesBaseControllerTest();
+ public class SetpointControllerTest : BaseIntegrationTest
+ {
+ private readonly ISetpointClient setpointClient;
+ private class TestObject
+ {
+ public string? Value1 { get; set; }
+ public int? Value2 { get; set; }
+ }
+ public SetpointControllerTest(WebAppFactoryFixture factory) : base(factory)
+ {
+ var scope = factory.Services.CreateScope();
+ var persistenceClientFactory = scope.ServiceProvider
+ .GetRequiredService();
setpointClient = persistenceClientFactory.GetSetpointClient();
}
- [Fact]
- public async Task GetCurrent_returns_success()
- {
- //arrange
- var setpointKeys = new List()
- {
- Guid.NewGuid(),
- Guid.NewGuid()
- };
+ [Fact]
+ public async Task GetCurrent_returns_success()
+ {
+ //arrange
+ var setpointKeys = new List()
+ {
+ Guid.NewGuid(),
+ Guid.NewGuid()
+ };
//act
var response = await setpointClient.GetCurrent(setpointKeys, new CancellationToken());
@@ -41,11 +42,11 @@ namespace Persistence.IntegrationTests.Controllers
Assert.Empty(response);
}
- [Fact]
- public async Task GetCurrent_AfterSave_returns_success()
- {
- //arrange
- var setpointKey = await Add();
+ [Fact]
+ public async Task GetCurrent_AfterSave_returns_success()
+ {
+ //arrange
+ var setpointKey = await Add();
//act
var response = await setpointClient.GetCurrent([setpointKey], new CancellationToken());
@@ -56,16 +57,16 @@ namespace Persistence.IntegrationTests.Controllers
Assert.Equal(setpointKey, response.FirstOrDefault()?.Key);
}
- [Fact]
- public async Task GetHistory_returns_success()
- {
- //arrange
- var setpointKeys = new List()
- {
- Guid.NewGuid(),
- Guid.NewGuid()
- };
- var historyMoment = DateTimeOffset.UtcNow;
+ [Fact]
+ public async Task GetHistory_returns_success()
+ {
+ //arrange
+ var setpointKeys = new List()
+ {
+ Guid.NewGuid(),
+ Guid.NewGuid()
+ };
+ var historyMoment = DateTimeOffset.UtcNow;
//act
var response = await setpointClient.GetHistory(setpointKeys, historyMoment, new CancellationToken());
@@ -75,13 +76,13 @@ namespace Persistence.IntegrationTests.Controllers
Assert.Empty(response);
}
- [Fact]
- public async Task GetHistory_AfterSave_returns_success()
- {
- //arrange
- var setpointKey = await Add();
- var historyMoment = DateTimeOffset.UtcNow;
- historyMoment = historyMoment.AddDays(1);
+ [Fact]
+ public async Task GetHistory_AfterSave_returns_success()
+ {
+ //arrange
+ var setpointKey = await Add();
+ var historyMoment = DateTimeOffset.UtcNow;
+ historyMoment = historyMoment.AddDays(1);
//act
var response = await setpointClient.GetHistory([setpointKey], historyMoment, new CancellationToken());
@@ -92,15 +93,15 @@ namespace Persistence.IntegrationTests.Controllers
Assert.Equal(setpointKey, response.FirstOrDefault()?.Key);
}
- [Fact]
- public async Task GetLog_returns_success()
- {
- //arrange
- var setpointKeys = new List()
- {
- Guid.NewGuid(),
- Guid.NewGuid()
- };
+ [Fact]
+ public async Task GetLog_returns_success()
+ {
+ //arrange
+ var setpointKeys = new List()
+ {
+ Guid.NewGuid(),
+ Guid.NewGuid()
+ };
//act
var response = await setpointClient.GetLog(setpointKeys, new CancellationToken());
@@ -110,11 +111,11 @@ namespace Persistence.IntegrationTests.Controllers
Assert.Empty(response);
}
- [Fact]
- public async Task GetLog_AfterSave_returns_success()
- {
- //arrange
- var setpointKey = await Add();
+ [Fact]
+ public async Task GetLog_AfterSave_returns_success()
+ {
+ //arrange
+ var setpointKey = await Add();
//act
var response = await setpointClient.GetLog([setpointKey], new CancellationToken());
@@ -125,11 +126,11 @@ namespace Persistence.IntegrationTests.Controllers
Assert.Equal(setpointKey, response.FirstOrDefault().Key);
}
- [Fact]
- public async Task GetDatesRange_returns_success()
- {
- //arrange
- dbContext.CleanupDbSet();
+ [Fact]
+ public async Task GetDatesRange_returns_success()
+ {
+ //arrange
+ dbContext.CleanupDbSet();
//act
var response = await setpointClient.GetDatesRangeAsync(CancellationToken.None);
@@ -140,13 +141,13 @@ namespace Persistence.IntegrationTests.Controllers
Assert.Equal(DateTimeOffset.MaxValue, response!.To);
}
- [Fact]
- public async Task GetDatesRange_AfterSave_returns_success()
- {
- //arrange
- dbContext.CleanupDbSet();
-
- await Add();
+ [Fact]
+ public async Task GetDatesRange_AfterSave_returns_success()
+ {
+ //arrange
+ dbContext.CleanupDbSet();
+
+ await Add();
var dateBegin = DateTimeOffset.MinValue;
var take = 1;
@@ -170,12 +171,12 @@ namespace Persistence.IntegrationTests.Controllers
Assert.Equal(expectedValue, actualValueTo);
}
- [Fact]
- public async Task GetPart_returns_success()
- {
- //arrange
- var dateBegin = DateTimeOffset.UtcNow;
- var take = 2;
+ [Fact]
+ public async Task GetPart_returns_success()
+ {
+ //arrange
+ var dateBegin = DateTimeOffset.UtcNow;
+ var take = 2;
//act
var response = await setpointClient.GetPart(dateBegin, take, CancellationToken.None);
@@ -185,13 +186,13 @@ namespace Persistence.IntegrationTests.Controllers
Assert.Empty(response);
}
- [Fact]
- public async Task GetPart_AfterSave_returns_success()
- {
- //arrange
- var dateBegin = DateTimeOffset.UtcNow;
- var take = 1;
- await Add();
+ [Fact]
+ public async Task GetPart_AfterSave_returns_success()
+ {
+ //arrange
+ var dateBegin = DateTimeOffset.UtcNow;
+ var take = 1;
+ await Add();
//act
var response = await setpointClient.GetPart(dateBegin, take, CancellationToken.None);
@@ -201,21 +202,21 @@ namespace Persistence.IntegrationTests.Controllers
Assert.NotEmpty(response);
}
- [Fact]
- public async Task Save_returns_success()
- {
- await Add();
- }
+ [Fact]
+ public async Task Save_returns_success()
+ {
+ await Add();
+ }
- private async Task Add()
- {
- //arrange
- var setpointKey = Guid.NewGuid();
- var setpointValue = new TestObject()
- {
- value1 = "1",
- value2 = 2
- };
+ private async Task Add()
+ {
+ //arrange
+ var setpointKey = Guid.NewGuid();
+ var setpointValue = new TestObject()
+ {
+ Value1 = "1",
+ Value2 = 2
+ };
//act
await setpointClient.Add(setpointKey, setpointValue, new CancellationToken());
diff --git a/Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs b/Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs
index 6ad95b3..97c0621 100644
--- a/Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs
+++ b/Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs
@@ -6,42 +6,43 @@ using Persistence.Database.Entity;
using Persistence.Models;
using Persistence.Models.Enumerations;
using Persistence.Models.Requests;
+using System.Net;
using Xunit;
namespace Persistence.IntegrationTests.Controllers
{
- public class TechMessagesControllerTest : BaseIntegrationTest
- {
- private static readonly string SystemCacheKey = $"{typeof(Database.Entity.DrillingSystem).FullName}CacheKey";
- private readonly ITechMessagesClient techMessagesClient;
- private readonly IMemoryCache memoryCache;
- public TechMessagesControllerTest(WebAppFactoryFixture factory) : base(factory)
- {
- var scope = factory.Services.CreateScope();
- var persistenceClientFactory = scope.ServiceProvider
- .GetRequiredService();
+ public class TechMessagesControllerTest : BaseIntegrationTest
+ {
+ private static readonly string SystemCacheKey = $"{typeof(Database.Entity.DrillingSystem).FullName}CacheKey";
+ private readonly ITechMessagesClient techMessagesClient;
+ private readonly IMemoryCache memoryCache;
+ public TechMessagesControllerTest(WebAppFactoryFixture factory) : base(factory)
+ {
+ var scope = factory.Services.CreateScope();
+ var persistenceClientFactory = scope.ServiceProvider
+ .GetRequiredService();
techMessagesClient = persistenceClientFactory.GetTechMessagesClient();
memoryCache = scope.ServiceProvider.GetRequiredService();
}
- [Fact]
- public async Task GetPage_returns_success()
- {
- //arrange
- memoryCache.Remove(SystemCacheKey);
- dbContext.CleanupDbSet();
- dbContext.CleanupDbSet();
+ [Fact]
+ public async Task GetPage_returns_success()
+ {
+ //arrange
+ memoryCache.Remove(SystemCacheKey);
+ dbContext.CleanupDbSet();
+ dbContext.CleanupDbSet();
- var requestDto = new PaginationRequest()
- {
- Skip = 1,
- Take = 2,
- SortSettings = nameof(TechMessage.CategoryId)
- };
+ var requestDto = new PaginationRequest()
+ {
+ Skip = 1,
+ Take = 2,
+ SortSettings = nameof(TechMessage.CategoryId)
+ };
- //act
- var response = await techMessagesClient.GetPage(requestDto, CancellationToken.None);
+ //act
+ var response = await techMessagesClient.GetPage(requestDto, CancellationToken.None);
//assert
Assert.NotNull(response);
@@ -63,8 +64,8 @@ namespace Persistence.IntegrationTests.Controllers
SortSettings = nameof(TechMessage.CategoryId)
};
- //act
- var response = await techMessagesClient.GetPage(requestDto, CancellationToken.None);
+ //act
+ var response = await techMessagesClient.GetPage(requestDto, CancellationToken.None);
//assert
Assert.NotNull(response);
@@ -107,16 +108,16 @@ namespace Persistence.IntegrationTests.Controllers
}
}
- [Fact]
- public async Task GetSystems_returns_success()
- {
- //arrange
- memoryCache.Remove(SystemCacheKey);
- dbContext.CleanupDbSet();
- dbContext.CleanupDbSet();
+ [Fact]
+ public async Task GetSystems_returns_success()
+ {
+ //arrange
+ memoryCache.Remove(SystemCacheKey);
+ dbContext.CleanupDbSet();
+ dbContext.CleanupDbSet();
- //act
- var response = await techMessagesClient.GetSystems(CancellationToken.None);
+ //act
+ var response = await techMessagesClient.GetSystems(CancellationToken.None);
//assert
Assert.NotNull(response);
@@ -129,8 +130,8 @@ namespace Persistence.IntegrationTests.Controllers
//arrange
var dtos = await InsertRange(Guid.NewGuid());
- //act
- var response = await techMessagesClient.GetSystems(CancellationToken.None);
+ //act
+ var response = await techMessagesClient.GetSystems(CancellationToken.None);
//assert
Assert.NotNull(response);
@@ -138,13 +139,13 @@ namespace Persistence.IntegrationTests.Controllers
Assert.Equal(expectedSystemCount, response!.Count());
}
- [Fact]
- public async Task GetStatistics_returns_success()
- {
- //arrange
- memoryCache.Remove(SystemCacheKey);
- dbContext.CleanupDbSet();
- dbContext.CleanupDbSet();
+ [Fact]
+ public async Task GetStatistics_returns_success()
+ {
+ //arrange
+ memoryCache.Remove(SystemCacheKey);
+ dbContext.CleanupDbSet();
+ dbContext.CleanupDbSet();
var imortantIds = new [] { 1 };
var systemIds = new [] { Guid.NewGuid() };
@@ -201,8 +202,8 @@ namespace Persistence.IntegrationTests.Controllers
//arrange
await InsertRange(Guid.NewGuid());
- //act
- var response = await techMessagesClient.GetDatesRangeAsync(CancellationToken.None);
+ //act
+ var response = await techMessagesClient.GetDatesRangeAsync(CancellationToken.None);
//assert
Assert.NotNull(response);
@@ -210,15 +211,15 @@ namespace Persistence.IntegrationTests.Controllers
Assert.NotNull(response?.To);
}
- [Fact]
- public async Task GetPart_returns_success()
- {
- //arrange
- var dateBegin = DateTimeOffset.UtcNow;
- var take = 2;
+ [Fact]
+ public async Task GetPart_returns_success()
+ {
+ //arrange
+ var dateBegin = DateTimeOffset.UtcNow;
+ var take = 2;
- //act
- var response = await techMessagesClient.GetPart(dateBegin, take, CancellationToken.None);
+ //act
+ var response = await techMessagesClient.GetPart(dateBegin, take, CancellationToken.None);
//assert
Assert.NotNull(response);
@@ -233,8 +234,8 @@ namespace Persistence.IntegrationTests.Controllers
var take = 1;
await InsertRange(Guid.NewGuid());
- //act
- var response = await techMessagesClient.GetPart(dateBegin, take, CancellationToken.None);
+ //act
+ var response = await techMessagesClient.GetPart(dateBegin, take, CancellationToken.None);
//assert
Assert.NotNull(response);
@@ -275,7 +276,7 @@ namespace Persistence.IntegrationTests.Controllers
//assert
Assert.Equal(dtos.Count, response);
- return dtos;
- }
- }
+ return dtos;
+ }
+ }
}
diff --git a/Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs b/Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs
index ca9536f..ef43a10 100644
--- a/Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs
+++ b/Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs
@@ -1,25 +1,26 @@
-using System.Net;
using Mapster;
using Microsoft.Extensions.DependencyInjection;
using Persistence.Client;
using Persistence.Client.Clients.Interfaces;
using Persistence.Database.Model;
+using System.Net;
using Xunit;
namespace Persistence.IntegrationTests.Controllers;
+
public abstract class TimeSeriesBaseControllerTest : BaseIntegrationTest
where TEntity : class, ITimestampedData, new()
where TDto : class, new()
{
- private ITimeSeriesClient timeSeriesClient;
+ private readonly ITimeSeriesClient timeSeriesClient;
public TimeSeriesBaseControllerTest(WebAppFactoryFixture factory) : base(factory)
{
dbContext.CleanupDbSet();
- var scope = factory.Services.CreateScope();
- var persistenceClientFactory = scope.ServiceProvider
- .GetRequiredService();
+ var scope = factory.Services.CreateScope();
+ var persistenceClientFactory = scope.ServiceProvider
+ .GetRequiredService();
timeSeriesClient = persistenceClientFactory.GetTimeSeriesClient();
}
@@ -100,7 +101,7 @@ public abstract class TimeSeriesBaseControllerTest : BaseIntegrat
//assert
Assert.NotNull(response);
- var ratio = entities.Count() / approxPointsCount;
+ var ratio = entities.Count / approxPointsCount;
if (ratio > 1)
{
var expectedResampledCount = entities
diff --git a/Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs b/Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs
index 2d52a49..f3546f5 100644
--- a/Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs
+++ b/Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs
@@ -1,4 +1,4 @@
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection;
using Persistence.Client;
using Persistence.Client.Clients.Interfaces;
using Persistence.Models;
@@ -25,7 +25,7 @@ public class TimestampedSetControllerTest : BaseIntegrationTest
IEnumerable testSets = Generate(10, DateTimeOffset.Now.ToOffset(TimeSpan.FromHours(7)));
// act
- var response = await client.AddRange(idDiscriminator, testSets, new CancellationToken());
+ var response = await client.AddRange(idDiscriminator, testSets, CancellationToken.None);
// assert
Assert.Equal(testSets.Count(), response);
@@ -38,10 +38,10 @@ public class TimestampedSetControllerTest : BaseIntegrationTest
Guid idDiscriminator = Guid.NewGuid();
int count = 10;
IEnumerable testSets = Generate(count, DateTimeOffset.Now.ToOffset(TimeSpan.FromHours(7)));
- var insertResponse = await client.AddRange(idDiscriminator, testSets, new CancellationToken());
+ await client.AddRange(idDiscriminator, testSets, CancellationToken.None);
// act
- var response = await client.Get(idDiscriminator, null, null, 0, int.MaxValue, new CancellationToken());
+ var response = await client.Get(idDiscriminator, null, null, 0, int.MaxValue, CancellationToken.None);
// assert
Assert.NotNull(response);
@@ -55,7 +55,7 @@ public class TimestampedSetControllerTest : BaseIntegrationTest
Guid idDiscriminator = Guid.NewGuid();
int count = 10;
IEnumerable testSets = Generate(count, DateTimeOffset.Now.ToOffset(TimeSpan.FromHours(7)));
- var insertResponse = await client.AddRange(idDiscriminator, testSets, new CancellationToken());
+ await client.AddRange(idDiscriminator, testSets, CancellationToken.None);
string[] props = ["A"];
// act
@@ -64,13 +64,13 @@ public class TimestampedSetControllerTest : BaseIntegrationTest
// assert
Assert.NotNull(response);
Assert.Equal(count, response.Count());
- foreach ( var item in response )
- {
- Assert.Single(item.Set);
- var kv = item.Set.First();
- Assert.Equal("A", kv.Key);
- }
- }
+ foreach (var item in response)
+ {
+ Assert.Single(item.Set);
+ var kv = item.Set.First();
+ Assert.Equal("A", kv.Key);
+ }
+ }
[Fact]
public async Task Get_geDate()
@@ -80,15 +80,15 @@ public class TimestampedSetControllerTest : BaseIntegrationTest
int count = 10;
var dateMin = DateTimeOffset.Now;
var dateMax = DateTimeOffset.Now.AddSeconds(count);
- IEnumerable testSets = Generate(count, dateMin.ToOffset(TimeSpan.FromHours(7)));
- var insertResponse = await client.AddRange(idDiscriminator, testSets, new CancellationToken());
+ IEnumerable testSets = Generate(count, dateMin.ToOffset(TimeSpan.FromHours(7)));
+ var insertResponse = await client.AddRange(idDiscriminator, testSets, CancellationToken.None);
var tail = testSets.OrderBy(t => t.Timestamp).Skip(count / 2).Take(int.MaxValue);
var geDate = tail.First().Timestamp;
var tolerance = TimeSpan.FromSeconds(1);
var expectedCount = tail.Count();
// act
- var response = await client.Get(idDiscriminator, geDate, null, 0, int.MaxValue, new CancellationToken());
+ var response = await client.Get(idDiscriminator, geDate, null, 0, int.MaxValue, CancellationToken.None);
// assert
Assert.NotNull(response);
@@ -104,7 +104,7 @@ public class TimestampedSetControllerTest : BaseIntegrationTest
Guid idDiscriminator = Guid.NewGuid();
int count = 10;
IEnumerable testSets = Generate(count, DateTimeOffset.Now.ToOffset(TimeSpan.FromHours(7)));
- var insertResponse = await client.AddRange(idDiscriminator, testSets, new CancellationToken());
+ await client.AddRange(idDiscriminator, testSets, CancellationToken.None);
var expectedCount = count / 2;
// act
@@ -124,7 +124,7 @@ public class TimestampedSetControllerTest : BaseIntegrationTest
var expectedCount = 1;
int count = 10 + expectedCount;
IEnumerable testSets = Generate(count, DateTimeOffset.Now.ToOffset(TimeSpan.FromHours(7)));
- var insertResponse = await client.AddRange(idDiscriminator, testSets, new CancellationToken());
+ await client.AddRange(idDiscriminator, testSets, CancellationToken.None);
// act
var response = await client.Get(idDiscriminator, null, null, count - expectedCount, count, new CancellationToken());
@@ -141,7 +141,7 @@ public class TimestampedSetControllerTest : BaseIntegrationTest
Guid idDiscriminator = Guid.NewGuid();
int count = 10;
IEnumerable testSets = Generate(count, DateTimeOffset.Now.ToOffset(TimeSpan.FromHours(7)));
- var insertResponse = await client.AddRange(idDiscriminator, testSets, new CancellationToken());
+ await client.AddRange(idDiscriminator, testSets, CancellationToken.None);
var expectedCount = 8;
// act
@@ -159,9 +159,9 @@ public class TimestampedSetControllerTest : BaseIntegrationTest
Guid idDiscriminator = Guid.NewGuid();
int count = 10;
var dateMin = DateTimeOffset.Now;
- var dateMax = DateTimeOffset.Now.AddSeconds(count-1);
+ var dateMax = DateTimeOffset.Now.AddSeconds(count - 1);
IEnumerable testSets = Generate(count, dateMin.ToOffset(TimeSpan.FromHours(7)));
- var insertResponse = await client.AddRange(idDiscriminator, testSets, new CancellationToken());
+ await client.AddRange(idDiscriminator, testSets, CancellationToken.None);
var tolerance = TimeSpan.FromSeconds(1);
// act
@@ -180,7 +180,7 @@ public class TimestampedSetControllerTest : BaseIntegrationTest
Guid idDiscriminator = Guid.NewGuid();
int count = 144;
IEnumerable testSets = Generate(count, DateTimeOffset.Now.ToOffset(TimeSpan.FromHours(7)));
- var insertResponse = await client.AddRange(idDiscriminator, testSets, new CancellationToken());
+ await client.AddRange(idDiscriminator, testSets, CancellationToken.None);
// act
var response = await client.Count(idDiscriminator, new CancellationToken());
diff --git a/Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs b/Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs
index 9795a2d..731ec9e 100644
--- a/Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs
+++ b/Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs
@@ -1,98 +1,99 @@
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection;
using Persistence.Client;
using Persistence.Client.Clients;
using Persistence.Client.Clients.Interfaces;
using Persistence.Database.Entity;
using Persistence.Models;
+using System.Net;
using Xunit;
namespace Persistence.IntegrationTests.Controllers;
public class WitsDataControllerTest : BaseIntegrationTest
{
- private IWitsDataClient witsDataClient;
+ private IWitsDataClient witsDataClient;
- public WitsDataControllerTest(WebAppFactoryFixture factory) : base(factory)
- {
- var scope = factory.Services.CreateScope();
- var persistenceClientFactory = scope.ServiceProvider
- .GetRequiredService();
+ public WitsDataControllerTest(WebAppFactoryFixture factory) : base(factory)
+ {
+ var scope = factory.Services.CreateScope();
+ var persistenceClientFactory = scope.ServiceProvider
+ .GetRequiredService();
witsDataClient = persistenceClientFactory.GetWitsDataClient();
}
- [Fact]
- public async Task GetDatesRangeAsync_returns_success()
- {
- //arrange
- dbContext.CleanupDbSet();
+ [Fact]
+ public async Task GetDatesRangeAsync_returns_success()
+ {
+ //arrange
+ dbContext.CleanupDbSet();
- var discriminatorId = Guid.NewGuid();
+ var discriminatorId = Guid.NewGuid();
- //act
- var response = await witsDataClient.GetDatesRangeAsync(discriminatorId, CancellationToken.None);
+ //act
+ var response = await witsDataClient.GetDatesRangeAsync(discriminatorId, CancellationToken.None);
//assert
Assert.NotNull(response);
}
- [Fact]
- public async Task GetPart_returns_success()
- {
- //arrange
- dbContext.CleanupDbSet();
+ [Fact]
+ public async Task GetPart_returns_success()
+ {
+ //arrange
+ dbContext.CleanupDbSet();
- var discriminatorId = Guid.NewGuid();
- var dateBegin = DateTimeOffset.UtcNow;
- var take = 1;
+ var discriminatorId = Guid.NewGuid();
+ var dateBegin = DateTimeOffset.UtcNow;
+ var take = 1;
- //act
- var response = await witsDataClient.GetPart(discriminatorId, dateBegin, take, CancellationToken.None);
+ //act
+ var response = await witsDataClient.GetPart(discriminatorId, dateBegin, take, CancellationToken.None);
//assert
Assert.NotNull(response);
Assert.Empty(response);
}
- [Fact]
- public async Task InsertRange_returns_success()
- {
- //arrange
- dbContext.CleanupDbSet();
+ [Fact]
+ public async Task InsertRange_returns_success()
+ {
+ //arrange
+ dbContext.CleanupDbSet();
- //act
- await AddRange();
- }
+ //act
+ await AddRange();
+ }
- [Fact]
- public async Task GetValuesForGraph_returns_success()
- {
- //arrange
- dbContext.CleanupDbSet();
+ [Fact]
+ public async Task GetValuesForGraph_returns_success()
+ {
+ //arrange
+ dbContext.CleanupDbSet();
- var discriminatorId = Guid.NewGuid();
- var dateFrom = DateTimeOffset.UtcNow;
- var dateTo = DateTimeOffset.UtcNow;
- var approxPointCount = 12;
+ var discriminatorId = Guid.NewGuid();
+ var dateFrom = DateTimeOffset.UtcNow;
+ var dateTo = DateTimeOffset.UtcNow;
+ var approxPointCount = 12;
- //act
- var response = await witsDataClient.GetValuesForGraph(discriminatorId, dateFrom, dateTo, approxPointCount, CancellationToken.None);
+ //act
+ var response = await witsDataClient.GetValuesForGraph(discriminatorId, dateFrom, dateTo, approxPointCount, CancellationToken.None);
//assert
Assert.NotNull(response);
Assert.Empty(response);
}
- [Fact]
- public async Task GetDatesRangeAsync_AfterSave_returns_success()
- {
- //arrange
- dbContext.CleanupDbSet();
+ [Fact]
+ public async Task GetDatesRangeAsync_AfterSave_returns_success()
+ {
+ //arrange
+ dbContext.CleanupDbSet();
- var dtos = await AddRange();
- var discriminatorId = dtos.FirstOrDefault()!.DiscriminatorId;
+ var dtos = await AddRange();
+ var discriminatorId = dtos.FirstOrDefault()!.DiscriminatorId;
- //act
- var response = await witsDataClient.GetDatesRangeAsync(discriminatorId, CancellationToken.None);
+ //act
+ var response = await witsDataClient.GetDatesRangeAsync(discriminatorId, CancellationToken.None);
//assert
Assert.NotNull(response);
@@ -114,19 +115,19 @@ public class WitsDataControllerTest : BaseIntegrationTest
Assert.Equal(expectedDateTo, actualDateTo);
}
- [Fact]
- public async Task GetPart_AfterSave_returns_success()
- {
- //arrange
- dbContext.CleanupDbSet();
+ [Fact]
+ public async Task GetPart_AfterSave_returns_success()
+ {
+ //arrange
+ dbContext.CleanupDbSet();
- var dtos = await AddRange();
- var discriminatorId = dtos.FirstOrDefault()!.DiscriminatorId;
- var dateBegin = dtos.FirstOrDefault()!.Timestamped;
- var take = 1;
+ var dtos = await AddRange();
+ var discriminatorId = dtos.FirstOrDefault()!.DiscriminatorId;
+ var dateBegin = dtos.FirstOrDefault()!.Timestamped;
+ var take = 1;
- //act
- var response = await witsDataClient.GetPart(discriminatorId, dateBegin, take, CancellationToken.None);
+ //act
+ var response = await witsDataClient.GetPart(discriminatorId, dateBegin, take, CancellationToken.None);
//assert
Assert.NotNull(response);
@@ -137,26 +138,26 @@ public class WitsDataControllerTest : BaseIntegrationTest
var actualDto = response.FirstOrDefault();
Assert.Equal(expectedDto?.DiscriminatorId, actualDto?.DiscriminatorId);
- var expectedValueDto = expectedDto?.Values.FirstOrDefault();
- var actualValueDto = actualDto?.Values.FirstOrDefault();
- Assert.Equal(expectedValueDto?.ItemId, actualValueDto?.ItemId);
- Assert.Equal(expectedValueDto?.RecordId, actualValueDto?.RecordId);
- }
+ var expectedValueDto = expectedDto?.Values.FirstOrDefault();
+ var actualValueDto = actualDto?.Values.FirstOrDefault();
+ Assert.Equal(expectedValueDto?.ItemId, actualValueDto?.ItemId);
+ Assert.Equal(expectedValueDto?.RecordId, actualValueDto?.RecordId);
+ }
- [Fact]
- public async Task GetValuesForGraph_AfterSave_returns_success()
- {
- //arrange
- dbContext.CleanupDbSet();
+ [Fact]
+ public async Task GetValuesForGraph_AfterSave_returns_success()
+ {
+ //arrange
+ dbContext.CleanupDbSet();
- var dtos = await AddRange(37);
- var discriminatorId = dtos.FirstOrDefault()!.DiscriminatorId;
- var dateFrom = dtos.Select(e => e.Timestamped).Min();
- var dateTo = dtos.Select(e => e.Timestamped).Max();
- var approxPointCount = 12;
+ var dtos = await AddRange(37);
+ var discriminatorId = dtos.FirstOrDefault()!.DiscriminatorId;
+ var dateFrom = dtos.Select(e => e.Timestamped).Min();
+ var dateTo = dtos.Select(e => e.Timestamped).Max();
+ var approxPointCount = 12;
- //act
- var response = await witsDataClient.GetValuesForGraph(discriminatorId, dateFrom, dateTo, approxPointCount, CancellationToken.None);
+ //act
+ var response = await witsDataClient.GetValuesForGraph(discriminatorId, dateFrom, dateTo, approxPointCount, CancellationToken.None);
//assert
Assert.NotNull(response);
@@ -181,10 +182,10 @@ public class WitsDataControllerTest : BaseIntegrationTest
RecordId = -1, // < 0
ItemId = 101, // > 100
Value = string.Empty
- }
- }
- }
- };
+ }
+ }
+ }
+ };
try
{
@@ -198,37 +199,37 @@ public class WitsDataControllerTest : BaseIntegrationTest
}
}
- private async Task> AddRange(int countToCreate = 10)
- {
- var dtos = new List();
- var discriminatorId = Guid.NewGuid();
- var timestamped = DateTimeOffset.UtcNow;
- for (var i = 0; i < countToCreate; i++)
- {
- var random = new Random();
- dtos.Add(new WitsDataDto()
- {
- DiscriminatorId = discriminatorId,
- Timestamped = timestamped.AddSeconds(i),
- Values = new List()
- {
- new WitsValueDto()
- {
- RecordId = i + 1,
- ItemId = i + 1,
- Value = random.Next(1, 100)
- }
- }
- });
- }
+ private async Task> AddRange(int countToCreate = 10)
+ {
+ var dtos = new List();
+ var discriminatorId = Guid.NewGuid();
+ var timestamped = DateTimeOffset.UtcNow;
+ for (var i = 0; i < countToCreate; i++)
+ {
+ var random = new Random();
+ dtos.Add(new WitsDataDto()
+ {
+ DiscriminatorId = discriminatorId,
+ Timestamped = timestamped.AddSeconds(i),
+ Values = new List()
+ {
+ new WitsValueDto()
+ {
+ RecordId = i + 1,
+ ItemId = i + 1,
+ Value = random.Next(1, 100)
+ }
+ }
+ });
+ }
- //act
- var response = await witsDataClient.AddRange(dtos, CancellationToken.None);
+ //act
+ var response = await witsDataClient.AddRange(dtos, CancellationToken.None);
//assert
var count = dtos.SelectMany(e => e.Values).Count();
Assert.Equal(count, response);
- return dtos;
- }
+ return dtos;
+ }
}
diff --git a/Persistence.IntegrationTests/DbConnection.cs b/Persistence.IntegrationTests/DbConnection.cs
index f9c7623..ac733fa 100644
--- a/Persistence.IntegrationTests/DbConnection.cs
+++ b/Persistence.IntegrationTests/DbConnection.cs
@@ -1,10 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Persistence.IntegrationTests;
+namespace Persistence.IntegrationTests;
public class DbConnection
{
public string Host { get; set; } = null!;
diff --git a/Persistence.IntegrationTests/EFCoreExtensions.cs b/Persistence.IntegrationTests/EFCoreExtensions.cs
index b41b2d6..4e20423 100644
--- a/Persistence.IntegrationTests/EFCoreExtensions.cs
+++ b/Persistence.IntegrationTests/EFCoreExtensions.cs
@@ -1,5 +1,4 @@
using Microsoft.EntityFrameworkCore;
-using Persistence.Database.Model;
namespace Persistence.IntegrationTests;
public static class EFCoreExtensions
diff --git a/Persistence.IntegrationTests/Extensions/EFCoreExtensions.cs b/Persistence.IntegrationTests/Extensions/EFCoreExtensions.cs
deleted file mode 100644
index c068a30..0000000
--- a/Persistence.IntegrationTests/Extensions/EFCoreExtensions.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using Persistence.Database;
-using Persistence.Database.Model;
-
-namespace Persistence.IntegrationTests.Extensions;
-
-public static class EFCoreExtensions
-{
- public static void CleanupDbSet(this PersistenceDbContext dbContext)
- where T : class
- {
- var dbset = dbContext.Set();
- dbset.RemoveRange(dbset);
- dbContext.SaveChanges();
- }
-}
diff --git a/Persistence.IntegrationTests/TestHttpClientFactory.cs b/Persistence.IntegrationTests/TestHttpClientFactory.cs
index 287498d..a158b10 100644
--- a/Persistence.IntegrationTests/TestHttpClientFactory.cs
+++ b/Persistence.IntegrationTests/TestHttpClientFactory.cs
@@ -1,19 +1,19 @@
namespace Persistence.IntegrationTests
{
- ///
- /// Фабрика HTTP клиентов для интеграционных тестов
- ///
- public class TestHttpClientFactory : IHttpClientFactory
- {
- private readonly WebAppFactoryFixture factory;
+ ///
+ /// Фабрика HTTP клиентов для интеграционных тестов
+ ///
+ public class TestHttpClientFactory : IHttpClientFactory
+ {
+ private readonly WebAppFactoryFixture factory;
- public TestHttpClientFactory(WebAppFactoryFixture factory)
- {
- this.factory = factory;
- }
- public HttpClient CreateClient(string name)
- {
- return factory.CreateClient();
- }
- }
+ public TestHttpClientFactory(WebAppFactoryFixture factory)
+ {
+ this.factory = factory;
+ }
+ public HttpClient CreateClient(string name)
+ {
+ return factory.CreateClient();
+ }
+ }
}
diff --git a/Persistence.IntegrationTests/WebAppFactoryFixture.cs b/Persistence.IntegrationTests/WebAppFactoryFixture.cs
index e557034..535236f 100644
--- a/Persistence.IntegrationTests/WebAppFactoryFixture.cs
+++ b/Persistence.IntegrationTests/WebAppFactoryFixture.cs
@@ -17,16 +17,16 @@ public class WebAppFactoryFixture : WebApplicationFactory
private string connectionString = string.Empty;
protected override void ConfigureWebHost(IWebHostBuilder builder)
- {
+ {
builder.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("appsettings.Tests.json");
- var dbConnection = config.Build().GetSection("DbConnection").Get()!;
- connectionString = dbConnection.GetConnectionString();
- });
+ var dbConnection = config.Build().GetSection("DbConnection").Get()!;
+ connectionString = dbConnection.GetConnectionString();
+ });
- builder.ConfigureServices(services =>
+ builder.ConfigureServices(services =>
{
var descriptor = services.SingleOrDefault(d => d.ServiceType == typeof(DbContextOptions));
if (descriptor != null)
@@ -45,7 +45,7 @@ public class WebAppFactoryFixture : WebApplicationFactory
services.AddSingleton();
- var serviceProvider = services.BuildServiceProvider();
+ var serviceProvider = services.BuildServiceProvider();
using var scope = serviceProvider.CreateScope();
var scopedServices = scope.ServiceProvider;
@@ -53,7 +53,7 @@ public class WebAppFactoryFixture : WebApplicationFactory
var dbContext = scopedServices.GetRequiredService();
dbContext.Database.EnsureCreatedAndMigrated();
dbContext.SaveChanges();
- });
+ });
}
public override async ValueTask DisposeAsync()
@@ -64,5 +64,7 @@ public class WebAppFactoryFixture : WebApplicationFactory
.Options);
await dbContext.Database.EnsureDeletedAsync();
+
+ GC.SuppressFinalize(this);
}
}
diff --git a/Persistence.Repository/CyclicArray.cs b/Persistence.Repository/CyclicArray.cs
index fa6d074..1de7a5b 100644
--- a/Persistence.Repository/CyclicArray.cs
+++ b/Persistence.Repository/CyclicArray.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.Collections;
namespace Persistence.Repository;
///
@@ -134,20 +129,20 @@ public class CyclicArray : IEnumerable
///
public IEnumerator GetEnumerator()
- => new CyclycListEnumerator(array, current, used);
+ => new CyclicListEnumerator(array, current, used);
///
IEnumerator IEnumerable.GetEnumerator()
=> GetEnumerator();
- class CyclycListEnumerator : IEnumerator
+ class CyclicListEnumerator : IEnumerator
{
private readonly Te[] array;
private readonly int used;
private readonly int first;
private int current = -1;
- public CyclycListEnumerator(Te[] array, int first, int used)
+ public CyclicListEnumerator(Te[] array, int first, int used)
{
this.array = new Te[array.Length];
array.CopyTo(this.array, 0);
diff --git a/Persistence.Repository/DependencyInjection.cs b/Persistence.Repository/DependencyInjection.cs
index 7a96217..bb2f799 100644
--- a/Persistence.Repository/DependencyInjection.cs
+++ b/Persistence.Repository/DependencyInjection.cs
@@ -3,7 +3,6 @@ using Microsoft.Extensions.DependencyInjection;
using Persistence.Database.Model;
using Persistence.Models;
using Persistence.Repositories;
-using Persistence.Repository.Data;
using Persistence.Repository.Repositories;
namespace Persistence.Repository;
@@ -33,7 +32,7 @@ public static class DependencyInjection
services.AddTransient, TimeSeriesDataCachedRepository>();
services.AddTransient();
services.AddTransient();
- services.AddTransient();
+ services.AddTransient();
services.AddTransient();
return services;
diff --git a/Persistence.Repository/Extensions/EFExtensionsSortBy.cs b/Persistence.Repository/Extensions/EFExtensionsSortBy.cs
index 03b9c65..97ca992 100644
--- a/Persistence.Repository/Extensions/EFExtensionsSortBy.cs
+++ b/Persistence.Repository/Extensions/EFExtensionsSortBy.cs
@@ -44,7 +44,7 @@ public static class EFExtensionsSortBy
var name = propertyInfo.Name.ToLower();
ParameterExpression arg = Expression.Parameter(type, "x");
MemberExpression property = Expression.Property(arg, propertyInfo.Name);
- var selector = Expression.Lambda(property, new ParameterExpression[] { arg });
+ var selector = Expression.Lambda(property, [arg]);
var typeAccessor = new TypeAccessor
{
KeySelector = selector,
@@ -200,7 +200,7 @@ public static class EFExtensionsSortBy
: orderByAscending;
var newQuery = (IOrderedQueryable)genericMethod
- .Invoke(genericMethod, new object[] { query, lambdaExpression })!;
+ .Invoke(genericMethod, [query, lambdaExpression])!;
return newQuery;
}
@@ -226,7 +226,6 @@ public static class EFExtensionsSortBy
LambdaExpression? lambdaExpression = null;
- // TODO: Устранить дублирование кода
if (propertyName.Contains('.'))
{
Type type = rootType;
@@ -261,7 +260,7 @@ public static class EFExtensionsSortBy
: orderByAscending;
var newQuery = (IOrderedQueryable)genericMethod
- .Invoke(genericMethod, new object[] { query, lambdaExpression })!;
+ .Invoke(genericMethod, [query, lambdaExpression])!;
return newQuery;
}
}
\ No newline at end of file
diff --git a/Persistence.Repository/QueryBuilders.cs b/Persistence.Repository/QueryBuilders.cs
index 6070a8a..a0e17be 100644
--- a/Persistence.Repository/QueryBuilders.cs
+++ b/Persistence.Repository/QueryBuilders.cs
@@ -29,7 +29,7 @@ public static class QueryBuilders
return query;
}
- public static IQueryable Apply(this IQueryable query,DateTimeOffset momentUtc)
+ public static IQueryable Apply(this IQueryable query, DateTimeOffset momentUtc)
where TEntity : class, IChangeLog
{
momentUtc = momentUtc.ToUniversalTime();
@@ -40,7 +40,7 @@ public static class QueryBuilders
return query;
}
-
+
public static async Task> ApplyPagination(
this IQueryable query,
diff --git a/Persistence.Repository/Repositories/ChangeLogRepository.cs b/Persistence.Repository/Repositories/ChangeLogRepository.cs
index dc3f5eb..aecb62c 100644
--- a/Persistence.Repository/Repositories/ChangeLogRepository.cs
+++ b/Persistence.Repository/Repositories/ChangeLogRepository.cs
@@ -9,7 +9,7 @@ using UuidExtensions;
namespace Persistence.Repository.Repositories;
public class ChangeLogRepository : IChangeLogRepository
{
- private DbContext db;
+ private readonly DbContext db;
public ChangeLogRepository(DbContext db)
{
@@ -123,11 +123,11 @@ public class ChangeLogRepository : IChangeLogRepository
return result;
-
+
}
public async Task> GetByDate(
- Guid idDiscriminator,
+ Guid idDiscriminator,
DateTimeOffset momentUtc,
SectionPartRequest filterRequest,
PaginationRequest paginationRequest,
@@ -195,7 +195,7 @@ public class ChangeLogRepository : IChangeLogRepository
return datesOnly;
}
- private ChangeLog CreateEntityFromDto(Guid idAuthor, Guid idDiscriminator, DataWithWellDepthAndSectionDto dto)
+ private static ChangeLog CreateEntityFromDto(Guid idAuthor, Guid idDiscriminator, DataWithWellDepthAndSectionDto dto)
{
var entity = new ChangeLog()
{
diff --git a/Persistence.Repository/Repositories/ParameterRepository.cs b/Persistence.Repository/Repositories/ParameterRepository.cs
index 325c08c..38f3ef0 100644
--- a/Persistence.Repository/Repositories/ParameterRepository.cs
+++ b/Persistence.Repository/Repositories/ParameterRepository.cs
@@ -1,6 +1,5 @@
using Mapster;
using Microsoft.EntityFrameworkCore;
-using Newtonsoft.Json.Linq;
using Persistence.Database.Entity;
using Persistence.Models;
using Persistence.Repositories;
@@ -8,80 +7,80 @@ using Persistence.Repositories;
namespace Persistence.Repository.Repositories;
public class ParameterRepository : IParameterRepository
{
- private DbContext db;
+ private DbContext db;
- public ParameterRepository(DbContext db)
- {
- this.db = db;
- }
+ public ParameterRepository(DbContext db)
+ {
+ this.db = db;
+ }
- protected virtual IQueryable GetQueryReadOnly() => db.Set();
+ protected virtual IQueryable GetQueryReadOnly() => db.Set();
- public async Task GetDatesRangeAsync(Guid idDiscriminator, CancellationToken token)
- {
- var query = GetQueryReadOnly()
- .Where(e => e.DiscriminatorId == idDiscriminator)
- .GroupBy(e => 1)
- .Select(group => new
- {
- Min = group.Min(e => e.Timestamp),
- Max = group.Max(e => e.Timestamp),
- });
- var values = await query.FirstOrDefaultAsync(token);
- var result = new DatesRangeDto()
- {
- From = values?.Min ?? DateTimeOffset.MinValue,
- To = values?.Max ?? DateTimeOffset.MaxValue
- };
+ public async Task GetDatesRangeAsync(Guid idDiscriminator, CancellationToken token)
+ {
+ var query = GetQueryReadOnly()
+ .Where(e => e.DiscriminatorId == idDiscriminator)
+ .GroupBy(e => 1)
+ .Select(group => new
+ {
+ Min = group.Min(e => e.Timestamp),
+ Max = group.Max(e => e.Timestamp),
+ });
+ var values = await query.FirstOrDefaultAsync(token);
+ var result = new DatesRangeDto()
+ {
+ From = values?.Min ?? DateTimeOffset.MinValue,
+ To = values?.Max ?? DateTimeOffset.MaxValue
+ };
- return result;
- }
+ return result;
+ }
- public async Task> GetPart(Guid idDiscriminator, DateTimeOffset dateBegin, int take, CancellationToken token)
- {
- var query = GetQueryReadOnly();
- var universalDate = dateBegin.ToUniversalTime();
- var entities = await query
- .Where(e => e.DiscriminatorId == idDiscriminator && e.Timestamp >= universalDate)
- .Take(take)
- .ToArrayAsync(token);
- var dtos = entities.Select(e => e.Adapt());
+ public async Task> GetPart(Guid idDiscriminator, DateTimeOffset dateBegin, int take, CancellationToken token)
+ {
+ var query = GetQueryReadOnly();
+ var universalDate = dateBegin.ToUniversalTime();
+ var entities = await query
+ .Where(e => e.DiscriminatorId == idDiscriminator && e.Timestamp >= universalDate)
+ .Take(take)
+ .ToArrayAsync(token);
+ var dtos = entities.Select(e => e.Adapt());
- return dtos;
- }
+ return dtos;
+ }
- public async Task> GetValuesForGraph(Guid discriminatorId, DateTimeOffset dateFrom, DateTimeOffset dateTo,
- int approxPointsCount, int? ratio, CancellationToken token)
- {
- var query = db.Set().AsNoTracking();
- var universalDateFrom = dateFrom.ToUniversalTime();
- var universalDateTo = dateTo.ToUniversalTime();
+ public async Task> GetValuesForGraph(Guid discriminatorId, DateTimeOffset dateFrom, DateTimeOffset dateTo,
+ int approxPointsCount, int? ratio, CancellationToken token)
+ {
+ var query = db.Set().AsNoTracking();
+ var universalDateFrom = dateFrom.ToUniversalTime();
+ var universalDateTo = dateTo.ToUniversalTime();
- query = query
- .Where(e => e.DiscriminatorId == discriminatorId)
- .Where(e => e.Timestamp >= universalDateFrom && e.Timestamp <= universalDateTo)
- .OrderBy(e => e.Timestamp);
- if (ratio != null)
- {
- query = query.Where(e => ((int) (e.Timestamp - dateFrom).TotalSeconds) % ratio == 0);
- }
+ query = query
+ .Where(e => e.DiscriminatorId == discriminatorId)
+ .Where(e => e.Timestamp >= universalDateFrom && e.Timestamp <= universalDateTo)
+ .OrderBy(e => e.Timestamp);
+ if (ratio != null)
+ {
+ query = query.Where(e => ((int)(e.Timestamp - dateFrom).TotalSeconds) % ratio == 0);
+ }
- var entities = await query
- .Take((int)(2.5 * approxPointsCount))
- .ToArrayAsync(token);
+ var entities = await query
+ .Take((int)(2.5 * approxPointsCount))
+ .ToArrayAsync(token);
- var dtos = entities.Select(e => e.Adapt());
+ var dtos = entities.Select(e => e.Adapt());
- return dtos;
- }
+ return dtos;
+ }
- public async Task AddRange(IEnumerable dtos, CancellationToken token)
- {
- var entities = dtos.Select(e => e.Adapt());
+ public async Task AddRange(IEnumerable dtos, CancellationToken token)
+ {
+ var entities = dtos.Select(e => e.Adapt());
- await db.Set().AddRangeAsync(entities, token);
- var result = await db.SaveChangesAsync(token);
+ await db.Set().AddRangeAsync(entities, token);
+ var result = await db.SaveChangesAsync(token);
- return result;
- }
+ return result;
+ }
}
diff --git a/Persistence.Repository/Repositories/SetpointRepository.cs b/Persistence.Repository/Repositories/SetpointRepository.cs
index f0e921f..800d7fa 100644
--- a/Persistence.Repository/Repositories/SetpointRepository.cs
+++ b/Persistence.Repository/Repositories/SetpointRepository.cs
@@ -6,100 +6,100 @@ using Persistence.Repositories;
namespace Persistence.Repository.Repositories
{
- public class SetpointRepository : ISetpointRepository
- {
- private DbContext db;
- public SetpointRepository(DbContext db)
- {
- this.db = db;
- }
+ public class SetpointRepository : ISetpointRepository
+ {
+ private readonly DbContext db;
+ public SetpointRepository(DbContext db)
+ {
+ this.db = db;
+ }
- protected virtual IQueryable GetQueryReadOnly() => db.Set();
+ protected virtual IQueryable GetQueryReadOnly() => db.Set();
- public async Task> GetCurrent(IEnumerable setpointKeys, CancellationToken token)
- {
- var query = GetQueryReadOnly();
- var entities = await query
- .Where(e => setpointKeys.Contains(e.Key))
- .ToArrayAsync(token);
- var dtos = entities.Select(e => e.Adapt());
+ public async Task> GetCurrent(IEnumerable setpointKeys, CancellationToken token)
+ {
+ var query = GetQueryReadOnly();
+ var entities = await query
+ .Where(e => setpointKeys.Contains(e.Key))
+ .ToArrayAsync(token);
+ var dtos = entities.Select(e => e.Adapt());
- return dtos;
- }
+ return dtos;
+ }
- public async Task> GetHistory(IEnumerable