From 5faee35dcea5495e9e138d3d73ebfc632e166eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Pouly?= Date: Sun, 4 Feb 2024 15:29:21 +0100 Subject: [PATCH] fix: raise not found on unsupported language --- .../Controllers/ExpressionsController.cs | 2 +- .../Controllers/MixedExpressionsController.cs | 22 ++++++++-- src/Expressio/Models/Mixer.cs | 38 +++++++++++++++++ src/Expressio/Models/Possibilities.cs | 42 ------------------- 4 files changed, 57 insertions(+), 47 deletions(-) delete mode 100644 src/Expressio/Models/Possibilities.cs diff --git a/src/Expressio/Controllers/ExpressionsController.cs b/src/Expressio/Controllers/ExpressionsController.cs index 92257a0..942b037 100644 --- a/src/Expressio/Controllers/ExpressionsController.cs +++ b/src/Expressio/Controllers/ExpressionsController.cs @@ -46,7 +46,7 @@ public async Task> GetExpression(long id) if (expression == null) { - return NotFound(); + return NotFound($"No expression with the following id: {id}"); } return _mapper.Map(expression); diff --git a/src/Expressio/Controllers/MixedExpressionsController.cs b/src/Expressio/Controllers/MixedExpressionsController.cs index 85a6fbd..b7ce372 100644 --- a/src/Expressio/Controllers/MixedExpressionsController.cs +++ b/src/Expressio/Controllers/MixedExpressionsController.cs @@ -27,15 +27,29 @@ public MixedExpressionsController(ExpressioContext context, IMapper mapper) [HttpGet("random")] public async Task> GetRandomMixedExpression(string lang) { - var mixed_expression = await Task.Run(() => _mixers[lang].Generate()); - return _mapper.Map(mixed_expression); + if(_mixers.TryGetValue(lang, out Mixer? mixer)) + { + var mixed_expression = await Task.Run(() => mixer.Generate()); + return _mapper.Map(mixed_expression); + } + else + { + return NotFound($"Language {lang} is not supported"); + } } [HttpGet("seeded/{seed}")] public async Task> GetSeededMixedExpression(int seed, string lang) { - var mixed_expression = await Task.Run(() => _mixers[lang].Generate(seed)); - return _mapper.Map(mixed_expression); + if(_mixers.TryGetValue(lang, out Mixer? mixer)) + { + var mixed_expression = await Task.Run(() => mixer.Generate(seed)); + return _mapper.Map(mixed_expression); + } + else + { + return NotFound($"Language {lang} is not supported"); + } } } } \ No newline at end of file diff --git a/src/Expressio/Models/Mixer.cs b/src/Expressio/Models/Mixer.cs index 56b88f7..cff9a5b 100644 --- a/src/Expressio/Models/Mixer.cs +++ b/src/Expressio/Models/Mixer.cs @@ -46,4 +46,42 @@ private void PopulateDictionnary() foreach(var kv in _dic) _weights.AddRange(Enumerable.Repeat(kv.Key, kv.Value.NumberOfPossibilities)); } + + private class Possibilities + { + public string Word { get; } + private List Expressions = new List(); + public int NumberOfPossibilities { + get + { + return Expressions.Count * (Expressions.Count - 1); + } + } + + public Possibilities(string word, Expression expression) + { + Word = word; + Expressions.Add(expression); + } + + public void AddExpression(Expression e) + { + Expressions.Add(e); + } + + public void RemoveDuplicates() + { + Expressions = Expressions.Distinct().ToList(); + } + + public MixedExpression Generate(Random rand, int seed) + { + var expressions = Expressions.OrderBy(e => rand.Next()).Take(2).ToList(); + return new MixedExpression( + $"{expressions.First().SplitFirst(Word)} {expressions.Last().SplitLast(Word)}", + [expressions.First(), expressions.Last()], + seed + ); + } + } } \ No newline at end of file diff --git a/src/Expressio/Models/Possibilities.cs b/src/Expressio/Models/Possibilities.cs deleted file mode 100644 index e37f1c1..0000000 --- a/src/Expressio/Models/Possibilities.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Humanizer; - -namespace Expressio.Models; - -public class Possibilities -{ - public string Word { get; } - private List Expressions = new List(); - public int NumberOfPossibilities { - get - { - return Expressions.Count * (Expressions.Count - 1); - } - } - - public Possibilities(string word, Expression expression) - { - Word = word; - Expressions.Add(expression); - } - - public void AddExpression(Expression e) - { - Expressions.Add(e); - } - - public void RemoveDuplicates() - { - Expressions = Expressions.Distinct().ToList(); - } - - public MixedExpression Generate(Random rand, int seed) - { - var expressions = Expressions.OrderBy(e => rand.Next()).Take(2).ToList(); - return new MixedExpression( - $"{expressions.First().SplitFirst(Word)} {expressions.Last().SplitLast(Word)}", - [expressions.First(), expressions.Last()], - seed - ); - } - -} \ No newline at end of file