| 
									
										
										
										
											2025-07-03 15:56:06 -03:00
										 |  |  | using System.Text.Json; | 
					
						
							|  |  |  | using System.Text.Json.Serialization; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Mercados.Api.Utils | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /// <summary> | 
					
						
							|  |  |  |     /// Un convertidor de JSON personalizado para asegurar que los objetos DateTime | 
					
						
							|  |  |  |     /// se serialicen al formato ISO 8601 en UTC (con el designador 'Z'). | 
					
						
							|  |  |  |     /// </summary> | 
					
						
							|  |  |  |     public class UtcDateTimeConverter : JsonConverter<DateTime> | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2025-07-16 23:12:07 -03:00
										 |  |  |         /// <summary> | 
					
						
							|  |  |  |         /// Lee un valor DateTime desde el lector JSON y lo convierte a UTC. | 
					
						
							|  |  |  |         /// </summary> | 
					
						
							|  |  |  |         /// <param name="reader">El lector JSON.</param> | 
					
						
							|  |  |  |         /// <param name="typeToConvert">El tipo a convertir.</param> | 
					
						
							|  |  |  |         /// <param name="options">Las opciones de serialización JSON.</param> | 
					
						
							|  |  |  |         /// <returns>El valor DateTime en UTC.</returns> | 
					
						
							| 
									
										
										
										
											2025-07-03 15:56:06 -03:00
										 |  |  |         public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             // Al leer un string de fecha, nos aseguramos de que se interprete como UTC | 
					
						
							|  |  |  |             return reader.GetDateTime().ToUniversalTime(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-16 23:12:07 -03:00
										 |  |  |         /// <summary> | 
					
						
							|  |  |  |         /// Escribe un valor DateTime en formato UTC como una cadena en el escritor JSON. | 
					
						
							|  |  |  |         /// </summary> | 
					
						
							|  |  |  |         /// <param name="writer">El escritor JSON.</param> | 
					
						
							|  |  |  |         /// <param name="value">El valor DateTime a escribir.</param> | 
					
						
							|  |  |  |         /// <param name="options">Las opciones de serialización JSON.</param> | 
					
						
							|  |  |  |                 public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     // Antes de escribir el string, especificamos que el 'Kind' es Utc. | 
					
						
							|  |  |  |                     // Si ya es Utc, no hace nada. Si es Local o Unspecified, lo trata como si fuera Utc. | 
					
						
							|  |  |  |                     // Esto es seguro porque sabemos que todas nuestras fechas en la BD son UTC. | 
					
						
							|  |  |  |                     var utcValue = DateTime.SpecifyKind(value, DateTimeKind.Utc); | 
					
						
							|  |  |  |                     writer.WriteStringValue(utcValue); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2025-07-03 15:56:06 -03:00
										 |  |  |     } | 
					
						
							|  |  |  | } |