public async Task <IActionResult> AddWordExample(int wordId, [FromBody] Example example) { var wordFromDb = await _repo.GetOneWithCondition <Word>(word => word.Id == wordId); var exampleFromDb = await _repo.GetOneWithCondition <Example>(example => example.Eng.TrimStart().TrimEnd().Equals(example.Eng.TrimStart().TrimEnd()) || example.Vie.TrimStart().TrimEnd().Equals(example.Vie.TrimStart().TrimEnd())); if (wordFromDb == null) { return(NotFound()); } if (exampleFromDb == null) { var newExample = new Example() { Eng = example.Eng, Vie = example.Vie, Inserted = DateTime.Now }; _repo.Create(newExample); var wordExample = new WordExample() { WordId = wordId, ExampleId = newExample.Id }; _repo.Create(wordExample); } else { var wordExample = new WordExample() { WordId = wordId, ExampleId = exampleFromDb.Id }; _repo.Create(wordExample); } if (await _repo.SaveAll()) { return(Ok()); } return(BadRequest("Error on adding example")); }
public bool Update(WordExample model) { throw new NotImplementedException(); }
public WordExample Create(WordExample model) { throw new NotImplementedException(); }
private void ReadWordSenseParts(XElement itemElement, Item item) { // item/gc* int gcLetter = (char)('a' - 1); int rank = 0; foreach (XElement gc in itemElement.Elements("gc")) { gcLetter++; string pos = gc.Element("pos")?.Value; // item/gc/sns+ foreach (XElement sns in gc.Elements("sns")) { rank++; WordSensePart part = new WordSensePart { ItemId = item.Id, UserId = USERID, Rank = rank, SenseId = $"{(char)gcLetter}.{rank}", // assume for sns the 1st tip/usg child if any Tip = sns.Element("tip")?.Value, Usage = sns.Element("usg")?.Value }; // item/gc/sns/t+ // Ideally we should have only 1 t for 1 sns, but who knows StringBuilder sb = new StringBuilder(); foreach (XElement t in sns.Elements("t")) { // by now, as a best guess, just keep only hi, qf, x, xr, and text XElement filtered = FilterElement(t, _tAllowedChildren); if (sb.Length > 0) { sb.Append(" | "); } sb.Append(filtered.Value); } // TODO determine when it's a list of words part.Explanation.Value = sb.ToString(); // item/gc/sns/ex+ and its ext if any string lemma = itemElement.Element("lemma").Value; foreach (XElement ex in sns.Elements("ex")) { WordExample example = new WordExample { Usage = ex.Element("usg")?.Value, Tip = ex.Element("tip")?.Value, Source = ex.Element("src")?.Value }; // filter ex XElement filtered = FilterElement(ex, _exAllowedChildren); // expand q in ex (assume expansion is lemma) foreach (XElement q in filtered.Elements("q").ToList()) { q.Value = lemma; } example.Value = filtered.Value; // ext, filtered XElement next = ex.ElementsAfterSelf().FirstOrDefault(); if (next?.Name.LocalName == "ext") { example.Explanation = FilterElement(next, _extAllowedChildren).Value; } part.Examples.Add(example); } // item/gc/sns/related* foreach (XElement related in sns.Elements("related")) { string type = related.ReadOptionalAttribute("t", null); foreach (XElement qf in related.Elements("qf")) { var t = ParseLemmaHom(qf.Value); part.Links.Add(new WordLink { Type = type ?? "-", TargetId = BuildWordKey(t.Item1, t.Item2), TargetLabel = qf.Value }); } } item.Parts.Add(part); } } }