Skip to content
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
7 changes: 7 additions & 0 deletions Flashcards.Esaiy/App.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="ConnectionString"
value="Server=YOUR_SERVER;Database=YOUR_DB;User Id=YOUR_USER;Password=YOUR_PASSWORD;" />
</appSettings>
</configuration>
181 changes: 181 additions & 0 deletions Flashcards.Esaiy/Controllers/FlashcardController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
using Flashcards.Esaiy.Dtos;
using Flashcards.Esaiy.Enums;
using Flashcards.Esaiy.Helpers;
using Flashcards.Esaiy.Models;
using Flashcards.Esaiy.Repositories;
using Flashcards.Esaiy.Services;
using Spectre.Console;

namespace Flashcards.Esaiy.Controllers;

public class FlashcardController(FlashcardRepository flashcardRepository, StackService stackService)
{
public void ManageFlashcard()
{
var selectedStack = stackService.SelectStack();
if (selectedStack is null)
{
AnsiConsole.MarkupLine("there is no stack");
return;
}

while (true)
{
AnsiConsole.Clear();
FigletText title = new("Flashcard");
AnsiConsole.Write(title);
AnsiConsole.MarkupLine($"Currently used stack: {selectedStack.Name}");
var choice = AnsiConsole.Prompt(
new SelectionPrompt<FlashcardMenu>()
.Title("Choose Flashcard Menu")
.PageSize(10)
.MoreChoicesText("Move Up Or Down to Choose")
.UseConverter((option) => Formatter.FormatEnum(option))
.AddChoices(Enum.GetValues<FlashcardMenu>())
);

switch (choice)
{
case FlashcardMenu.Select_Stack:
selectedStack = stackService.SelectStack()!;
continue;
case FlashcardMenu.Create:
Create(selectedStack);
break;
case FlashcardMenu.Get_All:
GetAll(selectedStack);
break;
case FlashcardMenu.Update:
Update(selectedStack);
break;
case FlashcardMenu.Delete:
Delete(selectedStack);
break;
case FlashcardMenu.Back:
return;
}
AnsiConsole.MarkupLine("Press Any Key to Continue.");
_ = Console.ReadKey();
}
}

public void Create(Stack stack)
{
var front = AnsiConsole.Ask<string>("Enter the front side of the flashcard: ");
var back = AnsiConsole.Ask<string>("Enter the back side of the flashcard: ");

var flashcardObj = new Flashcard(front, back, stack.Id);

flashcardRepository.Create(flashcardObj);

AnsiConsole.MarkupLine($"New flashcard has been added to stack \"{stack.Name}\".");
}

public void GetAll(Stack stack)
{
var flashcards = flashcardRepository.GetAll(stack.Id);

if (flashcards.Count == 0)
{
AnsiConsole.MarkupLine("There is no flashcard in this stack.");
return;
}

var flashcardDtos = FlashcardDto.ModelToDto(flashcards);

Table table = new();
table.AddColumn("Id")
.AddColumn("Front")
.AddColumn("Back");
foreach (var f in flashcardDtos)
{
_ = table.AddRow(new Text(f.Id.ToString()), new Text(f.Front), new Text(f.Back));
}

AnsiConsole.Write(table);
}

public void Update(Stack stack)
{
var flashcards = flashcardRepository.GetAll(stack.Id);

if (flashcards.Count == 0)
{
AnsiConsole.MarkupLine("There is no flashcard in this stack.");
return;
}

var flashcardDtos = FlashcardDto.ModelToDto(flashcards);

Table table = new();
table.AddColumn("Id")
.AddColumn("Front")
.AddColumn("Back");

foreach (var f in flashcardDtos)
{
_ = table.AddRow(new Text(f.Id.ToString()), new Text(f.Front), new Text(f.Back));
}
AnsiConsole.Write(table);

var prompt = new TextPrompt<string>("Select the id of the flashcard: ");
foreach (var f in flashcardDtos)
{
prompt.AddChoice(f.Id.ToString());
}
prompt.HideChoices();

var result = AnsiConsole.Prompt(prompt);
var selectedFlashcardDto = flashcardDtos.Find(x => x.Id == int.Parse(result));

AnsiConsole.MarkupLine($"The old front side is: \"{selectedFlashcardDto!.Front}\"");
var newFront = AnsiConsole.Ask<string>("Enter new front side: ");

AnsiConsole.MarkupLine($"The old back side is: \"{selectedFlashcardDto!.Back}\"");
var newBack = AnsiConsole.Ask<string>("Enter new back side: ");

var newFlashcard = new Flashcard(selectedFlashcardDto.RealId, newFront, newBack, stack.Id);

flashcardRepository.Update(newFlashcard);

AnsiConsole.MarkupLine("Flashcard has been updated.");
}

public void Delete(Stack stack)
{
var flashcards = flashcardRepository.GetAll(stack.Id);

if (flashcards.Count == 0)
{
AnsiConsole.MarkupLine("There is no flashcard in this stack.");
return;
}

var flashcardDtos = FlashcardDto.ModelToDto(flashcards);

Table table = new();
table.AddColumn("Id")
.AddColumn("Front")
.AddColumn("Back");

foreach (var f in flashcardDtos)
{
_ = table.AddRow(new Text(f.Id.ToString()), new Text(f.Front), new Text(f.Back));
}
AnsiConsole.Write(table);

var prompt = new TextPrompt<string>("Select the id of the flashcard: ");
foreach (var f in flashcardDtos)
{
prompt.AddChoice(f.Id.ToString());
}
prompt.HideChoices();

var result = AnsiConsole.Prompt(prompt);
var selectedFlashcardDto = flashcardDtos.Find(x => x.Id == int.Parse(result));

flashcardRepository.Delete(selectedFlashcardDto!.RealId);

AnsiConsole.MarkupLine("Flashcard has been deleted");
}
}
84 changes: 84 additions & 0 deletions Flashcards.Esaiy/Controllers/ReportController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
using Flashcards.Esaiy.Repositories;
using Spectre.Console;
using Flashcards.Esaiy.Services;

namespace Flashcards.Esaiy.Controllers;

public class ReportController(ReportRepository reportRepository, StackService stackService)
{
public void GetReport()
{
var selectedStack = stackService.SelectStack();
if (selectedStack is null)
{
AnsiConsole.MarkupLine("There is no stack.");
AnsiConsole.MarkupLine("Press Any Key to Continue.");
_ = Console.ReadKey();
return;
}

var years = reportRepository.GetYears(selectedStack);

if (years.Count == 0)
{
AnsiConsole.MarkupLine("There is no recorded study session.");
AnsiConsole.MarkupLine("Press Any Key to Continue.");
_ = Console.ReadKey();
return;
}

var selectedYear = AnsiConsole.Prompt(
new SelectionPrompt<int>()
.Title("Select Year")
.PageSize(10)
.MoreChoicesText("Move Up Or Down to Choose")
.AddChoices(years)
);

var report = reportRepository.GetReport(selectedStack, selectedYear);

if (report is null)
{
AnsiConsole.MarkupLine("There is no report for this year");
AnsiConsole.MarkupLine("Press Any Key to Continue.");
_ = Console.ReadKey();
return;
}

Table table = new();
table.AddColumn("Stack Name")
.AddColumn("January")
.AddColumn("February")
.AddColumn("March")
.AddColumn("April")
.AddColumn("May")
.AddColumn("June")
.AddColumn("July")
.AddColumn("August")
.AddColumn("September")
.AddColumn("October")
.AddColumn("November")
.AddColumn("December");

table.AddRow(
new Text(report.StackName),
new Text(report.January.ToString()),
new Text(report.February.ToString()),
new Text(report.March.ToString()),
new Text(report.April.ToString()),
new Text(report.May.ToString()),
new Text(report.June.ToString()),
new Text(report.July.ToString()),
new Text(report.August.ToString()),
new Text(report.September.ToString()),
new Text(report.October.ToString()),
new Text(report.November.ToString()),
new Text(report.December.ToString())
);

AnsiConsole.Write(table);

AnsiConsole.MarkupLine("Press Any Key to Continue.");
_ = Console.ReadKey();
}
}
Loading