From a340fbe23bec989e2f8d93591bbd70016be8bbaf Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Wed, 5 Feb 2025 18:04:36 +0500 Subject: [PATCH 1/5] =?UTF-8?q?=D0=9D=D0=B0=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ChangeLogController.cs | 42 ++++++++++++++++++- .../Requests/StatisticsChangeLogRequest.cs | 23 ++++++++++ .../StatisticsChangeLogDto.cs | 23 ++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 DD.Persistence.Models/Requests/StatisticsChangeLogRequest.cs create mode 100644 DD.Persistence.Models/StatisticsChangeLogDto.cs diff --git a/DD.Persistence.API/Controllers/ChangeLogController.cs b/DD.Persistence.API/Controllers/ChangeLogController.cs index e4d1c09..ef5b268 100644 --- a/DD.Persistence.API/Controllers/ChangeLogController.cs +++ b/DD.Persistence.API/Controllers/ChangeLogController.cs @@ -1,4 +1,4 @@ -using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using DD.Persistence.Models; using DD.Persistence.Models.Requests; @@ -174,4 +174,44 @@ public class ChangeLogController : ControllerBase, IChangeLogApi return Ok(result); } + + /// + /// Метод, который возвращает статистику по количеству изменений в разрезе дней + /// + /// + /// + /// + [HttpGet("statistics/changes-count")] + public async Task>> GetStatisticsCountAsync([FromQuery] StatisticsChangeLogRequest request, CancellationToken token) + { + var result = new List() { + new() { DateTime = DateTimeOffset.UtcNow.AddDays(-60), ChangesCount = 10}, + new() { DateTime = DateTimeOffset.UtcNow.AddDays(-50), ChangesCount = 2}, + new() { DateTime = DateTimeOffset.UtcNow.AddDays(-25), ChangesCount = 560}, + new() { DateTime = DateTimeOffset.UtcNow.AddDays(-2), ChangesCount = 78}, + new() { DateTime = DateTimeOffset.UtcNow.AddDays(-1), ChangesCount = 39}, + }; + + return Ok(result); + } + + /// + /// Метод, который возвращает историю изменений в разрезе дней + /// + /// + /// + /// + [HttpGet("history")] + public async Task> GetHistoryAsync([FromQuery] StatisticsChangeLogRequest request, CancellationToken token) + { + var result = new List() { + new() { DateTime = DateTimeOffset.UtcNow.AddDays(-60), ChangesCount = 10}, + new() { DateTime = DateTimeOffset.UtcNow.AddDays(-50), ChangesCount = 2}, + new() { DateTime = DateTimeOffset.UtcNow.AddDays(-25), ChangesCount = 560}, + new() { DateTime = DateTimeOffset.UtcNow.AddDays(-2), ChangesCount = 78}, + new() { DateTime = DateTimeOffset.UtcNow.AddDays(-1), ChangesCount = 39}, + }; + + return Ok(result); + } } diff --git a/DD.Persistence.Models/Requests/StatisticsChangeLogRequest.cs b/DD.Persistence.Models/Requests/StatisticsChangeLogRequest.cs new file mode 100644 index 0000000..7d632be --- /dev/null +++ b/DD.Persistence.Models/Requests/StatisticsChangeLogRequest.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DD.Persistence.Models.Requests; + +/// +/// Запрос, используемый для получения статистики по журналу операций +/// +public class StatisticsChangeLogRequest +{ + /// + /// + /// + public Guid DiscriminatorId { get; set; } + + /// + /// Пользователь + /// + public Guid UserId { get; set; } +} diff --git a/DD.Persistence.Models/StatisticsChangeLogDto.cs b/DD.Persistence.Models/StatisticsChangeLogDto.cs new file mode 100644 index 0000000..f8ab537 --- /dev/null +++ b/DD.Persistence.Models/StatisticsChangeLogDto.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DD.Persistence.Models; + +/// +/// Модель, необходимая для отображения статистики по журналу изменений +/// +public class StatisticsChangeLogDto +{ + /// + /// Дата и время изменений + /// + public DateTimeOffset DateTime { get; set; } + + /// + /// Количество изменений + /// + public int ChangesCount { get; set; } +} -- 2.45.2 From 86bf78f31fc7a40869679230bc6662b1fb341bcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D1=8F=20=D0=91=D0=B8=D0=B7=D1=8E=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0?= Date: Thu, 6 Feb 2025 16:14:02 +0500 Subject: [PATCH 2/5] =?UTF-8?q?HistoryChangeLogDto=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=B8=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DD.Persistence.Models/HistoryChangeLogDto.cs | 48 ++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 DD.Persistence.Models/HistoryChangeLogDto.cs diff --git a/DD.Persistence.Models/HistoryChangeLogDto.cs b/DD.Persistence.Models/HistoryChangeLogDto.cs new file mode 100644 index 0000000..92d3baa --- /dev/null +++ b/DD.Persistence.Models/HistoryChangeLogDto.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DD.Persistence.Models; + +/// +/// Модель, необходимая для отображения истории по журналу изменений +/// +public class HistoryChangeLogDto +{ + /// + /// Дата и время изменений + /// + public DateTimeOffset DateTime { get; set; } + + /// + /// Пользователь, совершивший изменение данных + /// + public Guid UserId { get; set; } + + /// + /// Проект, с которым связаны изменения + /// + public Guid DiscriminatorId { get; set; } + + /// + /// Количество измененных строк + /// + public int RowsChangesCount { get; set; } + + /// + /// Изменения на предшествующую дату + /// + public required IEnumerable ChangeLogItemsByPreviousDate { get; set; } + + /// + /// Изменения на текущую дату + /// + public required IEnumerable ChangeLogItemsByCurrentDate { get; set; } + + /// + /// Комментарий к изменению + /// + public string? Comment { get; set; } +} -- 2.45.2 From 2ab8101258a14056929e83266b64c58d6ecbe338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D1=8F=20=D0=91=D0=B8=D0=B7=D1=8E=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0?= Date: Thu, 6 Feb 2025 16:57:13 +0500 Subject: [PATCH 3/5] =?UTF-8?q?Moq-=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B8=20=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=D1=81=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=B6=D1=83=D1=80=D0=BD=D0=B0=D0=BB=D0=B0=20=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ChangeLogController.cs | 60 ++++++++++++++++--- DD.Persistence.Models/HistoryChangeLogDto.cs | 26 ++------ ...hangeLogRequest.cs => ChangeLogRequest.cs} | 14 ++--- DD.Persistence.Models/UserDto.cs | 23 +++++++ 4 files changed, 83 insertions(+), 40 deletions(-) rename DD.Persistence.Models/Requests/{StatisticsChangeLogRequest.cs => ChangeLogRequest.cs} (51%) create mode 100644 DD.Persistence.Models/UserDto.cs diff --git a/DD.Persistence.API/Controllers/ChangeLogController.cs b/DD.Persistence.API/Controllers/ChangeLogController.cs index ef5b268..107ff53 100644 --- a/DD.Persistence.API/Controllers/ChangeLogController.cs +++ b/DD.Persistence.API/Controllers/ChangeLogController.cs @@ -181,8 +181,8 @@ public class ChangeLogController : ControllerBase, IChangeLogApi /// /// /// - [HttpGet("statistics/changes-count")] - public async Task>> GetStatisticsCountAsync([FromQuery] StatisticsChangeLogRequest request, CancellationToken token) + [HttpGet("statistics")] + public async Task>> GetStatisticsCountAsync([FromQuery] ChangeLogRequest request, CancellationToken token) { var result = new List() { new() { DateTime = DateTimeOffset.UtcNow.AddDays(-60), ChangesCount = 10}, @@ -202,14 +202,56 @@ public class ChangeLogController : ControllerBase, IChangeLogApi /// /// [HttpGet("history")] - public async Task> GetHistoryAsync([FromQuery] StatisticsChangeLogRequest request, CancellationToken token) + public async Task> HistoryChangeLogDto([FromQuery] ChangeLogRequest request, CancellationToken token) { - var result = new List() { - new() { DateTime = DateTimeOffset.UtcNow.AddDays(-60), ChangesCount = 10}, - new() { DateTime = DateTimeOffset.UtcNow.AddDays(-50), ChangesCount = 2}, - new() { DateTime = DateTimeOffset.UtcNow.AddDays(-25), ChangesCount = 560}, - new() { DateTime = DateTimeOffset.UtcNow.AddDays(-2), ChangesCount = 78}, - new() { DateTime = DateTimeOffset.UtcNow.AddDays(-1), ChangesCount = 39}, + var userId = Guid.CreateVersion7(); + var changeLogItemCurrentId = Guid.CreateVersion7(); + var changeLogItems = new List() + { + new ChangeLogDto() + { + Id = changeLogItemCurrentId, + Creation = DateTimeOffset.UtcNow, + IdAuthor = userId, + IdEditor = userId, + Obsolete = null, + Value = new ChangeLogValuesDto(){ + Id = Guid.CreateVersion7(), + Value = new Dictionary() { + ["1"] = new { id = 1, caption = "Изменение 1 (c правкой)" }, + ["2"] = new { id = 2, caption = "Изменение 2 (с правкой)" }, + } + } + }, + new ChangeLogDto() + { + Id = Guid.CreateVersion7(), + Creation = DateTimeOffset.UtcNow.AddDays(-10), + IdAuthor = userId, + IdEditor = userId, + IdNext = changeLogItemCurrentId, + Obsolete = DateTimeOffset.UtcNow.AddDays(-5), + Value = new ChangeLogValuesDto(){ + Id = Guid.CreateVersion7(), + Value = new Dictionary() { + ["1"] = new { id = 1, caption = "Изменение 1" }, + ["2"] = new { id = 2, caption = "Изменение 2" }, + } + } + } + }; + var result = new List() { + new() { + Comment = "Петров И. Ю. попросил внести изменения", + DateTime = DateTimeOffset.UtcNow, + DiscriminatorId = Guid.CreateVersion7(), + User = new UserDto() + { + Id = userId, + DisplayName = "Иванов И. И" + }, + ChangeLogItems = changeLogItems + }, }; return Ok(result); diff --git a/DD.Persistence.Models/HistoryChangeLogDto.cs b/DD.Persistence.Models/HistoryChangeLogDto.cs index 92d3baa..748310e 100644 --- a/DD.Persistence.Models/HistoryChangeLogDto.cs +++ b/DD.Persistence.Models/HistoryChangeLogDto.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace DD.Persistence.Models; +namespace DD.Persistence.Models; /// /// Модель, необходимая для отображения истории по журналу изменений @@ -19,7 +13,7 @@ public class HistoryChangeLogDto /// /// Пользователь, совершивший изменение данных /// - public Guid UserId { get; set; } + public required UserDto User { get; set; } /// /// Проект, с которым связаны изменения @@ -27,22 +21,12 @@ public class HistoryChangeLogDto public Guid DiscriminatorId { get; set; } /// - /// Количество измененных строк + /// Список изменений /// - public int RowsChangesCount { get; set; } - - /// - /// Изменения на предшествующую дату - /// - public required IEnumerable ChangeLogItemsByPreviousDate { get; set; } - - /// - /// Изменения на текущую дату - /// - public required IEnumerable ChangeLogItemsByCurrentDate { get; set; } + public required IEnumerable ChangeLogItems { get; set; } /// /// Комментарий к изменению /// - public string? Comment { get; set; } + public required string Comment { get; set; } } diff --git a/DD.Persistence.Models/Requests/StatisticsChangeLogRequest.cs b/DD.Persistence.Models/Requests/ChangeLogRequest.cs similarity index 51% rename from DD.Persistence.Models/Requests/StatisticsChangeLogRequest.cs rename to DD.Persistence.Models/Requests/ChangeLogRequest.cs index 7d632be..59396ff 100644 --- a/DD.Persistence.Models/Requests/StatisticsChangeLogRequest.cs +++ b/DD.Persistence.Models/Requests/ChangeLogRequest.cs @@ -1,18 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace DD.Persistence.Models.Requests; +namespace DD.Persistence.Models.Requests; /// -/// Запрос, используемый для получения статистики по журналу операций +/// Запрос, используемый для получения данных по журналу операций /// -public class StatisticsChangeLogRequest +public class ChangeLogRequest { /// - /// + /// Дискриминатор задачи /// public Guid DiscriminatorId { get; set; } diff --git a/DD.Persistence.Models/UserDto.cs b/DD.Persistence.Models/UserDto.cs new file mode 100644 index 0000000..682ccf8 --- /dev/null +++ b/DD.Persistence.Models/UserDto.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DD.Persistence.Models; + +/// +/// Класс, описывающий пользователя +/// +public class UserDto +{ + /// + /// Идентификатор пользователя + /// + public Guid Id { get; set; } + + /// + /// Имя пользователя для отображения + /// + public required string DisplayName { get; set; } +} -- 2.45.2 From e0f0d9fdd0b2deccb0b6c5052750dadc71e74969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D1=8F=20=D0=91=D0=B8=D0=B7=D1=8E=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0?= Date: Thu, 6 Feb 2025 17:07:02 +0500 Subject: [PATCH 4/5] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=82=D0=B8=D0=BF=20=D0=B2=D0=BE=D0=B7=D0=B2?= =?UTF-8?q?=D1=80=D0=B0=D1=89=D0=B0=D0=B5=D0=BC=D1=8B=D1=85=20=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B4=D0=BB=D1=8F=20GetStatisticsCo?= =?UTF-8?q?untAsync=20=D0=B8=20HistoryChangeLogAsync?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DD.Persistence.API/Controllers/ChangeLogController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DD.Persistence.API/Controllers/ChangeLogController.cs b/DD.Persistence.API/Controllers/ChangeLogController.cs index 107ff53..8fbe656 100644 --- a/DD.Persistence.API/Controllers/ChangeLogController.cs +++ b/DD.Persistence.API/Controllers/ChangeLogController.cs @@ -182,7 +182,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi /// /// [HttpGet("statistics")] - public async Task>> GetStatisticsCountAsync([FromQuery] ChangeLogRequest request, CancellationToken token) + public async Task>> GetStatisticsCountAsync([FromQuery] ChangeLogRequest request, CancellationToken token) { var result = new List() { new() { DateTime = DateTimeOffset.UtcNow.AddDays(-60), ChangesCount = 10}, @@ -202,7 +202,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi /// /// [HttpGet("history")] - public async Task> HistoryChangeLogDto([FromQuery] ChangeLogRequest request, CancellationToken token) + public async Task>> HistoryChangeLogAsync([FromQuery] ChangeLogRequest request, CancellationToken token) { var userId = Guid.CreateVersion7(); var changeLogItemCurrentId = Guid.CreateVersion7(); -- 2.45.2 From 1f3df26e9a7b068aecef03b6421d747ff1bf1114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D1=8F=20=D0=91=D0=B8=D0=B7=D1=8E=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0?= Date: Thu, 6 Feb 2025 17:21:28 +0500 Subject: [PATCH 5/5] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DD.Persistence.API/Controllers/ChangeLogController.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/DD.Persistence.API/Controllers/ChangeLogController.cs b/DD.Persistence.API/Controllers/ChangeLogController.cs index 8fbe656..f10ae1a 100644 --- a/DD.Persistence.API/Controllers/ChangeLogController.cs +++ b/DD.Persistence.API/Controllers/ChangeLogController.cs @@ -206,12 +206,13 @@ public class ChangeLogController : ControllerBase, IChangeLogApi { var userId = Guid.CreateVersion7(); var changeLogItemCurrentId = Guid.CreateVersion7(); + var changeLogItemCreation = DateTimeOffset.UtcNow; var changeLogItems = new List() { new ChangeLogDto() { Id = changeLogItemCurrentId, - Creation = DateTimeOffset.UtcNow, + Creation = changeLogItemCreation, IdAuthor = userId, IdEditor = userId, Obsolete = null, @@ -243,7 +244,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi var result = new List() { new() { Comment = "Петров И. Ю. попросил внести изменения", - DateTime = DateTimeOffset.UtcNow, + DateTime = changeLogItemCreation, DiscriminatorId = Guid.CreateVersion7(), User = new UserDto() { -- 2.45.2