Exemplo n.º 1
0
        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 }));
        }