public IActionResult CreateNewTranslation([FromBody] JSON.TranslationRegistry newRegistry) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var language = context.TranslationLanguage.Where(l => l.Id == newRegistry.LanguageId).FirstOrDefault(); if (language == null) { return(NotFound("Language does not exist with ID " + newRegistry.LanguageId)); } var existingRegistry = context.TranslationRegistry .Where(r => r.LanguageId == newRegistry.LanguageId) .Where(r => r.Name == newRegistry.Name) .Where(r => r.AuthorPlayerId == CurrentPlayerId) .FirstOrDefault(); if (existingRegistry != null) { return(Conflict()); } TranslationValidationResult validationResult; if (!ValidateRegistry(newRegistry.Entries, out validationResult)) { return(BadRequest(validationResult.FailureReasons)); } var scaffoldRegistry = new Scaffold.TranslationRegistry { AuthorPlayerId = CurrentPlayerId, Author = CurrentSets.Player.Where(p => p.PlayerId == CurrentPlayerId).First().PlayerName, LanguageId = newRegistry.LanguageId, Name = newRegistry.Name }; context.Add(scaffoldRegistry); context.SaveChanges(); var translationKeys = context.TranslationKey.ToDictionary(k => k.Name, k => k.Id); foreach (var(key, value) in newRegistry.Entries.Tupled()) { if (!translationKeys.ContainsKey(key)) { continue; } if (String.IsNullOrWhiteSpace(value)) { continue; } var newEntry = new Scaffold.TranslationEntry { KeyId = translationKeys[key], TranslationId = scaffoldRegistry.Id, Value = value }; context.Add(newEntry); } context.SaveChanges(); return(Ok(new { newRegistryId = scaffoldRegistry.Id })); }