diff --git a/RouteGuide/RouteGuide.sln b/RouteGuide/RouteGuide.sln
index 1ab89a4..c9aaa6c 100644
--- a/RouteGuide/RouteGuide.sln
+++ b/RouteGuide/RouteGuide.sln
@@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RouteGuideView", "RouteGuid
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RouteGuideDataModels", "RouteGuideDataModels\RouteGuideDataModels.csproj", "{734B62E6-F4F0-4356-A4BC-067F52416282}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RouteGuideContracts", "RouteGuideContracts\RouteGuideContracts.csproj", "{895094AD-E3AC-4E1F-83DC-283E65EB072F}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -21,6 +23,10 @@ Global
{734B62E6-F4F0-4356-A4BC-067F52416282}.Debug|Any CPU.Build.0 = Debug|Any CPU
{734B62E6-F4F0-4356-A4BC-067F52416282}.Release|Any CPU.ActiveCfg = Release|Any CPU
{734B62E6-F4F0-4356-A4BC-067F52416282}.Release|Any CPU.Build.0 = Release|Any CPU
+ {895094AD-E3AC-4E1F-83DC-283E65EB072F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {895094AD-E3AC-4E1F-83DC-283E65EB072F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {895094AD-E3AC-4E1F-83DC-283E65EB072F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {895094AD-E3AC-4E1F-83DC-283E65EB072F}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/RouteGuide/RouteGuideContracts/BindingModels/DriverBindingModel.cs b/RouteGuide/RouteGuideContracts/BindingModels/DriverBindingModel.cs
new file mode 100644
index 0000000..fbc78ce
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/BindingModels/DriverBindingModel.cs
@@ -0,0 +1,36 @@
+using RouteGuideDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.BindingModels
+{
+ ///
+ /// Модель для передачи данных пользователя
+ /// в методы для сохранения данных для водителей
+ ///
+ public class DriverBindingModel : IDriverModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// ФИО водителя
+ ///
+ public string FullName { get; set; } = string.Empty;
+
+ ///
+ /// Номер телефона водителя
+ ///
+ public string Phone { get; set; } = string.Empty;
+
+ ///
+ /// Опыт работы водителя
+ ///
+ public int? Experience { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/BindingModels/RouteBindingModel.cs b/RouteGuide/RouteGuideContracts/BindingModels/RouteBindingModel.cs
new file mode 100644
index 0000000..48de80a
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/BindingModels/RouteBindingModel.cs
@@ -0,0 +1,40 @@
+using RouteGuideDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.BindingModels
+{
+ ///
+ /// Модель для передачи данных пользователя
+ /// в методы для сохранения данных для маршрутов
+ ///
+ public class RouteBindingModel : IRouteModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Название маршрута
+ ///
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// Идентификатор транспорта
+ ///
+ public int TransportId { get; set; }
+
+ ///
+ /// Коллекция остановок маршрута
+ ///
+ public Dictionary RouteStops
+ {
+ get;
+ set;
+ } = new();
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/BindingModels/ScheduleBindingModel.cs b/RouteGuide/RouteGuideContracts/BindingModels/ScheduleBindingModel.cs
new file mode 100644
index 0000000..1a21b7c
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/BindingModels/ScheduleBindingModel.cs
@@ -0,0 +1,46 @@
+using RouteGuideDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.BindingModels
+{
+ ///
+ /// Модель для передачи данных пользователя
+ /// в методы для сохранения данных для расписания
+ ///
+ public class ScheduleBindingModel : IScheduleModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Дата записи расписания
+ ///
+ public DateTime Date { get; set; } = DateTime.Now;
+
+ ///
+ /// Время отправления
+ ///
+ public TimeOnly DepartureTime { get; set; } = new TimeOnly();
+
+ ///
+ /// Время прибытия
+ ///
+ public TimeOnly ArrivalTime { get; set; } = new TimeOnly();
+
+ ///
+ /// Периодичность движения транспорта
+ ///
+ public TimeOnly Frequency { get; set; } = new TimeOnly();
+
+ ///
+ /// Идентификатор маршрута
+ ///
+ public int RouteId { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/BindingModels/StopBindingModel.cs b/RouteGuide/RouteGuideContracts/BindingModels/StopBindingModel.cs
new file mode 100644
index 0000000..9175a11
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/BindingModels/StopBindingModel.cs
@@ -0,0 +1,36 @@
+using RouteGuideDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.BindingModels
+{
+ ///
+ /// Модель для передачи данных пользователя
+ /// в методы для сохранения данных для остановок
+ ///
+ public class StopBindingModel : IStopModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Название остановки
+ ///
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// Название улицы
+ ///
+ public string Street { get; set; } = string.Empty;
+
+ ///
+ /// Номер дома
+ ///
+ public int Number { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/BindingModels/TransportBindingModel.cs b/RouteGuide/RouteGuideContracts/BindingModels/TransportBindingModel.cs
new file mode 100644
index 0000000..d8f0167
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/BindingModels/TransportBindingModel.cs
@@ -0,0 +1,42 @@
+using RouteGuideDataModels.Enums;
+using RouteGuideDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.BindingModels
+{
+ ///
+ /// Модель для передачи данных пользователя
+ /// в методы для сохранения данных для транспорта
+ ///
+ public class TransportBindingModel : ITransportModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Номерной знак
+ ///
+ public string License { get; set; } = string.Empty;
+
+ ///
+ /// Тип транспортного средства
+ ///
+ public TransportType Type { get; set; } = TransportType.Автобус;
+
+ ///
+ /// Вместимость (количество пассажиров)
+ ///
+ public int Capacity { get; set; }
+
+ ///
+ /// Идентификатор водителя
+ ///
+ public int DriverId { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IDriverLogic.cs b/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IDriverLogic.cs
new file mode 100644
index 0000000..76e0674
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IDriverLogic.cs
@@ -0,0 +1,52 @@
+using RouteGuideContracts.BindingModels;
+using RouteGuideContracts.SearchModels;
+using RouteGuideContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.BusinessLogicsContracts
+{
+ ///
+ /// Интерфейс для описания работы бизнес-логики для водителей
+ ///
+ public interface IDriverLogic
+ {
+ ///
+ /// Получение списка
+ ///
+ ///
+ ///
+ List? ReadList(DriverSearchModel? model);
+
+ ///
+ /// Получение отдельной записи
+ ///
+ ///
+ ///
+ DriverViewModel? ReadElement(DriverSearchModel model);
+
+ ///
+ /// Создание записи
+ ///
+ ///
+ ///
+ bool Create(DriverBindingModel model);
+
+ ///
+ /// Изменение записи
+ ///
+ ///
+ ///
+ bool Update(DriverBindingModel model);
+
+ ///
+ /// Удаление записи
+ ///
+ ///
+ ///
+ bool Delete(DriverBindingModel model);
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IRouteLogic.cs b/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IRouteLogic.cs
new file mode 100644
index 0000000..fd078b0
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IRouteLogic.cs
@@ -0,0 +1,52 @@
+using RouteGuideContracts.BindingModels;
+using RouteGuideContracts.SearchModels;
+using RouteGuideContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.BusinessLogicsContracts
+{
+ ///
+ /// Интерфейс для описания работы бизнес-логики для маршрутов
+ ///
+ public interface IRouteLogic
+ {
+ ///
+ /// Получение списка
+ ///
+ ///
+ ///
+ List? ReadList(RouteSearchModel? model);
+
+ ///
+ /// Получение отдельной записи
+ ///
+ ///
+ ///
+ RouteViewModel? ReadElement(RouteSearchModel model);
+
+ ///
+ /// Создание записи
+ ///
+ ///
+ ///
+ bool Create(RouteBindingModel model);
+
+ ///
+ /// Изменение записи
+ ///
+ ///
+ ///
+ bool Update(RouteBindingModel model);
+
+ ///
+ /// Удаление записи
+ ///
+ ///
+ ///
+ bool Delete(RouteBindingModel model);
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IScheduleLogic.cs b/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IScheduleLogic.cs
new file mode 100644
index 0000000..9b2932c
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IScheduleLogic.cs
@@ -0,0 +1,52 @@
+using RouteGuideContracts.BindingModels;
+using RouteGuideContracts.SearchModels;
+using RouteGuideContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.BusinessLogicsContracts
+{
+ ///
+ /// Интерфейс для описания работы бизнес-логики для расписания
+ ///
+ public interface IScheduleLogic
+ {
+ ///
+ /// Получение списка
+ ///
+ ///
+ ///
+ List? ReadList(ScheduleSearchModel? model);
+
+ ///
+ /// Получение отдельной записи
+ ///
+ ///
+ ///
+ ScheduleViewModel? ReadElement(ScheduleSearchModel model);
+
+ ///
+ /// Создание записи
+ ///
+ ///
+ ///
+ bool Create(ScheduleBindingModel model);
+
+ ///
+ /// Изменение записи
+ ///
+ ///
+ ///
+ bool Update(ScheduleBindingModel model);
+
+ ///
+ /// Удаление записи
+ ///
+ ///
+ ///
+ bool Delete(ScheduleBindingModel model);
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IStopLogic.cs b/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IStopLogic.cs
new file mode 100644
index 0000000..84aeb86
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/IStopLogic.cs
@@ -0,0 +1,58 @@
+using RouteGuideContracts.BindingModels;
+using RouteGuideContracts.SearchModels;
+using RouteGuideContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.BusinessLogicsContracts
+{
+ ///
+ /// Интерфейс для описания работы бизнес-логики для остановок
+ ///
+ public interface IStopLogic
+ {
+ ///
+ /// Получение полного списка
+ ///
+ ///
+ List GetFullList();
+
+ ///
+ /// Получение фильтрованного списка
+ ///
+ ///
+ ///
+ List GetFilteredList(StopSearchModel model);
+
+ ///
+ /// Получение элемента
+ ///
+ ///
+ ///
+ StopViewModel? GetElement(StopSearchModel model);
+
+ ///
+ /// Добавление элемента
+ ///
+ ///
+ ///
+ StopViewModel? Insert(StopBindingModel model);
+
+ ///
+ /// Редактирование элемента
+ ///
+ ///
+ ///
+ StopViewModel? Update(StopBindingModel model);
+
+ ///
+ /// Удаление элемента
+ ///
+ ///
+ ///
+ StopViewModel? Delete(StopBindingModel model);
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/ITransportLogic.cs b/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/ITransportLogic.cs
new file mode 100644
index 0000000..bd530d5
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/BusinessLogicsContracts/ITransportLogic.cs
@@ -0,0 +1,52 @@
+using RouteGuideContracts.BindingModels;
+using RouteGuideContracts.SearchModels;
+using RouteGuideContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.BusinessLogicsContracts
+{
+ ///
+ /// Интерфейс для описания работы бизнес-логики для транспорта
+ ///
+ public interface ITransportLogic
+ {
+ ///
+ /// Получение списка
+ ///
+ ///
+ ///
+ List? ReadList(TransportSearchModel? model);
+
+ ///
+ /// Получение отдельной записи
+ ///
+ ///
+ ///
+ TransportViewModel? ReadElement(TransportSearchModel model);
+
+ ///
+ /// Создание записи
+ ///
+ ///
+ ///
+ bool Create(TransportBindingModel model);
+
+ ///
+ /// Изменение записи
+ ///
+ ///
+ ///
+ bool Update(TransportBindingModel model);
+
+ ///
+ /// Удаление записи
+ ///
+ ///
+ ///
+ bool Delete(TransportBindingModel model);
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/RouteGuideContracts.csproj b/RouteGuide/RouteGuideContracts/RouteGuideContracts.csproj
new file mode 100644
index 0000000..539af2a
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/RouteGuideContracts.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/RouteGuide/RouteGuideContracts/SearchModels/DriverSearchModel.cs b/RouteGuide/RouteGuideContracts/SearchModels/DriverSearchModel.cs
new file mode 100644
index 0000000..acb97df
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/SearchModels/DriverSearchModel.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.SearchModels
+{
+ ///
+ /// Модель для передачи данных пользователя
+ /// в методы для поиска данных для водителей
+ ///
+ public class DriverSearchModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int? Id { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/SearchModels/RouteSearchModel.cs b/RouteGuide/RouteGuideContracts/SearchModels/RouteSearchModel.cs
new file mode 100644
index 0000000..6963c20
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/SearchModels/RouteSearchModel.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.SearchModels
+{
+ ///
+ /// Модель для передачи данных пользователя
+ /// в методы для поиска данных для маршрутов
+ ///
+ public class RouteSearchModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int? Id { get; set; }
+
+ ///
+ /// Название маршрута
+ ///
+ public string? Name { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/SearchModels/ScheduleSearchModel.cs b/RouteGuide/RouteGuideContracts/SearchModels/ScheduleSearchModel.cs
new file mode 100644
index 0000000..5d0b740
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/SearchModels/ScheduleSearchModel.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.SearchModels
+{
+ ///
+ /// Модель для передачи данных пользователя
+ /// в методы для поиска данных для расписания
+ ///
+ public class ScheduleSearchModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int? Id { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/SearchModels/StopSearchModel.cs b/RouteGuide/RouteGuideContracts/SearchModels/StopSearchModel.cs
new file mode 100644
index 0000000..57b776e
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/SearchModels/StopSearchModel.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.SearchModels
+{
+ ///
+ /// Модель для передачи данных пользователя
+ /// в методы для поиска данных для остановок
+ ///
+ public class StopSearchModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int? Id { get; set; }
+
+ ///
+ /// Название остановки
+ ///
+ public string? Name { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/SearchModels/TransportSearchModel.cs b/RouteGuide/RouteGuideContracts/SearchModels/TransportSearchModel.cs
new file mode 100644
index 0000000..d576c1f
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/SearchModels/TransportSearchModel.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.SearchModels
+{
+ ///
+ /// Модель для передачи данных пользователя
+ /// в методы для поиска данных для транспорта
+ ///
+ public class TransportSearchModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int? Id { get; set; }
+
+ ///
+ /// Номерной знак
+ ///
+ public string? License { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/StoragesContracts/IDriverStorage.cs b/RouteGuide/RouteGuideContracts/StoragesContracts/IDriverStorage.cs
new file mode 100644
index 0000000..ba2797e
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/StoragesContracts/IDriverStorage.cs
@@ -0,0 +1,58 @@
+using RouteGuideContracts.BindingModels;
+using RouteGuideContracts.SearchModels;
+using RouteGuideContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.StoragesContracts
+{
+ ///
+ /// Интерфейс для описания работы с хранилищем для водителей
+ ///
+ public interface IDriverStorage
+ {
+ ///
+ /// Получение полного списка
+ ///
+ ///
+ List GetFullList();
+
+ ///
+ /// Получение фильтрованного списка
+ ///
+ ///
+ ///
+ List GetFilteredList(DriverSearchModel model);
+
+ ///
+ /// Получение элемента
+ ///
+ ///
+ ///
+ DriverViewModel? GetElement(DriverSearchModel model);
+
+ ///
+ /// Добавление элемента
+ ///
+ ///
+ ///
+ DriverViewModel? Insert(DriverBindingModel model);
+
+ ///
+ /// Редактирование элемента
+ ///
+ ///
+ ///
+ DriverViewModel? Update(DriverBindingModel model);
+
+ ///
+ /// Удаление элемента
+ ///
+ ///
+ ///
+ DriverViewModel? Delete(DriverBindingModel model);
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/StoragesContracts/IRouteStorage.cs b/RouteGuide/RouteGuideContracts/StoragesContracts/IRouteStorage.cs
new file mode 100644
index 0000000..3523e38
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/StoragesContracts/IRouteStorage.cs
@@ -0,0 +1,58 @@
+using RouteGuideContracts.BindingModels;
+using RouteGuideContracts.SearchModels;
+using RouteGuideContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.StoragesContracts
+{
+ ///
+ /// Интерфейс для описания работы с хранилищем для маршрутов
+ ///
+ public interface IRouteStorage
+ {
+ ///
+ /// Получение полного списка
+ ///
+ ///
+ List GetFullList();
+
+ ///
+ /// Получение фильтрованного списка
+ ///
+ ///
+ ///
+ List GetFilteredList(RouteSearchModel model);
+
+ ///
+ /// Получение элемента
+ ///
+ ///
+ ///
+ RouteViewModel? GetElement(RouteSearchModel model);
+
+ ///
+ /// Добавление элемента
+ ///
+ ///
+ ///
+ TransportViewModel? Insert(RouteBindingModel model);
+
+ ///
+ /// Редактирование элемента
+ ///
+ ///
+ ///
+ RouteViewModel? Update(RouteBindingModel model);
+
+ ///
+ /// Удаление элемента
+ ///
+ ///
+ ///
+ RouteViewModel? Delete(RouteBindingModel model);
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/StoragesContracts/IScheduleStorage.cs b/RouteGuide/RouteGuideContracts/StoragesContracts/IScheduleStorage.cs
new file mode 100644
index 0000000..833961f
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/StoragesContracts/IScheduleStorage.cs
@@ -0,0 +1,58 @@
+using RouteGuideContracts.BindingModels;
+using RouteGuideContracts.SearchModels;
+using RouteGuideContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.StoragesContracts
+{
+ ///
+ /// Интерфейс для описания работы с хранилищем для расписания
+ ///
+ public interface IScheduleStorage
+ {
+ ///
+ /// Получение полного списка
+ ///
+ ///
+ List GetFullList();
+
+ ///
+ /// Получение фильтрованного списка
+ ///
+ ///
+ ///
+ List GetFilteredList(ScheduleSearchModel model);
+
+ ///
+ /// Получение элемента
+ ///
+ ///
+ ///
+ ScheduleViewModel? GetElement(ScheduleBindingModel model);
+
+ ///
+ /// Добавление элемента
+ ///
+ ///
+ ///
+ ScheduleViewModel? Insert(ScheduleBindingModel model);
+
+ ///
+ /// Редактирование элемента
+ ///
+ ///
+ ///
+ ScheduleViewModel? Update(ScheduleBindingModel model);
+
+ ///
+ /// Удаление элемента
+ ///
+ ///
+ ///
+ ScheduleViewModel? Delete(ScheduleBindingModel model);
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/StoragesContracts/IStopStorage.cs b/RouteGuide/RouteGuideContracts/StoragesContracts/IStopStorage.cs
new file mode 100644
index 0000000..56a18f1
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/StoragesContracts/IStopStorage.cs
@@ -0,0 +1,58 @@
+using RouteGuideContracts.BindingModels;
+using RouteGuideContracts.SearchModels;
+using RouteGuideContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.StoragesContracts
+{
+ ///
+ /// Интерфейс для описания работы с хранилищем для остановок
+ ///
+ public interface IStopStorage
+ {
+ ///
+ /// Получение полного списка
+ ///
+ ///
+ List GetFullList();
+
+ ///
+ /// Получение фильтрованного списка
+ ///
+ ///
+ ///
+ List GetFilteredList(StopSearchModel model);
+
+ ///
+ /// Получение элемента
+ ///
+ ///
+ ///
+ StopViewModel? GetElement(StopSearchModel model);
+
+ ///
+ /// Добавление элемента
+ ///
+ ///
+ ///
+ StopViewModel? Insert(StopBindingModel model);
+
+ ///
+ /// Редактирование элемента
+ ///
+ ///
+ ///
+ StopViewModel? Update(StopBindingModel model);
+
+ ///
+ /// Удаление элемента
+ ///
+ ///
+ ///
+ StopViewModel? Delete(StopBindingModel model);
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/StoragesContracts/ITransportStorage.cs b/RouteGuide/RouteGuideContracts/StoragesContracts/ITransportStorage.cs
new file mode 100644
index 0000000..2e14283
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/StoragesContracts/ITransportStorage.cs
@@ -0,0 +1,58 @@
+using RouteGuideContracts.BindingModels;
+using RouteGuideContracts.SearchModels;
+using RouteGuideContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.StoragesContracts
+{
+ ///
+ /// Интерфейс для описания работы с хранилищем для транспорта
+ ///
+ public interface ITransportStorage
+ {
+ ///
+ /// Получение полного списка
+ ///
+ ///
+ List GetFullList();
+
+ ///
+ /// Получение фильтрованного списка
+ ///
+ ///
+ ///
+ List GetFilteredList(TransportSearchModel model);
+
+ ///
+ /// Получение элемента
+ ///
+ ///
+ ///
+ TransportViewModel? GetElement(TransportSearchModel model);
+
+ ///
+ /// Добавление элемента
+ ///
+ ///
+ ///
+ DriverViewModel? Insert(TransportBindingModel model);
+
+ ///
+ /// Редактирование элемента
+ ///
+ ///
+ ///
+ TransportViewModel? Update(TransportBindingModel model);
+
+ ///
+ /// Удаление элемента
+ ///
+ ///
+ ///
+ TransportViewModel? Delete(TransportBindingModel model);
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/ViewModels/DriverViewModel.cs b/RouteGuide/RouteGuideContracts/ViewModels/DriverViewModel.cs
new file mode 100644
index 0000000..f46546b
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/ViewModels/DriverViewModel.cs
@@ -0,0 +1,40 @@
+using RouteGuideDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.ViewModels
+{
+ ///
+ /// Модель для передачи данных пользователю
+ /// для отображения для водителей
+ ///
+ public class DriverViewModel : IDriverModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// ФИО водителя
+ ///
+ [DisplayName("ФИО")]
+ public string FullName { get; set; } = string.Empty;
+
+ ///
+ /// Номер телефона водителя
+ ///
+ [DisplayName("Номер телефона")]
+ public string Phone { get; set; } = string.Empty;
+
+ ///
+ /// Опыт работы водителя
+ ///
+ [DisplayName("Опыт работы")]
+ public int? Experience { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/ViewModels/RouteViewModel.cs b/RouteGuide/RouteGuideContracts/ViewModels/RouteViewModel.cs
new file mode 100644
index 0000000..ebec2c7
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/ViewModels/RouteViewModel.cs
@@ -0,0 +1,42 @@
+using RouteGuideDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.ViewModels
+{
+ ///
+ /// Модель для передачи данных пользователю
+ /// для отображения для маршрутов
+ ///
+ public class RouteViewModel : IRouteModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Название маршрута
+ ///
+ [DisplayName("Название маршрута")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// Идентификатор транспорта
+ ///
+ public int TransportId { get; set; }
+
+ ///
+ /// Коллекция остановок маршрута
+ ///
+ public Dictionary RouteStops
+ {
+ get;
+ set;
+ } = new();
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/ViewModels/ScheduleViewModel.cs b/RouteGuide/RouteGuideContracts/ViewModels/ScheduleViewModel.cs
new file mode 100644
index 0000000..3a85331
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/ViewModels/ScheduleViewModel.cs
@@ -0,0 +1,51 @@
+using RouteGuideDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.ViewModels
+{
+ ///
+ /// Модель для передачи данных пользователю
+ /// для отображения для расписания
+ ///
+ public class ScheduleViewModel : IScheduleModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Дата записи расписания
+ ///
+ [DisplayName("Дата")]
+ public DateTime Date { get; set; } = DateTime.Now;
+
+ ///
+ /// Время отправления
+ ///
+ [DisplayName("Время отправления")]
+ public TimeOnly DepartureTime { get; set; } = new TimeOnly();
+
+ ///
+ /// Время прибытия
+ ///
+ [DisplayName("Время прибытия")]
+ public TimeOnly ArrivalTime { get; set; } = new TimeOnly();
+
+ ///
+ /// Периодичность движения транспорта
+ ///
+ [DisplayName("Периодичность движения транспорта")]
+ public TimeOnly Frequency { get; set; } = new TimeOnly();
+
+ ///
+ /// Идентификатор маршрута
+ ///
+ public int RouteId { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/ViewModels/StopViewModel.cs b/RouteGuide/RouteGuideContracts/ViewModels/StopViewModel.cs
new file mode 100644
index 0000000..d5d6c1e
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/ViewModels/StopViewModel.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.ViewModels
+{
+ ///
+ /// Модель для передачи данных пользователю
+ /// для отображения для остановок
+ ///
+ public class StopViewModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Название остановки
+ ///
+ [DisplayName("Название остановки")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// Название улицы
+ ///
+ [DisplayName("Название улицы")]
+ public string Street { get; set; } = string.Empty;
+
+ ///
+ /// Номер дома
+ ///
+ [DisplayName("Номер дома")]
+ public int Number { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideContracts/ViewModels/TransportViewModel.cs b/RouteGuide/RouteGuideContracts/ViewModels/TransportViewModel.cs
new file mode 100644
index 0000000..a5b6b32
--- /dev/null
+++ b/RouteGuide/RouteGuideContracts/ViewModels/TransportViewModel.cs
@@ -0,0 +1,46 @@
+using RouteGuideDataModels.Enums;
+using RouteGuideDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace RouteGuideContracts.ViewModels
+{
+ ///
+ /// Модель для передачи данных пользователю
+ /// для отображения для транспорта
+ ///
+ public class TransportViewModel : ITransportModel
+ {
+ ///
+ /// Идентификатор
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// Номерной знак
+ ///
+ [DisplayName("Номерной знак")]
+ public string License { get; set; } = string.Empty;
+
+ ///
+ /// Тип транспортного средства
+ ///
+ [DisplayName("Тип транспорта")]
+ public TransportType Type { get; set; } = TransportType.Автобус;
+
+ ///
+ /// Вместимость (количество пассажиров)
+ ///
+ [DisplayName("Вместимость")]
+ public int Capacity { get; set; }
+
+ ///
+ /// Идентификатор водителя
+ ///
+ public int DriverId { get; set; }
+ }
+}
diff --git a/RouteGuide/RouteGuideDataModels/Models/IRouteModel.cs b/RouteGuide/RouteGuideDataModels/Models/IRouteModel.cs
index 1a95d10..663c280 100644
--- a/RouteGuide/RouteGuideDataModels/Models/IRouteModel.cs
+++ b/RouteGuide/RouteGuideDataModels/Models/IRouteModel.cs
@@ -17,12 +17,12 @@ namespace RouteGuideDataModels.Models
string Name { get; }
///
- /// Идентификатор тарнспорта
+ /// Идентификатор транспорта
///
int TransportId { get; }
///
- /// Коллеция остановок маршрута
+ /// Коллекция остановок маршрута
///
Dictionary RouteStops { get; }
}