< Summary

Information
Class: Services.ApiServices.OzonApi.Filters.OzonDateTimeConverter
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/OzonApi/Filters/OzonDateTimeConverter.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 10
Coverable lines: 10
Total lines: 36
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 4
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%210%
WriteJson(...)0%2040%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/OzonApi/Filters/OzonDateTimeConverter.cs

#LineLine coverage
 1using Newtonsoft.Json;
 2using Newtonsoft.Json.Converters;
 3
 4namespace Services.ApiServices.OzonApi.Filters;
 5
 6/// <summary>
 7/// Конвертер дат для Ozon API.
 8/// Ozon использует protobuf Timestamp, который требует формат RFC3339 с точностью до миллисекунд (3 знака) или микросек
 9/// .NET DateTime по умолчанию сериализует с 7 знаками после точки (тики), что вызывает ошибку 400 BadRequest.
 10/// </summary>
 11public class OzonDateTimeConverter : IsoDateTimeConverter
 12{
 013    public OzonDateTimeConverter()
 14    {
 15        // RFC3339 формат с точностью до миллисекунд: "yyyy-MM-ddTHH:mm:ss.fffZ"
 16        // Точно 3 знака после точки в секундах + обязательный timezone indicator 'Z' (UTC)
 017        DateTimeFormat = "yyyy-MM-dd'T'HH:mm:ss.fff'Z'";
 018    }
 19
 20    public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
 21    {
 022        if (value is DateTime dateTime)
 23        {
 24            // Всегда конвертируем в UTC для Ozon API
 025            var utcDateTime = dateTime.Kind == DateTimeKind.Utc
 026                ? dateTime
 027                : dateTime.ToUniversalTime();
 28
 029            writer.WriteValue(utcDateTime.ToString(DateTimeFormat));
 30        }
 31        else
 32        {
 033            base.WriteJson(writer, value, serializer);
 34        }
 035    }
 36}