Skip to content

Instantly share code, notes, and snippets.

View sunmeat's full-sized avatar
🐈
MEOW

Oleksandr Zahoruiko sunmeat

🐈
MEOW
View GitHub Profile
@sunmeat
sunmeat / task.md
Created December 17, 2025 13:17
ДЗ: багаторівнева архітектура, шар доступу до даних

Багаторівнева архітектура в ASP.NET Core MVC

Рівень доступу до даних (Data Access Layer)

Веб-додаток «Музичний портал»

Завдання

Модифікувати раніше розроблений веб-додаток «Музичний портал» з монолітною архітектурою таким чином, щоб отримати трирівневу (three-layer) архітектуру:

  1. Presentation Layer — контролери та представлення (Views).
  2. Business Logic Layer — сервіси (буде в наступних завданнях).
@sunmeat
sunmeat / task.md
Created December 17, 2025 13:15
ДЗ: музичний портал 2

Валідація моделі. Сервіси. Впровадження залежностей в ASP.NET Core MVC

Веб-сайт «Музичний портал»

Завдання

Модифікувати архітектуру веб-додатка «Музичний портал» таким чином, щоб контролер взаємодіяв з базою даних через сервіс Repository, а не безпосередньо через контекст даних (DbContext).

При цьому взаємодія контролера з сервісом Repository має відбуватися через абстракцію IRepository, щоб забезпечити слабку зв’язаність (low coupling) між класами.

Вимоги до валідації

@sunmeat
sunmeat / task.md
Created December 16, 2025 20:26
ДЗ: музичний портал

Завдання: Музичний портал

Реалізувати веб-сайт «Музичний портал», на якому користувачі можуть розміщувати та завантажувати пісні.

Основні функціональні вимоги

  • Пісні на сайті поділяються за жанрами.
  • Додавати пісні можуть тільки зареєстровані користувачі.
  • Нові користувачі можуть залишати заявки на реєстрацію, які потім активує адміністратор порталу.
  • Адміністратор має повний доступ до управління:
@sunmeat
sunmeat / task.md
Created December 16, 2025 19:51
ДЗ на IRepository

Впровадження залежностей в ASP.NET Core MVC. Сервіси

Модифікувати архітектуру раніше розробленого веб-додатка «Гостьова книга» таким чином, щоб:

  • Контролер взаємодіяв з базою даних виключно через об’єкт класу Repository, а не безпосередньо через об’єкт класу контексту даних (DbContext).
  • Робота з об’єктом класу Repository здійснювалася через інтерфейсне посилання IRepository.

Мета — забезпечити слабку зв’язність (low coupling) між класами, дотримуючись принципів інверсії залежностей (DIP) та полегшуючи тестування й підтримку коду.

Ключові переваги такого підходу

@sunmeat
sunmeat / task.md
Last active December 16, 2025 10:58
ДЗ гостьова книга

Створити веб-додаток «Гостьова книга», що задовольняє таким вимогам:

  1. На головній сторінці index.cshtml виводяться повідомлення користувачів. При цьому кожне повідомлення виводиться в окремій таблиці, де вказується логін користувача, який залишив повідомлення, текст повідомлення, а також дата і час надсилання повідомлення.

  2. У заголовковій частині головної сторінки виводяться дві посилання:

    • «Вхід у систему» — перенаправлення на сторінку авторизації login.cshtml у разі, якщо користувач не вводив логін і пароль, а увійшов у систему як гість.
    • «Реєстрація» — перенаправлення на сторінку registration.cshtml.
  3. Користувачі, які пройшли авторизацію, бачать багаторядкове текстове поле для вводу повідомлення, кнопку «Додати повідомлення» та кнопку «Вихід», за якою завершується сеанс.

@sunmeat
sunmeat / task.md
Created December 12, 2025 14:37
завдання на валідацію форм

Модифікувати веб-додаток «Десятка найкращих фільмів» наступним чином: Необхідно реалізувати валідацію моделі як на стороні сервера, так і на стороні клієнта.

Для керуванні процесом валідації використовувати:

  • вбудовані атрибути валідації Data Annotations
  • власні (кастомні) атрибути валідації

Для виведення повідомлень про помилки валідації застосовувати:

  • тег-хелпери валідації (Validation Message Tag Helper, Validation Summary Tag Helper тощо)
@sunmeat
sunmeat / 1.sql
Created December 11, 2025 17:28
asdcasdc
USE [master]
GO
/****** Object: Database [CarStore] Script Date: 11.12.2025 19:22:50 ******/
CREATE DATABASE [CarStore]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'CarStore', FILENAME = N'C:\SQL2025\DB\car.mdf' , SIZE = 15360KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)
LOG ON
( NAME = N'CarStore_log', FILENAME = N'C:\SQL2025\DB\carlog.ldf' , SIZE = 5120KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
WITH CATALOG_COLLATION = DATABASE_DEFAULT, LEDGER = OFF
@sunmeat
sunmeat / StudentController.cs
Created December 10, 2025 10:31
підказочка для домашки з прикріпленням файлів у формі (ДЗ пошук фільмів)
// POST: Створення нового студента з можливістю завантажити кілька файлів
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(
[Bind("Name,Surname,Age,GPA")] Student student,
List<IFormFile> files) // !!!!!!!!!!
{
if (ModelState.IsValid)
{
if (files?.Count > 0)
@sunmeat
sunmeat / task.md
Created December 9, 2025 12:53
ДЗ 4. CRUD-опперації

Завдання: ASP.NET Core MVC — Реалізація CRUD-операцій

Назва проєкту

«Десятка найкращих фільмів» (розширення функціональності)

Мета

Модифікувати існуючий веб-додаток на ASP.NET Core MVC так, щоб користувач міг повністю керувати списком фільмів через веб-інтерфейс.

Необхідні функції

@sunmeat
sunmeat / StudentController.cs
Last active December 9, 2025 10:21
default CRUD-controller ASP.NET Core example
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace mvc.Controllers
{
public class StudentController : Controller // контролер для CRUD-операцій над студентами
{
private readonly StudentContext _context; // контекст бази даних
public StudentController(StudentContext context) // конструктор з ін'єкцією залежностей
{