Yc.Box.Types 1.2.0

dotnet add package Yc.Box.Types --version 1.2.0
                    
NuGet\Install-Package Yc.Box.Types -Version 1.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Yc.Box.Types" Version="1.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Yc.Box.Types" Version="1.2.0" />
                    
Directory.Packages.props
<PackageReference Include="Yc.Box.Types" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Yc.Box.Types --version 1.2.0
                    
#r "nuget: Yc.Box.Types, 1.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Yc.Box.Types@1.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Yc.Box.Types&version=1.2.0
                    
Install as a Cake Addin
#tool nuget:?package=Yc.Box.Types&version=1.2.0
                    
Install as a Cake Tool

Yc.Box.Types

Общая библиотека типов и перечислений для проектов YC, включая стандартные обёртки для HTTP API ответов.

Установка

dotnet add package Yc.Box.Types

Что включено

Перечисления (Enums)

  • ContactMethod - методы связи
  • ContactType - типы контактов
  • ContactTypeHelper - вспомогательные методы для работы с типами контактов
  • ParticipantType - типы участников
  • ScheduleType - типы расписания (полный день, неполный день, смены и т.д.)
  • BreakType - типы перерывов
  • ScheduleStatus - статусы расписания

Модели API ответов (Models.ApiResponses)

Стандартные типы для HTTP API ответов, обеспечивающие единообразие в API проектах:

  • ApiResponse - базовый класс для успешных ответов
  • ApiResponse<T> - ответ с данными
  • ApiErrorResponse - ответ с ошибками
  • ValidationError - детализация ошибок валидации

Модели расписания (Models)

Типы для работы с расписанием работы:

  • WorkSchedule - основная модель расписания работы
  • WorkDay - модель рабочего дня
  • Break - модель перерыва
  • TimeSlot - временной слот

Использование

API Responses

using Yc.Box.Types.Models.ApiResponses;

[ApiController]
[Route("api/[controller]")]
public class ExampleController : ControllerBase
{
    [HttpGet]
    public IActionResult GetData()
    {
        var data = new { Name = "Test", Value = 123 };
        return this.SuccessResponse(data, "Данные получены");
    }

    [HttpPost]
    public IActionResult CreateData([FromBody] CreateDataRequest request)
    {
        if (!ModelState.IsValid)
            return this.ValidationError();

        if (request.Name == null)
            return this.ValidationError("Name", "Поле обязательно для заполнения");

        // Логика создания...
        return this.SuccessResponse("Данные созданы");
    }

    [HttpGet("{id}")]
    public IActionResult GetById(int id)
    {
        var data = GetDataById(id);
        if (data == null)
            return this.NotFoundError($"Данные с ID {id} не найдены");

        return this.SuccessResponse(data);
    }
}

Работа с расписанием

using Yc.Box.Types.Models;
using Yc.Box.Types.Enums;

// Создание расписания
var schedule = new WorkSchedule
{
    Id = Guid.NewGuid(),
    Name = "Стандартное расписание",
    Type = ScheduleType.FullTime,
    Status = ScheduleStatus.Active,
    WorkDays = new List<WorkDay>
    {
        new WorkDay
        {
            DayOfWeek = DayOfWeek.Monday,
            StartTime = TimeSpan.FromHours(9),
            EndTime = TimeSpan.FromHours(18),
            Breaks = new List<Break>
            {
                new Break
                {
                    Type = BreakType.Lunch,
                    StartTime = TimeSpan.FromHours(13),
                    Duration = TimeSpan.FromMinutes(60)
                }
            }
        }
    }
};

// Проверка типа расписания
if (schedule.Type == ScheduleType.FullTime)
{
    // Логика для полного рабочего дня
}

// Проверка статуса
if (schedule.Status == ScheduleStatus.Active)
{
    // Активное расписание
}

Доступные методы расширения для ControllerBase

  • SuccessResponse(message) - успешный ответ
  • SuccessResponse<T>(data, message) - успешный ответ с данными
  • ValidationError() - ошибка валидации из ModelState
  • ValidationError(field, message, attemptedValue) - ошибка валидации для поля
  • NotFoundError(message) - ошибка "не найдено"
  • InternalServerError(message, details) - внутренняя ошибка сервера
  • UnauthorizedError(message) - ошибка авторизации
  • ForbiddenError(message) - ошибка доступа
  • CustomError(statusCode, message, details) - кастомная ошибка

Статический класс ApiResponseHelper

public class ExampleService
{
    public object ProcessData(object data)
    {
        try
        {
            // Логика обработки...
            return ApiResponseHelper.Success(data);
        }
        catch (ValidationException ex)
        {
            return ApiResponseHelper.ValidationError("Field", ex.Message);
        }
        catch (Exception ex)
        {
            return ApiResponseHelper.InternalServerError(ex.Message);
        }
    }
}

Примеры ответов

Успешный ответ с данными

{
  "success": true,
  "message": "Данные получены",
  "timestamp": "2024-01-15T10:30:00Z",
  "data": {
    "id": 1,
    "name": "Test"
  }
}

Ошибка валидации

{
  "success": false,
  "statusCode": 400,
  "message": "Неверные данные",
  "timestamp": "2024-01-15T10:30:00Z",
  "traceId": "0HN7KOGKF7QHD:00000001",
  "errors": [
    {
      "field": "Name",
      "message": "Поле обязательно для заполнения",
      "attemptedValue": null
    }
  ]
}

Ошибка "не найдено"

{
  "success": false,
  "statusCode": 404,
  "message": "Данные с ID 123 не найдены",
  "timestamp": "2024-01-15T10:30:00Z",
  "traceId": "0HN7KOGKF7QHD:00000001"
}

Перечисления расписания

ScheduleType

  • FullTime - полный рабочий день
  • PartTime - неполный рабочий день
  • Shift - сменная работа
  • Flexible - гибкое расписание
  • Remote - удаленная работа

BreakType

  • Lunch - обеденный перерыв
  • Coffee - кофе-брейк
  • Rest - отдых
  • Custom - пользовательский перерыв

ScheduleStatus

  • Active - активно
  • Inactive - неактивно
  • Draft - черновик
  • Archived - архивировано

Требования

  • .NET 9.0+
  • ASP.NET Core (для API Response types)

Версии

  • 1.2.0 - Добавлены типы для работы с расписанием (WorkSchedule, WorkDay, Break, TimeSlot и соответствующие перечисления)
  • 1.1.3 - Обновлен README с полной документацией для пакета
  • 1.1.2 - Добавлен README в NuGet пакет
  • 1.1.1 - Перенос ApiResponses в Models, обновление namespace
  • 1.1.0 - Добавление типов API ответов
  • 1.0.2 - Базовые перечисления

Лицензия

Проект YC Team

Контакты

Для вопросов и предложений обращайтесь к команде разработки YC.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net9.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.0 287 7/25/2025
1.1.3 111 7/12/2025
1.1.1 93 7/12/2025
1.0.2 91 7/4/2025
1.0.1 179 6/29/2025
1.0.0 89 6/28/2025