namespace RR3CommunityServer.Models; // User Settings for Server Configuration public class UserSettings { public int Id { get; set; } public string DeviceId { get; set; } = string.Empty; public string ServerUrl { get; set; } = string.Empty; public string Mode { get; set; } = "offline"; // "online" or "offline" public DateTime LastUpdated { get; set; } = DateTime.UtcNow; } // Progression request/response models public class ProgressionUpdate { public int? GoldEarned { get; set; } public int? CashEarned { get; set; } public int? ExperienceEarned { get; set; } public int? ReputationEarned { get; set; } } public class CarPurchaseRequest { public string SynergyId { get; set; } = string.Empty; public string CarId { get; set; } = string.Empty; public bool UseGold { get; set; } = false; } public class CarUpgradeRequest { public string SynergyId { get; set; } = string.Empty; public string CarId { get; set; } = string.Empty; public string UpgradeType { get; set; } = string.Empty; // engine, tires, suspension, etc. } public class CareerEventCompletion { public string SynergyId { get; set; } = string.Empty; public string SeriesName { get; set; } = string.Empty; public string EventName { get; set; } = string.Empty; public int StarsEarned { get; set; } // 1-3 stars public double RaceTime { get; set; } } // Standard Synergy API response wrapper public class SynergyResponse { public int resultCode { get; set; } = 0; // 0 = success, negative = error public string? message { get; set; } public T? data { get; set; } } // User models public class DeviceIdResponse { public string deviceId { get; set; } = string.Empty; public string synergyId { get; set; } = string.Empty; public long timestamp { get; set; } } public class AnonUidResponse { public string anonUid { get; set; } = string.Empty; public long expiresAt { get; set; } } // Product/Catalog models public class CatalogItem { public string itemId { get; set; } = string.Empty; public string sku { get; set; } = string.Empty; public string name { get; set; } = string.Empty; public string description { get; set; } = string.Empty; public string category { get; set; } = string.Empty; public decimal price { get; set; } public string currency { get; set; } = "USD"; public Dictionary metadata { get; set; } = new(); } public class CatalogCategory { public string categoryId { get; set; } = string.Empty; public string name { get; set; } = string.Empty; public List itemIds { get; set; } = new(); } // DRM models public class DrmNonceResponse { public string nonce { get; set; } = string.Empty; public long expiresAt { get; set; } } public class PurchasedItem { public string itemId { get; set; } = string.Empty; public string sku { get; set; } = string.Empty; public string orderId { get; set; } = string.Empty; public long purchaseTime { get; set; } public string token { get; set; } = string.Empty; } public class PurchaseVerificationRequest { public string receipt { get; set; } = string.Empty; public string signature { get; set; } = string.Empty; public string sku { get; set; } = string.Empty; public string orderId { get; set; } = string.Empty; } // Tracking models public class TrackingEvent { public string eventType { get; set; } = string.Empty; public long timestamp { get; set; } public Dictionary properties { get; set; } = new(); } // Director/Service Discovery public class DirectorResponse { public Dictionary serverUrls { get; set; } = new() { { "synergy.product", "https://localhost:5001" }, { "synergy.drm", "https://localhost:5001" }, { "synergy.user", "https://localhost:5001" }, { "synergy.tracking", "https://localhost:5001" }, { "synergy.s2s", "https://localhost:5001" } }; public string environment { get; set; } = "COMMUNITY"; public string version { get; set; } = "1.0.0"; }