diff --git a/Services/ServiceTrackerDataStore.cs b/Services/ServiceTrackerDataStore.cs index bb7a992..2a6b086 100644 --- a/Services/ServiceTrackerDataStore.cs +++ b/Services/ServiceTrackerDataStore.cs @@ -41,7 +41,6 @@ namespace Disco.Plugins.ServiceTracker.Services var json = File.ReadAllText(_configPath); var config = JsonConvert.DeserializeObject(json); if (config == null) return ServiceTrackerConfig.CreateDefault(); - // Ensure new fields have defaults if (config.Technicians == null) config.Technicians = new List(); if (config.GoogleSheet == null) config.GoogleSheet = new GoogleSheetConfig(); if (string.IsNullOrEmpty(config.DiscoBaseUrl)) config.DiscoBaseUrl = "http://disco:9292"; @@ -63,12 +62,7 @@ namespace Disco.Plugins.ServiceTracker.Services public List LoadAllTickets() { - lock (_lock) - { - if (!File.Exists(_ticketsPath)) return new List(); - var json = File.ReadAllText(_ticketsPath); - return JsonConvert.DeserializeObject>(json) ?? new List(); - } + lock (_lock) { return LoadAllTicketsUnsafe(); } } public ServiceTicket GetTicket(int jobId) @@ -104,13 +98,16 @@ namespace Disco.Plugins.ServiceTracker.Services { var tickets = LoadAllTicketsUnsafe(); var ticket = tickets.FirstOrDefault(t => t.JobId == jobId); - if (ticket != null) + if (ticket == null) { - if (ticket.Notes == null) ticket.Notes = new List(); - ticket.Notes.Add(note); - ticket.LastModifiedDate = DateTime.Now; - SaveAllTicketsUnsafe(tickets); + // Auto-create if missing + ticket = new ServiceTicket { JobId = jobId, Source = "disco" }; + tickets.Add(ticket); } + if (ticket.Notes == null) ticket.Notes = new List(); + ticket.Notes.Add(note); + ticket.LastModifiedDate = DateTime.Now; + SaveAllTicketsUnsafe(tickets); } } @@ -118,12 +115,7 @@ namespace Disco.Plugins.ServiceTracker.Services public List LoadExternalTickets() { - lock (_lock) - { - if (!File.Exists(_externalPath)) return new List(); - var json = File.ReadAllText(_externalPath); - return JsonConvert.DeserializeObject>(json) ?? new List(); - } + lock (_lock) { return LoadExternalTicketsUnsafe(); } } public void SaveExternalTickets(List tickets) @@ -159,14 +151,17 @@ namespace Disco.Plugins.ServiceTracker.Services { var tickets = LoadExternalTicketsUnsafe(); var ticket = tickets.FirstOrDefault(t => t.JobId == internalId); - if (ticket != null) + if (ticket == null) { - if (ticket.Notes == null) ticket.Notes = new List(); - ticket.Notes.Add(note); - ticket.LastModifiedDate = DateTime.Now; - var json = JsonConvert.SerializeObject(tickets, Formatting.Indented); - File.WriteAllText(_externalPath, json); + // Auto-create if missing + ticket = new ServiceTicket { JobId = internalId, Source = "ntt" }; + tickets.Add(ticket); } + if (ticket.Notes == null) ticket.Notes = new List(); + ticket.Notes.Add(note); + ticket.LastModifiedDate = DateTime.Now; + var json = JsonConvert.SerializeObject(tickets, Formatting.Indented); + File.WriteAllText(_externalPath, json); } }