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 January 1, 2026 13:18
ДЗ на сортування, пагінацію та фільтрацію

Завдання: Сортування, фільтрація та посторінкова навігація в додатку "Музичний портал"

У додатку "Музичний портал" необхідно реалізувати наступну функціональність для зручного перегляду пісень:

  • Сортування даних за різними критеріями (наприклад, за назвою пісні, виконавцем, роком випуску, популярністю тощо).
  • Фільтрація даних за певними критеріями (наприклад, за конкретним жанром пісні, конкретним виконавцем або їх комбінацією).
  • Посторінкова навігація (пагінація) для перегляду списку пісень, щоб користувач міг легко переміщатися між сторінками результатів.

Ці можливості мають працювати разом: користувач може спочатку відфільтрувати пісні, потім відсортувати отриманий список і переглядати його по сторінках.

@sunmeat
sunmeat / Index.cshtml
Created January 1, 2026 12:31
вью для Sieve
@model Soccer.Models.IndexViewModel
@{
ViewData["Title"] = "Гравці";
Layout = "~/Views/Shared/_Layout.cshtml";
string filters = Context.Request.Query["filters"].FirstOrDefault() ?? "";
string sorts = Context.Request.Query["sorts"].FirstOrDefault() ?? "";
string pageSize = Context.Request.Query["pageSize"].FirstOrDefault() ?? Model.PageSize.ToString();
int currentTeamId = ViewBag.CurrentTeamId as int? ?? 0;
@sunmeat
sunmeat / PlayerIndexViewModel.cs
Created January 1, 2026 12:27
вьюмодель для Sieve
namespace Soccer.Models
{
public class IndexViewModel
{
public List<Player> Players { get; set; } = new();
public int TotalCount { get; set; }
public int Page { get; set; }
public int PageSize { get; set; }
public int TotalPages => (int)Math.Ceiling(TotalCount / (double)PageSize);
public bool HasPrevious => Page > 1;
@sunmeat
sunmeat / PlayersController.cs
Created January 1, 2026 12:24
приклад впровадження бібліотекі Sieve в контролер
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Sieve.Models;
using Sieve.Services;
using Soccer.Models;
using System.Text.RegularExpressions;
namespace Soccer.Controllers
{
@sunmeat
sunmeat / Players_Index.cshtml
Created December 30, 2025 17:40
правки показу списку гравців у вью для сортування по стовпчиках
@model IEnumerable<Soccer.Models.Player>
@{
ViewData["Title"] = "Гравці";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Список гравців</h1>
<p>
@sunmeat
sunmeat / PlayersController.cs
Created December 30, 2025 17:35
правки показу списку гравців у контролері для сортування по стовпчиках
//...
// GET: Players
public async Task<IActionResult> Index(string sortOrder, string currentSort)
{
// зберігаємо поточний порядок сортування для правильного відображення стрілок у заголовках
ViewData["CurrentSort"] = sortOrder;
// параметри для перемикання сортування
// чотири рядки нижче відповідають за сортування по імені, віку, позиції та команді
@sunmeat
sunmeat / task.md
Created December 30, 2025 14:45
ДЗ на локалізацію

Багатомовний сайт та локалізація. Ресурси.

Модифікувати веб-додаток «Музичний портал» таким чином, щоб вийшов багатомовний сайт. Для цього необхідно підготувати кілька файлів ресурсів (Resource.resx) — по одному ресурсу для кожної культури (мови).

Така концепція передбачає, що одне й те саме представлення (view) може використовуватися для всіх культур (мов), і залежно від вибраної культури завантажуються відповідні саме для неї ресурси.

@sunmeat
sunmeat / Student.cs
Created December 29, 2025 21:12
model + localization
using mvc.Resources;
using System.ComponentModel.DataAnnotations;
namespace mvc
{
public class Student
{
public int Id { get; set; }
[Display(ResourceType = typeof(SharedResources), Name = nameof(SharedResources.Name))] // !!!
@sunmeat
sunmeat / Program.cs
Created December 29, 2025 20:19
ASP.NET Core MVC + Localization
using Microsoft.AspNetCore.Localization;
using Microsoft.EntityFrameworkCore;
using mvc.Repository;
using System.Globalization;
// dotnet add package Microsoft.EntityFrameworkCore
// dotnet add package Microsoft.EntityFrameworkCore.SqlServer
// dotnet add package Microsoft.AspNetCore.Mvc.Localization
// dotnet add package Microsoft.Extensions.Localization
@sunmeat
sunmeat / script.js
Created December 29, 2025 19:54
api.mymemory.translated.net in web api client app example
const API_BASE_URL = 'https://localhost:7110/api/students';
// !!! кеш для перекладів: ключ = "текст у нижньому регістрі | цільова мова"
const translationCache = new Map();
// !!! функція перекладу тексту з української на потрібну мову через mymemory api (це безкоштовно, з підтримкою cors, без апі-ключів)
async function translateText(text, targetLng) {
if (!text || typeof text !== 'string') return text;
text = text.trim();
if (targetLng === 'uk' || !text) return text;