diff --git a/DeepDrftModels/DTOs/TrackDto.cs b/DeepDrftModels/DTOs/TrackDto.cs
new file mode 100644
index 0000000..211fd0d
--- /dev/null
+++ b/DeepDrftModels/DTOs/TrackDto.cs
@@ -0,0 +1,13 @@
+namespace DeepDrftModels.DTOs;
+
+public class TrackDto
+{
+ public long Id { get; set; }
+ public string MediaPath { get; set; }
+ public string TrackName { get; set; }
+ public string Artist { get; set; }
+ public string? Album { get; set; }
+ public string? Genre { get; set; }
+ public DateOnly? ReleaseDate { get; set; }
+ public string? ImagePath { get; set; }
+}
\ No newline at end of file
diff --git a/DeepDrftModels/DeepDrftModels.csproj b/DeepDrftModels/DeepDrftModels.csproj
new file mode 100644
index 0000000..a8fcc32
--- /dev/null
+++ b/DeepDrftModels/DeepDrftModels.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net9.0
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/DeepDrftModels/Entities/TrackEntity.cs b/DeepDrftModels/Entities/TrackEntity.cs
new file mode 100644
index 0000000..ee82ef7
--- /dev/null
+++ b/DeepDrftModels/Entities/TrackEntity.cs
@@ -0,0 +1,13 @@
+namespace DeepDrftModels.Entities;
+
+public class TrackEntity
+{
+ public long Id { get; set; }
+ public string MediaPath { get; set; }
+ public string TrackName { get; set; }
+ public string Artist { get; set; }
+ public string? Album { get; set; }
+ public string? Genre { get; set; }
+ public DateOnly? ReleaseDate { get; set; }
+ public string? ImagePath { get; set; }
+}
\ No newline at end of file
diff --git a/DeepDrftModels/Models/PagedResult.cs b/DeepDrftModels/Models/PagedResult.cs
new file mode 100644
index 0000000..39a20ec
--- /dev/null
+++ b/DeepDrftModels/Models/PagedResult.cs
@@ -0,0 +1,35 @@
+namespace DeepDrftModels.Models;
+
+public class PagedResult
+{
+ public IEnumerable Items { get; set; } = new List();
+ public int TotalCount { get; set; }
+ public int Page { get; set; }
+ public int PageSize { get; set; }
+ public int TotalPages => (int)Math.Ceiling((double)TotalCount / PageSize);
+ public bool HasNextPage => Page < TotalPages;
+ public bool HasPreviousPage => Page > 1;
+
+ public PagedResult()
+ {
+ }
+
+ public static PagedResult From(PagedResult other, IEnumerable items)
+ {
+ return new PagedResult()
+ {
+ Items = items.ToList(),
+ Page = other.Page,
+ PageSize = other.PageSize,
+ TotalCount = other.TotalCount,
+ };
+ }
+
+ public PagedResult(IEnumerable items, int totalCount, int page, int pageSize)
+ {
+ Items = items.ToList() ?? new List();
+ TotalCount = totalCount;
+ Page = page;
+ PageSize = pageSize;
+ }
+}
\ No newline at end of file
diff --git a/DeepDrftModels/Models/PagingParameters.cs b/DeepDrftModels/Models/PagingParameters.cs
new file mode 100644
index 0000000..55c2dd0
--- /dev/null
+++ b/DeepDrftModels/Models/PagingParameters.cs
@@ -0,0 +1,25 @@
+using System.Linq.Expressions;
+
+namespace DeepDrftModels.Models;
+
+public class PagingParameters
+{
+ private const int _maxPageSize = 100;
+ private int _pageSize = 20;
+
+ public int Page { get; set; } = 1;
+
+ public int PageSize
+ {
+ get => _pageSize;
+ set => _pageSize = value > _maxPageSize ? _maxPageSize : value;
+ }
+}
+
+public class PagingParameters : PagingParameters
+{
+ public Expression>? OrderBy { get; set; }
+ public bool IsDescending { get; set; } = false;
+
+ public int Skip => (Page - 1) * PageSize;
+}
\ No newline at end of file