diff --git a/DD.Persistence.API/Controllers/ChangeLogController.cs b/DD.Persistence.API/Controllers/ChangeLogController.cs
index e4d1c09..f10ae1a 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,87 @@ public class ChangeLogController : ControllerBase, IChangeLogApi
return Ok(result);
}
+
+ ///
+ /// Метод, который возвращает статистику по количеству изменений в разрезе дней
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("statistics")]
+ public async Task>> GetStatisticsCountAsync([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},
+ };
+
+ return Ok(result);
+ }
+
+ ///
+ /// Метод, который возвращает историю изменений в разрезе дней
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("history")]
+ public async Task>> HistoryChangeLogAsync([FromQuery] ChangeLogRequest request, CancellationToken token)
+ {
+ var userId = Guid.CreateVersion7();
+ var changeLogItemCurrentId = Guid.CreateVersion7();
+ var changeLogItemCreation = DateTimeOffset.UtcNow;
+ var changeLogItems = new List()
+ {
+ new ChangeLogDto()
+ {
+ Id = changeLogItemCurrentId,
+ Creation = changeLogItemCreation,
+ 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 = changeLogItemCreation,
+ 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
new file mode 100644
index 0000000..748310e
--- /dev/null
+++ b/DD.Persistence.Models/HistoryChangeLogDto.cs
@@ -0,0 +1,32 @@
+namespace DD.Persistence.Models;
+
+///
+/// Модель, необходимая для отображения истории по журналу изменений
+///
+public class HistoryChangeLogDto
+{
+ ///
+ /// Дата и время изменений
+ ///
+ public DateTimeOffset DateTime { get; set; }
+
+ ///
+ /// Пользователь, совершивший изменение данных
+ ///
+ public required UserDto User { get; set; }
+
+ ///
+ /// Проект, с которым связаны изменения
+ ///
+ public Guid DiscriminatorId { get; set; }
+
+ ///
+ /// Список изменений
+ ///
+ public required IEnumerable ChangeLogItems { get; set; }
+
+ ///
+ /// Комментарий к изменению
+ ///
+ public required string Comment { get; set; }
+}
diff --git a/DD.Persistence.Models/Requests/ChangeLogRequest.cs b/DD.Persistence.Models/Requests/ChangeLogRequest.cs
new file mode 100644
index 0000000..59396ff
--- /dev/null
+++ b/DD.Persistence.Models/Requests/ChangeLogRequest.cs
@@ -0,0 +1,17 @@
+namespace DD.Persistence.Models.Requests;
+
+///
+/// Запрос, используемый для получения данных по журналу операций
+///
+public class ChangeLogRequest
+{
+ ///
+ /// Дискриминатор задачи
+ ///
+ 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; }
+}
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; }
+}