46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.ComponentModel.DataAnnotations.Schema;
 | |
| using System.Text.Json;
 | |
| using NodaTime;
 | |
| 
 | |
| namespace DysonNetwork.Shared.Models;
 | |
| 
 | |
| public class RealtimeCall : ModelBase
 | |
| {
 | |
|     public Guid Id { get; set; } = Guid.NewGuid();
 | |
|     public Instant? EndedAt { get; set; }
 | |
| 
 | |
|     public Guid SenderId { get; set; }
 | |
|     public ChatMember Sender { get; set; } = null!;
 | |
|     public Guid RoomId { get; set; }
 | |
|     public ChatRoom Room { get; set; } = null!;
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Provider name (e.g., "cloudflare", "agora", "twilio")
 | |
|     /// </summary>
 | |
|     public string? ProviderName { get; set; }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Service provider's session identifier
 | |
|     /// </summary>
 | |
|     public string? SessionId { get; set; }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// JSONB column containing provider-specific configuration
 | |
|     /// </summary>
 | |
|     [Column(name: "upstream", TypeName = "jsonb")]
 | |
|     public string? UpstreamConfigJson { get; set; }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Deserialized upstream configuration
 | |
|     /// </summary>
 | |
|     [NotMapped]
 | |
|     public Dictionary<string, object> UpstreamConfig
 | |
|     {
 | |
|         get => string.IsNullOrEmpty(UpstreamConfigJson)
 | |
|             ? new Dictionary<string, object>()
 | |
|             : JsonSerializer.Deserialize<Dictionary<string, object>>(UpstreamConfigJson) ?? new Dictionary<string, object>();
 | |
|         set => UpstreamConfigJson = value.Count > 0 
 | |
|             ? JsonSerializer.Serialize(value) 
 | |
|             : null;
 | |
|     }
 | |
| } |