♻️ refactor classes

pull/35/head
Alexandre AGOSTINHO 2 years ago
parent e1c1b428c2
commit 5e9a7f6860

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>

@ -0,0 +1,60 @@
using ConsoleApp;
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
public class ConsoleMenu : Manager
{
public ConsoleMenu(Manager manager)
{
AllRecipes = manager.AllRecipes;
}
public Recipe? ResearchOnRecipe()
{
StringBuilder sb = new StringBuilder();
SearcherRecipe searcherRecipe = new SearcherRecipe();
RecipeCollection result = AllRecipes.ResearchByName(sb.ToString());
searcherRecipe.UpdateDisplay(sb.ToString(), result);
ConsoleKeyInfo cki;
do
{
cki = Console.ReadKey(true);
switch (cki.Key)
{
case ConsoleKey.UpArrow:
searcherRecipe.SelectPrevioustLine();
break;
case ConsoleKey.DownArrow:
searcherRecipe.SelectNextLine();
break;
case ConsoleKey.Backspace:
if (sb.Length > 0)
{
sb.Remove(sb.Length - 1, 1);
result = AllRecipes.ResearchByName(sb.ToString());
}
break;
default:
sb.Append(cki.KeyChar);
result = AllRecipes.ResearchByName(sb.ToString());
break;
}
searcherRecipe.UpdateDisplay(sb.ToString(), result);
} while (cki.Key != ConsoleKey.Enter);
return searcherRecipe.CurrentSelected;
}
}
}

@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
public interface IResearchMenu<T>
{
void updateDisplay(string researchStr, T[] researchResult);
}
}

@ -2,6 +2,7 @@
using ConsoleApp; using ConsoleApp;
using Model; using Model;
using System.Text; using System.Text;
Console.WriteLine("Hello, World!\n\n"); Console.WriteLine("Hello, World!\n\n");
@ -18,40 +19,9 @@ RecipeCollection? allRecipe = recipeCollections.Find(x => x.Description.Equals("
if (allRecipe == null) if (allRecipe == null)
throw new ArgumentException("Load AllRecipe in stub: can't find 'All'."); throw new ArgumentException("Load AllRecipe in stub: can't find 'All'.");
StringBuilder sb = new StringBuilder(); Manager manager = new Manager(allRecipe);
ResearchMenuRecipe researchMenu = new ResearchMenuRecipe(); ConsoleMenu menu = new ConsoleMenu(manager);
Recipe[] result = allRecipe.ResearchByName(sb.ToString());
researchMenu.UpdateDisplay(sb.ToString(), result); Recipe? recipeRetSearchMenu = menu.ResearchOnRecipe();
ConsoleKeyInfo cki; Console.WriteLine(recipeRetSearchMenu);
do
{
cki = Console.ReadKey(true);
switch (cki.Key)
{
case ConsoleKey.UpArrow:
researchMenu.SelectPrevioustLine();
break;
case ConsoleKey.DownArrow:
researchMenu.SelectNextLine();
break;
case ConsoleKey.Backspace:
if (sb.Length > 0)
{
sb.Remove(sb.Length - 1, 1);
result = allRecipe.ResearchByName(sb.ToString());
}
break;
default:
sb.Append(cki.KeyChar);
result = allRecipe.ResearchByName(sb.ToString());
break;
}
researchMenu.UpdateDisplay(sb.ToString(), result);
} while (cki.Key != ConsoleKey.Enter);
Console.WriteLine(researchMenu.ReturnSelected());

@ -8,43 +8,45 @@ using Model;
namespace ConsoleApp namespace ConsoleApp
{ {
internal class ResearchMenuRecipe internal class SearcherRecipe
{ {
internal string displayText = "";
public int CurrentLine public int CurrentLine
{ {
get => currentLine; get => _currentLine;
set set
{ {
currentLine = value; _currentLine = value;
if (currentLine > maxLines) if (_currentLine > _maxLines)
{ {
currentLine = maxLines; _currentLine = _maxLines;
} }
if (currentLine < 0) if (_currentLine < 0)
{ {
currentLine = 0; _currentLine = 0;
} }
return; return;
} }
} }
private int currentLine = 0;
private int maxLines = 0;
private Recipe? currentSelected;
public void UpdateDisplay(string researchStr, Recipe[] researchResult) public Recipe? CurrentSelected { get; private set; }
private int _currentLine = 0;
private int _maxLines = 0;
public void UpdateDisplay(string researchStr, RecipeCollection researchResult)
{ {
maxLines = researchResult.Length - 1; _maxLines = researchResult.Count - 1;
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.AppendLine("---------------------------------------------------------"); sb.AppendLine("---------------------------------------------------------");
sb.AppendLine($" Research: {researchStr}"); sb.AppendLine($" Research: {researchStr}");
sb.AppendLine("---------------------------------------------------------"); sb.AppendLine("---------------------------------------------------------");
for (int i = 0; i < researchResult.Length; i++) for (int i = 0; i < researchResult.Count; i++)
{ {
if (i == CurrentLine) if (i == CurrentLine)
{ {
currentSelected = researchResult[i]; CurrentSelected = researchResult[i];
sb.Append($">"); sb.Append($">");
} }
sb.AppendLine($" [ {researchResult[i].Id} ]: {researchResult[i].Title} "); sb.AppendLine($" [ {researchResult[i].Id} ]: {researchResult[i].Title} ");
@ -62,10 +64,5 @@ namespace ConsoleApp
{ {
return --CurrentLine; return --CurrentLine;
} }
public Recipe? ReturnSelected()
{
return currentSelected;
}
} }
} }

@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Model
{
public interface IReasearch<T>
{
public T ResearchByName(string str);
}
}

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Model
{
public partial class Manager
{
public RecipeCollection AllRecipes { get; protected set; }
public Manager()
{
AllRecipes = new RecipeCollection(description: "All Recipes");
}
public Manager(RecipeCollection allRecipes)
{
AllRecipes = new RecipeCollection(
description: "All Recipes",
recipes: allRecipes.ToArray());
}
}
}

@ -68,6 +68,13 @@ namespace Model
return recipe; return recipe;
} }
public RecipeCollection ResearchByName(string str)
{
return new RecipeCollection(
description: $"Results of the research: {str}",
recipes: _recipes.FindAll(x => x.Title.ToLower().Contains(str.ToLower())).ToArray());
}
#region IList Methods #region IList Methods
public int IndexOf(Recipe item) public int IndexOf(Recipe item)
{ {
@ -149,11 +156,6 @@ namespace Model
} }
return sb.ToString(); return sb.ToString();
} }
public Recipe[] ResearchByName(string str)
{
return _recipes.FindAll(x => x.Title.ToLower().Contains(str.ToLower())).ToArray();
}
#endregion #endregion
} }
} }

Loading…
Cancel
Save