Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа / Курсовая ТИМП.pdf
Скачиваний:
0
Добавлен:
08.08.2026
Размер:
6 Мб
Скачать

Скрипт может быть запущен вручную или по расписанию через планировщик задач.

4.3 Серверная часть

Серверная часть реализована на платформе ASP.NET Core 8.0 с

использованием языка C#. В качестве основы для построения бизнес-логики и взаимодействия с базой данных выбран Entity Framework Core, который обеспечивает объектно-реляционное отображение и миграции схемы данных.

Система управления базами данных – Microsoft SQL Server, работающий в отдельном контейнере Docker. Для аутентификации и авторизации используется встроенный механизм ASP.NET Core Identity, расширенный пользовательской моделью ApplicationUser, содержащей дополнительные поля: роль пользователя, статус подписки и дату её окончания.

Серверная часть построена по архитектурному шаблону Model-View- Controller, где каждый контроллер отвечает за обработку HTTP-запросов,

валидацию входных данных, вызов бизнес-логики и подготовку моделей представления. Контроллеры выполняют задачи только своей функциональной области и используют встроенные механизмы ASP.NET Core Identity для аутентификации, а также атрибуты авторизации для разграничения прав доступа.

Контроллеры общего назначения, то есть доступные всем ролям с учётом ограничений:

1. AccountController – управляет учётными записями.

Методы:

а) Register (GET/POST) – регистрация нового пользователя с созданием записи в таблице Users и присвоением роли «User»;

б) Login (GET/POST) – аутентификация с использованием

SignInManager;

в) Logout (POST) – завершение сессии.

32

После успешной регистрации или входа пользователь перенаправляется на главную страницу.

Все методы, кроме Logout, доступны анонимно. Пароли хешируются средствами Identity.

2. HomeController – отображает главную страницу с каталогом фильмов.

Метод Index принимает необязательный параметр query и выполняет поиск фильмов по названию. Результат передаётся в представление в виде списка Movie. Доступен всем, включая неавторизованных пользователей.

3. MoviesController – предоставляет информацию о фильме и управляет просмотром.

Методы:

а) Details загружает фильм по идентификатору вместе с коллекциями

AudioTracks и Subtitles, проверяет необходимость подтверждения возраста

(если возрастной рейтинг 18+ и выше) и передаёт модель в представление.

б) ConfirmAge (POST, требует авторизации) сохраняет в сессии факт подтверждения возраста для данного фильма и перенаправляет на Watch.

в) Watch (только для авторизованных) перед показом выполняет две проверки: наличие активной подписки (через метод

HasActiveSubscriptionAsync, который для администратора всегда возвращает true) и подтверждение возраста. При успехе отображается страница проигрывателя. Если проверки не пройдены – перенаправление на покупку подписки или на страницу фильма с запросом возраста.

4. SubscriptionController (требует авторизации) – оформление подписки.

Методы:

а) Purchase (GET) отображает форму покупки. Для администратора сразу сообщает о наличии безлимитной подписки и возвращает в профиль.

б) Purchase (POST) принимает модель SubscriptionPurchaseViewModel,

проверяет платёжные данные (номер карты, срок, CVV – валидация через атрибуты [CreditCard], [Range]). В реальной системе эмуляция оплаты

33

отсутствует, но поля собраны для демонстрации. При успешной проверке создаётся запись в таблице Subscriptions (статус «Active», план «Месяц» или

«Год»), обновляются поля SubscriptionStatus и SubscriptionEndAt в ApplicationUser, и пользователь перенаправляется в профиль.

5. ProfileController (требует авторизации) – управление личными данными.

Методы:

а) Index отображает текущий email, статус подписки и дату окончания.

б) Update (POST) позволяет изменить email и пароль (для смены пароля требуется ввод текущего пароля, проверка через ChangePasswordAsync).

в) Delete (POST) удаляет учётную запись пользователя после выхода из системы (SignOutAsync).

Все изменения сопровождаются обновлением сессии аутентификации через RefreshSignInAsync.

Все административные контроллеры, то есть те, для которых необходима роль администратора, помечены атрибутом [Authorize(Roles = "Admin")] и

имеют базовый маршрут Admin/[Controller]. Они реализуют полноценные

CRUD-операции для управления контентом и пользователями. 6. AdminMoviesController – управление фильмами.

а) Index – список всех фильмов, упорядоченный по названию.

б) Create (GET/POST) – добавление нового фильма; валидация модели

(поля Title, Description, Year, DurationMinutes, AgeRating, FilePath). После сохранения происходит перенаправление на Index.

в) Edit (GET/POST) – изменение существующего фильма; проверка совпадения идентификаторов.

г) Delete (POST) – удаление фильма; связанные аудиодорожки и субтитры удаляются автоматически благодаря настроенному каскадному удалению в AppDbContext.

7. AdminAudioTracksController – управление аудиодорожками.

34

а) Index – отображает все дорожки с возможностью фильтрации по movieId.

б) Create (GET/POST) – добавление дорожки: выбор фильма, указание языка и пути к файлу.

в) Edit (GET/POST) – изменение существующей дорожки.

г) Delete (POST) – удаление дорожки.

После любой мутирующей операции выполняется редирект на Index с

сохранением параметра фильтра movieId.

8. AdminSubtitlesController – управление субтитрами.

Функционально полностью аналогичен AdminAudioTracksController, но оперирует сущностью Subtitle (поля: Language, FilePath). Все методы поддерживают фильтрацию по фильму и используют каскадное удаление.

9. AdminUsersController – управление пользователями (использует

UserManager<ApplicationUser>).

а) Index – список всех пользователей.

б) Edit (GET/POST) – редактирование: email, роль (Admin/User), статус подписки, дата окончания подписки. При смене роли синхронно обновляются роли в Identity через RemoveFromRolesAsync и AddToRoleAsync.

в) Delete(POST) – удаление пользователя через

UserManager.DeleteAsync.

Все действия (кроме GET-запросов на страницы) защищены от подделки межсайтовых запросов атрибутом [ValidateAntiForgeryToken].

После успешных операций в представлениях отображаются уведомления через TempData["Success"].

Ошибки валидации моделей отображаются через

ModelState.AddModelError и возвращают ту же форму с уже введёнными данными.

Контроллеры используют внедрение зависимостей: AppDbContext, UserManager<ApplicationUser>, SignInManager<ApplicationUser>. Админис-

35

Соседние файлы в папке Курсовая работа