Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ilario D'Onghia #16

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions ToDoList/Entities/Attivita.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace ToDoList.Entities
{
public class Attivita
{
public int? Key { get; }
public string? NomeAttivita { get; set; }
public bool IsCompleted { get; set; }
}
}
9 changes: 9 additions & 0 deletions ToDoList/Interfaces/IAttivitaRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using ToDoList.Entities;

namespace ToDoList.Interfaces
{
public interface IAttivitaRepository : ICrud<Attivita,int>
{
void Print(string message);
}
}
48 changes: 48 additions & 0 deletions ToDoList/Interfaces/ICrud.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
namespace ToDoList.Interfaces
{
public interface ICrud<TEntity,TKey>
{
TEntity Entity { get; }
Dictionary<TKey,TEntity> EntityDictionary { get; set; }
/// <summary>
/// Questo metodo aggiunge a un dictionary un'attività con la possibilità di avere la chiave che incrementa di uno ogni volta che aggiungiamo una nuova attività. Al termine stampa l'attività aggiunta.
/// </summary>
/// <param name="entity">Attivita entity = l'attività da aggiungere al dictionary</param>
/// <exception cref="ArgumentException">Se la chiave dell'attività da aggiungere esiste già lancia un'eccezione.</exception>
void Create(TEntity entity);
/// <summary>
///
/// </summary>
/// <param name="entity">Attività entity = La nuova attività aggiornata.</param>
/// <param name="key">key = la chiave dell'attività da aggiornare.</param>
/// /// <exception cref="ArgumentException">Se non trova la chiave lancia l'eccezione</exception>
void Update(TEntity entity,TKey key);
/// <summary>
/// Questo metodo aggiunge a un dictionary un'attività con la possibilità di avere la chiave che incrementa di uno ogni volta che aggiungiamo una nuova attività. Al termine stampa l'attività aggiunta.
/// </summary>
/// <param name="entity">Attivita entity = l'attività da aggiungere al dictionary</param>
/// <exception cref="ArgumentException">Se la chiave dell'attività da aggiungere esiste già lancia un'eccezione.</exception>
bool Delete(TKey key);

/// <summary>
/// Questo metodo aggiunge gli elementi del dictionary di partenza in una lista che poi ritorna all'utente.
/// </summary>
/// <exception cref="ArgumentException">Se la lista è vuota lancia un'eccezione.</exception>
void GetAll();
/// <summary>
/// Cambia lo stato dell'attività da non svolta a svolta.
/// </summary>
/// <param name="key"></param>
void ChangeStatus(TKey key);
/// <summary>
/// Metodo che stampa la lista delle attività completate.
/// </summary>
void GetCompletedActivitiesList();
/// <summary>
/// Metodo che stampa la lista delle attività da completare.
/// </summary>
void GetNotCompleteddActivitiesList();


}
}
65 changes: 65 additions & 0 deletions ToDoList/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
using ToDoList.Entities;
using ToDoList.Interfaces;
using ToDoList.Repository;

namespace ToDoList
{
internal class Program
{
internal static IAttivitaRepository attivitaRepository = new AttivitaRepository();
static void Main(string[] args)
{
try
{
Console.WriteLine("Inserisci 1 per inserire una nuova attività.");
Console.WriteLine("Inserisci 2 per osservare tutte le attività.");
Console.WriteLine("Inserisci 3 per rimuovere un'attività.");
Console.WriteLine("Inserisci 4 per cambiare lo stato dell'attività.");
Console.WriteLine("Inserisci 5 per osservare la lista delle attività completate.");
Console.WriteLine("Inserisci 6 per osservare la lista delle attività da completare.");
Console.WriteLine("Inserisci 7 per chiudere l'applicazione.");

bool isRunning = true;
while (isRunning)
{
Console.WriteLine("Inserire un numero per scegliere la funzionalità da svolgere.");
var inputMenu = Console.ReadLine();
switch (inputMenu)
{
case "1":
Console.WriteLine("Inserire l'attività da aggiungere.");
attivitaRepository.Create(new Attivita() { NomeAttivita = Console.ReadLine(),IsCompleted=false });
break;
case "2":
attivitaRepository.GetAll();
break;
case "3":
Console.WriteLine("Inserisci l'id dell'attività da eliminare.");
attivitaRepository.Delete(int.Parse(Console.ReadLine()));
break;
case "4":
Console.WriteLine("Inserisci l'id dell'attività completata.");
attivitaRepository.ChangeStatus(int.Parse(Console.ReadLine()));
break;
case "5":
attivitaRepository.GetCompletedActivitiesList();
break;
case "6":
attivitaRepository.GetNotCompleteddActivitiesList();
break;
case "7":
Environment.Exit(0);
break;
default:
attivitaRepository.Print("Inserire un numero compreso tra 1 e 4.");
break;
}
}
}
catch (Exception ex)
{
attivitaRepository.Print(ex.Message);
}
}
}
}
110 changes: 110 additions & 0 deletions ToDoList/Repository/AttivitaRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
using ToDoList.Entities;
using ToDoList.Interfaces;

namespace ToDoList.Repository
{
public class AttivitaRepository : IAttivitaRepository
{
public Attivita? Entity { get; set; }
public Dictionary<int, Attivita> EntityDictionary { get; set; } = new Dictionary<int, Attivita>();

public void ChangeStatus(int key)
{
var oldEntity = EntityDictionary.FirstOrDefault(d => d.Key == key);
if (!EntityDictionary.TryGetValue(key, out var entityForCheck))
{
throw new ArgumentException($"Non sono state trovate attività da modificare con chiave : {key}\n");
}
oldEntity.Value.IsCompleted = true;
if(oldEntity.Value.IsCompleted)
{
Print($"La seguente attività è stata completata: {oldEntity.Value.NomeAttivita}\n");
}
}
public void Print(string message) => Console.WriteLine(message);
#region Metodi CRUD
public void Create(Attivita entity)
{
if (EntityDictionary.Any(a => a.Key == entity.Key))
{
throw new ArgumentException($"L'attività {entity.NomeAttivita} è stata già aggiunta.\n");
}
var keysList = new List<int>();
if (EntityDictionary.Keys.Count == 0) EntityDictionary.Add(0, null);
foreach (var k in EntityDictionary.Keys)
{
keysList.Add(k);
}
var lastKey = keysList.Max();
var filters = EntityDictionary.Where(x => x.Value != null).Select(x => x.Value).ToList();
bool exit = true;
foreach (var entityForCheck in filters)
{
if (filters.Last().NomeAttivita.ToLower().Equals(entity.NomeAttivita.ToLower()))
{
Console.WriteLine("Non puoi inserire la stessa attività due volte di fila.\n");
exit = false;
break;
}
}
if (exit)
{
EntityDictionary.Add(lastKey + 1, entity);
Console.WriteLine("Attività aggiunta correttamente.\n");
}
}
public bool Delete(int key)
{
var isRemoved = EntityDictionary.Remove(key);
if (!isRemoved)
{
throw new ArgumentException($"L'attività che stai rimuovendo con indice {key} non è in elenco");
}
return isRemoved;
}
public void GetAll()
{
Print("Le attività presenti sono:");
foreach (var entity in EntityDictionary)
{
if (entity.Value == null) continue;

Console.Write($"{entity.Key}. {entity.Value.NomeAttivita} = ");
if (entity.Value.IsCompleted) { Console.WriteLine("Attività svolta"); }
else { Console.WriteLine("Attività da svolgere"); }
}
if (EntityDictionary.Keys.Count == 0) Print("Non sono ancora presenti attività");

}
public void Update(Attivita entity, int key)
{
var oldEntity = EntityDictionary.FirstOrDefault(d => d.Key == key);
if (!EntityDictionary.TryGetValue(key, out var entityForCheck))
{
throw new ArgumentException($"Non sono state trovate attività da modificare con chiave : {key}\n");
}
EntityDictionary.Remove(oldEntity.Key);
EntityDictionary.Add(oldEntity.Key, entity);
Print($"La nuova attività modificata è {entity.NomeAttivita} invece di {oldEntity.Value.NomeAttivita}");
}
public void GetCompletedActivitiesList()
{
if (EntityDictionary.Count == 0) Print("La tua lista di attività completata è vuota, inserisci nuove attività. \n");
foreach (var entity in EntityDictionary)
{
if(entity.Value == null) { continue; }
if (entity.Value.IsCompleted) Console.WriteLine($"{entity.Key}. {entity.Value.NomeAttivita}");
}
}
public void GetNotCompleteddActivitiesList()
{
if (EntityDictionary.Count == 0) Print("Hai completato tutte le tue attività. \n");
foreach (var entity in EntityDictionary)
{
if (entity.Value == null) { continue; }
if (!entity.Value.IsCompleted) Console.WriteLine($"{entity.Key}. {entity.Value.NomeAttivita}");
}
}
#endregion
}
}
10 changes: 10 additions & 0 deletions ToDoList/ToDoList.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

</Project>