diff --git a/Console.ExerciseTracker.ananttuli/.gitignore b/Console.ExerciseTracker.ananttuli/.gitignore deleted file mode 100644 index 2c2ce2e5..00000000 --- a/Console.ExerciseTracker.ananttuli/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.vscode -*.db \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/App.config b/Console.ExerciseTracker.ananttuli/App/App.config deleted file mode 100644 index 0f691c4f..00000000 --- a/Console.ExerciseTracker.ananttuli/App/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/App.csproj b/Console.ExerciseTracker.ananttuli/App/App.csproj deleted file mode 100644 index 8941bd38..00000000 --- a/Console.ExerciseTracker.ananttuli/App/App.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - diff --git a/Console.ExerciseTracker.ananttuli/App/Controllers/AppController.cs b/Console.ExerciseTracker.ananttuli/App/Controllers/AppController.cs deleted file mode 100644 index 6e657bb3..00000000 --- a/Console.ExerciseTracker.ananttuli/App/Controllers/AppController.cs +++ /dev/null @@ -1,81 +0,0 @@ -using App.Util; -using Spectre.Console; - -namespace App.Controllers; - -public class AppController -{ - private readonly ExerciseController LogsController; - - public AppController(ExerciseController logsController) - { - LogsController = logsController; - } - - public async Task Run() - { - var keepRunning = true; - while (keepRunning) keepRunning = await ShowMenu(); - } - - public async Task ShowMenu() - { - string[] menuItems = - [ - "Create log", "View logs", - "Update log", "Delete log", "[red]Exit[/]" - ]; - var option = PrintMainMenu(menuItems); - - try - { - switch (option) - { - case '1': - await LogsController.CreateLog(); - break; - case '2': - await LogsController.ListAllLogs(); - break; - case '3': - await LogsController.UpdateLog(); - break; - case '4': - await LogsController.DeleteLog(); - break; - case '5': - return false; - default: - AnsiConsole.MarkupLine("[red]Please press one of the menu options above[/]"); - break; - } - } - catch (Exception ex) - { - if (ex is UserFacingException) - AnsiConsole.MarkupLine($"[red]{ex.Message}[/]"); - else - AnsiConsole.MarkupLine("[red]Error[/]"); - } - - UiUtil.PressKeyToContinue(); - - return true; - } - - private static char PrintMainMenu(string[] menuItems) - { - Console.Clear(); - AnsiConsole.MarkupLine("\n\nE X E R C I S E T R A C K E R\n"); - AnsiConsole.Write(new Rows( - menuItems.Select((menuItem, i) => new Markup($"{i + 1,-3} {menuItem,-3}")) - )); - - AnsiConsole.Write("\n\nEnter option? "); - - var option = Console.ReadKey().KeyChar; - - AnsiConsole.WriteLine("\n"); - return option; - } -} \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/Controllers/ExerciseController.cs b/Console.ExerciseTracker.ananttuli/App/Controllers/ExerciseController.cs deleted file mode 100644 index a6cfe702..00000000 --- a/Console.ExerciseTracker.ananttuli/App/Controllers/ExerciseController.cs +++ /dev/null @@ -1,187 +0,0 @@ -using System.Globalization; -using App.ExerciseLogs; -using App.ExerciseLogs.Models; -using App.Util; -using Spectre.Console; - -namespace App.Controllers; - -public class ExerciseController -{ - private readonly ExerciseService ExerciseLogsService; - - public ExerciseController(ExerciseService exerciseLogsService) - { - ExerciseLogsService = exerciseLogsService; - } - - public async Task CreateLog() - { - await ListAllLogs(); - AnsiConsole.MarkupLine($"Create exercise log"); - var (startDateTime, endDateTime) = PromptDateTimes(); - var comments = PromptForComments(); - - var created = await ExerciseLogsService.CreateExerciseLog(new ExerciseLogCreateDto( - startDateTime, - endDateTime, - comments - )); - - if (created == null) - AnsiConsole.MarkupLine("[red]ERROR: Could not create exercise log[/]"); - else - AnsiConsole.MarkupLine("[green]Created successfuly[/]"); - } - - public async Task ListAllLogs() - { - PrintLogs(await ExerciseLogsService.ListAllLogs()); - } - - public async Task UpdateLog() - { - await ListAllLogs(); - AnsiConsole.MarkupLine($"Edit exercise log"); - var exerciseLog = await PromptForExistingLog(); - var (startDateTime, endDateTime) = PromptDateTimes(exerciseLog.StartDateTime, exerciseLog.EndDateTime); - var comments = PromptForComments(exerciseLog.Comments); - - exerciseLog.StartDateTime = startDateTime; - exerciseLog.EndDateTime = endDateTime; - exerciseLog.Comments = comments; - - var updated = await ExerciseLogsService.UpdateExerciseLog(exerciseLog.Id, exerciseLog); - - if (updated == null) - AnsiConsole.MarkupLine("[red]ERROR: Could not update exercise log[/]"); - else - AnsiConsole.MarkupLine("[green]Update successful[/]"); - } - - public async Task DeleteLog() - { - await ListAllLogs(); - AnsiConsole.MarkupLine($"Delete exercise log"); - - var exerciseLog = await PromptForExistingLog(); - var deleteSuccessful = await ExerciseLogsService.DeleteExerciseLog(exerciseLog.Id); - - if (deleteSuccessful == true) - AnsiConsole.MarkupLine("[green]Delete successful[/]"); - else - AnsiConsole.MarkupLine("[red]ERROR: Could not update exercise log[/]"); - } - - private async Task PromptForExistingLog() - { - while (true) - { - var exerciseLogId = AnsiConsole.Ask("Enter exercise log ID: "); - var log = await ExerciseLogsService.GetExerciseLog(exerciseLogId); - if (log != null) - { - return log; - } - AnsiConsole.MarkupLine( - "[red]Could not find a log with that ID." + - " Please enter a valid ID from the list above[/]" - ); - } - } - - private string PromptForComments(string? existingComment = null) - { - return AnsiConsole.Ask("Comment: ", existingComment ?? ""); - } - - private static void PrintLogs(List logs) - { - if (logs.Count == 0) - { - AnsiConsole.WriteLine("No logs found"); - return; - } - - var table = new Table(); - - table.AddColumns(["Id", "Start time", "End time", "Duration", "Comments"]); - - foreach (var log in logs) - { - table.AddRow([ - log.Id.ToString(), log.StartDateTime.ToString(), log.EndDateTime.ToString(), - UiUtil.FormatDuration(log.Duration), log.Comments - ]); - } - - AnsiConsole.Write(table); - } - - private Tuple PromptDateTimes(DateTime? existingStartDateTime = null, DateTime? existingEndDateTime = null) - { - const string expectedDateTimeFormat = "yyyy-MM-dd HH:mm"; - - AnsiConsole.MarkupLine("[grey]Note: Date times must be YYYY-mm-dd hh:mm with 24hr time e.g. [/][blue]2024-12-31 14:15[/]"); - - string validStartDateTimeString = AnsiConsole.Prompt( - new TextPrompt("[green]Start[/] date time: ") - .PromptStyle("blue") - .DefaultValue(existingStartDateTime?.ToString(expectedDateTimeFormat) ?? "") - .ValidationErrorMessage("[red]That's not a valid date time[/]") - .Validate(startDateTimeInput => - { - bool validDate = DateTime.TryParseExact( - startDateTimeInput, - expectedDateTimeFormat, - CultureInfo.CurrentCulture, - DateTimeStyles.None, - out DateTime value - ); - - return validDate switch - { - false => ValidationResult.Error("\t[red]Please enter valid date format[/]"), - true => ValidationResult.Success() - }; - } - ) - ); - - DateTime startDateTime = DateTime.Parse(validStartDateTimeString); - - string validEndDateTimeString = AnsiConsole.Prompt( - new TextPrompt("[green]End[/] date time: ") - .PromptStyle("blue") - .DefaultValue(existingEndDateTime?.ToString(expectedDateTimeFormat) ?? "") - .ValidationErrorMessage("[red]That's not a valid date time[/]") - .Validate(endDateTimeInput => - { - bool validDate = DateTime.TryParseExact( - endDateTimeInput, - expectedDateTimeFormat, - CultureInfo.CurrentCulture, - DateTimeStyles.None, - out DateTime value - ); - - if (validDate == false) - { - return ValidationResult.Error("\t[red]Please enter valid date format[/]"); - } - - if (value < startDateTime) - { - return ValidationResult.Error("\t[red]End date time must be later than start date time[/]"); - } - - return ValidationResult.Success(); - } - ) - ); - - DateTime endDateTime = DateTime.Parse(validEndDateTimeString); - - return new Tuple(startDateTime, endDateTime); - } -} \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/Database/EntityFramework/ExercisesDbContext.cs b/Console.ExerciseTracker.ananttuli/App/Database/EntityFramework/ExercisesDbContext.cs deleted file mode 100644 index adc84d58..00000000 --- a/Console.ExerciseTracker.ananttuli/App/Database/EntityFramework/ExercisesDbContext.cs +++ /dev/null @@ -1,17 +0,0 @@ -using App.ExerciseLogs.Models; -using Microsoft.EntityFrameworkCore; - -namespace App.Database.EntityFramework; - -public class ExercisesDbContext : DbContext -{ - public DbSet Exercise { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder builder) - { - var dbPath = System.Configuration.ConfigurationManager.AppSettings["DbPath"] ?? - throw new System.Configuration.ConfigurationErrorsException("DbPath configuration must be defined in App.config"); - - builder.UseSqlite($"Data Source={dbPath}"); - } -} \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/Database/EntityFramework/RepositoryBase.cs b/Console.ExerciseTracker.ananttuli/App/Database/EntityFramework/RepositoryBase.cs deleted file mode 100644 index 42d3f35f..00000000 --- a/Console.ExerciseTracker.ananttuli/App/Database/EntityFramework/RepositoryBase.cs +++ /dev/null @@ -1,78 +0,0 @@ - -using Microsoft.EntityFrameworkCore; - -namespace App.Database.EntityFramework; - -public class RepositoryBase : IRepositoryBase where T : class, new() -{ - protected readonly ExercisesDbContext Db; - - public RepositoryBase(ExercisesDbContext db) - { - Db = db; - } - - public async Task DeleteOne(int id) - { - T existingEntity = await GetById(id); - - Db.Remove(existingEntity); - await Db.SaveChangesAsync(); - - var entityAfterDeletion = await FindById(id); - - return entityAfterDeletion == null; - } - - public async Task FindById(int id) - { - var result = await Db.FindAsync(typeof(T), id); - - return (T?)result; - } - - public async Task GetById(int id) - { - var result = await Db.FindAsync(typeof(T), id); - - if (result == null) - { - throw new Exception($"Could not find {nameof(T)} by ID {id}"); - } - - return (T)result; - } - - public async Task> ListAll() - { - return await Db.Set().ToListAsync(); - } - - public async Task CreateOne(T entity) - { - if (entity == null) - { - throw new ArgumentNullException($"{nameof(T)} cannot be null"); - } - - await Db.AddAsync(entity); - - await Db.SaveChangesAsync(); - - return entity; - } - - public async Task UpdateOne(T entity) - { - if (entity == null) - { - throw new ArgumentNullException($"{nameof(T)} cannot be null"); - } - - Db.Update(entity); - - await Db.SaveChangesAsync(); - - return entity; - } -} \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/Database/IRepositoryBase.cs b/Console.ExerciseTracker.ananttuli/App/Database/IRepositoryBase.cs deleted file mode 100644 index 23d4e199..00000000 --- a/Console.ExerciseTracker.ananttuli/App/Database/IRepositoryBase.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace App.Database; - -public interface IRepositoryBase -{ - public Task> ListAll(); - public Task GetById(int id); - public Task CreateOne(T entity); - public Task UpdateOne(T entity); - public Task DeleteOne(int id); -} \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/ExerciseService.cs b/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/ExerciseService.cs deleted file mode 100644 index 4284caf7..00000000 --- a/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/ExerciseService.cs +++ /dev/null @@ -1,63 +0,0 @@ -using App.Database; -using App.ExerciseLogs.Models; -using App.Util; - -namespace App.ExerciseLogs; - -public class ExerciseService -{ - private readonly IRepositoryBase ExerciseLogsRepo; - - public ExerciseService(IRepositoryBase exerciseLogsRepo) - { - ExerciseLogsRepo = exerciseLogsRepo; - } - - public async Task CreateExerciseLog(ExerciseLogCreateDto payload) - { - AssertLogTimesValid(payload.StartDateTime, payload.EndDateTime); - - return await ExerciseLogsRepo.CreateOne(new ExerciseLog - { - StartDateTime = payload.StartDateTime, - EndDateTime = payload.EndDateTime, - Comments = payload.Comments - }); - } - - public async Task GetExerciseLog(int id) => await ExerciseLogsRepo.GetById(id); - - public async Task> ListAllLogs() => await ExerciseLogsRepo.ListAll(); - - public async Task UpdateExerciseLog(int id, ExerciseLog payload) - { - if (id != payload.Id) - { - throw new Exception("Update ID must match entity ID"); - } - - AssertLogTimesValid(payload.StartDateTime, payload.EndDateTime); - - var updatedLog = await ExerciseLogsRepo.UpdateOne(payload); - - return updatedLog; - } - - public async Task DeleteExerciseLog(int id) - { - return await ExerciseLogsRepo.DeleteOne(id); - } - - private void AssertLogTimesValid(DateTime? startDateTime, DateTime? endDateTime) - { - if (startDateTime == null || endDateTime == null) - { - throw new UserFacingException("Dates must be supplied"); - } - - if (startDateTime > endDateTime) - { - throw new UserFacingException("Start date cannot be later than end date"); - } - } -} \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/Models/ExerciseLog.cs b/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/Models/ExerciseLog.cs deleted file mode 100644 index 9eacb4a0..00000000 --- a/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/Models/ExerciseLog.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace App.ExerciseLogs.Models; - -[PrimaryKey("Id")] -public class ExerciseLog -{ - public int Id { get; set; } - public DateTime StartDateTime { get; set; } - public DateTime EndDateTime { get; set; } - public string Comments { get; set; } = ""; - - public TimeSpan Duration - { - get => EndDateTime.Subtract(StartDateTime); - } -} \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/Models/ExerciseLogCreateDto.cs b/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/Models/ExerciseLogCreateDto.cs deleted file mode 100644 index a3b935d7..00000000 --- a/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/Models/ExerciseLogCreateDto.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace App.ExerciseLogs.Models; - -public record class ExerciseLogCreateDto( - DateTime StartDateTime, - DateTime EndDateTime, - string Comments -); \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/Models/ExerciseLogUpdateDto.cs b/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/Models/ExerciseLogUpdateDto.cs deleted file mode 100644 index 0c79fb85..00000000 --- a/Console.ExerciseTracker.ananttuli/App/ExerciseLogs/Models/ExerciseLogUpdateDto.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace App.ExerciseLogs.Models; - -public record class ExerciseLogUpdateDto( - int Id, - DateTime StartDateTime, - DateTime EndDateTime, - string Comments -); \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/Migrations/20240629070307_Initial.Designer.cs b/Console.ExerciseTracker.ananttuli/App/Migrations/20240629070307_Initial.Designer.cs deleted file mode 100644 index c2c91571..00000000 --- a/Console.ExerciseTracker.ananttuli/App/Migrations/20240629070307_Initial.Designer.cs +++ /dev/null @@ -1,46 +0,0 @@ -// -using System; -using App.Database.EntityFramework; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace App.Migrations -{ - [DbContext(typeof(ExercisesDbContext))] - [Migration("20240629070307_Initial")] - partial class Initial - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.6"); - - modelBuilder.Entity("App.ExerciseLogs.Models.ExerciseLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Comments") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("EndDateTime") - .HasColumnType("TEXT"); - - b.Property("StartDateTime") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Exercise"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Console.ExerciseTracker.ananttuli/App/Migrations/20240629070307_Initial.cs b/Console.ExerciseTracker.ananttuli/App/Migrations/20240629070307_Initial.cs deleted file mode 100644 index 34da2646..00000000 --- a/Console.ExerciseTracker.ananttuli/App/Migrations/20240629070307_Initial.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace App.Migrations -{ - /// - public partial class Initial : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercise", - columns: table => new - { - Id = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - StartDateTime = table.Column(type: "TEXT", nullable: false), - EndDateTime = table.Column(type: "TEXT", nullable: false), - Comments = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercise", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercise"); - } - } -} diff --git a/Console.ExerciseTracker.ananttuli/App/Migrations/ExercisesDbContextModelSnapshot.cs b/Console.ExerciseTracker.ananttuli/App/Migrations/ExercisesDbContextModelSnapshot.cs deleted file mode 100644 index c9c3f3f6..00000000 --- a/Console.ExerciseTracker.ananttuli/App/Migrations/ExercisesDbContextModelSnapshot.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -using System; -using App.Database.EntityFramework; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace App.Migrations -{ - [DbContext(typeof(ExercisesDbContext))] - partial class ExercisesDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.6"); - - modelBuilder.Entity("App.ExerciseLogs.Models.ExerciseLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Comments") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("EndDateTime") - .HasColumnType("TEXT"); - - b.Property("StartDateTime") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Exercise"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Console.ExerciseTracker.ananttuli/App/Program.cs b/Console.ExerciseTracker.ananttuli/App/Program.cs deleted file mode 100644 index 6c7ae929..00000000 --- a/Console.ExerciseTracker.ananttuli/App/Program.cs +++ /dev/null @@ -1,41 +0,0 @@ -using App.Controllers; -using App.Database; -using App.Database.EntityFramework; -using App.ExerciseLogs; -using App.ExerciseLogs.Models; -using Microsoft.Extensions.DependencyInjection; -using Spectre.Console; - -namespace App; - -public class Program -{ - public static void Main() - { - var serviceProvider = BuildServiceProvider(); - - var userInterface = serviceProvider?.GetService(); - - if (userInterface is null) - { - AnsiConsole.WriteLine("App failed to start"); - Environment.Exit(1); - } - - userInterface.Run().GetAwaiter().GetResult(); - } - - public static ServiceProvider BuildServiceProvider() - { - var serviceCollection = new ServiceCollection(); - - serviceCollection.AddDbContext(); - serviceCollection.AddTransient(typeof(IRepositoryBase<>), typeof(RepositoryBase<>)); - serviceCollection.AddTransient, RepositoryBase>(); - serviceCollection.AddTransient(typeof(ExerciseService)); - serviceCollection.AddTransient(typeof(AppController)); - serviceCollection.AddTransient(typeof(ExerciseController)); - - return serviceCollection.BuildServiceProvider(); - } -} \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/App/Util/UiUtil.cs b/Console.ExerciseTracker.ananttuli/App/Util/UiUtil.cs deleted file mode 100644 index 0dec6129..00000000 --- a/Console.ExerciseTracker.ananttuli/App/Util/UiUtil.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace App.Util; - -public static class UiUtil -{ - public static char PressKeyToContinue(string message = "Press any key to continue") - { - Console.WriteLine(message); - var keyChar = Console.ReadKey().KeyChar; - Console.Clear(); - - return keyChar; - } - - public static string FormatDuration(TimeSpan duration) - { - return string.Format( - $"{(int)duration.TotalHours,-3} h, {duration.Minutes,-3} m" - ); - } -} diff --git a/Console.ExerciseTracker.ananttuli/App/Util/UserFacingException.cs b/Console.ExerciseTracker.ananttuli/App/Util/UserFacingException.cs deleted file mode 100644 index d4533d84..00000000 --- a/Console.ExerciseTracker.ananttuli/App/Util/UserFacingException.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace App.Util; - -public class UserFacingException : Exception -{ - public UserFacingException(string message) : base(message) - { } -} \ No newline at end of file diff --git a/Console.ExerciseTracker.ananttuli/Console.ExerciseTracker.ananttuli.sln b/Console.ExerciseTracker.ananttuli/Console.ExerciseTracker.ananttuli.sln deleted file mode 100644 index 30f0ad18..00000000 --- a/Console.ExerciseTracker.ananttuli/Console.ExerciseTracker.ananttuli.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "App", "App\App.csproj", "{18335949-AEDF-4F4A-BB77-21376F1DD64E}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {18335949-AEDF-4F4A-BB77-21376F1DD64E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {18335949-AEDF-4F4A-BB77-21376F1DD64E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18335949-AEDF-4F4A-BB77-21376F1DD64E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {18335949-AEDF-4F4A-BB77-21376F1DD64E}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/Console.ExerciseTracker.ananttuli/README.rst b/Console.ExerciseTracker.ananttuli/README.rst deleted file mode 100644 index 1c06f803..00000000 --- a/Console.ExerciseTracker.ananttuli/README.rst +++ /dev/null @@ -1,28 +0,0 @@ -Exercise Tracker -================ - -Log exercise sessions and track progress. - -Run locally ------------ - -1. Clone this repository -2. ``cd /App`` -3. ``dotnet ef database update`` -4. ``dotnet run`` - -Configuration (optional) ------------------------- - -Default configuration should work as-is, but can be customised if -desired: - -- Change SQLite database path in ``App/App.config`` (default should - work) - -Tech stack ----------- - -- C# -- EntityFramework Core ORM -- SQLite \ No newline at end of file diff --git a/ExerciceTracker.Cactus/App.json b/ExerciceTracker.Cactus/App.json deleted file mode 100644 index 7052467a..00000000 --- a/ExerciceTracker.Cactus/App.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ConnectionStrings": { - "LocalDbConnection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=ExerciseDB;Integrated Security=True;" - } -} \ No newline at end of file diff --git a/ExerciceTracker.Cactus/Controller/ExerciseController.cs b/ExerciceTracker.Cactus/Controller/ExerciseController.cs deleted file mode 100644 index d9740c10..00000000 --- a/ExerciceTracker.Cactus/Controller/ExerciseController.cs +++ /dev/null @@ -1,69 +0,0 @@ -using ExerciseTracker.Cactus.Service; -using ExerciseTracker.Cactus.UI; -using Spectre.Console; - -enum MenuOptions -{ - AddExercise, - DeleteExercise, - ViewAllExercises, - UpdateExercise, - Quit -} - -namespace ExerciseTracker.Cactus.Controller -{ - public class ExerciseController - { - private readonly ExerciseService _exerciseService; - - public ExerciseController(ExerciseService exerciseService) - { - _exerciseService = exerciseService; - } - - public async Task MainMenu() - { - bool isAppRunning = true; - while (isAppRunning) - { - var option = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What would you like to do?") - .AddChoices( - MenuOptions.AddExercise, - MenuOptions.ViewAllExercises, - MenuOptions.UpdateExercise, - MenuOptions.DeleteExercise, - MenuOptions.Quit)); - - switch (option) - { - case MenuOptions.AddExercise: - var exercise = await _exerciseService.AddExerciseAsync(); - UserInterface.ShowExercise(exercise); - UserInterface.BackToMainMenuPrompt(); - break; - case MenuOptions.DeleteExercise: - var deletedExercise = await _exerciseService.DeleteExerciseAsync(); - UserInterface.ShowExercise(deletedExercise); - UserInterface.BackToMainMenuPrompt(); - break; - case MenuOptions.ViewAllExercises: - var exercises = await _exerciseService.GetAllExercisesAsync(); - UserInterface.ShowExercise(exercises); - UserInterface.BackToMainMenuPrompt(); - break; - case MenuOptions.UpdateExercise: - var updatedExercise = await _exerciseService.UpdateExerciseAsync(); - UserInterface.ShowExercise(updatedExercise); - UserInterface.BackToMainMenuPrompt(); - break; - case MenuOptions.Quit: - isAppRunning = false; - break; - } - } - } - } -} diff --git a/ExerciceTracker.Cactus/Data/ExerciseDbContext.cs b/ExerciceTracker.Cactus/Data/ExerciseDbContext.cs deleted file mode 100644 index fe56591a..00000000 --- a/ExerciceTracker.Cactus/Data/ExerciseDbContext.cs +++ /dev/null @@ -1,20 +0,0 @@ -using ExerciseTracker.Cactus.Model; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.Cactus.Data -{ - public class ExerciseDbContext : DbContext - { - public DbSet ExerciseSet { get; set; } - - public ExerciseDbContext(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - base.OnModelCreating(modelBuilder); - } - } -} diff --git a/ExerciceTracker.Cactus/Data/Interfaces/IExerciseRepository .cs b/ExerciceTracker.Cactus/Data/Interfaces/IExerciseRepository .cs deleted file mode 100644 index cc0f319c..00000000 --- a/ExerciceTracker.Cactus/Data/Interfaces/IExerciseRepository .cs +++ /dev/null @@ -1,8 +0,0 @@ -using ExerciseTracker.Cactus.Model; - -namespace ExerciseTracker.Cactus.Data.Interfaces -{ - public interface IExerciseRepository : IRepository - { - } -} diff --git a/ExerciceTracker.Cactus/Data/Interfaces/IRepository.cs b/ExerciceTracker.Cactus/Data/Interfaces/IRepository.cs deleted file mode 100644 index e08cd849..00000000 --- a/ExerciceTracker.Cactus/Data/Interfaces/IRepository.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciseTracker.Cactus.Data.Interfaces -{ - public interface IRepository where T : class - { - Task> GetAllAsync(); - Task GetByIdAsync(int id); - Task AddAsync(T entity); - Task UpdateAsync(T entity); - Task DeleteAsync(int id); - } -} diff --git a/ExerciceTracker.Cactus/Data/Repositories/ExerciseRepository .cs b/ExerciceTracker.Cactus/Data/Repositories/ExerciseRepository .cs deleted file mode 100644 index 47752290..00000000 --- a/ExerciceTracker.Cactus/Data/Repositories/ExerciseRepository .cs +++ /dev/null @@ -1,12 +0,0 @@ -using ExerciseTracker.Cactus.Data.Interfaces; -using ExerciseTracker.Cactus.Model; - -namespace ExerciseTracker.Cactus.Data.Repositories -{ - public class ExerciseRepository : Repository, IExerciseRepository - { - public ExerciseRepository(ExerciseDbContext context) : base(context) - { - } - } -} diff --git a/ExerciceTracker.Cactus/Data/Repositories/Repository.cs b/ExerciceTracker.Cactus/Data/Repositories/Repository.cs deleted file mode 100644 index 72761cfd..00000000 --- a/ExerciceTracker.Cactus/Data/Repositories/Repository.cs +++ /dev/null @@ -1,47 +0,0 @@ -using ExerciseTracker.Cactus.Data.Interfaces; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.Cactus.Data.Repositories -{ - public class Repository : IRepository where T : class - { - protected readonly DbContext _context; - - public Repository(DbContext context) - { - _context = context; - } - - public async Task> GetAllAsync() - { - return await _context.Set().ToListAsync(); - } - - public async Task GetByIdAsync(int id) - { - return await _context.Set().FindAsync(id); - } - - public async Task AddAsync(T entity) - { - await _context.Set().AddAsync(entity); - await _context.SaveChangesAsync(); - } - - public async Task UpdateAsync(T entity) - { - _context.Set().Update(entity); - await _context.SaveChangesAsync(); - } - - public async Task DeleteAsync(int id) - { - var entity = await GetByIdAsync(id); - if (entity != null) - { - _context.Set().Remove(entity); - await _context.SaveChangesAsync(); - } - } - } -} diff --git a/ExerciceTracker.Cactus/ExerciceTracker.Cactus.sln b/ExerciceTracker.Cactus/ExerciceTracker.Cactus.sln deleted file mode 100644 index 737163b9..00000000 --- a/ExerciceTracker.Cactus/ExerciceTracker.Cactus.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.6.33815.320 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExerciseTracker.Cactus", "ExerciseTracker.Cactus.csproj", "{90B3F9B2-4261-412C-82C2-5F1E2A85B900}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {90B3F9B2-4261-412C-82C2-5F1E2A85B900}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {90B3F9B2-4261-412C-82C2-5F1E2A85B900}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90B3F9B2-4261-412C-82C2-5F1E2A85B900}.Release|Any CPU.ActiveCfg = Release|Any CPU - {90B3F9B2-4261-412C-82C2-5F1E2A85B900}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {A7F18757-E79F-4D61-87D4-35125C291531} - EndGlobalSection -EndGlobal diff --git a/ExerciceTracker.Cactus/ExerciseTracker.Cactus.csproj b/ExerciceTracker.Cactus/ExerciseTracker.Cactus.csproj deleted file mode 100644 index dbecaa48..00000000 --- a/ExerciceTracker.Cactus/ExerciseTracker.Cactus.csproj +++ /dev/null @@ -1,32 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - PreserveNewest - - - - - - - diff --git a/ExerciceTracker.Cactus/Migrations/20240519080422_InitialCreate.Designer.cs b/ExerciceTracker.Cactus/Migrations/20240519080422_InitialCreate.Designer.cs deleted file mode 100644 index 900b7482..00000000 --- a/ExerciceTracker.Cactus/Migrations/20240519080422_InitialCreate.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using ExerciseTracker.Cactus.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Cactus.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - [Migration("20240519080422_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Cactus.Model.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("ExerciseSet"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciceTracker.Cactus/Migrations/20240519080422_InitialCreate.cs b/ExerciceTracker.Cactus/Migrations/20240519080422_InitialCreate.cs deleted file mode 100644 index b32385f8..00000000 --- a/ExerciceTracker.Cactus/Migrations/20240519080422_InitialCreate.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Cactus.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "ExerciseSet", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "int", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_ExerciseSet", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "ExerciseSet"); - } - } -} diff --git a/ExerciceTracker.Cactus/Migrations/ExerciseDbContextModelSnapshot.cs b/ExerciceTracker.Cactus/Migrations/ExerciseDbContextModelSnapshot.cs deleted file mode 100644 index 5bdaf513..00000000 --- a/ExerciceTracker.Cactus/Migrations/ExerciseDbContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker.Cactus.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Cactus.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - partial class ExerciseDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Cactus.Model.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("ExerciseSet"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciceTracker.Cactus/Model/Exercise.cs b/ExerciceTracker.Cactus/Model/Exercise.cs deleted file mode 100644 index ee70a9d6..00000000 --- a/ExerciceTracker.Cactus/Model/Exercise.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Microsoft.Identity.Client; - -namespace ExerciseTracker.Cactus.Model -{ - public class Exercise - { - public int Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public int Duration { get; set; } - public string Comments { get; set; } - - public Exercise() - { } - - public Exercise(DateTime dateStart, DateTime dateEnd, int duration, string comments) - { - DateStart = dateStart; - DateEnd = dateEnd; - Duration = duration; - Comments = comments; - } - } -} diff --git a/ExerciceTracker.Cactus/Program.cs b/ExerciceTracker.Cactus/Program.cs deleted file mode 100644 index ef2aaf35..00000000 --- a/ExerciceTracker.Cactus/Program.cs +++ /dev/null @@ -1,39 +0,0 @@ -using ExerciseTracker.Cactus.Controller; -using ExerciseTracker.Cactus.Data; -using ExerciseTracker.Cactus.Data.Interfaces; -using ExerciseTracker.Cactus.Data.Repositories; -using ExerciseTracker.Cactus.Service; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -public class Program -{ - public static async Task Main(string[] args) - { - var host = new HostBuilder() - .ConfigureServices((hostContext, services) => - { - var configuration = new ConfigurationBuilder() - .SetBasePath(AppContext.BaseDirectory) - .AddJsonFile("App.json", optional: false, reloadOnChange: true) - .Build(); - - services.AddDbContext(options => - options.UseSqlServer(configuration.GetConnectionString("LocalDbConnection"))); - - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - }) - .Build(); - - using (var scope = host.Services.CreateScope()) - { - var services = scope.ServiceProvider; - var controller = services.GetRequiredService(); - await controller.MainMenu(); - } - } -} diff --git a/ExerciceTracker.Cactus/README.md b/ExerciceTracker.Cactus/README.md deleted file mode 100644 index 3f674ed6..00000000 --- a/ExerciceTracker.Cactus/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Exercise Tracker Console Application - -The Console application record the exercise data. It utilizes the `Repository Pattern` in its implementation. - -## ScreenShots - -Here is some screenshots in this application's run time. - -![ExerciseTrackerScreenShots](./img/exerciseTracker.png) - -## Reference - -* [Tutorial: Use dependency injection in .NET](https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection-usage) - -* ChatGPT diff --git a/ExerciceTracker.Cactus/Service/ExerciseService.cs b/ExerciceTracker.Cactus/Service/ExerciseService.cs deleted file mode 100644 index d57c6d56..00000000 --- a/ExerciceTracker.Cactus/Service/ExerciseService.cs +++ /dev/null @@ -1,61 +0,0 @@ -using ExerciseTracker.Cactus.Data.Interfaces; -using ExerciseTracker.Cactus.Model; -using Spectre.Console; - -namespace ExerciseTracker.Cactus.Service -{ - public class ExerciseService - { - private readonly IExerciseRepository _exerciseRepository; - - public ExerciseService(IExerciseRepository exerciseRepository) - { - _exerciseRepository = exerciseRepository; - } - - public async Task> GetAllExercisesAsync() - { - return await _exerciseRepository.GetAllAsync(); - } - - public async Task AddExerciseAsync() - { - Exercise exercise = ExerciseServiceHelper.InputExercise(); - - await _exerciseRepository.AddAsync(exercise); - - return exercise; - } - - public async Task UpdateExerciseAsync() - { - var exercises = await _exerciseRepository.GetAllAsync(); - - if (exercises.Count() <= 0) { return null; } - - Exercise selectedExercise = ExerciseServiceHelper.SelectExerciseById(exercises); - - selectedExercise.DateStart = AnsiConsole.Confirm("Update start date?") ? ExerciseServiceHelper.GetValidDate() : selectedExercise.DateStart; - selectedExercise.DateEnd = AnsiConsole.Confirm("Update end date?") ? ExerciseServiceHelper.GetValidEndDate(selectedExercise.DateStart) : selectedExercise.DateEnd; - selectedExercise.Duration = AnsiConsole.Confirm("Update duarion?") ? AnsiConsole.Ask("Please input duration:") : selectedExercise.Duration; - selectedExercise.Comments = AnsiConsole.Confirm("Update comments?") ? AnsiConsole.Ask("Please input your comments:") : selectedExercise.Comments; - - await _exerciseRepository.UpdateAsync(selectedExercise); - - return selectedExercise; - } - - public async Task DeleteExerciseAsync() - { - var exercises = await _exerciseRepository.GetAllAsync(); - - if (exercises.Count() <= 0) { return null; } - - var selectedExeercise = ExerciseServiceHelper.SelectExerciseById(exercises); - - await _exerciseRepository.DeleteAsync(selectedExeercise.Id); - - return selectedExeercise; - } - } -} diff --git a/ExerciceTracker.Cactus/Service/ExerciseServiceHelper.cs b/ExerciceTracker.Cactus/Service/ExerciseServiceHelper.cs deleted file mode 100644 index a01920ef..00000000 --- a/ExerciceTracker.Cactus/Service/ExerciseServiceHelper.cs +++ /dev/null @@ -1,72 +0,0 @@ -using ExerciseTracker.Cactus.Model; -using ExerciseTracker.Cactus.Util; -using Spectre.Console; - -namespace ExerciseTracker.Cactus.Service -{ - public static class ExerciseServiceHelper - { - public static Exercise InputExercise() - { - Console.WriteLine("Please type start date"); - DateTime startDate = GetValidDate(); - - Console.WriteLine("Please type end date"); - DateTime endDate = GetValidEndDate(startDate); - - int duration = AnsiConsole.Ask("Duration:"); - - string comments = AnsiConsole.Ask("Comments:"); - - Exercise exercise = new Exercise(startDate, endDate, duration, comments); - - return exercise; - } - - - public static DateTime GetValidDate() - { - var dateStr = AnsiConsole.Ask("Date (format: yyyy-MM-dd):"); - DateTime date; - while (!Validator.IsValidDate(dateStr, out date)) - { - Console.WriteLine("Please type correct format date."); - dateStr = AnsiConsole.Ask("Date (format: yyyy-MM-dd):"); - } - - return date; - } - - - public static DateTime GetValidEndDate(DateTime startDate) - { - DateTime endDate = GetValidDate(); - while (endDate < startDate) - { - Console.WriteLine($"End date should late than start date {startDate}."); - var endDateStr = AnsiConsole.Ask("End date (format: yyyy-MM-dd): "); - while (!Validator.IsValidDate(endDateStr, out endDate)) - { - Console.WriteLine("Please type correct format date."); - endDateStr = AnsiConsole.Ask("End date (format: yyyy-MM-dd): "); - } - } - return endDate; - } - - - public static Exercise SelectExerciseById(IEnumerable exercise) - { - List uniqueIds = exercise.Select(exercise => exercise.Id).Distinct().ToList(); - - var selectedId = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("Please choose the exercise you like to operate?") - .AddChoices(uniqueIds)); - - var selectedExercise = exercise.Where(exercise => exercise.Id == selectedId).ToArray()[0]; - - return selectedExercise; - } - } -} diff --git a/ExerciceTracker.Cactus/UI/UserInterface.cs b/ExerciceTracker.Cactus/UI/UserInterface.cs deleted file mode 100644 index 908a7bd6..00000000 --- a/ExerciceTracker.Cactus/UI/UserInterface.cs +++ /dev/null @@ -1,58 +0,0 @@ -using ExerciseTracker.Cactus.Model; -using Spectre.Console; - -namespace ExerciseTracker.Cactus.UI -{ - public class UserInterface - { - public static void ShowExercise(IEnumerable exercises) - { - if (exercises is null) - { - Console.WriteLine("No Exercise."); - return; - } - - var table = new Table(); - table.Title("Exercise Info"); - table.AddColumn("Id"); - table.AddColumn("StartTime"); - table.AddColumn("EndTime"); - table.AddColumn("Duration"); - table.AddColumn("Comments"); - - foreach (Exercise exercise in exercises) - { - table.AddRow(exercise.Id.ToString(), - exercise.DateStart.ToString("yyyy/MM/dd"), exercise.DateEnd.ToString("yyyy/MM/dd"), - exercise.Duration.ToString(), exercise.Comments); - } - - AnsiConsole.Write(table); - } - - public static void ShowExercise(Exercise exercise) - { - if (exercise == null) - { - Console.WriteLine("No Exercise."); - return; - } - - var panel = new Panel($"{exercise.DateStart.ToString("yyyy/MM/dd")} - {exercise.DateEnd.ToString("yyyy/MM/dd")} {exercise.Duration} {exercise.Comments}") - .Header("[bold]Exercise Info[/]") - .BorderColor(Color.Blue); - - panel.Padding(2, 2, 2, 2); - - AnsiConsole.Write(panel); - } - - public static void BackToMainMenuPrompt() - { - Console.WriteLine("Press any key to go back to Main Menu"); - Console.ReadLine(); - Console.Clear(); - } - } -} diff --git a/ExerciceTracker.Cactus/Util/Validator.cs b/ExerciceTracker.Cactus/Util/Validator.cs deleted file mode 100644 index 3278d8e4..00000000 --- a/ExerciceTracker.Cactus/Util/Validator.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace ExerciseTracker.Cactus.Util -{ - public class Validator - { - public static bool IsValidDate(string dateStr, out DateTime date) - { - - if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd", null, System.Globalization.DateTimeStyles.None, out date)) - { - return true; - } - return false; - } - } -} diff --git a/ExerciceTracker.Cactus/img/exerciseTracker.png b/ExerciceTracker.Cactus/img/exerciseTracker.png deleted file mode 100644 index 0a5c99df..00000000 Binary files a/ExerciceTracker.Cactus/img/exerciseTracker.png and /dev/null differ diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Controllers/ExerciseController.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Controllers/ExerciseController.cs deleted file mode 100644 index 07042dc0..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Controllers/ExerciseController.cs +++ /dev/null @@ -1,48 +0,0 @@ -using ExerciceTracker.Services; - -namespace ExerciceTracker.Controllers -{ - internal class ExerciseController - { - private readonly ExerciseService _exerciseService; - - public ExerciseController(ExerciseService exerciseService) - { - _exerciseService = exerciseService; - } - - internal void MainMenu() - { - bool isAppRunning = true; - - while (isAppRunning) - { - Console.WriteLine("\nChoose: \n"); - Console.WriteLine("1 to add an exercise\n"); - Console.WriteLine("2 to delete an exercise\n"); - Console.WriteLine("3 to see all exercises\n"); - Console.WriteLine("Q to quit\n"); - - string userInput = Console.ReadLine(); - switch (userInput.ToLower()) - { - case "1": - _exerciseService.AddService(); - break; - case "2": - _exerciseService.DeleteService(); - break; - case "3": - _exerciseService.GetAllService(); - break; - case "q": - isAppRunning = false; - break; - default: - Console.WriteLine("Invalid input."); - break; - } - } - } - } -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Models/Exercise.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Models/Exercise.cs deleted file mode 100644 index 22c717d3..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Models/Exercise.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciceTracker.Data.Models -{ - internal class Exercise - { - public int Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration { get; set; } - public string? Comments { get; set; } - } -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Models/ExerciseDbContext.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Models/ExerciseDbContext.cs deleted file mode 100644 index 84a8891e..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Models/ExerciseDbContext.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace ExerciceTracker.Data.Models -{ - internal class ExerciseDbContext : DbContext - { - public ExerciseDbContext(DbContextOptions options) : base(options) - { - } - - public DbSet Exercises { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlServer("Server=DESKTOP-ETA4JL7;Database=Exercices;Trusted_Connection=True;Integrated Security=True;Encrypt=False;"); - } - } -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Repositories/ExerciseRepository.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Repositories/ExerciseRepository.cs deleted file mode 100644 index 95927ab5..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,34 +0,0 @@ -using ExerciceTracker.Data.Models; - -namespace ExerciceTracker.Data.Repositories -{ - internal class ExerciseRepository : IExerciseRepository - { - private readonly ExerciseDbContext _context; - public ExerciseRepository(ExerciseDbContext context) - { - _context = context; - } - - public void Add(Exercise exercise) - { - _context.Add(exercise); - _context.SaveChanges(); - } - - public IEnumerable GetAll() - { - return _context.Set().ToList(); - } - - public void Delete(int id) - { - var exerciseInDb = _context.Exercises.Find(id); - if (exerciseInDb != null) - { - _context.Remove(exerciseInDb); - _context.SaveChanges(); - } - } - } -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Repositories/IExerciseRepository.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Repositories/IExerciseRepository.cs deleted file mode 100644 index 456754c7..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Data/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,11 +0,0 @@ -using ExerciceTracker.Data.Models; - -namespace ExerciceTracker.Data.Repositories -{ - internal interface IExerciseRepository - { - public IEnumerable GetAll(); - public void Add(Exercise exercise); - public void Delete(int id); - } -} \ No newline at end of file diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/ExerciceTracker.csproj b/ExerciceTrackerApp.MicVerg/ExerciceTracker/ExerciceTracker.csproj deleted file mode 100644 index cb9762f2..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/ExerciceTracker.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190646_initial.Designer.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190646_initial.Designer.cs deleted file mode 100644 index 63bee8e0..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190646_initial.Designer.cs +++ /dev/null @@ -1,57 +0,0 @@ -// -using System; -using ExerciceTracker.Data; -using ExerciceTracker.Data.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciceTracker.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - [Migration("20231213190646_initial")] - partial class initial - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciceTracker.Data.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190646_initial.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190646_initial.cs deleted file mode 100644 index 95343675..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190646_initial.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciceTracker.Migrations -{ - /// - public partial class initial : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190836_fix.Designer.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190836_fix.Designer.cs deleted file mode 100644 index d54f3f2d..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190836_fix.Designer.cs +++ /dev/null @@ -1,57 +0,0 @@ -// -using System; -using ExerciceTracker.Data; -using ExerciceTracker.Data.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciceTracker.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - [Migration("20231213190836_fix")] - partial class fix - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciceTracker.Data.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190836_fix.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190836_fix.cs deleted file mode 100644 index 101349d8..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/20231213190836_fix.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciceTracker.Migrations -{ - /// - public partial class fix : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/ExerciseDbContextModelSnapshot.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/ExerciseDbContextModelSnapshot.cs deleted file mode 100644 index 847d17ef..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Migrations/ExerciseDbContextModelSnapshot.cs +++ /dev/null @@ -1,54 +0,0 @@ -// -using System; -using ExerciceTracker.Data; -using ExerciceTracker.Data.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciceTracker.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - partial class ExerciseDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciceTracker.Data.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Program.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Program.cs deleted file mode 100644 index a7313d0e..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Program.cs +++ /dev/null @@ -1,28 +0,0 @@ -using ExerciceTracker.Controllers; -using ExerciceTracker.Data.Models; -using ExerciceTracker.Data.Repositories; -using ExerciceTracker.Services; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -var host = new HostBuilder() - .ConfigureServices((hostContext, services) => - { - services.AddDbContext(options => - options.UseSqlServer("Server=DESKTOP-ETA4JL7;Database=Exercices;Trusted_Connection=True;Integrated Security=True;Encrypt=False;")); - - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - }) - .Build(); - -using (var scope = host.Services.CreateScope()) -{ - var services = scope.ServiceProvider; - var context = services.GetRequiredService(); - var exerciseController = services.GetRequiredService(); - - exerciseController.MainMenu(); -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Services/ExerciseService.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/Services/ExerciseService.cs deleted file mode 100644 index f35742e3..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/Services/ExerciseService.cs +++ /dev/null @@ -1,54 +0,0 @@ -using ExerciceTracker.Data.Repositories; - -namespace ExerciceTracker.Services -{ - internal class ExerciseService - { - private readonly IExerciseRepository _exerciseRepository; - - public ExerciseService(IExerciseRepository exerciseRepository) - { - _exerciseRepository = exerciseRepository; - } - - public void AddService() - { - Console.Clear(); - var exercise = UserInput.GetUserInputExercise(); - _exerciseRepository.Add(exercise); - } - public void DeleteService() - { - Console.Clear(); - var exercises = _exerciseRepository.GetAll().ToList(); - if (exercises.Count() == 0) - { - Console.WriteLine("The database is empty"); - Console.ReadKey(); - } - else - { - Console.WriteLine("Enter the ID you want to delete"); - int id = int.Parse(Console.ReadLine()); - _exerciseRepository.Delete(id); - } - } - public void GetAllService() - { - Console.Clear(); - var exercises = _exerciseRepository.GetAll().ToList(); - if (exercises.Count == 0) - { - Console.WriteLine("Db is empty"); - Console.ReadLine(); - } - else - { - foreach (var exercise in exercises) - { - Console.WriteLine($"Id: {exercise.Id}, Start: {exercise.DateStart}, End: {exercise.DateEnd}, Duration: {exercise.Duration}, Comments: {exercise.Comments}"); - } - } - } - } -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTracker/UserInput.cs b/ExerciceTrackerApp.MicVerg/ExerciceTracker/UserInput.cs deleted file mode 100644 index 2cbad6c9..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTracker/UserInput.cs +++ /dev/null @@ -1,69 +0,0 @@ -using ExerciceTracker.Data.Models; -using System.Globalization; - -namespace ExerciceTracker -{ - internal class UserInput - { - - internal static Exercise GetUserInputExercise() - { - var exercise = new Exercise(); - DateTime startTime, endTime; - bool isValidStartTime = false; - bool isValidEndTime = false; - // get start time - while (!isValidStartTime) - { - Console.WriteLine("What's the start time? (dd/mm/yyyy hh:mm) \n"); - string userInputStart = Console.ReadLine(); - - if (DateTime.TryParseExact(userInputStart, "d/M/yyyy H:m", CultureInfo.InvariantCulture, DateTimeStyles.None, out startTime)) - { - exercise.DateStart = startTime; - isValidStartTime = true; - } - else - { - Console.WriteLine("Invalid input. (dd/mm/yyyy hh:mm)"); - } - } - - // get end time - while (!isValidEndTime) - { - Console.WriteLine("What's the end time? (dd/mm/yyyy hh:mm) \n"); - string userInputEnd = Console.ReadLine(); - - if (DateTime.TryParseExact(userInputEnd, "d/M/yyyy H:m", CultureInfo.InvariantCulture, DateTimeStyles.None, out endTime)) - { - if (endTime < exercise.DateStart) - { - Console.WriteLine("Invalid input, end time can't be earlier than start time."); - } - else - { - exercise.DateEnd = endTime; - isValidEndTime = true; - } - } - else - { - Console.WriteLine("Invalid input. (dd/mm/yyyy hh:mm)"); - } - } - - // get duration - TimeSpan duration; - duration = exercise.DateEnd - exercise.DateStart; - exercise.Duration = duration; - - // get comments - Console.WriteLine("Want to add a comment?\n"); - string userInputComments = Console.ReadLine(); - exercise.Comments = userInputComments; - - return exercise; - } - } -} diff --git a/ExerciceTrackerApp.MicVerg/ExerciceTrackerApp.sln b/ExerciceTrackerApp.MicVerg/ExerciceTrackerApp.sln deleted file mode 100644 index 98fbf2fe..00000000 --- a/ExerciceTrackerApp.MicVerg/ExerciceTrackerApp.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34322.80 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciceTracker", "ExerciceTracker\ExerciceTracker.csproj", "{FDF11569-98E3-48ED-A91F-AE3CF1ED675C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {FDF11569-98E3-48ED-A91F-AE3CF1ED675C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDF11569-98E3-48ED-A91F-AE3CF1ED675C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDF11569-98E3-48ED-A91F-AE3CF1ED675C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDF11569-98E3-48ED-A91F-AE3CF1ED675C}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {1369E200-C48C-4143-8EB0-86904BB9C787} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Controllers/ExerciseDatasController.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Controllers/ExerciseDatasController.cs new file mode 100644 index 00000000..cad2d0b1 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Controllers/ExerciseDatasController.cs @@ -0,0 +1,102 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using ExerciseTracker.ASV.Db.Data; +using ExerciseTracker.ASV.Db.Models; + +namespace ExerciseTracker.ASV.Db.Controllers; + +[Route("api/[controller]")] +[ApiController] +public class ExerciseDatasController : ControllerBase +{ + private readonly ExerciseDataContext _context; + + public ExerciseDatasController(ExerciseDataContext context) + { + _context = context; + } + + // GET: api/ExerciseDatas + [HttpGet] + public async Task>> GetExercise() + { + return await _context.Exercise.ToListAsync(); + } + + // GET: api/ExerciseDatas/5 + [HttpGet("{id}")] + public async Task> GetExerciseData(int id) + { + var exerciseData = await _context.Exercise.FindAsync(id); + + if (exerciseData == null) + { + return NotFound(); + } + + return exerciseData; + } + + // PUT: api/ExerciseDatas/5 + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPut("{id}")] + public async Task PutExerciseData(int id, ExerciseData exerciseData) + { + if (id != exerciseData.Id) + { + return BadRequest(); + } + + _context.Entry(exerciseData).State = EntityState.Modified; + + try + { + await _context.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!ExerciseDataExists(id)) + { + return NotFound(); + } + else + { + throw; + } + } + + return NoContent(); + } + + // POST: api/ExerciseDatas + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPost] + public async Task> PostExerciseData(ExerciseData exerciseData) + { + _context.Exercise.Add(exerciseData); + await _context.SaveChangesAsync(); + + return CreatedAtAction("GetExerciseData", new { id = exerciseData.Id }, exerciseData); + } + + // DELETE: api/ExerciseDatas/5 + [HttpDelete("{id}")] + public async Task DeleteExerciseData(int id) + { + var exerciseData = await _context.Exercise.FindAsync(id); + if (exerciseData == null) + { + return NotFound(); + } + + _context.Exercise.Remove(exerciseData); + await _context.SaveChangesAsync(); + + return NoContent(); + } + + private bool ExerciseDataExists(int id) + { + return _context.Exercise.Any(e => e.Id == id); + } +} \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Data/ExerciseDataContext.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Data/ExerciseDataContext.cs new file mode 100644 index 00000000..c431116e --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Data/ExerciseDataContext.cs @@ -0,0 +1,14 @@ +using Microsoft.EntityFrameworkCore; +using ExerciseTracker.ASV.Db.Models; + +namespace ExerciseTracker.ASV.Db.Data; + +public class ExerciseDataContext : DbContext +{ + public DbSet Exercise { get; set; } = null!; + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + DotNetEnv.Env.TraversePath().Load(); + optionsBuilder.UseSqlServer(DotNetEnv.Env.GetString("CONNECTION_STRING")); + } +} \ No newline at end of file diff --git a/ExerciseTracker.Doc415-r/ExerciseTracker.Doc415.csproj b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/ExerciseTracker.ASV.Db.csproj similarity index 66% rename from ExerciseTracker.Doc415-r/ExerciseTracker.Doc415.csproj rename to ExerciseTracker.ASV/ExerciseTracker.ASV.Db/ExerciseTracker.ASV.Db.csproj index 80f400d7..38e4c326 100644 --- a/ExerciseTracker.Doc415-r/ExerciseTracker.Doc415.csproj +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/ExerciseTracker.ASV.Db.csproj @@ -1,25 +1,24 @@ - + - Exe net8.0 - enable enable + enable - - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + + diff --git a/ExerciseTracker.Bkohler93/Data/Migrations/20240804040335_InitialCreate.Designer.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Migrations/20241112215724_InitialCreate.Designer.cs similarity index 77% rename from ExerciseTracker.Bkohler93/Data/Migrations/20240804040335_InitialCreate.Designer.cs rename to ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Migrations/20241112215724_InitialCreate.Designer.cs index 8ac4ba14..a573193c 100644 --- a/ExerciseTracker.Bkohler93/Data/Migrations/20240804040335_InitialCreate.Designer.cs +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Migrations/20241112215724_InitialCreate.Designer.cs @@ -1,6 +1,6 @@ // using System; -using Data; +using ExerciseTracker.ASV.Db.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -9,10 +9,10 @@ #nullable disable -namespace Data.Migrations +namespace ExerciseTracker.ASV.Db.Migrations { - [DbContext(typeof(ExerciseEFDbContext))] - [Migration("20240804040335_InitialCreate")] + [DbContext(typeof(ExerciseDataContext))] + [Migration("20241112215724_InitialCreate")] partial class InitialCreate { /// @@ -20,12 +20,12 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "8.0.7") + .HasAnnotation("ProductVersion", "9.0.0") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - modelBuilder.Entity("Data.Entities.Exercise", b => + modelBuilder.Entity("ExerciseTracker.ASV.Db.Models.ExerciseData", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -33,21 +33,21 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - b.Property("DateEnd") .HasColumnType("datetime2"); b.Property("DateStart") .HasColumnType("datetime2"); + b.Property("Description") + .HasColumnType("nvarchar(max)"); + b.Property("Duration") .HasColumnType("time"); b.HasKey("Id"); - b.ToTable("Runs"); + b.ToTable("Exercise"); }); #pragma warning restore 612, 618 } diff --git a/ExerciseTracker.Bkohler93/Data/Migrations/20240804040335_InitialCreate.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Migrations/20241112215724_InitialCreate.cs similarity index 79% rename from ExerciseTracker.Bkohler93/Data/Migrations/20240804040335_InitialCreate.cs rename to ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Migrations/20241112215724_InitialCreate.cs index 2f0182e9..2234363f 100644 --- a/ExerciseTracker.Bkohler93/Data/Migrations/20240804040335_InitialCreate.cs +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Migrations/20241112215724_InitialCreate.cs @@ -3,7 +3,7 @@ #nullable disable -namespace Data.Migrations +namespace ExerciseTracker.ASV.Db.Migrations { /// public partial class InitialCreate : Migration @@ -12,7 +12,7 @@ public partial class InitialCreate : Migration protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( - name: "Runs", + name: "Exercise", columns: table => new { Id = table.Column(type: "int", nullable: false) @@ -20,11 +20,11 @@ protected override void Up(MigrationBuilder migrationBuilder) DateStart = table.Column(type: "datetime2", nullable: false), DateEnd = table.Column(type: "datetime2", nullable: false), Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: true) + Description = table.Column(type: "nvarchar(max)", nullable: true) }, constraints: table => { - table.PrimaryKey("PK_Runs", x => x.Id); + table.PrimaryKey("PK_Exercise", x => x.Id); }); } @@ -32,7 +32,7 @@ protected override void Up(MigrationBuilder migrationBuilder) protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( - name: "Runs"); + name: "Exercise"); } } -} +} \ No newline at end of file diff --git a/ExerciseTracker.Bkohler93/Data/Migrations/ExerciseDbContextModelSnapshot.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Migrations/ExerciseDataContextModelSnapshot.cs similarity index 74% rename from ExerciseTracker.Bkohler93/Data/Migrations/ExerciseDbContextModelSnapshot.cs rename to ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Migrations/ExerciseDataContextModelSnapshot.cs index 525138f3..ba1358f6 100644 --- a/ExerciseTracker.Bkohler93/Data/Migrations/ExerciseDbContextModelSnapshot.cs +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Migrations/ExerciseDataContextModelSnapshot.cs @@ -1,6 +1,6 @@ // using System; -using Data; +using ExerciseTracker.ASV.Db.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -8,21 +8,21 @@ #nullable disable -namespace Data.Migrations +namespace ExerciseTracker.ASV.Db.Migrations { - [DbContext(typeof(ExerciseEFDbContext))] - partial class ExerciseDbContextModelSnapshot : ModelSnapshot + [DbContext(typeof(ExerciseDataContext))] + partial class ExerciseDataContextModelSnapshot : ModelSnapshot { protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "8.0.7") + .HasAnnotation("ProductVersion", "9.0.0") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - modelBuilder.Entity("Data.Entities.Exercise", b => + modelBuilder.Entity("ExerciseTracker.ASV.Db.Models.ExerciseData", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -30,23 +30,23 @@ protected override void BuildModel(ModelBuilder modelBuilder) SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - b.Property("DateEnd") .HasColumnType("datetime2"); b.Property("DateStart") .HasColumnType("datetime2"); + b.Property("Description") + .HasColumnType("nvarchar(max)"); + b.Property("Duration") .HasColumnType("time"); b.HasKey("Id"); - b.ToTable("Runs"); + b.ToTable("Exercise"); }); #pragma warning restore 612, 618 } } -} +} \ No newline at end of file diff --git a/ExerciseTracker.Doc415-r/Models/Exercise.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Models/ExerciseData.cs similarity index 52% rename from ExerciseTracker.Doc415-r/Models/Exercise.cs rename to ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Models/ExerciseData.cs index 924bcbbd..17e16566 100644 --- a/ExerciseTracker.Doc415-r/Models/Exercise.cs +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Models/ExerciseData.cs @@ -1,11 +1,10 @@ -namespace exerciseTracker.doc415.Models; +namespace ExerciseTracker.ASV.Db.Models; -internal class Exercise +public class ExerciseData { public int Id { get; set; } public DateTime DateStart { get; set; } public DateTime DateEnd { get; set; } public TimeSpan Duration { get; set; } - public string Comments { get; set; } - public string Type { get; set; } -} + public string? Description { get; set; } +} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Program.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Program.cs similarity index 55% rename from ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Program.cs rename to ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Program.cs index 328f9198..e2fec2ce 100644 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Program.cs +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Program.cs @@ -1,7 +1,4 @@ -using ExerciseTracker.Data; -using ExerciseTracker.Services; -using ExerciseTrackerAPI.Repository; -using Microsoft.EntityFrameworkCore; +using ExerciseTracker.ASV.Db.Data; var builder = WebApplication.CreateBuilder(args); @@ -9,12 +6,8 @@ builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle -builder.Services.AddDbContext(options => -{ - options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")); -}); -builder.Services.AddScoped(); -builder.Services.AddScoped(); +builder.Services.AddDbContext(); + builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Properties/launchSettings.json b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Properties/launchSettings.json similarity index 82% rename from ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Properties/launchSettings.json rename to ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Properties/launchSettings.json index 7a9b531f..8a4a6b56 100644 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Properties/launchSettings.json +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/Properties/launchSettings.json @@ -4,8 +4,8 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:62168", - "sslPort": 44335 + "applicationUrl": "http://localhost:33633", + "sslPort": 44333 } }, "profiles": { @@ -14,7 +14,7 @@ "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", - "applicationUrl": "http://localhost:5094", + "applicationUrl": "http://localhost:5021", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } @@ -24,7 +24,7 @@ "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", - "applicationUrl": "https://localhost:7112;http://localhost:5094", + "applicationUrl": "https://localhost:7133;http://localhost:5021", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/appsettings.Development.json b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/appsettings.Development.json similarity index 100% rename from ExerciseTracker.gabriel2443/ExerciseTrackerAPI/appsettings.Development.json rename to ExerciseTracker.ASV/ExerciseTracker.ASV.Db/appsettings.Development.json diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/appsettings.Development.json b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/appsettings.json similarity index 80% rename from ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/appsettings.Development.json rename to ExerciseTracker.ASV/ExerciseTracker.ASV.Db/appsettings.json index 0c208ae9..10f68b8c 100644 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/appsettings.Development.json +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV.Db/appsettings.json @@ -4,5 +4,6 @@ "Default": "Information", "Microsoft.AspNetCore": "Warning" } - } + }, + "AllowedHosts": "*" } diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV.sln b/ExerciseTracker.ASV/ExerciseTracker.ASV.sln new file mode 100644 index 00000000..4943be37 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.11.35312.102 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExerciseTracker.ASV", "ExerciseTracker.ASV\ExerciseTracker.ASV.csproj", "{7D3612EF-C1A3-4D18-B480-36927B56B57B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.ASV.Db", "ExerciseTracker.ASV.Db\ExerciseTracker.ASV.Db.csproj", "{6BFD660C-F1A2-49F8-BD43-A686EFC67F23}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7D3612EF-C1A3-4D18-B480-36927B56B57B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D3612EF-C1A3-4D18-B480-36927B56B57B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D3612EF-C1A3-4D18-B480-36927B56B57B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D3612EF-C1A3-4D18-B480-36927B56B57B}.Release|Any CPU.Build.0 = Release|Any CPU + {6BFD660C-F1A2-49F8-BD43-A686EFC67F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6BFD660C-F1A2-49F8-BD43-A686EFC67F23}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6BFD660C-F1A2-49F8-BD43-A686EFC67F23}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6BFD660C-F1A2-49F8-BD43-A686EFC67F23}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {B4AECC5C-5E29-43D9-A8CF-7072F2B63E0A} + EndGlobalSection +EndGlobal diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/Controllers/ExerciseController.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/Controllers/ExerciseController.cs new file mode 100644 index 00000000..657d3557 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/Controllers/ExerciseController.cs @@ -0,0 +1,48 @@ +using ExerciseTracker.ASV.Views; +using ExerciseTracker.ASV.Services; + +namespace ExerciseTracker.ASV.Controllers; + +public class ExerciseController : IExerciseController +{ + private readonly IExerciseService _exerciseService; + + public ExerciseController(IExerciseService exerciseService, IDisplay display) { + _exerciseService = exerciseService; + } + + public async Task Start() + { + string selection = _exerciseService.GetSelection(); + while (selection != "Exit Application") + { + if(selection == "View Past Workouts") + { + await _exerciseService.DisplayAllWorkoutsAsync(); + } + else if (selection == "Create a new workout") + { + await _exerciseService.CreateWorkoutAsync(); + } + else if(selection == "Edit a previous workout") + { + await _exerciseService.EditWorkoutAsync(); + } + else if (selection == "Delete a workout") + { + await _exerciseService.DeleteWorkoutAsync(); + } + else if (selection == "Exit Application") + { + Console.WriteLine("Goodbye!!!"); + break; + } + else + { + Console.WriteLine("Invalid choice!"); + } + Console.Clear(); + selection = _exerciseService.GetSelection(); + } + } +} \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/Controllers/IExerciseController.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/Controllers/IExerciseController.cs new file mode 100644 index 00000000..692f89f4 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/Controllers/IExerciseController.cs @@ -0,0 +1,6 @@ +namespace ExerciseTracker.ASV.Controllers; + +public interface IExerciseController +{ + public Task Start(); +} diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/ExerciseTracker.ASV.csproj b/ExerciseTracker.ASV/ExerciseTracker.ASV/ExerciseTracker.ASV.csproj new file mode 100644 index 00000000..3ad39ae0 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/ExerciseTracker.ASV.csproj @@ -0,0 +1,16 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/IStartup.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/IStartup.cs new file mode 100644 index 00000000..3609919f --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/IStartup.cs @@ -0,0 +1,6 @@ +namespace ExerciseTracker.ASV; + +public interface IStartup +{ + public Task Run(); +} \ No newline at end of file diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Models/Session.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/Models/ExerciseData.cs similarity index 59% rename from ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Models/Session.cs rename to ExerciseTracker.ASV/ExerciseTracker.ASV/Models/ExerciseData.cs index 14ac0843..050ecaed 100644 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Models/Session.cs +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/Models/ExerciseData.cs @@ -1,10 +1,10 @@ -namespace ExerciseTrackerCarDioLogics.Models; +namespace ExerciseTracker.ASV.Models; -public class Session +public class ExerciseData { public int Id { get; set; } public DateTime DateStart { get; set; } public DateTime DateEnd { get; set; } public TimeSpan Duration { get; set; } - public string Comment { get; set; } -} + public string? Description { get; set; } +} \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/Program.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/Program.cs new file mode 100644 index 00000000..488bac21 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/Program.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using ExerciseTracker.ASV.Controllers; +using ExerciseTracker.ASV.Services; +using ExerciseTracker.ASV; +using ExerciseTracker.ASV.UserInput; +using ExerciseTracker.ASV.Repositories; +using ExerciseTracker.ASV.Views; + +IConfiguration configuration = new ConfigurationBuilder().Build(); + +var services = new ServiceCollection(); + +services.AddSingleton(configuration); +services.AddSingleton(); +services.AddSingleton(); +services.AddTransient(); +services.AddTransient(); +services.AddTransient(); +services.AddTransient(); +services.AddTransient(); + +var serviceProvider = services.BuildServiceProvider(); +var startup = serviceProvider.GetService(); + +await startup!.Run(); \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/Repositories/ExerciseRepository.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/Repositories/ExerciseRepository.cs new file mode 100644 index 00000000..3b8de61f --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/Repositories/ExerciseRepository.cs @@ -0,0 +1,102 @@ +using System.Net.Http.Headers; +using System.Text; +using System.Text.Json; +using ExerciseTracker.ASV.Models; + +namespace ExerciseTracker.ASV.Repositories; + +public class ExerciseRepository : IExerciseRepository +{ + private readonly HttpClient _httpClient; + + public ExerciseRepository(HttpClient httpClient) + { + _httpClient = httpClient; + _httpClient.DefaultRequestHeaders.Accept.Clear(); + _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + } + public async Task DeleteExercise(int id) + { + var url = $"https://localhost:7133/api/ExerciseDatas/{id}"; + var response = await _httpClient.DeleteAsync(url); + if (response.IsSuccessStatusCode) + return true; + return false; + } + + public async Task PutExercise(ExerciseData exerciseData) + { + try + { + var url = $"https://localhost:7133/api/ExerciseDatas/{exerciseData.Id}"; + var jsonContent = new StringContent(JsonSerializer.Serialize(exerciseData), Encoding.UTF8, "application/json"); + var response = await _httpClient.PutAsync(url, jsonContent); + if (response.IsSuccessStatusCode) + return true; + return false; + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + return false; + } + } + + public async Task GetExerciseById(int id) + { + try + { + var options = new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }; + var url = $"https://localhost:7133/api/ExerciseDatas/{id}"; + string exerciseDataJson = await _httpClient.GetStringAsync(url); + ExerciseData exerciseData = JsonSerializer.Deserialize(exerciseDataJson, options) ?? new ExerciseData(); + return exerciseData; + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + return new ExerciseData(); + } + + public async Task> GetExercises() + { + try + { + var options = new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }; + string exerciseDataJson = await _httpClient.GetStringAsync("https://localhost:7133/api/ExerciseDatas/"); + List exerciseDatas = JsonSerializer.Deserialize>(exerciseDataJson, options) ?? new List(); + return exerciseDatas; + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + return new List(); + } + + public async Task PostExercise(ExerciseData exerciseData) + { + try + { + var url = "https://localhost:7133/api/ExerciseDatas"; + var jsonContent = new StringContent(JsonSerializer.Serialize(exerciseData), Encoding.UTF8, "application/json"); + var response = await _httpClient.PostAsync(url, jsonContent); + if (response.IsSuccessStatusCode) + return true; + else + return false; + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + return false; + } + } +} \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/Repositories/IExerciseRepository.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/Repositories/IExerciseRepository.cs new file mode 100644 index 00000000..8a08fc2a --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/Repositories/IExerciseRepository.cs @@ -0,0 +1,12 @@ +using ExerciseTracker.ASV.Models; + +namespace ExerciseTracker.ASV.Repositories; + +public interface IExerciseRepository +{ + public Task> GetExercises(); + public Task GetExerciseById(int id); + public Task DeleteExercise(int id); + public Task PutExercise(ExerciseData exerciseData); + public Task PostExercise(ExerciseData exerciseData); +} \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/Services/ExerciseService.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/Services/ExerciseService.cs new file mode 100644 index 00000000..f1ef2103 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/Services/ExerciseService.cs @@ -0,0 +1,127 @@ +using ExerciseTracker.ASV.Repositories; +using ExerciseTracker.ASV.UserInput; +using ExerciseTracker.ASV.Views; +using ExerciseTracker.ASV.Models; + +namespace ExerciseTracker.ASV.Services; + +public class ExerciseService : IExerciseService +{ + private readonly IInput _input; + private readonly IExerciseRepository _exerciseRepository; + private readonly IDisplay _display; + public ExerciseService(IExerciseRepository exerciseRepository, IInput input, IDisplay display) + { + _exerciseRepository = exerciseRepository; + _input = input; + _display = display; + } + public async Task DeleteWorkoutAsync() + { + List exercises = await _exerciseRepository.GetExercises(); + if (exercises.Count == 0) + { + Console.WriteLine("No previous workouts present. Kindly insert some records before deleting."); + Console.ReadLine(); + } + else + { + _display.DisplayWorkouts(exercises, new string[] { "Id", "DateStart", "DateEnd", "Duration", "Description" }, "Workout list"); + int id = _input.GetWorkoutId(); + ExerciseData data = await _exerciseRepository.GetExerciseById(id); + if (data.Id == id) + { + bool deleteStatus = await _exerciseRepository.DeleteExercise(id); + if (deleteStatus) + { + Console.WriteLine("Workout deleted successfully."); + Console.ReadLine(); + } + else + { + Console.WriteLine("Some error occured. Cannot delete"); + Console.ReadLine(); + } + } + else + { + Console.WriteLine("Your entered workoutid was invalid.Cannot delete. Pls enter valid workout id."); + Console.ReadLine(); + } + } + } + + public async Task EditWorkoutAsync() + { + List exercises = await _exerciseRepository.GetExercises(); + if (exercises.Count == 0) + { + Console.WriteLine("No previous workouts present. Kindly insert some records before editing."); + Console.ReadLine(); + } + else + { + _display.DisplayWorkouts(exercises, new string[] { "Id", "DateStart", "DateEnd", "Duration", "Description" }, "Workout list"); + int id = _input.GetWorkoutId(); + ExerciseData data = await _exerciseRepository.GetExerciseById(id); + if (data.Id == id) + { + Console.WriteLine("Enter the new details."); + ExerciseData exerciseData = _input.GetWorkoutDetails(); + exerciseData.Id = id; + bool edited = await _exerciseRepository.PutExercise(exerciseData); + if (edited) + { + Console.WriteLine("Workout was edited successfully."); + Console.ReadLine(); + } + else + { + Console.WriteLine("Some error occured.Couldn't edit the workout"); + Console.ReadLine(); + } + } + else + { + Console.WriteLine("Your entered workoutid was invalid. Pls enter valid workout id."); + Console.ReadLine(); + } + } + } + + public async Task CreateWorkoutAsync() + { + ExerciseData exerciseData = _input.GetWorkoutDetails(); + bool workoutPosted = await _exerciseRepository.PostExercise(exerciseData); + if (workoutPosted) + { + Console.WriteLine("Workout saved successfully."); + Console.ReadLine(); + } + else + { + Console.WriteLine("Some error occured.Couldn't save the workout"); + Console.ReadLine(); + } + } + + public async Task DisplayAllWorkoutsAsync() + { + List exercises = await _exerciseRepository.GetExercises(); + if (exercises.Count == 0) + { + Console.WriteLine("No previous workouts present to display"); + Console.ReadLine(); + } + else + { + _display.DisplayWorkouts(exercises, new string[] { "Id", "DateStart", "DateEnd", "Duration", "Description" }, "Workout list"); + Console.ReadLine(); + } + } + + public string GetSelection() + { + return _display.GetSelection("Welcome to Exercise Tracker", new[] { "View Past Workouts", "Create a new workout", "Edit a previous workout", "Delete a workout", "Exit Application" }); + } +} \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/Services/IExerciseService.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/Services/IExerciseService.cs new file mode 100644 index 00000000..8693d9a5 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/Services/IExerciseService.cs @@ -0,0 +1,11 @@ +namespace ExerciseTracker.ASV.Services; + +public interface IExerciseService +{ + public Task DeleteWorkoutAsync(); + public Task EditWorkoutAsync(); + + public Task CreateWorkoutAsync(); + public Task DisplayAllWorkoutsAsync(); + public string GetSelection(); +} \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/Startup.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/Startup.cs new file mode 100644 index 00000000..6f716197 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/Startup.cs @@ -0,0 +1,17 @@ +using ExerciseTracker.ASV.Controllers; + +namespace ExerciseTracker.ASV; + +public class Startup : IStartup +{ + private readonly IExerciseController _exerciseController; + + public Startup(IExerciseController exerciseController) + { + _exerciseController = exerciseController; + } + public async Task Run() + { + await _exerciseController.Start(); + } +} \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/UserInput/IInput.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/UserInput/IInput.cs new file mode 100644 index 00000000..f2eea84d --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/UserInput/IInput.cs @@ -0,0 +1,9 @@ +using ExerciseTracker.ASV.Models; + +namespace ExerciseTracker.ASV.UserInput; + +public interface IInput +{ + public ExerciseData GetWorkoutDetails(); + int GetWorkoutId(); +} \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/UserInput/Input.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/UserInput/Input.cs new file mode 100644 index 00000000..baff43c3 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/UserInput/Input.cs @@ -0,0 +1,48 @@ +using ExerciseTracker.ASV.Models; + +namespace ExerciseTracker.ASV.UserInput; + +public class Input : IInput +{ + public ExerciseData GetWorkoutDetails() + { + DateTime startDate, endDate; + var exerciseData = new ExerciseData(); + Console.Write("Enter Start Date and Time (yyyy-MM-dd HH:mm): "); + while (!DateTime.TryParseExact(Console.ReadLine(), "yyyy-MM-dd HH:mm", null, System.Globalization.DateTimeStyles.None, out startDate)) + { + Console.WriteLine("Invalid input."); + Console.Write("Please enter in the format \"yyyy-MM-dd HH:mm\": "); + } + exerciseData.DateStart = startDate; + Console.Write("Enter End Time (HH:mm): "); + while (!DateTime.TryParseExact(Console.ReadLine(), "HH:mm", null, System.Globalization.DateTimeStyles.None, out endDate) + || endDate.TimeOfDay <= exerciseData.DateStart.TimeOfDay) + { + Console.WriteLine("Invalid input."); + Console.Write("Please enter a time greater than the Start Time and in the format \"HH:mm\": "); + } + exerciseData.DateEnd = new DateTime(exerciseData.DateStart.Year, + exerciseData.DateStart.Month, + exerciseData.DateStart.Day, + endDate.Hour, + endDate.Minute, + 0); + exerciseData.Duration = exerciseData.DateEnd - exerciseData.DateStart; + Console.WriteLine($"Duration automatically calculated as: {exerciseData.Duration}"); + Console.Write("Enter Description (optional, press Enter to skip): "); + exerciseData.Description = Console.ReadLine(); + return exerciseData; + } + + public int GetWorkoutId() + { + int id; + Console.Write("Enter Exercise Id (integer): "); + while (!int.TryParse(Console.ReadLine(), out id)) + { + Console.Write("Invalid Id. Please enter a valid integer:"); + } + return id; + } +} \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/Views/Display.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/Views/Display.cs new file mode 100644 index 00000000..f87729e7 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/Views/Display.cs @@ -0,0 +1,28 @@ +using Spectre.Console; +using ExerciseTracker.ASV.Models; + +namespace ExerciseTracker.ASV.Views; + +public class Display : IDisplay +{ + public void DisplayWorkouts(List exercises, string[] columns, string title) + { + var table = new Table(); + table.Title = new TableTitle(title); + foreach (var column in columns) + { + table.AddColumn(column); + } + foreach (var exercise in exercises) + { + table.AddRow(exercise.Id.ToString(), exercise.DateStart.ToString(), exercise.DateEnd.ToString(), exercise.Duration.ToString(), exercise.Description); + } + AnsiConsole.Write(table); + } + + public string GetSelection(string title, string[] choices) + { + var selectedCategory = AnsiConsole.Prompt(new SelectionPrompt().Title(title).AddChoices(choices).HighlightStyle(new Style(foreground: Color.Blue))); + return selectedCategory; + } +} \ No newline at end of file diff --git a/ExerciseTracker.ASV/ExerciseTracker.ASV/Views/IDisplay.cs b/ExerciseTracker.ASV/ExerciseTracker.ASV/Views/IDisplay.cs new file mode 100644 index 00000000..255f71d3 --- /dev/null +++ b/ExerciseTracker.ASV/ExerciseTracker.ASV/Views/IDisplay.cs @@ -0,0 +1,9 @@ +using ExerciseTracker.ASV.Models; + +namespace ExerciseTracker.ASV.Views; + +public interface IDisplay +{ + void DisplayWorkouts(List exercises, string[] columns, string title); + public string GetSelection(string title, string[] choices); +} \ No newline at end of file diff --git a/ExerciseTracker.Arashi256/App.config b/ExerciseTracker.Arashi256/App.config deleted file mode 100644 index 76173508..00000000 --- a/ExerciseTracker.Arashi256/App.config +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/ExerciseTracker.Arashi256/Classes/CommonUI.cs b/ExerciseTracker.Arashi256/Classes/CommonUI.cs deleted file mode 100644 index b2382001..00000000 --- a/ExerciseTracker.Arashi256/Classes/CommonUI.cs +++ /dev/null @@ -1,80 +0,0 @@ -using ExerciseTracker.Arashi256.Enums; -using Spectre.Console; -using System.Net.Quic; - -namespace ExerciseTracker.Arashi256.Classes -{ - internal class CommonUI - { - public static int MenuOption(string question, int min, int max) - { - bool isValid = false; - int selectedValue = 0; - do - { - var userInput = AnsiConsole.Ask(question); - selectedValue = userInput; - if (selectedValue < min || selectedValue > max) - { - AnsiConsole.MarkupLine("[red]Invalid input. Please enter a value within the specified range.[/]"); - isValid = false; - } - else - isValid = true; - } while (!isValid); - return selectedValue; - } - - public static void Pause(string colour) - { - AnsiConsole.Markup($"[{colour}]Press any key to continue...[/]"); - Console.ReadKey(true); - } - - public static string? GetStringWithPrompt(string prompt, int lengthlimit, string nullString) - { - AnsiConsole.MarkupLine("[white]Enter '0' to cancel[/]"); - string input = AnsiConsole.Ask(prompt).Trim(); - if (input.Equals("0")) return null; - while (input.Length > lengthlimit) - { - AnsiConsole.MarkupLine($"\n[red]Entry needs to be less than {lengthlimit} characters. Try again.[/]\n\n"); - input = AnsiConsole.Ask(prompt); - } - return input; - } - - public static DateTime? GetDateTimeDialog(string format) - { - DateTime? dateTime = null; - while (!dateTime.HasValue) - { - AnsiConsole.MarkupLine($"[steelblue1_1]Note: Enter '0' to abort[/]"); - var userInput = AnsiConsole.Prompt(new TextPrompt($"Enter a date/time in the format '{format}':").PromptStyle("white")).Trim(); - if (userInput == "0") - { - return null; - } - else - { - if (DateTime.TryParseExact(userInput, format, null, System.Globalization.DateTimeStyles.None, out DateTime result)) - { - dateTime = result; - } - else - { - AnsiConsole.MarkupLine("[red]Invalid date/time format. Please enter the date/time in the specified format.[/]"); - } - } - } - return dateTime; - } - - public static ExerciseType GetExerciseTypeDialog(IEnumerable exerciseTypes) - { - // Prompt the user to select an exercise type from the exercise type public enum. Avert your eyes. - var exerciseType = AnsiConsole.Prompt(new SelectionPrompt().Title("Select your exercise type:").AddChoices(exerciseTypes)); - return exerciseType; - } - } -} diff --git a/ExerciseTracker.Arashi256/Classes/ServiceResponse.cs b/ExerciseTracker.Arashi256/Classes/ServiceResponse.cs deleted file mode 100644 index 7e2ebb35..00000000 --- a/ExerciseTracker.Arashi256/Classes/ServiceResponse.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciseTracker.Arashi256.Classes -{ - public class ServiceResponse - { - public ResponseStatus Status { get; set; } = ResponseStatus.Failure; - public string Message { get; set; } = string.Empty; - public object? Data { get; set; } - } - - public enum ResponseStatus { Success, Failure } -} \ No newline at end of file diff --git a/ExerciseTracker.Arashi256/Classes/ServiceResponseUtils.cs b/ExerciseTracker.Arashi256/Classes/ServiceResponseUtils.cs deleted file mode 100644 index 3ca07f0f..00000000 --- a/ExerciseTracker.Arashi256/Classes/ServiceResponseUtils.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.Arashi256.Classes -{ - public class ServiceResponseUtils - { - public static ServiceResponse CreateResponse(ResponseStatus status, string message, object? data) - { - return new ServiceResponse { Status = status, Message = message, Data = data }; - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Arashi256/Classes/Validation.cs b/ExerciseTracker.Arashi256/Classes/Validation.cs deleted file mode 100644 index 091949e0..00000000 --- a/ExerciseTracker.Arashi256/Classes/Validation.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace ExerciseTracker.Arashi256.Classes -{ - internal class Validation - { - public static bool ValidateDatesForDuration(DateTime start, DateTime end) - { - return start < end; - } - - public static TimeSpan CalculateDuration(DateTime start, DateTime end) - { - return end - start; - } - } -} diff --git a/ExerciseTracker.Arashi256/Config/AppManager.cs b/ExerciseTracker.Arashi256/Config/AppManager.cs deleted file mode 100644 index 37a3c96e..00000000 --- a/ExerciseTracker.Arashi256/Config/AppManager.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections.Specialized; - -namespace ExerciseTracker.Arashi256.Config -{ - internal class AppManager - { - public string? DatabaseConnectionString { get; private set; } - public string? DateTimeFormatString { get; private set; } - - private NameValueCollection? _appConfig; - - public AppManager() - { - try - { - _appConfig = System.Configuration.ConfigurationManager.AppSettings; - if (_appConfig.Count == 0) - { - Console.WriteLine("\nERROR: AppSettings is empty or cannot be read.\n"); - } - else - { - DatabaseConnectionString = _appConfig.Get("ConnectionString"); - DateTimeFormatString = _appConfig.Get("PreferredDateTimeFormat"); - } - } - catch (System.Configuration.ConfigurationErrorsException) - { - Console.WriteLine("\nERROR: Could not read app settings\n"); - } - } - } -} diff --git a/ExerciseTracker.Arashi256/Config/AppSettings.cs b/ExerciseTracker.Arashi256/Config/AppSettings.cs deleted file mode 100644 index 9f3d206f..00000000 --- a/ExerciseTracker.Arashi256/Config/AppSettings.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace ExerciseTracker.Arashi256.Config -{ - public class AppSettings - { - private string? _databaseConnectionString; - private string? _preferredDateTime; - - public AppSettings() - { - AppManager appManager = new AppManager(); - _databaseConnectionString = appManager.DatabaseConnectionString; - _preferredDateTime = appManager.DateTimeFormatString; - } - - public string? DatabaseConnectionString { get { return _databaseConnectionString; } } - public string? DateTimeFormat { get { return _preferredDateTime; } } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Arashi256/Controllers/ExerciseSessionController.cs b/ExerciseTracker.Arashi256/Controllers/ExerciseSessionController.cs deleted file mode 100644 index 25b0b59b..00000000 --- a/ExerciseTracker.Arashi256/Controllers/ExerciseSessionController.cs +++ /dev/null @@ -1,40 +0,0 @@ -using ExerciseTracker.Arashi256.Classes; -using ExerciseTracker.Arashi256.Models; -using ExerciseTracker.Arashi256.Services; - -namespace ExerciseTracker.Arashi256.Controllers -{ - internal class ExerciseSessionController - { - private readonly ExerciseSessionService _exerciseService; - public ExerciseSessionController(ExerciseSessionService service) - { - _exerciseService = service; - } - - public ServiceResponse GetAllExerciseSessions() - { - return _exerciseService.GetAllExerciseSessions(); - } - - public ServiceResponse AddNewExerciseSession(ExerciseSessionInputDto newSession) - { - return _exerciseService.AddNewExerciseSession(newSession); - } - - public ServiceResponse DeleteExistingExerciseSession(int id) - { - return _exerciseService.DeleteExistingExerciseSession(id); - } - - public ServiceResponse UpdateExistingExerciseSession(int id, ExerciseSessionInputDto updateSession) - { - return _exerciseService.UpdateExistingExerciseSession(id, updateSession); - } - - public ServiceResponse GetExerciseSessionById(int id) - { - return _exerciseService.GetExerciseSessionById(id); - } - } -} diff --git a/ExerciseTracker.Arashi256/Enums/ExerciseType.cs b/ExerciseTracker.Arashi256/Enums/ExerciseType.cs deleted file mode 100644 index 8647e94f..00000000 --- a/ExerciseTracker.Arashi256/Enums/ExerciseType.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace ExerciseTracker.Arashi256.Enums -{ - // DEVELOPER'S NOTE: This is used as a quick and dirty way to have exercise types in order to satisfy the challenge. - // If this had been a requirement rather than a challenge, I would have had this as a separate table in the database - // with it's own model, controller, service, DTOs, repostiory and CRUD operations but is beyond the scope of this - // project. - public enum ExerciseType - { - HIKING, - CARDIO - } -} diff --git a/ExerciseTracker.Arashi256/ExerciseTracker.Arashi256.csproj b/ExerciseTracker.Arashi256/ExerciseTracker.Arashi256.csproj deleted file mode 100644 index b0cf7f71..00000000 --- a/ExerciseTracker.Arashi256/ExerciseTracker.Arashi256.csproj +++ /dev/null @@ -1,24 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - diff --git a/ExerciseTracker.Arashi256/ExerciseTracker.Arashi256.sln b/ExerciseTracker.Arashi256/ExerciseTracker.Arashi256.sln deleted file mode 100644 index cd4ea47e..00000000 --- a/ExerciseTracker.Arashi256/ExerciseTracker.Arashi256.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.11.35312.102 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.Arashi256", "ExerciseTracker.Arashi256.csproj", "{666926DA-CB67-4589-A855-F0805B69AB2A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {666926DA-CB67-4589-A855-F0805B69AB2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {666926DA-CB67-4589-A855-F0805B69AB2A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {666926DA-CB67-4589-A855-F0805B69AB2A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {666926DA-CB67-4589-A855-F0805B69AB2A}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {27743D9B-9797-49CE-BF47-32DEFC2FFDA2} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.Arashi256/Interfaces/IExerciseSessionRepository.cs b/ExerciseTracker.Arashi256/Interfaces/IExerciseSessionRepository.cs deleted file mode 100644 index 05946fe5..00000000 --- a/ExerciseTracker.Arashi256/Interfaces/IExerciseSessionRepository.cs +++ /dev/null @@ -1,15 +0,0 @@ -using ExerciseTracker.Arashi256.Models; -using ExerciseTracker.Arashi256.Classes; - -namespace ExerciseTracker.Arashi256.Interfaces -{ - public interface IExerciseSessionRepository - { - ServiceResponse GetExerciseSessions(); - ServiceResponse GetExerciseSessionById(int id); - ServiceResponse AddExerciseSession(ExerciseSession exercise); - ServiceResponse DeleteExerciseSession(int id); - ServiceResponse UpdateExerciseSession(int id, ExerciseSession exercise); - ServiceResponse ExerciseSessionExistsInRange(DateTime startDate, DateTime endDate, int? sessionIdToExclude = null); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Arashi256/Migrations/20241020113301_InitialSchema.Designer.cs b/ExerciseTracker.Arashi256/Migrations/20241020113301_InitialSchema.Designer.cs deleted file mode 100644 index b4b07ac3..00000000 --- a/ExerciseTracker.Arashi256/Migrations/20241020113301_InitialSchema.Designer.cs +++ /dev/null @@ -1,61 +0,0 @@ -// -using System; -using ExerciseTracker.Arashi256.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Arashi256.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - [Migration("20241020113301_InitialSchema")] - partial class InitialSchema - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.10") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Arashi256.Models.ExerciseSession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("DateTimeEnd") - .HasColumnType("datetime2"); - - b.Property("DateTimeStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(25) - .HasColumnType("nvarchar(25)"); - - b.HasKey("Id"); - - b.ToTable("ExerciseSessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Arashi256/Migrations/20241020113301_InitialSchema.cs b/ExerciseTracker.Arashi256/Migrations/20241020113301_InitialSchema.cs deleted file mode 100644 index 69eb9859..00000000 --- a/ExerciseTracker.Arashi256/Migrations/20241020113301_InitialSchema.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Arashi256.Migrations -{ - /// - public partial class InitialSchema : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "ExerciseSessions", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Type = table.Column(type: "nvarchar(25)", maxLength: 25, nullable: false), - DateTimeStart = table.Column(type: "datetime2", nullable: false), - DateTimeEnd = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(255)", maxLength: 255, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ExerciseSessions", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "ExerciseSessions"); - } - } -} diff --git a/ExerciseTracker.Arashi256/Migrations/ExerciseDbContextModelSnapshot.cs b/ExerciseTracker.Arashi256/Migrations/ExerciseDbContextModelSnapshot.cs deleted file mode 100644 index d5257f1c..00000000 --- a/ExerciseTracker.Arashi256/Migrations/ExerciseDbContextModelSnapshot.cs +++ /dev/null @@ -1,58 +0,0 @@ -// -using System; -using ExerciseTracker.Arashi256.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Arashi256.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - partial class ExerciseDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.10") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Arashi256.Models.ExerciseSession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("DateTimeEnd") - .HasColumnType("datetime2"); - - b.Property("DateTimeStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(25) - .HasColumnType("nvarchar(25)"); - - b.HasKey("Id"); - - b.ToTable("ExerciseSessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Arashi256/Models/ExerciseDbContext.cs b/ExerciseTracker.Arashi256/Models/ExerciseDbContext.cs deleted file mode 100644 index 57e014b6..00000000 --- a/ExerciseTracker.Arashi256/Models/ExerciseDbContext.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using ExerciseTracker.Arashi256.Config; - -namespace ExerciseTracker.Arashi256.Models -{ - public class ExerciseDbContext : DbContext - { - private readonly AppSettings _connection; - - public ExerciseDbContext(AppSettings connection) - { - _connection = connection; - } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - if (!optionsBuilder.IsConfigured) - { - optionsBuilder.UseSqlServer(_connection.DatabaseConnectionString); - } - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().HasKey(es => es.Id); - } - - public DbSet ExerciseSessions { get; set; } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Arashi256/Models/ExerciseSession.cs b/ExerciseTracker.Arashi256/Models/ExerciseSession.cs deleted file mode 100644 index c4ac6cd9..00000000 --- a/ExerciseTracker.Arashi256/Models/ExerciseSession.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace ExerciseTracker.Arashi256.Models -{ - public class ExerciseSession - { - [Key] - public int Id { get; set; } - [Required, MaxLength(25)] - public string Type { get; set; } = string.Empty; - [Required] - public DateTime DateTimeStart { get; set; } - [Required] - public DateTime DateTimeEnd { get; set; } - [Required] - public TimeSpan Duration { get; set; } - [MaxLength(255)] - public string? Comments { get; set; } - } -} diff --git a/ExerciseTracker.Arashi256/Models/ExerciseSessionInputDto.cs b/ExerciseTracker.Arashi256/Models/ExerciseSessionInputDto.cs deleted file mode 100644 index 0697968b..00000000 --- a/ExerciseTracker.Arashi256/Models/ExerciseSessionInputDto.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace ExerciseTracker.Arashi256.Models -{ - public record ExerciseSessionInputDto - { - [Key] - public int Id { get; set; } - [Required, MaxLength(25)] - public string Type { get; set; } = string.Empty; - [Required] - public DateTime DateTimeStart { get; set; } - [Required] - public DateTime DateTimeEnd { get; set; } - [MaxLength(255)] - public string? Comments { get; set; } - } -} diff --git a/ExerciseTracker.Arashi256/Models/ExerciseSessionOutputDto.cs b/ExerciseTracker.Arashi256/Models/ExerciseSessionOutputDto.cs deleted file mode 100644 index 6cac9d63..00000000 --- a/ExerciseTracker.Arashi256/Models/ExerciseSessionOutputDto.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace ExerciseTracker.Arashi256.Models -{ - public record ExerciseSessionOutputDto - { - [Required] - public int DisplayId { get; set; } - [Key] - public int Id { get; set; } - [Required, MaxLength(25)] - public string Type { get; set; } = string.Empty; - [Required] - public DateTime DateTimeStart { get; set; } - [Required] - public DateTime DateTimeEnd { get; set; } - [Required] - public TimeSpan Duration { get; set; } - [MaxLength(255)] - public string? Comments { get; set; } - } -} diff --git a/ExerciseTracker.Arashi256/Models/READ.ME b/ExerciseTracker.Arashi256/Models/READ.ME deleted file mode 100644 index 9ef231c4..00000000 --- a/ExerciseTracker.Arashi256/Models/READ.ME +++ /dev/null @@ -1,16 +0,0 @@ -READ.ME -------- - -An C# Console-based exercise tracker using SQL Server. App settings are configured in App.config - please change to suit your testing requirements. - -Developer's note: -All challenges complete for this project. The last challenge will use the default EF-Core based Repository if the exercise Type is "HIKING", if the exercise Type is "CARDIO", it will use the Dapper-based Repository. -This only applies to Create and Update CRUD operations. Retreive and Delete operations would need to know the Type ahead of Retreiving it. There was an issue where updates made with Dapper do not show in the listing of exercise sessions unless:- - -List sessions = _context.ExerciseSessions.ToList(); - -was changed to:- - -List sessions = _context.ExerciseSessions.AsNoTracking.ToList(); - -...to get the changes executed by the Dapper Repository seen immediately by the Retrieve operation performed by EF Core Repository. I recognise that in the real-world, this would not be necessary as you'd not be mixing and matching Dapper and EF Core in the same application like this. diff --git a/ExerciseTracker.Arashi256/Program.cs b/ExerciseTracker.Arashi256/Program.cs deleted file mode 100644 index e12aad17..00000000 --- a/ExerciseTracker.Arashi256/Program.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using ExerciseTracker.Arashi256.Models; -using ExerciseTracker.Arashi256.Repositories; -using ExerciseTracker.Arashi256.Services; -using ExerciseTracker.Arashi256.Controllers; -using ExerciseTracker.Arashi256.Config; -using ExerciseTracker.Arashi256.Views; - -var builder = Host.CreateApplicationBuilder(); -builder.Services.AddSingleton(); -builder.Services.AddDbContext(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Logging.ClearProviders(); -var app = builder.Build(); -var scope = app.Services.CreateScope(); -var exerciseService = scope.ServiceProvider; -var exerciseController = exerciseService.GetRequiredService(); -var appSettings = exerciseService.GetRequiredService(); -MainView mainView = new MainView(exerciseController, appSettings); -mainView.DisplayView(); \ No newline at end of file diff --git a/ExerciseTracker.Arashi256/Repositories/ExerciseSessionRepository.cs b/ExerciseTracker.Arashi256/Repositories/ExerciseSessionRepository.cs deleted file mode 100644 index 09a944ba..00000000 --- a/ExerciseTracker.Arashi256/Repositories/ExerciseSessionRepository.cs +++ /dev/null @@ -1,110 +0,0 @@ -using ExerciseTracker.Arashi256.Interfaces; -using ExerciseTracker.Arashi256.Models; -using ExerciseTracker.Arashi256.Classes; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.Arashi256.Repositories -{ - public class ExerciseSessionRepository : IExerciseSessionRepository - { - private readonly ExerciseDbContext _context; - - public ExerciseSessionRepository(ExerciseDbContext context) - { - _context = context; - } - - public ServiceResponse AddExerciseSession(ExerciseSession exercise) - { - try - { - _context.ExerciseSessions.Add(exercise); - _context.SaveChanges(); - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", exercise); - } - catch (DbUpdateException ex) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, ex.Message, null); - } - } - - public ServiceResponse DeleteExerciseSession(int id) - { - try - { - var session = _context.ExerciseSessions.Find(id); - if (session == null) - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Exercise session not found", null); - else - { - _context.ExerciseSessions.Remove(session); - _context.SaveChanges(); - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", null); - } - } - catch (DbUpdateException ex) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, ex.Message, null); - } - } - - public ServiceResponse GetExerciseSessions() - { - // AsNoTracking() used here to cope with operations outside EF Core like when mixing DB operations with Dapper for the extra challenge. - List sessions = _context.ExerciseSessions.AsNoTracking().ToList(); - if (sessions != null && sessions.Count > 0) - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", sessions); - else - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "No exercise sessions found", sessions); - } - - public ServiceResponse GetExerciseSessionById(int id) - { - var session = _context.ExerciseSessions.Find(id); - if (session != null) - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", session); - else - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Exercise session not found", null); - } - - public ServiceResponse UpdateExerciseSession(int id, ExerciseSession exercise) - { - if (id != exercise.Id) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Update exercise session and id mismatch", null); - } - var existingSession = _context.ExerciseSessions.Find(id); - if (existingSession == null) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Exercise session not found", null); - } - existingSession.Type = exercise.Type; - existingSession.DateTimeStart = exercise.DateTimeStart; - existingSession.DateTimeEnd = exercise.DateTimeEnd; - existingSession.Duration = exercise.Duration; - existingSession.Comments = exercise.Comments; - try - { - _context.SaveChanges(); - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", existingSession); - } - catch (DbUpdateException ex) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, ex.Message, null); - } - } - - public ServiceResponse ExerciseSessionExistsInRange(DateTime startDate, DateTime endDate, int? sessionIdToExclude = null) - { - try - { - bool isOverlapping = _context.ExerciseSessions.AsNoTracking().Any(session => (!sessionIdToExclude.HasValue || session.Id != sessionIdToExclude.Value) && startDate < session.DateTimeEnd && endDate > session.DateTimeStart); - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", isOverlapping); - } - catch (Exception ex) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, ex.Message, null); - } - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Arashi256/Repositories/ExerciseSessionRepositoryDapper.cs b/ExerciseTracker.Arashi256/Repositories/ExerciseSessionRepositoryDapper.cs deleted file mode 100644 index 3df8e3b9..00000000 --- a/ExerciseTracker.Arashi256/Repositories/ExerciseSessionRepositoryDapper.cs +++ /dev/null @@ -1,175 +0,0 @@ -using Dapper; -using ExerciseTracker.Arashi256.Classes; -using ExerciseTracker.Arashi256.Config; -using ExerciseTracker.Arashi256.Interfaces; -using ExerciseTracker.Arashi256.Models; -using Microsoft.Data.SqlClient; - -namespace ExerciseTracker.Arashi256.Repositories -{ - public class ExerciseSessionRepositoryDapper : IExerciseSessionRepository - { - private readonly string _connectionString; - - public ExerciseSessionRepositoryDapper(AppSettings appSettings) - { - _connectionString = appSettings.DatabaseConnectionString ?? throw new ArgumentNullException(nameof(appSettings.DatabaseConnectionString), "HALT ERROR: Connection string cannot be null."); - EnsureModelTableCreated(); - } - - private void EnsureModelTableCreated() - { - using (var connection = new SqlConnection(_connectionString)) - { - try - { - // Check if the table for the ExerciseSession exists. - var tableExists = connection.ExecuteScalar("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'ExerciseSessions'"); - // If the table does not exist, create it. - if (tableExists == 0) - { - connection.Execute(@"CREATE TABLE dbo.ExerciseSessions ( - Id INT IDENTITY(1,1) PRIMARY KEY, - Type NVARCHAR(25) NOT NULL, - DateTimeStart DATETIME2 NOT NULL, - DateTimeEnd DATETIME2 NOT NULL, - Duration TIME NOT NULL, - Comments NVARCHAR(255));"); - } - } - catch (Exception ex) - { - throw new Exception($"HALT ERROR: ExerciseSession table does not exist and could not create it: '{ex.Message}'"); - } - } - } - - public ServiceResponse AddExerciseSession(ExerciseSession exercise) - { - try - { - using (var connection = new SqlConnection(_connectionString)) - { - string insertQuery = "INSERT INTO dbo.ExerciseSessions(Type, DateTimeStart, DateTimeEnd, Duration, Comments) VALUES (@Type, @DateTimeStart, @DateTimeEnd, @Duration, @Comments)"; - int rows = connection.Execute(insertQuery, exercise); - if (rows > 0) - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", exercise); - else - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Could not add exercise session", null); - } - } - catch (Exception ex) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, ex.Message, null); - } - } - - public ServiceResponse DeleteExerciseSession(int id) - { - try - { - using (var connection = new SqlConnection(_connectionString)) - { - string deleteQuery = "DELETE FROM dbo.ExerciseSessions WHERE Id = @Id"; - int rows = connection.Execute(deleteQuery, new { Id = id }); - if (rows > 0) - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", null); - else - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Could not dete exercise session", null); - } - } - catch (Exception ex) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, ex.Message, null); - } - } - - public ServiceResponse GetExerciseSessionById(int id) - { - try - { - using (var connection = new SqlConnection(_connectionString)) - { - string selectQuery = "SELECT * FROM ExerciseSessions WHERE Id = @id"; - var session = connection.QuerySingleOrDefault(selectQuery, new { id }); - if (session != null) - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", session); - else - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Exercise session not found", null); - } - } - catch (Exception ex) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, ex.Message, null); - } - } - - public ServiceResponse GetExerciseSessions() - { - List results = new List(); - using (var connection = new SqlConnection(_connectionString)) - { - try - { - string selectQuery = "SELECT * from dbo.ExerciseSessions"; - results = connection.Query(selectQuery).AsList(); - if (results == null || results.Count == 0) - ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "No exercise sessions found", results); - } - catch (Exception ex) - { - ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, ex.Message, null); - } - } - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", results); - } - - public ServiceResponse UpdateExerciseSession(int id, ExerciseSession exercise) - { - if (id != exercise.Id) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Update exercise session and id mismatch", null); - } - try - { - using (var connection = new SqlConnection(_connectionString)) - { - // Check if the session exists in the database - string selectQuery = "SELECT * FROM ExerciseSessions WHERE Id = @id"; - var existingSession = connection.QuerySingleOrDefault(selectQuery, new { id }); - if (existingSession == null) - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Exercise session not found", null); - string updateQuery = "UPDATE ExerciseSessions SET Type = @Type, DateTimeStart = @DateTimeStart, DateTimeEnd = @DateTimeEnd, Duration = @Duration, Comments = @Comments WHERE Id = @Id"; - int rows = connection.Execute(updateQuery, exercise); - if (rows > 0) - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", exercise); - else - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Could not update exercise session", null); - } - } - catch (Exception ex) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, ex.Message, null); - } - } - - public ServiceResponse ExerciseSessionExistsInRange(DateTime startDate, DateTime endDate, int? sessionIdToExclude = null) - { - try - { - using (var connection = new SqlConnection(_connectionString)) - { - string existsQuery = sessionIdToExclude.HasValue - ? "SELECT CASE WHEN EXISTS (SELECT 1 FROM ExerciseSessions WHERE Id != @sessionIdToExclude AND @startDate < DateTimeEnd AND @endDate > DateTimeStart) THEN 1 ELSE 0 END" - : "SELECT CASE WHEN EXISTS (SELECT 1 FROM ExerciseSessions WHERE @startDate < DateTimeEnd AND @endDate > DateTimeStart) THEN 1 ELSE 0 END"; - bool isOverlapping = connection.ExecuteScalar(existsQuery, new { startDate, endDate, sessionIdToExclude }) == 1; - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", isOverlapping); - } - } - catch (Exception ex) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, ex.Message, null); - } - } - } -} diff --git a/ExerciseTracker.Arashi256/Services/ExerciseSessionService.cs b/ExerciseTracker.Arashi256/Services/ExerciseSessionService.cs deleted file mode 100644 index bde64a08..00000000 --- a/ExerciseTracker.Arashi256/Services/ExerciseSessionService.cs +++ /dev/null @@ -1,210 +0,0 @@ -using ExerciseTracker.Arashi256.Classes; -using ExerciseTracker.Arashi256.Interfaces; -using ExerciseTracker.Arashi256.Models; -using ExerciseTracker.Arashi256.Repositories; -using ExerciseTracker.Arashi256.Enums; - -namespace ExerciseTracker.Arashi256.Services -{ - internal class ExerciseSessionService - { - private readonly IExerciseSessionRepository _exerciseRepository; - private readonly IExerciseSessionRepository _exerciseRepositoryDapper; - - public ExerciseSessionService(ExerciseSessionRepository repEFCore, ExerciseSessionRepositoryDapper repDapper) - { - _exerciseRepository = repEFCore; - _exerciseRepositoryDapper = repDapper; - } - - // Method to get all exercise sessions and assign DisplayIds - public ServiceResponse GetAllExerciseSessions() - { - ServiceResponse serviceResponse = _exerciseRepository.GetExerciseSessions(); - if (serviceResponse.Status.Equals(ResponseStatus.Success)) - { - // Translate ExerciseSessions to ExerciseSessionsOutputDtos - List? sessions = serviceResponse.Data as List; - if (sessions != null && sessions.Count > 0) - { - serviceResponse.Data = ConvertToOutputDtoList(sessions); - } - return serviceResponse; - } - else - return serviceResponse; - } - - private List ConvertToOutputDtoList(List sessions) - { - int displayID = 0; - List outputSessions = new List(); - foreach (var session in sessions) - { - outputSessions.Add(ConvertToOutputDto(++displayID, session)); - } - return outputSessions; - } - - private ExerciseSessionOutputDto ConvertToOutputDto(int displayID, ExerciseSession session) - { - var sessionDto = new ExerciseSessionOutputDto - { - Id = session.Id, - DisplayId = displayID, - Type = session.Type, - DateTimeStart = session.DateTimeStart, - DateTimeEnd = session.DateTimeEnd, - Duration = session.Duration, - Comments = session.Comments, - }; - return sessionDto; - } - - public ServiceResponse AddNewExerciseSession(ExerciseSessionInputDto newSession) - { - ServiceResponse response; - bool hasOverlap = false; - if (!Validation.ValidateDatesForDuration(newSession.DateTimeStart, newSession.DateTimeEnd)) - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "End datetime cannot be before start datetime", null); - else - { - if (newSession.Type.Equals(ExerciseType.HIKING)) - { - // If HIKING, check for overlapping exercise sessions before doing anything from EF Core. - response = _exerciseRepository.ExerciseSessionExistsInRange(newSession.DateTimeStart, newSession.DateTimeEnd); - } - else - { - // If CARDIO, Check for overlapping exercise sessions before doing anything from Dapper. - response = _exerciseRepositoryDapper.ExerciseSessionExistsInRange(newSession.DateTimeStart, newSession.DateTimeEnd); - } - if (response.Status.Equals(ResponseStatus.Success)) - { - if (response.Data is bool isOverlapping) - { - hasOverlap = isOverlapping; - if (hasOverlap) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "The exercise session overlaps with an existing exercise session", null); - } - } - else - { - return response; // If not boolean, return response which will be error anyway. - } - } - TimeSpan duration = Validation.CalculateDuration(newSession.DateTimeStart, newSession.DateTimeEnd); - var addSession = new ExerciseSession - { - Type = newSession.Type, - DateTimeStart = newSession.DateTimeStart, - DateTimeEnd = newSession.DateTimeEnd, - Duration = duration, - Comments = newSession.Comments - }; - if (addSession.Type.Equals(ExerciseType.HIKING)) - return _exerciseRepository.AddExerciseSession(addSession); - else - return _exerciseRepositoryDapper.AddExerciseSession(addSession); - } - } - - public ServiceResponse DeleteExistingExerciseSession(int id) - { - ServiceResponse serviceResponse = _exerciseRepository.GetExerciseSessionById(id); - if (serviceResponse.Status.Equals(ResponseStatus.Success)) - { - return _exerciseRepository.DeleteExerciseSession(id); - } - else - return serviceResponse; - } - - public ServiceResponse UpdateExistingExerciseSession(int id, ExerciseSessionInputDto updateSession) - { - ServiceResponse response; - bool hasOverlap = false; - if (!Validation.ValidateDatesForDuration(updateSession.DateTimeStart, updateSession.DateTimeEnd)) - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "End datetime cannot be before start datetime", null); - else - { - if (updateSession.Type.Equals(ExerciseType.HIKING)) - { - // If HIKING, check for overlapping exercise sessions before doing anything from EF Core. - response = _exerciseRepository.ExerciseSessionExistsInRange(updateSession.DateTimeStart, updateSession.DateTimeEnd, updateSession.Id); - } - else - { - // If CARDIO, Check for overlapping exercise sessions before doing anything from Dapper. - response = _exerciseRepositoryDapper.ExerciseSessionExistsInRange(updateSession.DateTimeStart, updateSession.DateTimeEnd, updateSession.Id); - } - if (response.Status.Equals(ResponseStatus.Success)) - { - if (response.Data is bool isOverlapping) - { - hasOverlap = isOverlapping; - if (hasOverlap) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "The exercise session overlaps with an existing exercise session", null); - } - } - else - { - return response; // If not boolean, return response. - } - } - TimeSpan duration = Validation.CalculateDuration(updateSession.DateTimeStart, updateSession.DateTimeEnd); - var newSession = new ExerciseSession - { - Id = updateSession.Id, - Type = updateSession.Type, - DateTimeStart = updateSession.DateTimeStart, - DateTimeEnd = updateSession.DateTimeEnd, - Duration = duration, - Comments = updateSession.Comments - }; - if (newSession.Type.Equals(ExerciseType.HIKING)) - { - // If HIKING, check for overlapping exercise sessions before doing anything from EF Core. - response = _exerciseRepository.UpdateExerciseSession(updateSession.Id, newSession); - } - else - { - // If CARDIO, Check for overlapping exercise sessions before doing anything from Dapper. - response = _exerciseRepositoryDapper.UpdateExerciseSession(updateSession.Id, newSession); - } - if (response.Status.Equals(ResponseStatus.Success)) - { - var exerciseSessionUpdated = response.Data as ExerciseSession; - if (exerciseSessionUpdated != null) - { - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", ConvertToOutputDto(1, exerciseSessionUpdated)); - } - else - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Cannot format output session", null); - } - else - return response; - } - } - - public ServiceResponse GetExerciseSessionById(int id) - { - ServiceResponse response = _exerciseRepository.GetExerciseSessionById(id); - if (response.Equals(ResponseStatus.Success)) - { - ExerciseSession? session = response.Data as ExerciseSession; - if (session != null) - { - var outputSession = ConvertToOutputDto(1, session); - return ServiceResponseUtils.CreateResponse(ResponseStatus.Success, "OK", outputSession); - } - else - return ServiceResponseUtils.CreateResponse(ResponseStatus.Failure, "Could not retrieve ExerciseSession", null); - } - else - return response; - } - } -} diff --git a/ExerciseTracker.Arashi256/Views/MainView.cs b/ExerciseTracker.Arashi256/Views/MainView.cs deleted file mode 100644 index 541cea83..00000000 --- a/ExerciseTracker.Arashi256/Views/MainView.cs +++ /dev/null @@ -1,306 +0,0 @@ -using ExerciseTracker.Arashi256.Classes; -using ExerciseTracker.Arashi256.Config; -using ExerciseTracker.Arashi256.Controllers; -using ExerciseTracker.Arashi256.Enums; -using ExerciseTracker.Arashi256.Models; -using Spectre.Console; - -namespace ExerciseTracker.Arashi256.Views -{ - internal class MainView - { - private const int QUIT_APPLICATION_OPTION_NUM = 5; - private readonly string DATETIME_FORMAT; - private readonly Table _tblMainMenu; - private readonly string _appTitle = "EXERCISE TRACKER"; - private readonly FigletText _figletAppTitle; - private readonly string[] _menuOptions = - { - "Add New Exercise Session", - "Update Existing Exercise Session", - "Delete Existing Exercise Session", - "List All Exercise Sessions", - "Quit application" - }; - private ExerciseSessionController _controller; - - public MainView(ExerciseSessionController controller, AppSettings appSettings) - { - _figletAppTitle = new FigletText(_appTitle); - _figletAppTitle.Centered(); - _figletAppTitle.Color = Color.Yellow3_1; - _tblMainMenu = new Table(); - _tblMainMenu.AddColumn(new TableColumn("[orange1]CHOICE[/]").Centered()); - _tblMainMenu.AddColumn(new TableColumn("[orange1]OPTION[/]").LeftAligned()); - for (int i = 0; i < _menuOptions.Length; i++) - { - _tblMainMenu.AddRow($"[white]{i + 1}[/]", $"[yellow]{_menuOptions[i]}[/]"); - } - _tblMainMenu.Alignment(Justify.Center); - _controller = controller; - // Default to this datetime format if external settings can't be loaded. - DATETIME_FORMAT = appSettings.DateTimeFormat ?? "dd-MM-yy HH:mm"; - } - - public void DisplayView() - { - int selectedValue = 0; - do - { - Console.Clear(); - AnsiConsole.Write(_figletAppTitle); - AnsiConsole.Write(new Text("M A I N M E N U").Centered()); - AnsiConsole.Write(_tblMainMenu); - selectedValue = CommonUI.MenuOption($"Enter a value between 1 and {_menuOptions.Length}: ", 1, _menuOptions.Length); - ProcessMainMenu(selectedValue); - } while (selectedValue != QUIT_APPLICATION_OPTION_NUM); - AnsiConsole.MarkupLine("[lime]Goodbye![/]"); - } - - private void ProcessMainMenu(int option) - { - AnsiConsole.Markup($"[lightslategrey]Menu option selected: {option}[/]\n"); - switch (option) - { - case 1: - // Add new exercise session - AddNewExerciseSession(); - break; - case 2: - // Update an existing exercise session - UpdateExistingExerciseSession(); - break; - case 3: - // Delete existing exercise session - DeleteExistingExerciseSession(); - break; - case 4: - // List all exercise sessions - ListAllExerciseSessions(true); - CommonUI.Pause("grey53"); - break; - } - } - - private void AddNewExerciseSession() - { - ExerciseSessionInputDto? newSession = GetExerciseSessionDetails(); - if (newSession != null) - { - DisplayExerciseSessionInput(newSession); - if (AnsiConsole.Confirm("Are you sure you want to add this exercise session?")) - { - var response = _controller.AddNewExerciseSession(newSession); - if (response.Status.Equals(ResponseStatus.Success)) - AnsiConsole.MarkupLine($"[green]New exercise session added: '{response.Message}'[/]"); - else - AnsiConsole.MarkupLine($"[red]Exercise addition failed: '{response.Message}'[/]"); - } - else - AnsiConsole.MarkupLine("\n[yellow]Operation cancelled[/]\n"); - } - else - { - AnsiConsole.MarkupLine("\n[yellow]Operation cancelled[/]\n"); - } - CommonUI.Pause("grey53"); - } - private void UpdateExistingExerciseSession() - { - List? sessions = ListAllExerciseSessions(false); - if (sessions != null) - { - int selectedSession = CommonUI.MenuOption("(Enter '0' to cancel)\nPlease select an exercise session ID to update: ", 0, sessions.Count); - if (selectedSession == 0) - { - AnsiConsole.MarkupLine("[yellow]Operation cancelled[/]"); - } - else - { - AnsiConsole.MarkupLine($"Selected session: {selectedSession}"); - var updateSession = sessions[selectedSession - 1]; - DisplayExerciseSessionOutput(updateSession); - if (AnsiConsole.Confirm("Are you sure you want to update this exercise session?")) - { - ExerciseSessionInputDto? newSession = GetExerciseSessionDetails(); - if (newSession != null) - { - newSession.Id = updateSession.Id; - var response = _controller.UpdateExistingExerciseSession(updateSession.Id, newSession); - if (response.Status.Equals(ResponseStatus.Success)) - { - AnsiConsole.MarkupLine($"[green]Exercise session updated: '{response.Message}'[/]"); - var updatedSession = response.Data as ExerciseSessionOutputDto; - if (updatedSession != null) - { - DisplayExerciseSessionOutput(updatedSession); - } - else - AnsiConsole.MarkupLine("\n[yellow]Could not display updated exercise session[/]\n"); - } - else - AnsiConsole.MarkupLine($"[red]Exercise session update failed: '{response.Message}'[/]"); - } - else - AnsiConsole.MarkupLine("\n[yellow]Operation cancelled[/]\n"); - } - else - AnsiConsole.MarkupLine("\n[yellow]Operation cancelled[/]\n"); - } - } - CommonUI.Pause("grey53"); - } - - private void DeleteExistingExerciseSession() - { - List? sessions = ListAllExerciseSessions(false); - if (sessions != null) - { - int selectedSession = CommonUI.MenuOption("(Enter '0' to cancel)\nPlease select an exercise session ID to delete: ", 0, sessions.Count); - if (selectedSession == 0) - { - AnsiConsole.MarkupLine("[yellow]Operation cancelled[/]"); - } - else - { - AnsiConsole.MarkupLine($"Selected session: {selectedSession}"); - var deleteSession = sessions[selectedSession - 1]; - DisplayExerciseSessionOutput(deleteSession); - if (AnsiConsole.Confirm("Are you sure you want to delete this exercise session?")) - { - var response = _controller.DeleteExistingExerciseSession(deleteSession.Id); - if (response.Status.Equals(ResponseStatus.Success)) - AnsiConsole.MarkupLine($"[green]Exercise session deleted: '{response.Message}'[/]"); - else - AnsiConsole.MarkupLine($"[red]Exercise session delete failed: '{response.Message}'[/]"); - } - else - AnsiConsole.MarkupLine("\n[yellow]Operation cancelled[/]\n"); - } - } - CommonUI.Pause("grey53"); - } - - private ExerciseSessionInputDto? GetExerciseSessionDetails() - { - bool isValidSession = false; - ExerciseType exerciseType; - DateTime startDateTime, endDateTime; - string? comments; - do - { - // Get exercise types from the public enum. - exerciseType = CommonUI.GetExerciseTypeDialog(new List { ExerciseType.HIKING, ExerciseType.CARDIO }); - AnsiConsole.MarkupLine($"\n[white]SELECTED: {exerciseType.ToString()}[/]"); - // Get session start - AnsiConsole.Markup("\n[white]Enter the start of the exercise session[/]\n"); - startDateTime = CommonUI.GetDateTimeDialog(DATETIME_FORMAT) ?? DateTime.MinValue; - if (startDateTime == DateTime.MinValue) return null; - // Get session end - AnsiConsole.Markup("\n[white]Enter the end of the exercise session[/]\n"); - endDateTime = CommonUI.GetDateTimeDialog(DATETIME_FORMAT) ?? DateTime.MinValue; - if (endDateTime == DateTime.MinValue) return null; - // Validate session datetimes - isValidSession = Validation.ValidateDatesForDuration(startDateTime, endDateTime); - // Any other comments - comments = CommonUI.GetStringWithPrompt("Enter any other comments (enter 'n' for none): ", 255, "n"); - if (comments == null) return null; - if (comments.ToLower().Equals("n")) comments = null; - if (!isValidSession) - AnsiConsole.MarkupLine("\n[yellow]The exercise session end cannot be before session start. Try again.[/]\n"); - } while (!isValidSession); - var newSession = new ExerciseSessionInputDto - { - Type = exerciseType.ToString().ToUpper(), - DateTimeStart = startDateTime, - DateTimeEnd = endDateTime, - Comments = comments - }; - return newSession; - } - - private void DisplayExerciseSessionInput(ExerciseSessionInputDto exerciseSession) - { - Table tblSession = new Table(); - tblSession.AddColumn(new TableColumn("[cyan]ID[/]").RightAligned()); - tblSession.AddColumn(new TableColumn($"[white]1[/]").LeftAligned()); - tblSession.AddRow($"[cyan]Type[/]", $"[white]{exerciseSession.Type.ToString().ToUpper()}[/]"); - tblSession.AddRow($"[cyan]Start Time[/]", $"[white]{exerciseSession.DateTimeStart.ToString(DATETIME_FORMAT)}[/]"); - tblSession.AddRow($"[cyan]End Time[/]", $"[white]{exerciseSession.DateTimeEnd.ToString(DATETIME_FORMAT)}[/]"); - tblSession.AddRow($"[cyan]Comments[/]", $"[white]{exerciseSession.Comments ?? "NONE"}[/]"); - AnsiConsole.Write(tblSession); - } - - private void DisplayExerciseSessionOutput(ExerciseSessionOutputDto exerciseSession) - { - Table tblSession = new Table(); - tblSession.AddColumn(new TableColumn("[cyan]ID[/]").RightAligned()); - tblSession.AddColumn(new TableColumn($"[white]{exerciseSession.DisplayId}[/]").LeftAligned()); - tblSession.AddRow($"[cyan]Type[/]", $"[white]{exerciseSession.Type.ToString().ToUpper()}[/]"); - tblSession.AddRow($"[cyan]Start Time[/]", $"[white]{exerciseSession.DateTimeStart.ToString(DATETIME_FORMAT)}[/]"); - tblSession.AddRow($"[cyan]End Time[/]", $"[white]{exerciseSession.DateTimeEnd.ToString(DATETIME_FORMAT)}[/]"); - tblSession.AddRow($"[cyan]Duration[/]", $"[white]{exerciseSession.Duration.ToString(@"hh\:mm")}[/]"); - tblSession.AddRow($"[cyan]Comments[/]", $"[white]{exerciseSession.Comments ?? "NONE"}[/]"); - AnsiConsole.Write(tblSession); - } - - private List? ListAllExerciseSessions(bool showTotals) - { - var response = _controller.GetAllExerciseSessions(); - if (response.Status.Equals(ResponseStatus.Success)) - { - List? displaySessions = response.Data as List; - if (displaySessions != null && displaySessions.Count > 0) - { - DisplayExerciseSessions(displaySessions, showTotals); - return displaySessions; - } - else - { - AnsiConsole.MarkupLine($"[red]There are no exercise sessions to display[/]"); - } - } - else - AnsiConsole.MarkupLine($"[red]{response.Message}[/]"); - return null; - } - - private void DisplayExerciseSessions(List? sessions, bool showTotal) - { - TimeSpan totalDuration = TimeSpan.Zero; - if (sessions == null || !sessions.Any()) return; - Table sessionsTable = new Table(); - sessionsTable.AddColumn(new TableColumn("[white]ID[/]").Centered()); - sessionsTable.AddColumn(new TableColumn("[white]Type[/]").LeftAligned()); - sessionsTable.AddColumn(new TableColumn("[white]Session Start[/]").LeftAligned()); - sessionsTable.AddColumn(new TableColumn("[white]Session End[/]").LeftAligned()); - sessionsTable.AddColumn(new TableColumn("[white]Comments[/]").LeftAligned()); - sessionsTable.AddColumn(new TableColumn("[white]Duration[/]").LeftAligned()); - sessionsTable.Alignment(Justify.Center); - foreach (var session in sessions) - { - var displayId = session.DisplayId.ToString(); - var Type = session.Type.ToString().ToUpper() ?? "UNKNOWN"; - var sessionStart = session.DateTimeStart.ToString(DATETIME_FORMAT); - var sessionEnd = session.DateTimeEnd.ToString(DATETIME_FORMAT); - var sessionDuration = session.Duration.ToString(@"hh\:mm"); - var sesseionComments = session.Comments ?? "N/A"; - totalDuration += session.Duration; - sessionsTable.AddRow( - displayId, - Type, - sessionStart, - sessionEnd, - sesseionComments, - sessionDuration - ); - } - if (showTotal) - { - sessionsTable.AddRow(""); - sessionsTable.AddRow("", "", "", "", "[yellow]Total Duration[/]", $"[cyan]{totalDuration.ToString(@"hh\:mm")}[/]"); - } - AnsiConsole.Write(sessionsTable); - } - } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour.sln b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour.sln deleted file mode 100644 index f55061f8..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34511.84 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "STUDY.ConsoleProjects.ExerciseTrackerFour", "STUDY.ConsoleProjects.ExerciseTrackerFour\STUDY.ConsoleProjects.ExerciseTrackerFour.csproj", "{9451B8FD-FB8E-4655-87ED-72371F521C43}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9451B8FD-FB8E-4655-87ED-72371F521C43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9451B8FD-FB8E-4655-87ED-72371F521C43}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9451B8FD-FB8E-4655-87ED-72371F521C43}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9451B8FD-FB8E-4655-87ED-72371F521C43}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {733AF67A-5B55-41A9-A937-ED5EA1BD04A7} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Controller/ExerciseController.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Controller/ExerciseController.cs deleted file mode 100644 index 03cf55d9..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Controller/ExerciseController.cs +++ /dev/null @@ -1,62 +0,0 @@ -using Spectre.Console; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Data.Repository; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Models; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Service; - -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Controller; -public class ExerciseController -{ - private readonly IExerciseService _exerciseService; - private readonly IExerciseRepository _exerciseRepository; - public ExerciseController(IExerciseService exerciseService, IExerciseRepository exerciseRepository) - { - _exerciseService = exerciseService; - _exerciseRepository = exerciseRepository; - } - public void ViewAllExerciseEntries() - { - var exercises = _exerciseRepository.GetExercises(); - - if (exercises.Count == 0) - { - AnsiConsole.MarkupLine("404 - Cannot be found"); - MainMenu.ShowMainMenu(); - } - - else - { - DataVisualization.ShowDataInTable(exercises); - } - - Console.WriteLine("View All Exercise Entries completed"); - } - public void ViewSpecificExerciseEntry() - { - Console.WriteLine("Enter the ID of the exercise entry you want to view:"); - int exerciseId = int.Parse(Console.ReadLine()); - - Exercise? selectedExercise = _exerciseRepository.GetExerciseEntryById(exerciseId); - - if (selectedExercise is null) - { - AnsiConsole.MarkupLine("404 - Cannot be found"); - MainMenu.ShowMainMenu(); - } - - Exercise exercise = _exerciseRepository.ViewSpecificExerciseEntry(exerciseId); - - DataVisualization.ShowSingleExercise(exercise); - } - public void AddExerciseEntry() - { - _exerciseService.AddExerciseEntry(); - } - public void UpdateExerciseEntry() - { - _exerciseService.UpdateExerciseEntry(); - } - public void DeleteExerciseEntry() - { - _exerciseService.DeleteExerciseEntry(); - } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Data/ExerciseDbContext.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Data/ExerciseDbContext.cs deleted file mode 100644 index ac73b7f5..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Data/ExerciseDbContext.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Models; - -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Data; -public class ExerciseDbContext : DbContext -{ - public DbSet Exercises { get; set; } - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlServer("Data Source=(LocalDB)\\LocalDBDemo;Database=exerciseTrackerDb;Trusted_Connection=True;TrustServerCertificate=True;"); - } - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - base.OnModelCreating(modelBuilder); - } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Data/Repository/ExerciseRepository.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Data/Repository/ExerciseRepository.cs deleted file mode 100644 index 5aed6f50..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Data/Repository/ExerciseRepository.cs +++ /dev/null @@ -1,47 +0,0 @@ -using STUDY.ConsoleProjects.ExerciseTrackerFour.Models; - -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Data.Repository; -public class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseDbContext _context; - public ExerciseRepository(ExerciseDbContext context) - { - _context = context; - } - public void AddExerciseEntry(Exercise exercise) - { - _context.Exercises.Add(exercise); - _context.SaveChanges(); - } - public void DeleteExerciseEntry(int exerciseId) - { - var exercise = _context.Exercises.Find(exerciseId); - _context.Exercises.Remove(exercise); - _context.SaveChanges(); - } - public void UpdateExerciseEntry(int exerciseId, Exercise newExercise) - { - var oldExercise = _context.Exercises.Find(exerciseId); - - oldExercise.StarTime = newExercise.StarTime; - oldExercise.EndTime = newExercise.EndTime; - oldExercise.Duration = newExercise.Duration; - oldExercise.Comments = newExercise.Comments; - - _context.SaveChanges(); - } - public Exercise ViewSpecificExerciseEntry(int exerciseId) - { - var exercise = _context.Exercises.FirstOrDefault(e => e.Id == exerciseId); - - return exercise; - } - public Exercise GetExerciseEntryById(int exerciseId) - { - return _context.Exercises.Find(exerciseId)!; - } - public List GetExercises() - { - return _context.Exercises.ToList(); - } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Data/Repository/IExerciseRepository.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Data/Repository/IExerciseRepository.cs deleted file mode 100644 index b3295fea..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Data/Repository/IExerciseRepository.cs +++ /dev/null @@ -1,12 +0,0 @@ -using STUDY.ConsoleProjects.ExerciseTrackerFour.Models; - -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Data.Repository; -public interface IExerciseRepository -{ - public Exercise ViewSpecificExerciseEntry(int exerciseId); - void AddExerciseEntry(Exercise exercise); - void UpdateExerciseEntry(int exerciseId, Exercise newExercise); - void DeleteExerciseEntry(int exerciseId); - public Exercise GetExerciseEntryById(int exerciseId); - public List GetExercises(); -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/DataVisualization.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/DataVisualization.cs deleted file mode 100644 index fe4b1896..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/DataVisualization.cs +++ /dev/null @@ -1,32 +0,0 @@ -using STUDY.ConsoleProjects.ExerciseTrackerFour.Models; - -namespace STUDY.ConsoleProjects.ExerciseTrackerFour; -internal class DataVisualization -{ - public static void ShowDataInTable(List exercises, bool isSingle = false) - { - if (isSingle) - { - var exercise = exercises[0]; - ShowSingleExercise(exercise); - } - else - { - foreach (var exercise in exercises) - { - ShowSingleExercise(exercise); - } - } - } - public static void ShowSingleExercise(Exercise exercise) - { - TimeSpan duration = exercise.EndTime - exercise.StarTime; - Console.WriteLine($@" - Id: {exercise.Id}, - StartTime: {exercise.StarTime}, - EndTime: {exercise.EndTime}, - Duration: {duration}, - Comments: {exercise.Comments} - "); - } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/MainMenu.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/MainMenu.cs deleted file mode 100644 index 8d30d277..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/MainMenu.cs +++ /dev/null @@ -1,66 +0,0 @@ -using Spectre.Console; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Controller; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Data; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Data.Repository; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Service; - -namespace STUDY.ConsoleProjects.ExerciseTrackerFour; -internal class MainMenu -{ - public enum MenuOption - { - ViewAllExerciseEntries, - ViewSpecificExerciseEntry, - AddExerciseEntry, - UpdateExerciseEntry, - DeleteExerciseEntry, - Quit - } - public static void ShowMainMenu() - { - var exerciseContext = new ExerciseDbContext(); - var exerciseRepository = new ExerciseRepository(exerciseContext); - var userInput = new UserInput(); - var exerciseService = new ExerciseService(exerciseRepository, userInput); - var exerciseController = new ExerciseController(exerciseService, exerciseRepository); - - while (true) - { - var choice = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What would you like to do?") - .AddChoices( - MenuOption.ViewAllExerciseEntries, - MenuOption.ViewSpecificExerciseEntry, - MenuOption.AddExerciseEntry, - MenuOption.UpdateExerciseEntry, - MenuOption.DeleteExerciseEntry, - MenuOption.Quit)); - - switch (choice) - { - case MenuOption.ViewAllExerciseEntries: - exerciseController.ViewAllExerciseEntries(); - break; - case MenuOption.ViewSpecificExerciseEntry: - exerciseController.ViewSpecificExerciseEntry(); - break; - case MenuOption.AddExerciseEntry: - exerciseController.AddExerciseEntry(); - break; - case MenuOption.UpdateExerciseEntry: - exerciseController.UpdateExerciseEntry(); - break; - case MenuOption.DeleteExerciseEntry: - exerciseController.DeleteExerciseEntry(); - break; - case MenuOption.Quit: - Environment.Exit(0); - break; - default: - AnsiConsole.WriteLine("Invalid choice. Please try again."); - break; - } - } - } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Migrations/20240519223411_Initial-Create.Designer.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Migrations/20240519223411_Initial-Create.Designer.cs deleted file mode 100644 index cbba33c2..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Migrations/20240519223411_Initial-Create.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Data; - -#nullable disable - -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - [Migration("20240519223411_Initial-Create")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("STUDY.ConsoleProjects.ExerciseTrackerFour.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("EndTime") - .HasColumnType("datetime2"); - - b.Property("StarTime") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Migrations/20240519223411_Initial-Create.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Migrations/20240519223411_Initial-Create.cs deleted file mode 100644 index d1069b30..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Migrations/20240519223411_Initial-Create.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - StarTime = table.Column(type: "datetime2", nullable: false), - EndTime = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "nvarchar(max)", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Migrations/ExerciseDbContextModelSnapshot.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Migrations/ExerciseDbContextModelSnapshot.cs deleted file mode 100644 index bb830b0d..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Migrations/ExerciseDbContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Data; - -#nullable disable - -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - partial class ExerciseDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("STUDY.ConsoleProjects.ExerciseTrackerFour.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("EndTime") - .HasColumnType("datetime2"); - - b.Property("StarTime") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Models/Exercise.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Models/Exercise.cs deleted file mode 100644 index d30c6197..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Models/Exercise.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Models; -public class Exercise -{ - public int Id { get; set; } - public DateTime StarTime { get; set; } - public DateTime EndTime { get; set; } - public string Duration { get; set; } = null!; - public string? Comments { get; set; } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Program.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Program.cs deleted file mode 100644 index e609dab7..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Program.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace STUDY.ConsoleProjects.ExerciseTrackerFour; -internal class Program -{ - public static void Main(string[] args) - { - MainMenu.ShowMainMenu(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Properties/launchSettings.json b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Properties/launchSettings.json deleted file mode 100644 index b87a31ba..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Properties/launchSettings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "profiles": { - "STUDY.ConsoleProjects.ExerciseTrackerFour": { - "commandName": "Project", - "workingDirectory": "C:\\MEGA\\WIP\\02-GitWIP\\CodeReviews.Console.ExerciseTracker\\ExerciseTracker.Bata13" - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/STUDY.ConsoleProjects.ExerciseTrackerFour.csproj b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/STUDY.ConsoleProjects.ExerciseTrackerFour.csproj deleted file mode 100644 index bbd3db80..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/STUDY.ConsoleProjects.ExerciseTrackerFour.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/ExerciseService.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/ExerciseService.cs deleted file mode 100644 index 8d726cca..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/ExerciseService.cs +++ /dev/null @@ -1,77 +0,0 @@ -using Spectre.Console; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Data.Repository; -using STUDY.ConsoleProjects.ExerciseTrackerFour.Models; - -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Service; -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository _exerciseRepository; - private readonly IUserInput _UserInput; - public ExerciseService(IExerciseRepository exerciseRepository, IUserInput userInput) - { - _exerciseRepository = exerciseRepository; - _UserInput = userInput; - } - public void AddExerciseEntry() - { - var (startTime, endTime, duration, comments) = _UserInput.GetUserInputForExcerciseEntry(); - - Exercise exercise = new Exercise - { - StarTime = startTime, - EndTime = endTime, - Duration = duration.ToString(@"hh\:mm\:ss"), - Comments = comments - }; - - _exerciseRepository.AddExerciseEntry(exercise); - - Console.WriteLine("Added Exercise Entry"); - } - public void UpdateExerciseEntry() - { - Console.WriteLine("Enter the ID of the exercise entry you want to Update:"); - int checkExerciseId = int.Parse(Console.ReadLine()); - - Exercise? selectedExercise = _exerciseRepository.GetExerciseEntryById(checkExerciseId); - - if (selectedExercise is null) - { - AnsiConsole.MarkupLine("404 - Cannot be found"); - MainMenu.ShowMainMenu(); - } - - var (newStartTime, newEndTime, newDuration, newComments, exerciseId) = _UserInput.GetUserInputForUpdatedExcerciseEntry(); - - Exercise newExercise = new Exercise - { - StarTime = newStartTime, - EndTime = newEndTime, - Duration = newDuration.ToString(@"hh\:mm\:ss"), - Comments = newComments - }; - - _exerciseRepository.UpdateExerciseEntry(exerciseId, newExercise); - - Console.WriteLine($"Exercise entry with ID {exerciseId} updated successfully."); - } - public void DeleteExerciseEntry() - { - Console.WriteLine("Enter the ID of the exercise entry you want to Delete:"); - int checkExerciseId = int.Parse(Console.ReadLine()); - - Exercise? selectedExercise = _exerciseRepository.GetExerciseEntryById(checkExerciseId); - - if (selectedExercise is null) - { - AnsiConsole.MarkupLine("404 - Cannot be found"); - MainMenu.ShowMainMenu(); - } - - int exerciseId = _UserInput.GetUserInputToDelete(); - - _exerciseRepository.DeleteExerciseEntry(exerciseId); - - Console.WriteLine($"Exercise entry with ID {exerciseId} deleted successfully."); - } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/IExerciseService.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/IExerciseService.cs deleted file mode 100644 index 34793fcd..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/IExerciseService.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Service; -public interface IExerciseService -{ - void AddExerciseEntry(); - void UpdateExerciseEntry(); - void DeleteExerciseEntry(); -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/IUserInput.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/IUserInput.cs deleted file mode 100644 index 55148aec..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/IUserInput.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Service; -public interface IUserInput -{ - (DateTime startTime, DateTime endTime, TimeSpan duration, string comments) GetUserInputForExcerciseEntry(); - - (DateTime newStartTime, DateTime newEndTime, TimeSpan newDuration, string newComments, int exerciseId) GetUserInputForUpdatedExcerciseEntry(); - int GetUserInputToDelete(); -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/UserInput.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/UserInput.cs deleted file mode 100644 index 53ea1705..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Service/UserInput.cs +++ /dev/null @@ -1,85 +0,0 @@ -namespace STUDY.ConsoleProjects.ExerciseTrackerFour.Service; -public class UserInput : IUserInput -{ - public (DateTime startTime, DateTime endTime, TimeSpan duration, string comments) GetUserInputForExcerciseEntry() - { - Console.WriteLine("Enter the new start time (yyyy-MM-dd HH:mm:ss):"); - DateTime startTime; - - while (!DateTime.TryParseExact(Console.ReadLine(), "yyyy-MM-dd HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out startTime)) - { - Console.WriteLine("Invalid input. Please enter a valid start time (yyyy-MM-dd HH:mm:ss):"); - } - - Console.WriteLine("Enter the new end time (yyyy-MM-dd HH:mm:ss):"); - - DateTime endTime; - - while (!DateTime.TryParseExact(Console.ReadLine(), "yyyy-MM-dd HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out endTime)) - { - Console.WriteLine("Invalid input. Please enter a valid end time (yyyy-MM-dd HH:mm:ss):"); - } - - Console.WriteLine("Enter the end time of the exercise (yyyy-MM-dd HH:mm:ss):"); - - Console.WriteLine("Enter Any Comments"); - string comments = Console.ReadLine(); - - TimeSpan duration = endTime - startTime; - - Validation.isEndTimeBeforeStartTime(startTime, endTime); - Validation.isPositiveNumber(startTime, endTime); - - return (startTime, endTime, duration, comments); - } - public (DateTime newStartTime, DateTime newEndTime, TimeSpan newDuration, string newComments, int exerciseId) GetUserInputForUpdatedExcerciseEntry() - { - Console.WriteLine("Enter the ID of the exercise entry you want to update:"); - - int exerciseId; - - while (!int.TryParse(Console.ReadLine(), out exerciseId)) - { - Console.WriteLine("Invalid input. Please enter a valid ID:"); - } - - Console.WriteLine("Enter the new start time (yyyy-MM-dd HH:mm:ss):"); - - DateTime newStartTime; - - while (!DateTime.TryParseExact(Console.ReadLine(), "yyyy-MM-dd HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out newStartTime)) - { - Console.WriteLine("Invalid input. Please enter a valid start time (yyyy-MM-dd HH:mm:ss):"); - } - - Console.WriteLine("Enter the new end time (yyyy-MM-dd HH:mm:ss):"); - - DateTime newEndTime; - - while (!DateTime.TryParseExact(Console.ReadLine(), "yyyy-MM-dd HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out newEndTime)) - { - Console.WriteLine("Invalid input. Please enter a valid end time (yyyy-MM-dd HH:mm:ss):"); - } - - Console.WriteLine("Enter Any Comments"); - string newComments = Console.ReadLine(); - - TimeSpan newDuration = newEndTime - newStartTime; - - Validation.isEndTimeBeforeStartTime(newStartTime, newEndTime); - Validation.isPositiveNumber(newStartTime, newEndTime); - - return (newStartTime, newEndTime, newDuration, newComments, exerciseId); - } - public int GetUserInputToDelete() - { - Console.WriteLine("Enter the ID of the exercise entry you want to delete:"); - int exerciseId; - while (!int.TryParse(Console.ReadLine(), out exerciseId)) - { - Console.WriteLine("Invalid input. Please enter a valid ID:"); - } - - return (exerciseId); - } -} diff --git a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Validation.cs b/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Validation.cs deleted file mode 100644 index f6fed9ef..00000000 --- a/ExerciseTracker.Bata13/STUDY.ConsoleProjects.ExerciseTrackerFour/Validation.cs +++ /dev/null @@ -1,36 +0,0 @@ -namespace STUDY.ConsoleProjects.ExerciseTrackerFour; -public class Validation -{ - public static void isEndTimeBeforeStartTime(DateTime startTimeInput, DateTime endTimeInput) - { - if (endTimeInput < startTimeInput) - { - Console.WriteLine("Not in chronological order"); - Console.WriteLine("Going Back To The Main Menu"); - MainMenu.ShowMainMenu(); - } - else - { - Console.WriteLine("Correctly in chronological order"); - } - } - public static void isPositiveNumber(DateTime startTimeInput, DateTime endTimeInput) - { - if (endTimeInput < DateTime.MinValue) - { - Console.WriteLine("Date and time cannot be negative"); - Console.WriteLine("Going Back To The Main Menu"); - MainMenu.ShowMainMenu(); - } - else if (startTimeInput < DateTime.MinValue) - { - Console.WriteLine("Date and time cannot be negative"); - Console.WriteLine("Going Back To The Main Menu"); - MainMenu.ShowMainMenu(); - } - else - { - Console.WriteLine("Correctly in positive number"); - } - } -} diff --git a/ExerciseTracker.Bkohler93/Data/Data.csproj b/ExerciseTracker.Bkohler93/Data/Data.csproj deleted file mode 100644 index 8a5dee05..00000000 --- a/ExerciseTracker.Bkohler93/Data/Data.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - net8.0 - enable - enable - - - - - - - diff --git a/ExerciseTracker.Bkohler93/Data/Entities/Exercise.cs b/ExerciseTracker.Bkohler93/Data/Entities/Exercise.cs deleted file mode 100644 index 1335381e..00000000 --- a/ExerciseTracker.Bkohler93/Data/Entities/Exercise.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Data.Entities; - -public class Exercise { - public int Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration { get; set; } - public string? Comments { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.Bkohler93/Data/ExerciseEFDbContext.cs b/ExerciseTracker.Bkohler93/Data/ExerciseEFDbContext.cs deleted file mode 100644 index d68b56b9..00000000 --- a/ExerciseTracker.Bkohler93/Data/ExerciseEFDbContext.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Data.Entities; -using Microsoft.EntityFrameworkCore; - -namespace Data; - -public class ExerciseEFDbContext : DbContext -{ - public DbSet Runs { get; set; } - public ExerciseEFDbContext(DbContextOptions options):base(options) - { - - } -} diff --git a/ExerciseTracker.Bkohler93/Data/Repositories/EFRepository.cs b/ExerciseTracker.Bkohler93/Data/Repositories/EFRepository.cs deleted file mode 100644 index 8cd1b4cb..00000000 --- a/ExerciseTracker.Bkohler93/Data/Repositories/EFRepository.cs +++ /dev/null @@ -1,72 +0,0 @@ -using Data.Entities; -using Microsoft.EntityFrameworkCore; - -namespace Data.Repositories; - -public class EFRepository : IRepository where TEntity : class, new() - { - protected readonly ExerciseEFDbContext ExerciseDbContext; - - public EFRepository(ExerciseEFDbContext exerciseDbContext) - { - ExerciseDbContext = exerciseDbContext; - } - - public IQueryable GetAll() - { - try - { - return ExerciseDbContext.Set(); - } - catch (Exception ex) - { - throw new Exception($"Couldn't retrieve entities: {ex.Message}"); - } - } - - public async Task AddAsync(TEntity entity) - { - if (entity == null) - { - throw new ArgumentNullException($"{nameof(AddAsync)} entity must not be null"); - } - - try - { - await ExerciseDbContext.AddAsync(entity); - await ExerciseDbContext.SaveChangesAsync(); - - return entity; - } - catch (Exception ex) - { - throw new Exception($"{nameof(entity)} could not be saved: {ex.Message}"); - } - } - - public async Task UpdateAsync(TEntity entity) - { - if (entity == null) - { - throw new ArgumentNullException($"{nameof(AddAsync)} entity must not be null"); - } - - try - { - ExerciseDbContext.Update(entity); - await ExerciseDbContext.SaveChangesAsync(); - - return entity; - } - catch (Exception ex) - { - throw new Exception($"{nameof(entity)} could not be updated: {ex.Message}"); - } - } - - public async Task DeleteAsync(TEntity entity) - { - ExerciseDbContext.Remove(entity); - await ExerciseDbContext.SaveChangesAsync(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Bkohler93/Data/Repositories/ExerciseEFRepository.cs b/ExerciseTracker.Bkohler93/Data/Repositories/ExerciseEFRepository.cs deleted file mode 100644 index e11673af..00000000 --- a/ExerciseTracker.Bkohler93/Data/Repositories/ExerciseEFRepository.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Data.Entities; -using Microsoft.EntityFrameworkCore; - -namespace Data.Repositories; - -public class ExerciseEFRepository : EFRepository, IExerciseRepository - { - public ExerciseEFRepository(ExerciseEFDbContext exerciseDbContext) : base(exerciseDbContext) - { - } - - public Task> GetAllExercisesAsync() - { - return GetAll().ToListAsync(); - } - - public Task GetExerciseByIdAsync(int id) - { - return GetAll().FirstOrDefaultAsync(r => r.Id == id); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Bkohler93/Data/Repositories/Interfaces/IExerciseRepository.cs b/ExerciseTracker.Bkohler93/Data/Repositories/Interfaces/IExerciseRepository.cs deleted file mode 100644 index e8807d0b..00000000 --- a/ExerciseTracker.Bkohler93/Data/Repositories/Interfaces/IExerciseRepository.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Data.Entities; - -namespace Data.Repositories; - -public interface IExerciseRepository : IRepository -{ - Task GetExerciseByIdAsync(int id); - - Task> GetAllExercisesAsync(); -} \ No newline at end of file diff --git a/ExerciseTracker.Bkohler93/Data/Repositories/Interfaces/IRepository.cs b/ExerciseTracker.Bkohler93/Data/Repositories/Interfaces/IRepository.cs deleted file mode 100644 index 80ae16b1..00000000 --- a/ExerciseTracker.Bkohler93/Data/Repositories/Interfaces/IRepository.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Data.Repositories; - -public interface IRepository where TEntity : class, new() -{ - IQueryable GetAll(); - - Task AddAsync(TEntity entity); - - Task UpdateAsync(TEntity entity); - Task DeleteAsync(TEntity entity); -} \ No newline at end of file diff --git a/ExerciseTracker.Bkohler93/ExerciseTracker.Bkohler93.sln b/ExerciseTracker.Bkohler93/ExerciseTracker.Bkohler93.sln deleted file mode 100644 index 06114c9f..00000000 --- a/ExerciseTracker.Bkohler93/ExerciseTracker.Bkohler93.sln +++ /dev/null @@ -1,28 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.Console", "ExerciseTracker.Console\ExerciseTracker.Console.csproj", "{8AF9E851-572B-4AED-815F-A6243395FE02}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Data", "Data\Data.csproj", "{59183EDC-D2C5-417A-82C6-CFCBCE291665}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8AF9E851-572B-4AED-815F-A6243395FE02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8AF9E851-572B-4AED-815F-A6243395FE02}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8AF9E851-572B-4AED-815F-A6243395FE02}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8AF9E851-572B-4AED-815F-A6243395FE02}.Release|Any CPU.Build.0 = Release|Any CPU - {59183EDC-D2C5-417A-82C6-CFCBCE291665}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59183EDC-D2C5-417A-82C6-CFCBCE291665}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59183EDC-D2C5-417A-82C6-CFCBCE291665}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59183EDC-D2C5-417A-82C6-CFCBCE291665}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/App.cs b/ExerciseTracker.Bkohler93/ExerciseTracker.Console/App.cs deleted file mode 100644 index ac7b9c7d..00000000 --- a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/App.cs +++ /dev/null @@ -1,29 +0,0 @@ -using ExerciseTracker.Controllers; - -namespace ExerciseTracker; - -public class App { - private readonly MainMenuController Controller; - public App(MainMenuController controller) - { - Controller = controller; - } - - public async Task Run() { - while(true) - { - UI.Clear(); - var option = UI.MenuSelection("[green]Exercise Tracker[/] Main Menu", [ - "Exit", - ..MainMenuController.Options - ]); - - if (option == "Exit") - { - break; - } - - await Controller.HandleChoice(option); - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Controllers/MainMenuController.cs b/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Controllers/MainMenuController.cs deleted file mode 100644 index 724cf62c..00000000 --- a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Controllers/MainMenuController.cs +++ /dev/null @@ -1,98 +0,0 @@ -using Data.Entities; -using ExerciseTracker.Services; -using Microsoft.IdentityModel.Tokens; - -namespace ExerciseTracker.Controllers; - -public class MainMenuController { - private readonly ExerciseService Service; - public static readonly string[] Options = ["View logged exercises", "Log an exercise", "Edit a logged exercise", "Delete exercise log"]; - private readonly Dictionary> OptionHandlers; - public MainMenuController(ExerciseService service) - { - Service = service; - OptionHandlers = new Dictionary>{ - { Options[0], ViewExercises}, - { Options[1], LogExercise}, - { Options[2], EditExercise}, - { Options[3], DeleteExercise} - }; - } - - public async Task HandleChoice(string choice) - { - OptionHandlers.TryGetValue(choice, out var action); - await action!(); - } - - - private async Task ViewExercises() - { - var exercises = await Service.GetAllExercisesAsync(); - - if (exercises.IsNullOrEmpty()) - { - UI.ConfirmationMessage("No exercises to view"); - return; - } - - UI.DisplayExercises(exercises); - UI.ConfirmationMessage(""); - } - - private async Task LogExercise() - { - var startDateTime = UI.DateTimeResponseWithDefault("Enter the starting date and time", DateTime.Today); - var endDateTime = UI.DateTimeResponseWithDefault("Enter the ending date time", DateTime.Today); - var duration = endDateTime - startDateTime; - var comment = UI.StringResponse("Enter any comments for this log"); - - await Service.CreateExerciseAsync(startDateTime, endDateTime, duration, comment); - - UI.ConfirmationMessage("Exercise created"); - } - - private async Task EditExercise() - { - var exercises = await Service.GetAllExercisesAsync(); - - UI.DisplayExercises(exercises); - - Exercise? exercise = null; - while (exercise == null) - { - var id = UI.IntResponse("Enter the [green]id[/] of the exercise you wish to edit"); - exercise = await Service.GetExerciseByIdAsync(id); - if (exercise == null) { - UI.InvalidationMessage("There is no exercise with that id"); - } - } - - var startDateTime = UI.DateTimeResponseWithDefault("Enter the [green]start date time[/] for the exercise", exercise.DateStart); - var endDateTime = UI.DateTimeResponseWithDefault("Enter the [green]end date time[/] for the exercise", exercise.DateEnd); - var duration = endDateTime - startDateTime; - var comments = UI.StringResponseWithDefault("Enter the [green]comments[/] for the exercise", exercise.Comments ?? ""); - - await Service.UpdateExerciseAsync(exercise.Id, startDateTime, endDateTime, duration, comments); - - } - - private async Task DeleteExercise() - { - var exercises = await Service.GetAllExercisesAsync(); - - UI.DisplayExercises(exercises); - - Exercise? exercise = null; - while (exercise == null) - { - var id = UI.IntResponse("Enter the [green]id[/] of the exercise you wish to delete"); - exercise = await Service.GetExerciseByIdAsync(id); - if (exercise == null) { - UI.InvalidationMessage("There is no exercise with that id"); - } - } - - await Service.DeleteExerciseAsync(exercise); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/ExerciseTracker.Console.csproj b/ExerciseTracker.Bkohler93/ExerciseTracker.Console/ExerciseTracker.Console.csproj deleted file mode 100644 index ef19079c..00000000 --- a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/ExerciseTracker.Console.csproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - - Exe - net8.0 - enable - enable - - - diff --git a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Program.cs b/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Program.cs deleted file mode 100644 index 12ddf7a5..00000000 --- a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Program.cs +++ /dev/null @@ -1,9 +0,0 @@ -using ExerciseTracker; -using Microsoft.Extensions.DependencyInjection; - -var host = Startup.CreateHost(args); - -var app = host.Services.GetRequiredService(); -await app.Run(); - - diff --git a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Services/ExerciseService.cs b/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Services/ExerciseService.cs deleted file mode 100644 index e6eb9839..00000000 --- a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Services/ExerciseService.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Data.Entities; -using Data.Repositories; - -namespace ExerciseTracker.Services; - -public class ExerciseService { - private readonly IExerciseRepository Repository; - public ExerciseService(IExerciseRepository repository) - { - Repository = repository; - } - - public async Task> GetAllExercisesAsync() - { - return await Repository.GetAllExercisesAsync(); - } - - public async Task CreateExerciseAsync(DateTime dateStart, DateTime dateEnd, TimeSpan duration, string comments) - { - await Repository.AddAsync(new Exercise{ - DateStart = dateStart, - DateEnd = dateEnd, - Duration = duration, - Comments = comments - }); - } - - public async Task UpdateExerciseAsync(int id, DateTime dateStart, DateTime dateEnd, TimeSpan duration, string comments) - { - var exercise = await Repository.GetExerciseByIdAsync(id); - exercise!.DateStart = dateStart; - exercise.DateEnd = dateEnd; - exercise.Duration = duration; - exercise.Comments = comments; - - await Repository.UpdateAsync(exercise); - } - - public async Task GetExerciseByIdAsync(int id) - { - return await Repository.GetExerciseByIdAsync(id); - } - - public async Task DeleteExerciseAsync(Exercise exercise) - { - await Repository.DeleteAsync(exercise); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Startup.cs b/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Startup.cs deleted file mode 100644 index 3edc1eb8..00000000 --- a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/Startup.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Data; -using Data.Repositories; -using ExerciseTracker.Controllers; -using ExerciseTracker.Services; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace ExerciseTracker; - -public class Startup { - public static IHost CreateHost(string[] args) { - HostApplicationBuilder builder = Host.CreateApplicationBuilder(args); - builder.Configuration.AddJsonFile("appsettings.Development.json", optional: false, reloadOnChange: true); - - builder.Services.AddDbContext(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); - - builder.Services.AddTransient(); - builder.Services.AddTransient(); - builder.Services.AddTransient(); - builder.Services.AddTransient(); - - IHost host = builder.Build(); - return host; - } -} \ No newline at end of file diff --git a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/UI.cs b/ExerciseTracker.Bkohler93/ExerciseTracker.Console/UI.cs deleted file mode 100644 index 17fa07c8..00000000 --- a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/UI.cs +++ /dev/null @@ -1,161 +0,0 @@ -using System.Text.RegularExpressions; -using Data.Entities; -using Spectre.Console; - -namespace ExerciseTracker; - -public static class UI -{ - public static void Clear() => AnsiConsole.Clear(); - - public static string MenuSelection(string title, string[] options) - { - return AnsiConsole.Prompt( - new SelectionPrompt() - .Title(title) - .PageSize(10) - .MoreChoicesText("[grey](Move up and down to reveal more choices)[/]") - .AddChoices(options) - ); - } - - public static string StringResponse(string question) => AnsiConsole.Ask(question + ":"); - - public static string StringResponseWithFormat(string prompt, string format) { - while (true) - { - string response = AnsiConsole.Ask(prompt + $"[grey] formatted as '{format}[/]':"); - - if (Regex.IsMatch(response, format)) - { - return response; - } - - AnsiConsole.MarkupLine($"Requires format '[yellow]{format}[/]'"); - } - } - - public static TimeOnly TimeOnlyResponse(string prompt) - { - while (true) - { - var response = AnsiConsole.Ask(prompt + ":"); - - if (TimeOnly.TryParseExact(response, "HH:mm", out TimeOnly time)) { - return time; - } - - AnsiConsole.MarkupLine("[red]Invalid time.[/] [grey]Format as 'HH:mm'[/]"); - } - } - - public static string StringResponseWithDefault(string question, string defaultResponse) - { - var response = AnsiConsole.Prompt( - new TextPrompt(question + " [grey](Press 'enter' to leave as '" + defaultResponse + "'[/]):") - .AllowEmpty() - ); - - if (response == null || response == "") - { - return defaultResponse; - } - else - { - return response; - } - } - - public static int IntResponse(string question) - { - return AnsiConsole.Prompt( - new TextPrompt(question + ":") - .ValidationErrorMessage("[red]That's not a valid number[/]") - .Validate(id => - { - return id switch - { - < 0 => ValidationResult.Error("[red]Id's must be a number greater than or equal to 0[/]"), - _ => ValidationResult.Success(), - }; - }) - ); - } - - public static string TimeResponse(string question) - { - return AnsiConsole.Prompt( - new TextPrompt(question + " formatted like [yellow]23:59 dd-MM-yy[/]:") - .PromptStyle("green") - .ValidationErrorMessage("format times like [red]23:59 dd-MM-yy[/]") - .Validate(time => - { - return DateTime.TryParseExact(time, "HH:mm dd-MM-yy", null, System.Globalization.DateTimeStyles.None, out DateTime dateTime); - }) - ); - } - - public static DateTime DateTimeResponse(string prompt) - { - while (true) - { - AnsiConsole.Markup(prompt + $". [grey]Format as 'yyyy-MM-dd HH:mm:ss'[/]: "); - var response = Console.ReadLine(); - - if (DateTime.TryParse(response, out DateTime dt)) { - return dt; - } - - AnsiConsole.MarkupLine($"[red]Invalid date time.[/] [grey]Format as {DateTime.Today}[/]: "); - } - } - - public static DateTime DateTimeResponseWithDefault(string prompt, DateTime defaultDateTime) - { - while (true) - { - AnsiConsole.Markup(prompt + $". [grey]Format as 'yyyy-MM-dd HH:mm:ss'[/]. Press 'enter' to leave as {defaultDateTime}: "); - var response = Console.ReadLine(); - if (response == "") { - return defaultDateTime; - } - if (DateTime.TryParse(response, out DateTime dt)) { - return dt; - } - - AnsiConsole.MarkupLine($"[red]Invalid date time.[/] [grey]Format as {DateTime.Today}[/]"); - } - } - - public static void ConfirmationMessage(string message) - { - if (message != "") { - AnsiConsole.MarkupLine($"{message}. Press 'enter' to continue"); - } else { - AnsiConsole.Console.MarkupLine("Press 'enter' to continue"); - } - Console.ReadLine(); - AnsiConsole.Clear(); - } - - public static void InvalidationMessage(string message) => AnsiConsole.MarkupLine("[red]" + message + "[/]"); - - public static void DisplayExercises(IEnumerable exercises) { - var table = new Table(); - - string[] columns = ["ID", "Start Date", "End Date", "Duration", "Comments"]; - table.AddColumns(columns); - - foreach(var exercise in exercises) - { - table.AddRow( - exercise.Id.ToString(), - exercise.DateStart.ToString(), - exercise.DateEnd.ToString(), - exercise.Duration.ToString(), - exercise.Comments ?? "" - ); - } - AnsiConsole.Write(table); - } -} diff --git a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/appsettings.Development.json b/ExerciseTracker.Bkohler93/ExerciseTracker.Console/appsettings.Development.json deleted file mode 100644 index 12ef3bd1..00000000 --- a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/appsettings.Development.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ConnectionStrings": { - "DefaultConnection": "Server=localhost; Database=Exercise; TrustServerCertificate=True; User Id=SA; Password=Password1231; Encrypt=False" - } -} \ No newline at end of file diff --git a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/appsettings.json b/ExerciseTracker.Bkohler93/ExerciseTracker.Console/appsettings.json deleted file mode 100644 index cfd45107..00000000 --- a/ExerciseTracker.Bkohler93/ExerciseTracker.Console/appsettings.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.EntityFrameworkCore": "Warning" - } - }, - "ConnectionStrings": { - "DefaultConnection": "Server=localhost; Database=Exercise; TrustServerCertificate=True; User Id=[id]; Password=[password]; Encrypt=False" - } -} \ No newline at end of file diff --git a/ExerciseTracker.Dejmenek/App.config b/ExerciseTracker.Dejmenek/App.config deleted file mode 100644 index 1a9f27c3..00000000 --- a/ExerciseTracker.Dejmenek/App.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ExerciseTracker.Dejmenek/Controllers/ExercisesController.cs b/ExerciseTracker.Dejmenek/Controllers/ExercisesController.cs deleted file mode 100644 index f95b5d65..00000000 --- a/ExerciseTracker.Dejmenek/Controllers/ExercisesController.cs +++ /dev/null @@ -1,33 +0,0 @@ -using ExerciseTracker.Dejmenek.Models; -using ExerciseTracker.Dejmenek.Services; - -namespace ExerciseTracker.Dejmenek.Controllers; -public class ExercisesController -{ - private readonly IExerciseService _exerciseService; - - public ExercisesController(IExerciseService exerciseService) - { - _exerciseService = exerciseService; - } - - public void AddExercise() - { - _exerciseService.AddExercise(); - } - - public void RemoveExercise() - { - _exerciseService.DeleteExercise(); - } - - public void UpadateExercise() - { - _exerciseService.UpdateExercise(); - } - - public List GetExercises() - { - return _exerciseService.GetExercises(); - } -} diff --git a/ExerciseTracker.Dejmenek/Data/ExerciseContext.cs b/ExerciseTracker.Dejmenek/Data/ExerciseContext.cs deleted file mode 100644 index f91d226c..00000000 --- a/ExerciseTracker.Dejmenek/Data/ExerciseContext.cs +++ /dev/null @@ -1,15 +0,0 @@ -using ExerciseTracker.Dejmenek.Models; -using Microsoft.EntityFrameworkCore; -using System.Configuration; - -namespace ExerciseTracker.Dejmenek.Data; -public class ExerciseContext : DbContext -{ - public DbSet Exercises { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["LocalDbConnection"].ConnectionString); - } - -} diff --git a/ExerciseTracker.Dejmenek/Data/Interfaces/IExerciseRepository.cs b/ExerciseTracker.Dejmenek/Data/Interfaces/IExerciseRepository.cs deleted file mode 100644 index d5ac43c4..00000000 --- a/ExerciseTracker.Dejmenek/Data/Interfaces/IExerciseRepository.cs +++ /dev/null @@ -1,11 +0,0 @@ -using ExerciseTracker.Dejmenek.Models; - -namespace ExerciseTracker.Dejmenek.Data.Interfaces; -public interface IExerciseRepository -{ - void AddExercise(Exercise exercise); - void DeleteExercise(int exerciseId); - void UpdateExercise(int exerciseId, ExerciseUpdateDTO exerciseDto); - Exercise GetExerciseById(int exerciseId); - List GetExercises(); -} diff --git a/ExerciseTracker.Dejmenek/Data/Repositories/ExerciseRepository.cs b/ExerciseTracker.Dejmenek/Data/Repositories/ExerciseRepository.cs deleted file mode 100644 index e68ae6ce..00000000 --- a/ExerciseTracker.Dejmenek/Data/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,47 +0,0 @@ -using ExerciseTracker.Dejmenek.Data.Interfaces; -using ExerciseTracker.Dejmenek.Models; - -namespace ExerciseTracker.Dejmenek.Data.Repositories; -public class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseContext _context; - - public ExerciseRepository(ExerciseContext context) - { - _context = context; - } - - public void AddExercise(Exercise exercise) - { - _context.Exercises.Add(exercise); - _context.SaveChanges(); - } - - public void DeleteExercise(int exerciseId) - { - var exercise = GetExerciseById(exerciseId); - _context.Exercises.Remove(exercise); - _context.SaveChanges(); - } - - public Exercise GetExerciseById(int exerciseId) - { - return _context.Exercises.Find(exerciseId)!; - } - - public List GetExercises() - { - return _context.Exercises.ToList(); - } - - public void UpdateExercise(int exerciseId, ExerciseUpdateDTO exerciseDto) - { - Exercise oldExercise = GetExerciseById(exerciseId); - - oldExercise.EndTime = exerciseDto.EndTime; - oldExercise.Duration = exerciseDto.Duration; - oldExercise.Comments = exerciseDto.Comments; - - _context.SaveChanges(); - } -} diff --git a/ExerciseTracker.Dejmenek/Enums/MenuOptions.cs b/ExerciseTracker.Dejmenek/Enums/MenuOptions.cs deleted file mode 100644 index 999eed91..00000000 --- a/ExerciseTracker.Dejmenek/Enums/MenuOptions.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ExerciseTracker.Dejmenek.Enums; -public enum MenuOptions -{ - Exit, - AddExercise, - RemoveExercise, - UpdateExercise, - ViewExercises -} diff --git a/ExerciseTracker.Dejmenek/ExerciseTracker.Dejmenek.csproj b/ExerciseTracker.Dejmenek/ExerciseTracker.Dejmenek.csproj deleted file mode 100644 index e219aed7..00000000 --- a/ExerciseTracker.Dejmenek/ExerciseTracker.Dejmenek.csproj +++ /dev/null @@ -1,26 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - diff --git a/ExerciseTracker.Dejmenek/ExerciseTracker.Dejmenek.sln b/ExerciseTracker.Dejmenek/ExerciseTracker.Dejmenek.sln deleted file mode 100644 index 09163c78..00000000 --- a/ExerciseTracker.Dejmenek/ExerciseTracker.Dejmenek.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.9.34701.34 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.Dejmenek", "ExerciseTracker.Dejmenek.csproj", "{011253A9-19A7-4A97-910F-B91301C8784A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {011253A9-19A7-4A97-910F-B91301C8784A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {011253A9-19A7-4A97-910F-B91301C8784A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {011253A9-19A7-4A97-910F-B91301C8784A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {011253A9-19A7-4A97-910F-B91301C8784A}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {55ED67C3-B959-43E9-9DDD-7D3BD8C0897C} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.Dejmenek/Helpers/DataVisualizer.cs b/ExerciseTracker.Dejmenek/Helpers/DataVisualizer.cs deleted file mode 100644 index c39b3e33..00000000 --- a/ExerciseTracker.Dejmenek/Helpers/DataVisualizer.cs +++ /dev/null @@ -1,29 +0,0 @@ -using ExerciseTracker.Dejmenek.Models; -using Spectre.Console; - -namespace ExerciseTracker.Dejmenek.Helpers; -public static class DataVisualizer -{ - public static void DisplayExercises(List exerciseDtos) - { - if (exerciseDtos.Count == 0) - { - AnsiConsole.MarkupLine("No exercises found."); - return; - } - - var table = new Table().Title("EXERCISES"); - - table.AddColumn("Start Time"); - table.AddColumn("End Time"); - table.AddColumn("Duration in minutes"); - table.AddColumn("Comments"); - - foreach (var exercise in exerciseDtos) - { - table.AddRow(exercise.StartTime.ToString("yyyy-MM-dd HH:mm"), exercise.EndTime.ToString("yyyy-MM-dd HH:mm"), exercise.Duration, exercise.Comments ?? ""); - } - - AnsiConsole.Write(table); - } -} diff --git a/ExerciseTracker.Dejmenek/Helpers/Mapper.cs b/ExerciseTracker.Dejmenek/Helpers/Mapper.cs deleted file mode 100644 index ba8670cc..00000000 --- a/ExerciseTracker.Dejmenek/Helpers/Mapper.cs +++ /dev/null @@ -1,28 +0,0 @@ -using ExerciseTracker.Dejmenek.Models; - -namespace ExerciseTracker.Dejmenek.Helpers; -public static class Mapper -{ - public static ExerciseReadDTO ToExerciseReadDto(Exercise exercise) - { - return new ExerciseReadDTO - { - StartTime = exercise.StartTime, - EndTime = exercise.EndTime, - Duration = exercise.Duration, - Comments = exercise.Comments, - }; - } - - public static List ToExerciseReadDtos(List exercises) - { - List exerciseDtos = new List(); - - foreach (var exercise in exercises) - { - exerciseDtos.Add(ToExerciseReadDto(exercise)); - } - - return exerciseDtos; - } -} diff --git a/ExerciseTracker.Dejmenek/Migrations/20240327124421_InitialCreate.Designer.cs b/ExerciseTracker.Dejmenek/Migrations/20240327124421_InitialCreate.Designer.cs deleted file mode 100644 index 4327b3a4..00000000 --- a/ExerciseTracker.Dejmenek/Migrations/20240327124421_InitialCreate.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using ExerciseTracker.Dejmenek.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Dejmenek.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20240327124421_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Dejmenek.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("EndTime") - .HasColumnType("DateTime"); - - b.Property("StartTime") - .HasColumnType("DateTime"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Dejmenek/Migrations/20240327124421_InitialCreate.cs b/ExerciseTracker.Dejmenek/Migrations/20240327124421_InitialCreate.cs deleted file mode 100644 index fc3f2f99..00000000 --- a/ExerciseTracker.Dejmenek/Migrations/20240327124421_InitialCreate.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Dejmenek.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - StartTime = table.Column(type: "DateTime", nullable: false), - EndTime = table.Column(type: "DateTime", nullable: false), - Duration = table.Column(type: "nvarchar(max)", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.Dejmenek/Migrations/ExerciseContextModelSnapshot.cs b/ExerciseTracker.Dejmenek/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index 2725c4ff..00000000 --- a/ExerciseTracker.Dejmenek/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker.Dejmenek.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Dejmenek.Migrations -{ - [DbContext(typeof(ExerciseContext))] - partial class ExerciseContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Dejmenek.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("EndTime") - .HasColumnType("DateTime"); - - b.Property("StartTime") - .HasColumnType("DateTime"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Dejmenek/Models/Exercise.cs b/ExerciseTracker.Dejmenek/Models/Exercise.cs deleted file mode 100644 index d978f5a5..00000000 --- a/ExerciseTracker.Dejmenek/Models/Exercise.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.ComponentModel.DataAnnotations.Schema; - -namespace ExerciseTracker.Dejmenek.Models; -public class Exercise -{ - public int Id { get; set; } - [Column(TypeName = "DateTime")] - public DateTime StartTime { get; set; } - [Column(TypeName = "DateTime")] - public DateTime EndTime { get; set; } - public string Duration { get; set; } = null!; - public string? Comments { get; set; } -} - -public class ExerciseUpdateDTO -{ - public DateTime EndTime { get; set; } - public string Duration { get; set; } = null!; - public string? Comments { get; set; } -} - -public class ExerciseReadDTO -{ - public DateTime StartTime { get; set; } - public DateTime EndTime { get; set; } - public string Duration { get; set; } = null!; - public string? Comments { get; set; } -} diff --git a/ExerciseTracker.Dejmenek/Program.cs b/ExerciseTracker.Dejmenek/Program.cs deleted file mode 100644 index 55d4092c..00000000 --- a/ExerciseTracker.Dejmenek/Program.cs +++ /dev/null @@ -1,57 +0,0 @@ -using ExerciseTracker.Dejmenek.Controllers; -using ExerciseTracker.Dejmenek.Data; -using ExerciseTracker.Dejmenek.Data.Repositories; -using ExerciseTracker.Dejmenek.Enums; -using ExerciseTracker.Dejmenek.Helpers; -using ExerciseTracker.Dejmenek.Services; - -internal class Program -{ - private static void Main(string[] args) - { - var exerciseContext = new ExerciseContext(); - var exerciseRepository = new ExerciseRepository(exerciseContext); - var userInteractionService = new UserInteractionService(); - var exerciseService = new ExerciseService(exerciseRepository, userInteractionService); - var exercisesController = new ExercisesController(exerciseService); - - bool exit = false; - - while (!exit) - { - var userMenuOption = userInteractionService.GetMenuOption(); - - switch (userMenuOption) - { - case MenuOptions.Exit: - exit = true; - break; - - case MenuOptions.AddExercise: - exercisesController.AddExercise(); - userInteractionService.GetUserInputToContinue(); - Console.Clear(); - break; - - case MenuOptions.RemoveExercise: - exercisesController.RemoveExercise(); - userInteractionService.GetUserInputToContinue(); - Console.Clear(); - break; - - case MenuOptions.UpdateExercise: - exercisesController.UpadateExercise(); - userInteractionService.GetUserInputToContinue(); - Console.Clear(); - break; - - case MenuOptions.ViewExercises: - var exercisesDtos = exercisesController.GetExercises(); - DataVisualizer.DisplayExercises(exercisesDtos); - userInteractionService.GetUserInputToContinue(); - Console.Clear(); - break; - } - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Dejmenek/Services/ExerciseService.cs b/ExerciseTracker.Dejmenek/Services/ExerciseService.cs deleted file mode 100644 index f1b705bc..00000000 --- a/ExerciseTracker.Dejmenek/Services/ExerciseService.cs +++ /dev/null @@ -1,141 +0,0 @@ -using ExerciseTracker.Dejmenek.Data.Interfaces; -using ExerciseTracker.Dejmenek.Helpers; -using ExerciseTracker.Dejmenek.Models; -using Spectre.Console; - -namespace ExerciseTracker.Dejmenek.Services; -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository _exerciseRepository; - private readonly IUserInteractionService _userInteractionService; - - public ExerciseService(IExerciseRepository exerciseRepository, IUserInteractionService userInteractionService) - { - _exerciseRepository = exerciseRepository; - _userInteractionService = userInteractionService; - } - - public void AddExercise() - { - string? comments = null; - string startTime = _userInteractionService.GetDateTime(); - string endTime = _userInteractionService.GetDateTime(); - - DateTime startDateTime = DateTime.Parse(startTime); - DateTime endDateTime = DateTime.Parse(endTime); - - while (!Validation.IsChronologicalOrder(startDateTime, endDateTime)) - { - AnsiConsole.MarkupLine("The ending time should always be after the starting time. Try again."); - startTime = _userInteractionService.GetDateTime(); - endTime = _userInteractionService.GetDateTime(); - - startDateTime = DateTime.Parse(startTime); - endDateTime = DateTime.Parse(endTime); - } - - if (_userInteractionService.GetConfirmation("Would you like to add comments to the exercise?")) - { - comments = _userInteractionService.GetComment(); - } - - Exercise exercise = new Exercise - { - StartTime = startDateTime, - EndTime = endDateTime, - Duration = CalculateDuration(startDateTime, endDateTime), - Comments = comments - }; - - _exerciseRepository.AddExercise(exercise); - } - - public string CalculateDuration(DateTime startTime, DateTime endTime) - { - TimeSpan duration = endTime.Subtract(startTime); - - return duration.TotalMinutes.ToString(); - } - - public void DeleteExercise() - { - Exercise? selectedExercise = GetExercise(); - - if (selectedExercise is null) - { - AnsiConsole.MarkupLine("There are no exercises."); - return; - } - - _exerciseRepository.DeleteExercise(selectedExercise.Id); - } - - private Exercise? GetExercise() - { - List exercises = _exerciseRepository.GetExercises(); - - if (exercises.Count == 0) - { - return null; - } - - Exercise exercise = _userInteractionService.GetExercise(exercises); - - return exercise; - } - - public List GetExercises() - { - var exercises = _exerciseRepository.GetExercises(); - - if (exercises.Count == 0) - { - return []; - } - - return Mapper.ToExerciseReadDtos(exercises); - } - - public void UpdateExercise() - { - Exercise? selectedExercise = GetExercise(); - - if (selectedExercise is null) - { - AnsiConsole.MarkupLine("There are no exercises."); - return; - } - - var oldExercise = _exerciseRepository.GetExerciseById(selectedExercise.Id); - ExerciseUpdateDTO updatedExercise = new ExerciseUpdateDTO - { - EndTime = oldExercise.EndTime, - Duration = oldExercise.Duration, - Comments = oldExercise.Comments, - }; - - if (_userInteractionService.GetConfirmation("Would you like to update end time of the exercise?")) - { - string endTime = _userInteractionService.GetDateTime(); - DateTime endDateTime = DateTime.Parse(endTime); - - while (!Validation.IsChronologicalOrder(oldExercise.StartTime, endDateTime)) - { - AnsiConsole.MarkupLine("The ending time should always be after the starting time. Try again."); - - endTime = _userInteractionService.GetDateTime(); - endDateTime = DateTime.Parse(endTime); - } - - updatedExercise.EndTime = endDateTime; - updatedExercise.Duration = CalculateDuration(oldExercise.StartTime, endDateTime); - } - - if (_userInteractionService.GetConfirmation("Would you like to upadate comments?")) - { - updatedExercise.Comments = _userInteractionService.GetComment(); - } - - _exerciseRepository.UpdateExercise(oldExercise.Id, updatedExercise); - } -} diff --git a/ExerciseTracker.Dejmenek/Services/IExerciseService.cs b/ExerciseTracker.Dejmenek/Services/IExerciseService.cs deleted file mode 100644 index 4407b114..00000000 --- a/ExerciseTracker.Dejmenek/Services/IExerciseService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using ExerciseTracker.Dejmenek.Models; - -namespace ExerciseTracker.Dejmenek.Services; -public interface IExerciseService -{ - void AddExercise(); - void DeleteExercise(); - void UpdateExercise(); - List GetExercises(); - string CalculateDuration(DateTime startTime, DateTime endTime); -} diff --git a/ExerciseTracker.Dejmenek/Services/IUserInteractionService.cs b/ExerciseTracker.Dejmenek/Services/IUserInteractionService.cs deleted file mode 100644 index 569ef963..00000000 --- a/ExerciseTracker.Dejmenek/Services/IUserInteractionService.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTracker.Dejmenek.Enums; -using ExerciseTracker.Dejmenek.Models; - -namespace ExerciseTracker.Dejmenek.Services; -public interface IUserInteractionService -{ - string GetDateTime(); - string GetComment(); - void GetUserInputToContinue(); - Exercise GetExercise(List exercises); - MenuOptions GetMenuOption(); - bool GetConfirmation(string title); -} diff --git a/ExerciseTracker.Dejmenek/Services/UserInteractionService.cs b/ExerciseTracker.Dejmenek/Services/UserInteractionService.cs deleted file mode 100644 index da4bf798..00000000 --- a/ExerciseTracker.Dejmenek/Services/UserInteractionService.cs +++ /dev/null @@ -1,54 +0,0 @@ -using ExerciseTracker.Dejmenek.Enums; -using ExerciseTracker.Dejmenek.Models; -using Spectre.Console; - -namespace ExerciseTracker.Dejmenek.Services; -public class UserInteractionService : IUserInteractionService -{ - public string GetDateTime() - { - return AnsiConsole.Prompt( - new TextPrompt("Enter date time in 'yyyy-MM-dd HH:mm format': ") - .PromptStyle("green") - .ValidationErrorMessage("[red]That is not a valid date time format.[/]") - .Validate(Validation.IsValidDateTimeFormat) - ); - } - - public string GetComment() - { - return AnsiConsole.Prompt( - new TextPrompt("Enter your comment for the exercise: ") - ); - } - - public MenuOptions GetMenuOption() - { - return AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What would you like to do?") - .AddChoices(Enum.GetValues()) - ); - } - - public Exercise GetExercise(List exercises) - { - return AnsiConsole.Prompt( - new SelectionPrompt() - .Title("Select exercise") - .UseConverter(exercise => $"On {exercise.StartTime:yyyy-MM-dd HH:mm} for {exercise.Duration} minutes - {exercise.Comments}") - .AddChoices(exercises) - ); - } - - public void GetUserInputToContinue() - { - AnsiConsole.MarkupLine("Press Enter to continue..."); - Console.ReadLine(); - } - - public bool GetConfirmation(string title) - { - return AnsiConsole.Confirm(title); - } -} diff --git a/ExerciseTracker.Dejmenek/Validation.cs b/ExerciseTracker.Dejmenek/Validation.cs deleted file mode 100644 index cc293069..00000000 --- a/ExerciseTracker.Dejmenek/Validation.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Spectre.Console; -using System.Globalization; - -namespace ExerciseTracker.Dejmenek; -public static class Validation -{ - public static bool IsChronologicalOrder(DateTime startDate, DateTime endDate) - { - int result = DateTime.Compare(startDate, endDate); - - if (result < 0 || result == 0) - { - return true; - } - else - { - return false; - } - } - - public static ValidationResult IsPositiveNumber(int userNumber) - { - return userNumber switch - { - <= 0 => ValidationResult.Error("[red]You must enter a positive number.[/]"), - _ => ValidationResult.Success(), - }; - } - - public static ValidationResult IsValidDateTimeFormat(string? userDate) - { - if (DateTime.TryParseExact(userDate, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out _)) - { - return ValidationResult.Success(); - } - else - { - return ValidationResult.Error("[red]You must enter a valid date time format: yyyy-MM-dd HH:mm[/]"); - } - } -} diff --git a/ExerciseTracker.Deviationlark/.vscode/launch.json b/ExerciseTracker.Deviationlark/.vscode/launch.json deleted file mode 100644 index e7f97068..00000000 --- a/ExerciseTracker.Deviationlark/.vscode/launch.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - // Use IntelliSense to find out which attributes exist for C# debugging - // Use hover for the description of the existing attributes - // For further information visit https://github.com/dotnet/vscode-csharp/blob/main/debugger-launchjson.md - "name": ".NET Core Launch (console)", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build", - // If you have changed target frameworks, make sure to update the program path. - "program": "${workspaceFolder}/bin/Debug/net8.0/ExerciseTracker.dll", - "args": [], - "cwd": "${workspaceFolder}", - // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console - "console":"externalTerminal", - "stopAtEntry": false - }, - { - "name": ".NET Core Attach", - "type": "coreclr", - "request": "attach" - } - ] -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/.vscode/settings.json b/ExerciseTracker.Deviationlark/.vscode/settings.json deleted file mode 100644 index 9e26dfee..00000000 --- a/ExerciseTracker.Deviationlark/.vscode/settings.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/.vscode/tasks.json b/ExerciseTracker.Deviationlark/.vscode/tasks.json deleted file mode 100644 index af0fd230..00000000 --- a/ExerciseTracker.Deviationlark/.vscode/tasks.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/ExerciseTracker.sln", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary;ForceNoAlign" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/ExerciseTracker.sln", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary;ForceNoAlign" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "--project", - "${workspaceFolder}/ExerciseTracker.sln" - ], - "problemMatcher": "$msCompile" - } - ] -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/App.config b/ExerciseTracker.Deviationlark/App.config deleted file mode 100644 index 27d8a043..00000000 --- a/ExerciseTracker.Deviationlark/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/ExerciseTracker.Deviationlark/Database.cs b/ExerciseTracker.Deviationlark/Database.cs deleted file mode 100644 index aeb1cda4..00000000 --- a/ExerciseTracker.Deviationlark/Database.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Configuration; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker; -public class ExerciseDatabase : DbContext -{ - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlServer( - ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString); - } - public DbSet Exercise { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/Enums/MenuEnum.cs b/ExerciseTracker.Deviationlark/Enums/MenuEnum.cs deleted file mode 100644 index 0673b683..00000000 --- a/ExerciseTracker.Deviationlark/Enums/MenuEnum.cs +++ /dev/null @@ -1,9 +0,0 @@ -enum Menu -{ - ViewExercise, - ViewAllExercises, - AddExercise, - DeleteExercise, - UpdateExercise, - Quit -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/ExerciseController.cs b/ExerciseTracker.Deviationlark/ExerciseController.cs deleted file mode 100644 index 4db11554..00000000 --- a/ExerciseTracker.Deviationlark/ExerciseController.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace ExerciseTracker; -public class ExerciseController -{ - private readonly IExerciseRepository _exerciseRepository; - public ExerciseController(IExerciseRepository exerciseRepository) - { - _exerciseRepository = exerciseRepository; - } - - public Exercise GetExerciseById(int id) - { - return _exerciseRepository.GetExerciseById(id); - } - public IEnumerable GetExercises() - { - return _exerciseRepository.GetExercises(); - } - public void AddExercise(Exercise exercise) - { - _exerciseRepository.AddExercise(exercise); - _exerciseRepository.Save(); - } - public void DeleteExercise(int id) - { - _exerciseRepository.DeleteExercise(id); - _exerciseRepository.Save(); - } - public void UpdateExercise(Exercise exercise) - { - _exerciseRepository.UpdateExercise(exercise); - _exerciseRepository.Save(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/ExerciseService.cs b/ExerciseTracker.Deviationlark/ExerciseService.cs deleted file mode 100644 index 8b99d0d7..00000000 --- a/ExerciseTracker.Deviationlark/ExerciseService.cs +++ /dev/null @@ -1,125 +0,0 @@ -using Microsoft.EntityFrameworkCore.Metadata.Internal; -using Microsoft.Extensions.DependencyInjection; -using Spectre.Console; - -namespace ExerciseTracker; -public class ExerciseService : IExerciseService -{ - private readonly IUserInput _userInput; - private readonly ExerciseController _exerciseController; - public ExerciseService(ExerciseController controller, IUserInput userInput) - { - _userInput = userInput; - _exerciseController = controller; - } - public void MainMenu() - { - var option = AnsiConsole.Prompt(new SelectionPrompt() - .Title("Choose") - .AddChoices( - Menu.ViewExercise, - Menu.ViewAllExercises, - Menu.AddExercise, - Menu.DeleteExercise, - Menu.UpdateExercise, - Menu.Quit)); - - switch (option) - { - case Menu.ViewExercise: - GetExerciseById(); - break; - case Menu.ViewAllExercises: - GetExercises(); - break; - case Menu.AddExercise: - AddExercise(); - break; - case Menu.DeleteExercise: - DeleteExercise(); - break; - case Menu.UpdateExercise: - UpdateExercise(); - break; - case Menu.Quit: - Environment.Exit(0); - break; - } - - } - public void AddExercise() - { - var exercise = _userInput.GetExerciseInfo(); - _exerciseController.AddExercise(exercise); - Console.WriteLine("Record successfully added."); - } - - public void DeleteExercise() - { - GetExercises(1); - var exercises = _exerciseController.GetExercises(); - var id = _userInput.GetExerciseId("Enter the id of the record you want to delete:", exercises); - _exerciseController.DeleteExercise(id); - Console.WriteLine("Record deleted."); - } - - public void GetExerciseById() - { - var exercises = _exerciseController.GetExercises(); - if (exercises.Count() < 1) - { - Console.WriteLine("No records in database. Add a record first!"); - Console.WriteLine("Press enter to go back to main menu."); - Console.ReadLine(); - MainMenu(); - } - else - { - var id = _userInput.GetExerciseId("Enter the id of the record you want to view:", exercises); - var exercise = _exerciseController.GetExerciseById(id); - var panel = new Panel($@" -Id: {exercise.Id} -Start Date: {exercise.StartDate} -End Date: {exercise.EndDate} -Duration: {exercise.Duration} -Comments: {exercise.Comments}"); - panel.Header("Exercise"); - panel.Padding(2, 2, 2, 2); - AnsiConsole.Write(panel); - Console.WriteLine("Press enter to go back to main menu."); - Console.ReadLine(); - } - - } - - public void GetExercises(int num = 0) - { - var exercises = _exerciseController.GetExercises(); - Spectre.Console.Table table = new Spectre.Console.Table(); - table.AddColumns("Id", "Start Date", "End Date", "Duration", "Comments"); - foreach (var exercise in exercises) - { - table.AddRow($"{exercise.Id}", $"{exercise.StartDate}", $"{exercise.EndDate}", $"{exercise.Duration}", $"{exercise.Comments}"); - } - AnsiConsole.Write(table); - if (num == 0) - { - Console.WriteLine("Press enter to go back to main menu."); - Console.ReadLine(); - } - } - public void UpdateExercise() - { - var exercise = new Exercise(); - var exercises = _exerciseController.GetExercises(); - GetExercises(1); - exercise.Id = _userInput.GetExerciseId("Enter the id of the record you want to update:", exercises); - var updatedInfo = _userInput.GetExerciseInfo(); - exercise.StartDate = updatedInfo.StartDate; - exercise.EndDate = updatedInfo.EndDate; - exercise.Duration = updatedInfo.Duration; - exercise.Comments = updatedInfo.Comments; - _exerciseController.UpdateExercise(exercise); - Console.WriteLine("Successfully updated."); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/ExerciseTracker.csproj b/ExerciseTracker.Deviationlark/ExerciseTracker.csproj deleted file mode 100644 index b0b7cdb2..00000000 --- a/ExerciseTracker.Deviationlark/ExerciseTracker.csproj +++ /dev/null @@ -1,28 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - diff --git a/ExerciseTracker.Deviationlark/ExerciseTracker.sln b/ExerciseTracker.Deviationlark/ExerciseTracker.sln deleted file mode 100644 index b12c9da2..00000000 --- a/ExerciseTracker.Deviationlark/ExerciseTracker.sln +++ /dev/null @@ -1,34 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.5.002.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExerciseTracker", "ExerciseTracker.csproj", "{1EEEDAD0-4512-4AE9-B510-0F8B433D27BE}" -EndProject - -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1EEEDAD0-4512-4AE9-B510-0F8B433D27BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1EEEDAD0-4512-4AE9-B510-0F8B433D27BE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1EEEDAD0-4512-4AE9-B510-0F8B433D27BE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1EEEDAD0-4512-4AE9-B510-0F8B433D27BE}.Release|Any CPU.Build.0 = Release|Any CPU - {F062E9F1-E084-4A7C-9606-C2BC38C226F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F062E9F1-E084-4A7C-9606-C2BC38C226F7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F062E9F1-E084-4A7C-9606-C2BC38C226F7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F062E9F1-E084-4A7C-9606-C2BC38C226F7}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {5D28EB73-D9AF-4520-8EB5-781547856B3F} - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {1E93645F-DBBB-484C-893F-4FA50FE543EF} = {5AB00630-AC62-4C52-A7E1-65FF00F0BF9C} - {F062E9F1-E084-4A7C-9606-C2BC38C226F7} = {1E93645F-DBBB-484C-893F-4FA50FE543EF} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.Deviationlark/Interfaces/IExerciseRepository.cs b/ExerciseTracker.Deviationlark/Interfaces/IExerciseRepository.cs deleted file mode 100644 index 5fffb463..00000000 --- a/ExerciseTracker.Deviationlark/Interfaces/IExerciseRepository.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker; -public interface IExerciseRepository -{ - Exercise GetExerciseById(int id); - IEnumerable GetExercises(); - void AddExercise(Exercise exercise); - void UpdateExercise(Exercise exercise); - void DeleteExercise(int id); - void Save(); -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/Interfaces/IExerciseService.cs b/ExerciseTracker.Deviationlark/Interfaces/IExerciseService.cs deleted file mode 100644 index 69d9fca8..00000000 --- a/ExerciseTracker.Deviationlark/Interfaces/IExerciseService.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciseTracker; - -public interface IExerciseService -{ - void MainMenu(); - void AddExercise(); - void DeleteExercise(); - void GetExerciseById(); - void GetExercises(int num = 0); - void UpdateExercise(); -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/Interfaces/IUserInput.cs b/ExerciseTracker.Deviationlark/Interfaces/IUserInput.cs deleted file mode 100644 index 38b819b4..00000000 --- a/ExerciseTracker.Deviationlark/Interfaces/IUserInput.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace ExerciseTracker; - -public interface IUserInput -{ - Exercise GetExerciseInfo(); - int GetExerciseId(string message, IEnumerable exercises); -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/Migrations/20240704025403_InitialCreate.Designer.cs b/ExerciseTracker.Deviationlark/Migrations/20240704025403_InitialCreate.Designer.cs deleted file mode 100644 index 3dd0de7e..00000000 --- a/ExerciseTracker.Deviationlark/Migrations/20240704025403_InitialCreate.Designer.cs +++ /dev/null @@ -1,57 +0,0 @@ -// -using System; -using ExerciseTracker; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseDatabase))] - [Migration("20240704025403_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.5") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercise"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Deviationlark/Migrations/20240704025403_InitialCreate.cs b/ExerciseTracker.Deviationlark/Migrations/20240704025403_InitialCreate.cs deleted file mode 100644 index 6d69c1de..00000000 --- a/ExerciseTracker.Deviationlark/Migrations/20240704025403_InitialCreate.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercise", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - StartDate = table.Column(type: "datetime2", nullable: false), - EndDate = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "nvarchar(max)", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercise", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercise"); - } - } -} diff --git a/ExerciseTracker.Deviationlark/Migrations/20240706160132_ChangedDuration.Designer.cs b/ExerciseTracker.Deviationlark/Migrations/20240706160132_ChangedDuration.Designer.cs deleted file mode 100644 index ceaf74d4..00000000 --- a/ExerciseTracker.Deviationlark/Migrations/20240706160132_ChangedDuration.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using ExerciseTracker; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseDatabase))] - [Migration("20240706160132_ChangedDuration")] - partial class ChangedDuration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.5") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercise"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Deviationlark/Migrations/20240706160132_ChangedDuration.cs b/ExerciseTracker.Deviationlark/Migrations/20240706160132_ChangedDuration.cs deleted file mode 100644 index ba8431de..00000000 --- a/ExerciseTracker.Deviationlark/Migrations/20240706160132_ChangedDuration.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - /// - public partial class ChangedDuration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "Duration", - table: "Exercise", - type: "time", - nullable: false, - oldClrType: typeof(string), - oldType: "nvarchar(max)"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "Duration", - table: "Exercise", - type: "nvarchar(max)", - nullable: false, - oldClrType: typeof(TimeSpan), - oldType: "time"); - } - } -} diff --git a/ExerciseTracker.Deviationlark/Migrations/ExerciseDatabaseModelSnapshot.cs b/ExerciseTracker.Deviationlark/Migrations/ExerciseDatabaseModelSnapshot.cs deleted file mode 100644 index 500c06bd..00000000 --- a/ExerciseTracker.Deviationlark/Migrations/ExerciseDatabaseModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseDatabase))] - partial class ExerciseDatabaseModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.5") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercise"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Deviationlark/Model/Exercise.cs b/ExerciseTracker.Deviationlark/Model/Exercise.cs deleted file mode 100644 index d97f4f55..00000000 --- a/ExerciseTracker.Deviationlark/Model/Exercise.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ExerciseTracker; -public class Exercise -{ - public int Id { get; set; } - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - public TimeSpan Duration { get; set; } - public string Comments { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/Program.cs b/ExerciseTracker.Deviationlark/Program.cs deleted file mode 100644 index ba236130..00000000 --- a/ExerciseTracker.Deviationlark/Program.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Configuration; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; - -namespace ExerciseTracker; -public class Program -{ - public static void Main(string[] args) - { - var serviceCollection = new ServiceCollection(); - ConfigureServices(serviceCollection); - var serviceProvider = serviceCollection.BuildServiceProvider(); - var menu = serviceProvider.GetRequiredService(); - bool appRunning = true; - while (appRunning) menu.MainMenu(); - } - private static void ConfigureServices(IServiceCollection services) - { - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddScoped(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/Repositories/ExerciseRepository.cs b/ExerciseTracker.Deviationlark/Repositories/ExerciseRepository.cs deleted file mode 100644 index 0b3e378e..00000000 --- a/ExerciseTracker.Deviationlark/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,51 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker; -public class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseDatabase _dbContext; - private readonly DbSet _dbSet; - public ExerciseRepository(ExerciseDatabase dbContext) - { - _dbContext = dbContext; - _dbSet = dbContext.Set(); - } - public void AddExercise(Exercise exercise) - { - _dbSet.Add(exercise); - } - - public void DeleteExercise(int id) - { - var exercise = _dbSet.Find(id); - if (exercise != null) - _dbSet.Remove(exercise); - } - - public Exercise GetExerciseById(int id) - { - return _dbSet.Find(id); - } - - public IEnumerable GetExercises() - { - return _dbSet.ToList(); - } - - public void UpdateExercise(Exercise exercise) - { - var existingRecord = _dbSet.Local.FirstOrDefault(x => x.Id == exercise.Id); - if (existingRecord != null) - { - _dbSet.Entry(existingRecord).State = EntityState.Detached; - } - - _dbSet.Attach(exercise); - _dbSet.Entry(exercise).State = EntityState.Modified; - } - public void Save() - { - _dbContext.SaveChanges(); - } -} - diff --git a/ExerciseTracker.Deviationlark/Repositories/ExerciseRepositoryDapper.cs b/ExerciseTracker.Deviationlark/Repositories/ExerciseRepositoryDapper.cs deleted file mode 100644 index 19a01b04..00000000 --- a/ExerciseTracker.Deviationlark/Repositories/ExerciseRepositoryDapper.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Configuration; -using Dapper; -using Microsoft.Data.SqlClient; - -namespace ExerciseTracker; - -public class ExerciseRepositoryDapper : IExerciseRepository -{ - public string connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString; - public void AddExercise(Exercise exercise) - { - using (var connection = new SqlConnection(connectionString)) - { - connection.Open(); - string sql = @"INSERT INTO Exercise (StartDate, EndDate, Duration, Comments) - Values (@StartDate, @EndDate, @Duration, @Comments)"; - int rowsAffected = connection.Execute(sql, exercise); - Console.WriteLine("rows affected: " + rowsAffected); - } - - } - - public void DeleteExercise(int id) - { - using (var connection = new SqlConnection(connectionString)) - { - connection.Open(); - string sql = "DELETE FROM Exercise WHERE Id = @Id"; - connection.Execute(sql, new { Id = id}); - } - - } - - public Exercise GetExerciseById(int id) - { - using (var connection = new SqlConnection(connectionString)) - { - connection.Open(); - string sql = $"SELECT * FROM Exercise WHERE Id = {id}"; - var exercise = connection.QuerySingle(sql); - return exercise; - } - } - - public IEnumerable GetExercises() - { - using (var connection = new SqlConnection(connectionString)) - { - connection.Open(); - string sql = $"SELECT * FROM Exercise"; - var exercises = connection.Query(sql).ToList(); - return exercises; - } - } - - public void Save() - { - // unused for dapper. - } - - public void UpdateExercise(Exercise exercise) - { - using (var connection = new SqlConnection(connectionString)) - { - connection.Open(); - string sql = $@"UPDATE Exercise SET - StartDate = @StartDate, EndDate = @EndDate, Duration = @Duration, - Comments = @Comments WHERE Id = @Id"; - connection.Execute(sql, exercise); - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/UserInput.cs b/ExerciseTracker.Deviationlark/UserInput.cs deleted file mode 100644 index 44b2486a..00000000 --- a/ExerciseTracker.Deviationlark/UserInput.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Spectre.Console; - -namespace ExerciseTracker; -public class UserInput : IUserInput -{ - public Exercise GetExerciseInfo() - { - var exercise = new Exercise(); - string startDate = AnsiConsole.Ask("Enter the date you started the exercise(format: dd-MM-yyyy hh:mm:ss): "); - while (!Validation.ValidateStartDate(startDate)) - { - Console.WriteLine("Invalid date! Try again."); - startDate = AnsiConsole.Ask("Enter the date you started the exercise(format: dd-MM-yyyy hh:mm:ss): "); - } - - string endDate = AnsiConsole.Ask("Enter the date you ended the exercise(format: dd-MM-yyyy hh:mm:ss): "); - while (!Validation.ValidateEndDate(endDate, startDate)) - { - Console.WriteLine("Invalid date! Try again."); - endDate = AnsiConsole.Ask("Enter the date you ended the exercise(format: dd-MM-yyyy hh:mm:ss): "); - } - var duration = DateTime.Parse(endDate) - DateTime.Parse(startDate); - var addComment = AnsiConsole.Confirm("Would you like to add a comment?"); - if (addComment) - { - exercise.Comments = AnsiConsole.Ask("Comment: "); - } - else exercise.Comments = "No Comment"; - exercise.StartDate = DateTime.Parse(startDate); - exercise.EndDate = DateTime.Parse(endDate); - exercise.Duration = duration; - return exercise; - } - - public int GetExerciseId(string message, IEnumerable exercises) - { - string userInput = AnsiConsole.Ask(message); - while (!Validation.ValidateId(userInput, exercises)) - { - Console.WriteLine("Invalid Id."); - userInput = AnsiConsole.Ask(message); - } - return int.Parse(userInput); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Deviationlark/Validation.cs b/ExerciseTracker.Deviationlark/Validation.cs deleted file mode 100644 index ba9cd884..00000000 --- a/ExerciseTracker.Deviationlark/Validation.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Globalization; -using ExerciseTracker; - -public class Validation -{ - public static bool ValidateStartDate(string startDate) - { - var parsedDate = DateTime.TryParseExact(startDate, "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out _); - if (parsedDate == true) return true; - else return false; - } - - internal static bool ValidateEndDate(string endDate, string startDate) - { - var parsedDate = DateTime.TryParseExact(endDate, "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out _); - if (parsedDate == true && DateTime.Parse(endDate) > DateTime.Parse(startDate)) return true; - else return false; - } - - internal static bool ValidateId(string userInput, IEnumerable exercises) - { - bool parsed = int.TryParse(userInput, out int id); - if (!parsed) return false; - else - { - foreach (var exercise in exercises) - { - if (exercise.Id == id) return true; - } - return false; - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Doc415-r/Controller/ExerciseController.cs b/ExerciseTracker.Doc415-r/Controller/ExerciseController.cs deleted file mode 100644 index af338bab..00000000 --- a/ExerciseTracker.Doc415-r/Controller/ExerciseController.cs +++ /dev/null @@ -1,172 +0,0 @@ -using exerciseTracker.doc415.Service; -using Spectre.Console; -using static exerciseTracker.doc415.Enums; - -namespace exerciseTracker.doc415.Controller; - -internal class ExerciseController -{ - - private ExerciseService _service; - - public ExerciseController() - { - _service = new(); - } - - public void MainMenu() - { - while (true) - { - AnsiConsole.Write(new FigletText("Exercise Logger").Color(Color.LightSalmon3_1).Centered()); - var selection = AnsiConsole.Prompt(new SelectionPrompt() - .Title("Main Menu") - .AddChoices(MainMenuSelections.AddExercise, - MainMenuSelections.ViewExercises, - MainMenuSelections.ViewExerciseById, - MainMenuSelections.UpdateExercise, - MainMenuSelections.DeleteExercise, - MainMenuSelections.Quit - )); - switch (selection) - { - case MainMenuSelections.AddExercise: - AddExercise(); - break; - case MainMenuSelections.ViewExercises: - ViewExercises(true); - break; - case MainMenuSelections.DeleteExercise: - DeleteExercise(); - break; - case MainMenuSelections.UpdateExercise: - UpdateExercise(); - break; - case MainMenuSelections.ViewExerciseById: - ViewExerciseById(); - break; - case MainMenuSelections.Quit: - Environment.Exit(0); - break; - } - } - } - - private void AddExercise() - { - DateTime startDate = DateTime.MinValue; - DateTime endDate = DateTime.MaxValue; - TimeSpan duration = TimeSpan.Zero; - - var type = UserInput.GetModelType(); - var dates = UserInput.GetDates(); - startDate = dates.Item1; - endDate = dates.Item2; - duration = endDate - startDate; - string comments = UserInput.GetComments(); - - try - { - _service.AddExercise(type, startDate, endDate, duration, comments); - } - catch (Exception ex) - { - Console.WriteLine($"There was an error: {ex.Message}"); - EndOperation(); - } - } - - private void ViewExercises(bool clear) - { - try - { - var table = new Table(); - table.AddColumns("Id", "Type", "Start Time", "End Time", "Duration (minutes)", "Comments"); - var exercises = _service.GetExerciseList(); - foreach (var exercise in exercises) - { - table.AddRow(exercise.Id.ToString(), exercise.Type, exercise.DateStart.ToString(), exercise.DateEnd.ToString(), exercise.Duration.TotalMinutes.ToString(), exercise.Comments); - } - AnsiConsole.Write(table); - if (clear) EndOperation(); - } - catch (Exception ex) - { - Console.WriteLine($"There is no avaible data: {ex.Message}"); - EndOperation(); - return; - } - } - - private void DeleteExercise() - { - ViewExercises(false); - int id = UserInput.GetId("to delete"); - if (!AnsiConsole.Confirm("This will delete record permanently. Are you sure? ", false)) return; - try - { - _service.DeleteExercise(id); - } - catch (Exception ex) - { - Console.WriteLine($"There was an error: {ex.Message}"); - EndOperation(); - } - } - - private void UpdateExercise() - { - ViewExercises(false); - int id = UserInput.GetId("to update"); - - try - { - - DateTime startDate = DateTime.MinValue; - DateTime endDate = DateTime.MaxValue; - TimeSpan duration = TimeSpan.Zero; - - var type = UserInput.GetModelType(); - var dates = UserInput.GetDates(); - startDate = dates.Item1; - endDate = dates.Item2; - duration = endDate - startDate; - string comments = UserInput.GetComments(); - - - _service.UpdateExercise(id, type, startDate, endDate, duration, comments); - } - catch (Exception ex) - { - Console.WriteLine($"There was an error: {ex.Message}"); - EndOperation(); - return; - } - } - private void ViewExerciseById() - { - try - { - int id = UserInput.GetId("to view"); - var exercise = _service.GetExerciseById(id); - var table = new Table(); - table.AddColumns("Id", "Type", "Start Date", "End Date", "Duration (minutes)", "Comments"); - table.AddRow(exercise.Id.ToString(), exercise.Type, exercise.DateStart.ToString(), exercise.DateEnd.ToString(), exercise.Duration.Minutes.ToString(), exercise.Comments); - AnsiConsole.Write(table); - EndOperation(); - } - catch (Exception ex) - { - Console.WriteLine($"There is no avaible data: {ex.Message}"); - EndOperation(); - return; - } - } - - private void EndOperation() - { - Console.WriteLine("Press Enter to continue..."); - Console.ReadLine(); - Console.Clear(); - } -} diff --git a/ExerciseTracker.Doc415-r/Enums.cs b/ExerciseTracker.Doc415-r/Enums.cs deleted file mode 100644 index 31f0fe10..00000000 --- a/ExerciseTracker.Doc415-r/Enums.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace exerciseTracker.doc415; - -internal class Enums -{ - public enum MainMenuSelections - { - None, - AddExercise, - ViewExercises, - ViewExerciseById, - UpdateExercise, - DeleteExercise, - Quit - } -} diff --git a/ExerciseTracker.Doc415-r/Migrations/20240129192602_inital.Designer.cs b/ExerciseTracker.Doc415-r/Migrations/20240129192602_inital.Designer.cs deleted file mode 100644 index b2f533c8..00000000 --- a/ExerciseTracker.Doc415-r/Migrations/20240129192602_inital.Designer.cs +++ /dev/null @@ -1,60 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using exerciseTracker.doc415.context; - -#nullable disable - -namespace ExerciseTracker.Doc415.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - [Migration("20240129192602_inital")] - partial class inital - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("exerciseTracker.doc415.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("Type") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Exercies"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Doc415-r/Migrations/20240129192602_inital.cs b/ExerciseTracker.Doc415-r/Migrations/20240129192602_inital.cs deleted file mode 100644 index 099afea0..00000000 --- a/ExerciseTracker.Doc415-r/Migrations/20240129192602_inital.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Doc415.Migrations -{ - /// - public partial class inital : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercies", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false), - Type = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercies", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercies"); - } - } -} diff --git a/ExerciseTracker.Doc415-r/Migrations/ExerciseDbContextModelSnapshot.cs b/ExerciseTracker.Doc415-r/Migrations/ExerciseDbContextModelSnapshot.cs deleted file mode 100644 index b7bc3403..00000000 --- a/ExerciseTracker.Doc415-r/Migrations/ExerciseDbContextModelSnapshot.cs +++ /dev/null @@ -1,57 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using exerciseTracker.doc415.context; - -#nullable disable - -namespace ExerciseTracker.Doc415.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - partial class ExerciseDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("exerciseTracker.doc415.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("Type") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Exercies"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Doc415-r/Program.cs b/ExerciseTracker.Doc415-r/Program.cs deleted file mode 100644 index 84694d44..00000000 --- a/ExerciseTracker.Doc415-r/Program.cs +++ /dev/null @@ -1,13 +0,0 @@ -using exerciseTracker.doc415.Controller; - -namespace exerciseTracker.doc415 -{ - internal class Program - { - static void Main(string[] args) - { - var _controller = new ExerciseController(); - _controller.MainMenu(); - } - } -} diff --git a/ExerciseTracker.Doc415-r/Repository/ExerciseRepository.cs b/ExerciseTracker.Doc415-r/Repository/ExerciseRepository.cs deleted file mode 100644 index 55aee5f7..00000000 --- a/ExerciseTracker.Doc415-r/Repository/ExerciseRepository.cs +++ /dev/null @@ -1,55 +0,0 @@ -using exerciseTracker.doc415.context; -using exerciseTracker.doc415.Models; -using Microsoft.EntityFrameworkCore; - -namespace exerciseTracker.doc415.Repository; - -internal class ExerciseRepository : IExerciseRepository -{ - - - - public IEnumerable GetAll() - { - using var _context = new ExerciseDbContext(); - var exerciseList = _context.Exercies.ToList(); - return exerciseList; - } - public Exercise GetById(int id) - { - using var _context = new ExerciseDbContext(); - Exercise exercise = _context.Exercies.Find(id); - return exercise; - } - public void Delete(int id) - { - using var _context = new ExerciseDbContext(); - var exerciseToDelete = _context.Exercies.Single(x => x.Id == id); - if (exerciseToDelete != null) - _context.Remove(exerciseToDelete); - _context.SaveChanges(); - } - public void Insert(Exercise exercise) - { - using var _context = new ExerciseDbContext(); - _context.Exercies.Add(exercise); - _context.SaveChanges(); - } - public void Update(Exercise exercise) - { - using var _context = new ExerciseDbContext(); - var exerciseToUpdate = _context.Exercies.Find(exercise.Id); - if (exerciseToUpdate != null) - { - exerciseToUpdate.DateEnd = exercise.DateEnd; - exerciseToUpdate.DateStart = exercise.DateStart; - exerciseToUpdate.Duration = exercise.Duration; - exerciseToUpdate.Comments = exercise.Comments; - } - _context.Exercies.Update(exerciseToUpdate); - _context.Entry(exerciseToUpdate).State = EntityState.Modified; - _context.SaveChanges(); - - } - -} diff --git a/ExerciseTracker.Doc415-r/Repository/ExerciseRepositoryDapper.cs b/ExerciseTracker.Doc415-r/Repository/ExerciseRepositoryDapper.cs deleted file mode 100644 index f8ef8403..00000000 --- a/ExerciseTracker.Doc415-r/Repository/ExerciseRepositoryDapper.cs +++ /dev/null @@ -1,108 +0,0 @@ -using Dapper; -using exerciseTracker.doc415.context; -using exerciseTracker.doc415.Models; -using Microsoft.Data.SqlClient; -using Microsoft.EntityFrameworkCore; - - -namespace exerciseTracker.doc415.Repository; - -internal class ExerciseRepositoryDapper : IExerciseRepository -{ - private readonly string _connectionString; - public ExerciseRepositoryDapper() - { - _connectionString = "Server=(localdb)\\MSSQLLocalDB;Initial Catalog=Exercise; Integrated Security=true;"; - } - - public IEnumerable GetAll() - { - var task = TGetAll(); - task.Wait(); - return task.Result; - } - private async Task> TGetAll() - { - using var connection = new SqlConnection(_connectionString); - string getAllDataQuery = @"SELECT * FROM Exercies"; - using var dbReturns = await connection.QueryMultipleAsync(getAllDataQuery); - var exerciseList = dbReturns.Read().ToList(); - return exerciseList; - } - - public Exercise GetById(int id) - { - var task = TGetById(id); - task.Wait(); - return task.Result; - } - - private async Task TGetById(int id) - { - using var connection = new SqlConnection(_connectionString); - string getByIdDataQuery = @"SELECT * FROM Exercies Where Id={0}"; - using var dbReturn = await connection.QuerySingleAsync(getByIdDataQuery, new { Id = id }); - var exercise = dbReturn.Read(); - return exercise; - } - - public void Delete(int id) - { - var task = TDelete(id); - task.Wait(); - } - private async Task TDelete(int id) - { - using var connection = new SqlConnection(_connectionString); - string deleteDataQuery = @"DELETE FROM Exercies Where Id={0}"; - var affectedRows = await connection.ExecuteAsync(deleteDataQuery, new { Id = id }); - Console.Error.WriteLine(affectedRows); - } - - public void Insert(Exercise exercise) - { - var task = TInsert(exercise); - task.Wait(); - } - private async Task TInsert(Exercise exercise) - { - using var connection = new SqlConnection(_connectionString); - string insertDataQuery = "INSERT INTO Exercies(Type,DateStart,DateEnd,Duration,Comments) VALUES (@Type,@DateStart, @DateEnd, @Duration, @Comments )"; - var affectedRows = await connection.ExecuteAsync(insertDataQuery, new - { - DateStart = exercise.DateStart, - DateEnd = exercise.DateEnd, - Duration = exercise.Duration, - Comments = exercise.Comments, - Type = exercise.Type - }); - Console.Error.WriteLine(affectedRows); - } - - public void Update(Exercise exercise) - { - using var context = new ExerciseDbContext(); - var task = TUpdate(exercise, context); - task.Wait(); - context.ChangeTracker.DetectChanges(); - context.SaveChanges(); - - } - private async Task TUpdate(Exercise exercise, ExerciseDbContext _context) - { - var updateDataQuery = "UPDATE Exercies SET Type=@Type,DateStart=@DateStart,DateEnd=@DateEnd,Duration=@Duration,Comments=@Comments WHERE Id = @Id"; - var connection = _context.Database.GetDbConnection(); - await connection.ExecuteAsync(updateDataQuery, new - { - Id = exercise.Id, - DateStart = exercise.DateStart, - DateEnd = exercise.DateEnd, - Duration = exercise.Duration, - Comments = exercise.Comments, - Type = exercise.Type - }); - - } -} - - diff --git a/ExerciseTracker.Doc415-r/Repository/IExerciseRepository.cs b/ExerciseTracker.Doc415-r/Repository/IExerciseRepository.cs deleted file mode 100644 index b261c00a..00000000 --- a/ExerciseTracker.Doc415-r/Repository/IExerciseRepository.cs +++ /dev/null @@ -1,12 +0,0 @@ -using exerciseTracker.doc415.Models; - -namespace exerciseTracker.doc415.Repository; - -internal interface IExerciseRepository -{ - IEnumerable GetAll(); - Exercise GetById(int id); - void Delete(int id); - void Insert(Exercise exercise); - void Update(Exercise exercise); -} diff --git a/ExerciseTracker.Doc415-r/Service/ExerciseService.cs b/ExerciseTracker.Doc415-r/Service/ExerciseService.cs deleted file mode 100644 index 9eaccdac..00000000 --- a/ExerciseTracker.Doc415-r/Service/ExerciseService.cs +++ /dev/null @@ -1,66 +0,0 @@ -using exerciseTracker.doc415.Models; -using exerciseTracker.doc415.Repository; - -namespace exerciseTracker.doc415.Service; - -internal class ExerciseService -{ - IExerciseRepository _repository; - IExerciseRepository _repositoryDapper; - - public ExerciseService() - { - _repository = new ExerciseRepository(); - _repositoryDapper = new ExerciseRepositoryDapper(); - } - - public void AddExercise(string type, DateTime dateStart, DateTime dateEnd, TimeSpan duration, string comments) - { - Exercise newExercise = new Exercise - { - DateStart = dateStart, - DateEnd = dateEnd, - Duration = duration, - Comments = comments, - Type = type - }; - if (type == "Cardio") - _repository.Insert(newExercise); - else - _repositoryDapper.Insert(newExercise); - - } - - public IEnumerable GetExerciseList() - { - return _repository.GetAll(); - } - - public void DeleteExercise(int id) - { - _repository.Delete(id); - } - - public void UpdateExercise(int id, string type, DateTime dateStart, DateTime dateEnd, TimeSpan duration, string comments) - { - Exercise newExercise = new Exercise - { - Id = id, - DateStart = dateStart, - DateEnd = dateEnd, - Duration = duration, - Comments = comments, - Type = type - }; - if (type == "Cardio") - _repository.Update(newExercise); - else - _repositoryDapper.Update(newExercise); - - } - - public Exercise GetExerciseById(int id) - { - return _repository.GetById(id); - } -} diff --git a/ExerciseTracker.Doc415-r/UserInput.cs b/ExerciseTracker.Doc415-r/UserInput.cs deleted file mode 100644 index 82b3f4c7..00000000 --- a/ExerciseTracker.Doc415-r/UserInput.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Spectre.Console; - -namespace exerciseTracker.doc415; - -internal class UserInput -{ - static public string GetModelType() - { - string type = AnsiConsole.Prompt(new SelectionPrompt().Title("Select exercise type") - .AddChoices("Cardio", - "Weight Lifting")); - return type; - } - - static public (DateTime, DateTime) GetDates() - { - DateTime startDate = new(); - DateTime endDate = new(); - bool valid = false; - do - { - startDate = Validation.GetDate("start"); - endDate = Validation.GetDate("end"); - var difference = (endDate - startDate).TotalMinutes; - if (difference >= 0) valid = true; - else - Console.WriteLine("Exercise duration can't be negative or zero. Check your date-times."); - } while (!valid); - return (startDate, endDate); - } - - static public string GetComments() - { - return AnsiConsole.Prompt(new TextPrompt("Enter comments: ")); - - } - - static public int GetId(string title) - { - return AnsiConsole.Prompt(new TextPrompt($"Enter record id to {title}: "). - ValidationErrorMessage("Enter a valid number."). - Validate(_id => - { - return _id switch - { - < 0 => ValidationResult.Error("Id can't be negative number"), - _ => ValidationResult.Success() - }; - })); - } - -} - - - diff --git a/ExerciseTracker.Doc415-r/Validation.cs b/ExerciseTracker.Doc415-r/Validation.cs deleted file mode 100644 index 9cd9fb49..00000000 --- a/ExerciseTracker.Doc415-r/Validation.cs +++ /dev/null @@ -1,48 +0,0 @@ -namespace exerciseTracker.doc415; -using Spectre.Console; - -internal class Validation -{ - static public DateTime GetDate(string input) - { - DateTime result = DateTime.Now; - bool valid = false; - do - { - string startTime = AnsiConsole.Prompt(new TextPrompt($"Enter {input} time of exercise (dd-mm-yyyy hh:mm): ")); - try - { - string[] dateTimeComponents = startTime.Split(" "); - string[] dateComponents = dateTimeComponents[0].Split("-"); - string[] timeComponents = dateTimeComponents[1].Split(":"); - valid = int.TryParse(dateComponents[0], out int day); - if (!valid) continue; - valid = int.TryParse(dateComponents[1], out int month); - if (!valid) continue; - valid = int.TryParse(dateComponents[2], out int year); - if (!valid) continue; - valid = int.TryParse(timeComponents[0], out int hour); - if (!valid) continue; - valid = int.TryParse(timeComponents[1], out int minute); - if (!valid) continue; - result = new DateTime(year, month, day, hour, minute, 0); - if (DateTime.TryParse(result.ToString(), out result)) - { - valid = true; - } - else - { - Console.WriteLine("Please enter a valid date-time."); - valid = false; - } - } - catch - { - valid = false; - Console.WriteLine("Please enter a valid date-time."); - } - - } while (!valid); - return result; - } -} diff --git a/ExerciseTracker.Doc415-r/context/ExerciseDbContext.cs b/ExerciseTracker.Doc415-r/context/ExerciseDbContext.cs deleted file mode 100644 index cd47c091..00000000 --- a/ExerciseTracker.Doc415-r/context/ExerciseDbContext.cs +++ /dev/null @@ -1,22 +0,0 @@ -using exerciseTracker.doc415.Models; -using Microsoft.EntityFrameworkCore; -namespace exerciseTracker.doc415.context; - -internal class ExerciseDbContext : DbContext -{ - private readonly string _connectionString = "Server=(localdb)\\MSSQLLocalDB;Initial Catalog=Exercise; Integrated Security=true;"; - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - // Data source to be replaced with config connection string. - optionsBuilder.UseSqlServer(_connectionString); - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity() - .HasKey(Exercise => new { Exercise.Id }); - } - public DbSet Exercies { get; set; } - -} diff --git a/ExerciseTracker.Doc415-r/exerciseTracker.doc415.sln b/ExerciseTracker.Doc415-r/exerciseTracker.doc415.sln deleted file mode 100644 index d4b89eaf..00000000 --- a/ExerciseTracker.Doc415-r/exerciseTracker.doc415.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34408.163 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.Doc415", "ExerciseTracker.Doc415.csproj", "{762EF874-FF44-4B4A-AF40-28CB4DB3CB91}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {762EF874-FF44-4B4A-AF40-28CB4DB3CB91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {762EF874-FF44-4B4A-AF40-28CB4DB3CB91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {762EF874-FF44-4B4A-AF40-28CB4DB3CB91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {762EF874-FF44-4B4A-AF40-28CB4DB3CB91}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {5B561272-E38D-452E-A7DC-8A0DE21CB28B} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.Forser/Context/ExerciseContext.cs b/ExerciseTracker.Forser/Context/ExerciseContext.cs deleted file mode 100644 index dd8df7ab..00000000 --- a/ExerciseTracker.Forser/Context/ExerciseContext.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace ExerciseTracker.Forser.Context -{ - public class ExerciseContext : DbContext - { - public DbSet Exercises { get; set; } - public ExerciseContext(DbContextOptions options) : base(options) { } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/Controllers/ExerciseController.cs b/ExerciseTracker.Forser/Controllers/ExerciseController.cs deleted file mode 100644 index 267c955d..00000000 --- a/ExerciseTracker.Forser/Controllers/ExerciseController.cs +++ /dev/null @@ -1,170 +0,0 @@ -using System.Globalization; - -namespace ExerciseTracker.Forser.Controllers -{ - internal class ExerciseController : IExerciseController - { - private readonly IExerciseService _exerciseService; - private readonly IUserInterface _exerciseUI; - private readonly string dateFormat = "dd-MM-yy HH:mm"; - private readonly CultureInfo cultureInfo = new CultureInfo("en-US"); - public ExerciseController(IExerciseService exerciseService, IUserInterface userInterface) - { - _exerciseService = exerciseService; - _exerciseUI = userInterface; - } - public void Run() - { - if (_exerciseService == null) - { - throw new ArgumentNullException(); - } - - while(true) - { - int selectedOption = AnsiConsole.Prompt(Helpers.DisplayMainMenu()).Id; - - switch(selectedOption) - { - case 0: - _exerciseService.DisplayExercises(); - AnsiConsole.WriteLine("Press any key to return to main menu"); - Console.ReadLine(); - break; - case 1: - AddNewExercise(); - break; - case 2: - DeleteExercise(); - AnsiConsole.WriteLine("Press any key to return to main menu"); - Console.ReadLine(); - break; - case 3: - UpdateExercise(); - break; - case -1: - AnsiConsole.WriteLine("Goodbye!"); - return; - default: - break; - } - } - } - private void DeleteExercise() - { - _exerciseService.DisplayExercises(); - int id = _exerciseUI.GetExerciseId(AnsiConsole.Ask("Which exercise do you want to delete?")); - if (id == -1) { return; } - _exerciseService.DeleteExercise(id); - } - private void AddNewExercise() - { - DisplayNewExerciseView(out DateTime startDate, out DateTime endDate, out string? comments); - bool isSaved = _exerciseService.AddExercise(startDate, endDate, comments); - if(isSaved) - { - AnsiConsole.WriteLine("Exercise has been saved"); - } - else - { - AnsiConsole.WriteLine("Exercise has not been saved"); - } - AnsiConsole.WriteLine("Press any key to return to main menu"); - Console.ReadLine(); - } - private void UpdateExercise() - { - _exerciseService.DisplayExercises(); - int id = _exerciseUI.GetExerciseId(AnsiConsole.Ask("Which exercise do you want to edit?")); - if (id == -1) { return; } - Exercise editExercise = _exerciseService.EditExercise(id); - - bool isUpdated = _exerciseService.UpdateExercise(DisplayEditExerciseView(editExercise)); - - if (isUpdated) - { - AnsiConsole.WriteLine("Exercise has been updated!"); - } - else - { - AnsiConsole.WriteLine("Couldn't update Exercise"); - } - - AnsiConsole.WriteLine("Press any key to return to main menu"); - Console.ReadLine(); - } - private Exercise DisplayEditExerciseView(Exercise editExercise) - { - AnsiConsole.Clear(); - Helpers.RenderTitle($"Editing {editExercise.Id} Exercise"); - - string dateStart, dateEnd; - - do - { - dateStart = AnsiConsole.Ask($"Edit the start of this exercise, Format : {dateFormat}", editExercise.DateStart.ToString(dateFormat, cultureInfo)); - if (!Validator.ValidateDateTime(dateStart)) - { - AnsiConsole.WriteLine($"Invalid date, make sure the format is {dateFormat}"); - } - } while (!Validator.ValidateDateTime(dateStart)); - do - { - do - { - dateEnd = AnsiConsole.Ask($"Edit the end of this exercise, Format : {dateFormat}", editExercise.DateEnd.ToString(dateFormat, cultureInfo)); - if (!Validator.ValidateDateTime(dateEnd)) - { - AnsiConsole.WriteLine($"Invalid date, make sure the format is {dateFormat}"); - } - } while (!Validator.ValidateDateTime(dateEnd)); - } while (!Validator.AreDatesValid(DateTime.Parse(dateStart), DateTime.Parse(dateEnd))); - - AnsiConsole.WriteLine($"Edit current comments : '{editExercise.Comments}', press enter to continue"); - string comments = Console.ReadLine(); - - editExercise.DateStart = DateTime.Parse(dateStart); - editExercise.DateEnd = DateTime.Parse(dateEnd); - - if (comments != editExercise.Comments && comments != "") - { - editExercise.Comments = comments; - } - return editExercise; - } - private void DisplayNewExerciseView(out DateTime startDate, out DateTime endDate, out string? comments) - { - AnsiConsole.Clear(); - Helpers.RenderTitle("Add new exercise"); - - string start, end; - - do - { - start = AnsiConsole.Ask($"What date did you start this exercise? Format : {dateFormat}"); - if (!Validator.ValidateDateTime(start)) - { - AnsiConsole.WriteLine($"Invalid date, make sure the format is {dateFormat}"); - } - } while (!Validator.ValidateDateTime(start)); - do - { - do - { - end = AnsiConsole.Ask($"What date did you finish this exercise? Format : {dateFormat}"); - if (!Validator.ValidateDateTime(end)) - { - AnsiConsole.WriteLine($"Invalid date, make sure the format is {dateFormat}"); - } - - } while (!Validator.ValidateDateTime(end)); - } while (!Validator.AreDatesValid(DateTime.Parse(start), DateTime.Parse(end))); - - startDate = DateTime.Parse(start); - endDate = DateTime.Parse(end); - - AnsiConsole.WriteLine("Any comments for this exercise?, press enter to continue"); - comments = Console.ReadLine(); - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/Controllers/IExerciseController.cs b/ExerciseTracker.Forser/Controllers/IExerciseController.cs deleted file mode 100644 index 4920f778..00000000 --- a/ExerciseTracker.Forser/Controllers/IExerciseController.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace ExerciseTracker.Forser.Controllers -{ - internal interface IExerciseController - { - void Run(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/ExerciseTracker.Forser.csproj b/ExerciseTracker.Forser/ExerciseTracker.Forser.csproj deleted file mode 100644 index 46b4c3b9..00000000 --- a/ExerciseTracker.Forser/ExerciseTracker.Forser.csproj +++ /dev/null @@ -1,27 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - Always - - - - diff --git a/ExerciseTracker.Forser/ExerciseTracker.Forser.sln b/ExerciseTracker.Forser/ExerciseTracker.Forser.sln deleted file mode 100644 index 41a42b2f..00000000 --- a/ExerciseTracker.Forser/ExerciseTracker.Forser.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.7.34031.279 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.Forser", "ExerciseTracker.Forser.csproj", "{6C330CC3-1D1D-47A4-80C2-BAA7BFE439D7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6C330CC3-1D1D-47A4-80C2-BAA7BFE439D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C330CC3-1D1D-47A4-80C2-BAA7BFE439D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C330CC3-1D1D-47A4-80C2-BAA7BFE439D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C330CC3-1D1D-47A4-80C2-BAA7BFE439D7}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {8E3C956D-F82D-49FB-95EB-B29D9269682C} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.Forser/GlobalUsings.cs b/ExerciseTracker.Forser/GlobalUsings.cs deleted file mode 100644 index 3bfa1511..00000000 --- a/ExerciseTracker.Forser/GlobalUsings.cs +++ /dev/null @@ -1,8 +0,0 @@ -global using ExerciseTracker.Forser.Context; -global using ExerciseTracker.Forser.Controllers; -global using ExerciseTracker.Forser.Repository; -global using ExerciseTracker.Forser.Services; -global using ExerciseTracker.Forser.UI; -global using ExerciseTracker.Forser.Models; -global using Spectre.Console; -global using Microsoft.EntityFrameworkCore; \ No newline at end of file diff --git a/ExerciseTracker.Forser/Migrations/20231004144324_InitialCreate.Designer.cs b/ExerciseTracker.Forser/Migrations/20231004144324_InitialCreate.Designer.cs deleted file mode 100644 index 3c73f0ba..00000000 --- a/ExerciseTracker.Forser/Migrations/20231004144324_InitialCreate.Designer.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker.Forser.Context; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Forser.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20231004144324_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.11") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Forser.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Forser/Migrations/20231004144324_InitialCreate.cs b/ExerciseTracker.Forser/Migrations/20231004144324_InitialCreate.cs deleted file mode 100644 index 55c55755..00000000 --- a/ExerciseTracker.Forser/Migrations/20231004144324_InitialCreate.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Forser.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Comments = table.Column(type: "nvarchar(255)", maxLength: 255, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.Forser/Migrations/20231004151751_Changed The Duration.Designer.cs b/ExerciseTracker.Forser/Migrations/20231004151751_Changed The Duration.Designer.cs deleted file mode 100644 index 4efdb5f8..00000000 --- a/ExerciseTracker.Forser/Migrations/20231004151751_Changed The Duration.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using ExerciseTracker.Forser.Context; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Forser.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20231004151751_Changed The Duration")] - partial class ChangedTheDuration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.11") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Forser.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Forser/Migrations/20231004151751_Changed The Duration.cs b/ExerciseTracker.Forser/Migrations/20231004151751_Changed The Duration.cs deleted file mode 100644 index 12f73e02..00000000 --- a/ExerciseTracker.Forser/Migrations/20231004151751_Changed The Duration.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Forser.Migrations -{ - /// - public partial class ChangedTheDuration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "Duration", - table: "Exercises", - type: "time", - nullable: false, - defaultValue: new TimeSpan(0, 0, 0, 0, 0)); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "Duration", - table: "Exercises"); - } - } -} diff --git a/ExerciseTracker.Forser/Migrations/ExerciseContextModelSnapshot.cs b/ExerciseTracker.Forser/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index 55c8f833..00000000 --- a/ExerciseTracker.Forser/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker.Forser.Context; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Forser.Migrations -{ - [DbContext(typeof(ExerciseContext))] - partial class ExerciseContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.11") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Forser.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Forser/Models/Exercise.cs b/ExerciseTracker.Forser/Models/Exercise.cs deleted file mode 100644 index eb06f113..00000000 --- a/ExerciseTracker.Forser/Models/Exercise.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; - -namespace ExerciseTracker.Forser.Models -{ - public class Exercise - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - [MaxLength(255)] - public string? Comments { get; set; } - public TimeSpan Duration { get; set; } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/Program.cs b/ExerciseTracker.Forser/Program.cs deleted file mode 100644 index ed2b60ac..00000000 --- a/ExerciseTracker.Forser/Program.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace ExerciseTracker.Forser; - -internal static class Program -{ - private static readonly IConfiguration configuration; - static Program() - { - configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build(); - } - static void Main(string[] args) - { - using IHost host = CreateHostBuilder(args).Build(); - - IServiceProvider exerciseServiceProvider = host.Services; - IExerciseController? exerciseController = exerciseServiceProvider.GetService(); - exerciseController!.Run(); - } - static IHostBuilder CreateHostBuilder(string[] args) - { - return Host.CreateDefaultBuilder(args).ConfigureServices((_, services) => { - services.AddDbContext(options => - { - options.UseSqlServer(configuration.GetConnectionString("ExerciseConnection")); - }) - .AddScoped() - .AddScoped() - .AddScoped() - .AddScoped(); - }); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/Repository/.mono/registry/CurrentUser/software/microsoft/csdevkit/telemetry/persistentpropertybag/values.xml b/ExerciseTracker.Forser/Repository/.mono/registry/CurrentUser/software/microsoft/csdevkit/telemetry/persistentpropertybag/values.xml deleted file mode 100644 index 58fdd94b..00000000 --- a/ExerciseTracker.Forser/Repository/.mono/registry/CurrentUser/software/microsoft/csdevkit/telemetry/persistentpropertybag/values.xml +++ /dev/null @@ -1,3 +0,0 @@ - - 824541b0dd717897fcb6b2ccc68ea1987c70b908fecd0e6bb59f0b7d1981c167 - \ No newline at end of file diff --git a/ExerciseTracker.Forser/Repository/.mono/registry/CurrentUser/software/microsoft/csdevkit/v1/pids/18741_133509346435195663/values.xml b/ExerciseTracker.Forser/Repository/.mono/registry/CurrentUser/software/microsoft/csdevkit/v1/pids/18741_133509346435195663/values.xml deleted file mode 100644 index b31d3a0c..00000000 --- a/ExerciseTracker.Forser/Repository/.mono/registry/CurrentUser/software/microsoft/csdevkit/v1/pids/18741_133509346435195663/values.xml +++ /dev/null @@ -1,13 +0,0 @@ - - 1.2.7 - 3 - 133509346435195663 - 133509370448042955 - 2b83b6d1-fda4-41d1-8561-20718b0274b11706461042254 - 18741 - ms-dotnettools.csdevkit - 1.83.1 - Microsoft.CodeAnalysis.LanguageServer - 4.1000.24.5801 - True - \ No newline at end of file diff --git a/ExerciseTracker.Forser/Repository/.mono/registry/CurrentUser/software/microsoft/sqmclient/values.xml b/ExerciseTracker.Forser/Repository/.mono/registry/CurrentUser/software/microsoft/sqmclient/values.xml deleted file mode 100644 index 54b1778a..00000000 --- a/ExerciseTracker.Forser/Repository/.mono/registry/CurrentUser/software/microsoft/sqmclient/values.xml +++ /dev/null @@ -1,4 +0,0 @@ - - {0BADAAE9-B2B6-4F7D-B993-9CE55042F093} - {00000000-0000-0000-0000-000000000000} - \ No newline at end of file diff --git a/ExerciseTracker.Forser/Repository/ExerciseRepository.cs b/ExerciseTracker.Forser/Repository/ExerciseRepository.cs deleted file mode 100644 index f82b7915..00000000 --- a/ExerciseTracker.Forser/Repository/ExerciseRepository.cs +++ /dev/null @@ -1,61 +0,0 @@ -namespace ExerciseTracker.Forser.Repository -{ - public class ExerciseRepository : IExerciseReposoitory - { - private readonly ExerciseContext _exerciseContext; - public ExerciseRepository(ExerciseContext context) - { - _exerciseContext = context; - } - public bool AddExercise(Exercise exercise) - { - _exerciseContext.Add(exercise); - int result = _exerciseContext.SaveChanges(); - - if (result > 0) - { - return true; - } - else { return false; } - } - public void DeleteExercise(Exercise exercise) - { - _exerciseContext.Remove(exercise); - _exerciseContext.SaveChanges(); - } - public bool EditExercise(Exercise exercise) - { - _exerciseContext.Update(exercise); - int result = _exerciseContext.SaveChanges(); - - if (result > 0) - return true; - else - return false; - } - public Exercise EditExerciseById(int id) - { - Exercise exercise = _exerciseContext.Exercises.Find(id); - - return exercise; - } - public bool GetExerciseById(int id, out Exercise? exercise) - { - exercise = null; - Exercise? _ = _exerciseContext.Exercises.Find(id); - if (_ == null) - { - return false; - } - else - { - exercise = _; - return true; - } - } - public IEnumerable GetExercises() - { - return _exerciseContext.Exercises; - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/Repository/IExerciseReposoitory.cs b/ExerciseTracker.Forser/Repository/IExerciseReposoitory.cs deleted file mode 100644 index 579614f2..00000000 --- a/ExerciseTracker.Forser/Repository/IExerciseReposoitory.cs +++ /dev/null @@ -1,14 +0,0 @@ -using ExerciseTracker.Forser.Models; - -namespace ExerciseTracker.Forser.Repository -{ - internal interface IExerciseReposoitory - { - public IEnumerable GetExercises(); - public bool GetExerciseById(int id, out Exercise? exercise); - public Exercise EditExerciseById(int id); - public bool AddExercise(Exercise exercise); - public bool EditExercise(Exercise exercise); - public void DeleteExercise(Exercise exercise); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/Services/.mono/registry/CurrentUser/software/microsoft/csdevkit/telemetry/persistentpropertybag/microsoft.codeanalysis.languageserver/values.xml b/ExerciseTracker.Forser/Services/.mono/registry/CurrentUser/software/microsoft/csdevkit/telemetry/persistentpropertybag/microsoft.codeanalysis.languageserver/values.xml deleted file mode 100644 index adbdbbac..00000000 --- a/ExerciseTracker.Forser/Services/.mono/registry/CurrentUser/software/microsoft/csdevkit/telemetry/persistentpropertybag/microsoft.codeanalysis.languageserver/values.xml +++ /dev/null @@ -1,5 +0,0 @@ - - 4 - 18 - 0 - \ No newline at end of file diff --git a/ExerciseTracker.Forser/Services/.mono/registry/CurrentUser/software/microsoft/csdevkit/telemetry/persistentpropertybag/values.xml b/ExerciseTracker.Forser/Services/.mono/registry/CurrentUser/software/microsoft/csdevkit/telemetry/persistentpropertybag/values.xml deleted file mode 100644 index 58fdd94b..00000000 --- a/ExerciseTracker.Forser/Services/.mono/registry/CurrentUser/software/microsoft/csdevkit/telemetry/persistentpropertybag/values.xml +++ /dev/null @@ -1,3 +0,0 @@ - - 824541b0dd717897fcb6b2ccc68ea1987c70b908fecd0e6bb59f0b7d1981c167 - \ No newline at end of file diff --git a/ExerciseTracker.Forser/Services/.mono/registry/CurrentUser/software/microsoft/sqmclient/values.xml b/ExerciseTracker.Forser/Services/.mono/registry/CurrentUser/software/microsoft/sqmclient/values.xml deleted file mode 100644 index f91d4b08..00000000 --- a/ExerciseTracker.Forser/Services/.mono/registry/CurrentUser/software/microsoft/sqmclient/values.xml +++ /dev/null @@ -1,4 +0,0 @@ - - {00000000-0000-0000-0000-000000000000} - {08A008EB-E28B-4CA2-B659-C8C9FD007048} - \ No newline at end of file diff --git a/ExerciseTracker.Forser/Services/ExerciseService.cs b/ExerciseTracker.Forser/Services/ExerciseService.cs deleted file mode 100644 index 140b2faf..00000000 --- a/ExerciseTracker.Forser/Services/ExerciseService.cs +++ /dev/null @@ -1,50 +0,0 @@ -namespace ExerciseTracker.Forser.Services -{ - internal class ExerciseService : IExerciseService - { - private readonly IExerciseReposoitory _exerciseReposoitory; - public ExerciseService(IExerciseReposoitory exerciseReposoitory) - { - _exerciseReposoitory = exerciseReposoitory; - } - public bool AddExercise(DateTime start, DateTime end, string? comments) - { - Exercise newExercise = new() - { - DateStart = start, - DateEnd = end, - Duration = end - start, - Comments = comments - }; - return _exerciseReposoitory.AddExercise(newExercise); - } - public void DeleteExercise(int id) - { - if(!_exerciseReposoitory.GetExerciseById(id, out Exercise? exerciseToDelete)) - { - AnsiConsole.WriteLine("Couldn't find the exercise you wanted to delete"); - return; - } - if (exerciseToDelete == null) - { - AnsiConsole.WriteLine("Something went wrong when trying to get the exercise"); - return; - } - _exerciseReposoitory.DeleteExercise(exerciseToDelete); - AnsiConsole.WriteLine("Successfully deleted exercise."); - } - public void DisplayExercises() - { - List exercises = _exerciseReposoitory.GetExercises().ToList(); - UserInterface.DisplayExerciseTable(exercises); - } - public Exercise EditExercise(int id) - { - return _exerciseReposoitory.EditExerciseById(id); - } - public bool UpdateExercise(Exercise exercise) - { - return _exerciseReposoitory.EditExercise(exercise); - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/Services/IExerciseService.cs b/ExerciseTracker.Forser/Services/IExerciseService.cs deleted file mode 100644 index e0e26107..00000000 --- a/ExerciseTracker.Forser/Services/IExerciseService.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciseTracker.Forser.Services -{ - internal interface IExerciseService - { - bool AddExercise(DateTime start, DateTime end, string? comments); - void DeleteExercise(int id); - Exercise EditExercise(int id); - bool UpdateExercise(Exercise exercise); - void DisplayExercises(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/UI/Helpers.cs b/ExerciseTracker.Forser/UI/Helpers.cs deleted file mode 100644 index 223927d4..00000000 --- a/ExerciseTracker.Forser/UI/Helpers.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace ExerciseTracker.Forser.UI -{ - public static class Helpers - { - internal static Style HighLightStyle => new( - Color.Orange1, - Color.Black, - Decoration.None - ); - internal static void RenderTitle(string title) - { - Rule rule = new Rule($"[orange1]{title}[/]"); - AnsiConsole.Write(rule); - } - public static SelectionPrompt DisplayMainMenu() - { - AnsiConsole.Clear(); - RenderTitle("Main Menu"); - - SelectionPrompt menu = new() - { - HighlightStyle = HighLightStyle - }; - - menu.Title("Select an [B]option[/]"); - menu.AddChoices(new List() - { - new() { Id = 0, Text = "Display Exercises" }, - new() { Id = 1, Text = "Add Exercise" }, - new() { Id = 2, Text = "Delete Exercise" }, - new() { Id = 3, Text = "Edit Exercise" }, - new() { Id = -1, Text = "Quit" } - }); - - return menu; - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/UI/IUserInterface.cs b/ExerciseTracker.Forser/UI/IUserInterface.cs deleted file mode 100644 index 02ec3135..00000000 --- a/ExerciseTracker.Forser/UI/IUserInterface.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ExerciseTracker.Forser.UI -{ - internal interface IUserInterface - { - DateTime GetEndTime(DateTime startTime); - int GetExerciseId(int id); - DateTime GetStartTime(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/UI/MenuView.cs b/ExerciseTracker.Forser/UI/MenuView.cs deleted file mode 100644 index 9c137aa0..00000000 --- a/ExerciseTracker.Forser/UI/MenuView.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ExerciseTracker.Forser.UI -{ - public class MenuView - { - public int Id { get; set; } - public string? Text { get; set; } - public override string ToString() => Text; - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/UI/UserInterface.cs b/ExerciseTracker.Forser/UI/UserInterface.cs deleted file mode 100644 index 4092a79d..00000000 --- a/ExerciseTracker.Forser/UI/UserInterface.cs +++ /dev/null @@ -1,42 +0,0 @@ -namespace ExerciseTracker.Forser.UI -{ - internal class UserInterface : IUserInterface - { - private readonly IExerciseReposoitory _exerciseReposoitory; - public UserInterface(IExerciseReposoitory exerciseReposoitory) - { - _exerciseReposoitory = exerciseReposoitory; - } - public DateTime GetEndTime(DateTime startTime) - { - throw new NotImplementedException(); - } - public int GetExerciseId(int id) - { - bool result = _exerciseReposoitory.GetExerciseById(id, out _); - - if(result) - { - return id; - } - return -1; - } - public DateTime GetStartTime() - { - throw new NotImplementedException(); - } - public static void DisplayExerciseTable(List exercises) - { - Table table = new Table(); - table.Expand(); - table.AddColumns("Id","Date Started","Date Ended","Duration","Comments"); - - foreach (Exercise exercise in exercises) - { - table.AddRow($"{exercise.Id}", $"{exercise.DateStart}", $"{exercise.DateEnd}",$"{exercise.Duration}", $"{exercise.Comments}"); - } - - AnsiConsole.Write(table); - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/UI/Validator.cs b/ExerciseTracker.Forser/UI/Validator.cs deleted file mode 100644 index e271b116..00000000 --- a/ExerciseTracker.Forser/UI/Validator.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Globalization; - -namespace ExerciseTracker.Forser.UI -{ - internal class Validator - { - internal static bool ValidateDateTime(string exerciseDate) - { - bool dateValid = false; - - if (DateTime.TryParseExact(exerciseDate, "dd-MM-yy HH:mm", new CultureInfo("en-US"), DateTimeStyles.None, out _)) - { - dateValid = true; - } - - return dateValid; - } - internal static bool AreDatesValid(DateTime startDate, DateTime endDate) - { - if (startDate < endDate) - { - return true; - } - else - { - AnsiConsole.WriteLine("End of exercise can't be before start of exercise"); - return false; - } - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.Forser/appsettings.json b/ExerciseTracker.Forser/appsettings.json deleted file mode 100644 index 01de2fcd..00000000 --- a/ExerciseTracker.Forser/appsettings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ConnectionStrings": { - "ExerciseConnection": "Server=.\\;Database=ExerciseDB;Trusted_Connection=True;MultipleActiveResultSets=True;Encrypt=False" - } -} \ No newline at end of file diff --git a/ExerciseTracker.HappyReni/10. ExerciseTracker.sln b/ExerciseTracker.HappyReni/10. ExerciseTracker.sln deleted file mode 100644 index 97a27993..00000000 --- a/ExerciseTracker.HappyReni/10. ExerciseTracker.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.7.34003.232 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExerciseUI", "ExerciseUI\ExerciseUI.csproj", "{082143B1-8349-490F-994A-1CB68EF54511}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {082143B1-8349-490F-994A-1CB68EF54511}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {082143B1-8349-490F-994A-1CB68EF54511}.Debug|Any CPU.Build.0 = Debug|Any CPU - {082143B1-8349-490F-994A-1CB68EF54511}.Release|Any CPU.ActiveCfg = Release|Any CPU - {082143B1-8349-490F-994A-1CB68EF54511}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {3907A27D-2829-4804-BF8B-5047C7A3FF68} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Controllers/ExerciseController.cs b/ExerciseTracker.HappyReni/ExerciseUI/Controllers/ExerciseController.cs deleted file mode 100644 index b347808c..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Controllers/ExerciseController.cs +++ /dev/null @@ -1,40 +0,0 @@ -using ExerciseUI.Model; -using ExerciseUI.Services; - -namespace ExerciseUI.Controllers -{ - internal class ExerciseController : IExerciseController - { - private readonly IExerciseService _service; - - public ExerciseController(IExerciseService exerciseService) - { - _service = exerciseService; - } - - public bool AddExercise(ExerciseModel exercise) - { - return _service.AddExercise(exercise); - } - - public ExerciseModel GetExercise(int id) - { - return _service.GetExercise(id); - } - - public IEnumerable GetExercises() - { - return _service.GetExercises(); - } - - public bool RemoveExercise(int id) - { - return _service.RemoveExercise(id); - } - - public bool UpdateExercise(ExerciseModel entity) - { - return _service.UpdatingExercise(entity); - } - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Controllers/IExerciseController.cs b/ExerciseTracker.HappyReni/ExerciseUI/Controllers/IExerciseController.cs deleted file mode 100644 index d3854633..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Controllers/IExerciseController.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciseUI.Controllers -{ - internal interface IExerciseController where T : class - { - IEnumerable GetExercises(); - bool AddExercise(T exercise); - bool RemoveExercise(int id); - bool UpdateExercise(T exercise); - T GetExercise(int id); - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/ExerciseUI.csproj b/ExerciseTracker.HappyReni/ExerciseUI/ExerciseUI.csproj deleted file mode 100644 index e43395cf..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/ExerciseUI.csproj +++ /dev/null @@ -1,33 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - true - Never - - - - diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Migrations/20231012112644_MigrationInit.Designer.cs b/ExerciseTracker.HappyReni/ExerciseUI/Migrations/20231012112644_MigrationInit.Designer.cs deleted file mode 100644 index a7120ee1..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Migrations/20231012112644_MigrationInit.Designer.cs +++ /dev/null @@ -1,57 +0,0 @@ -// -using System; -using ExerciseUI.Model; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseUI.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20231012112644_MigrationInit")] - partial class MigrationInit - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.11") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseUI.Model.ExerciseModel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("Relational:JsonPropertyName", "id"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)") - .HasAnnotation("Relational:JsonPropertyName", "comment"); - - b.Property("DateEnd") - .HasColumnType("datetime2") - .HasAnnotation("Relational:JsonPropertyName", "dateEnd"); - - b.Property("DateStart") - .HasColumnType("datetime2") - .HasAnnotation("Relational:JsonPropertyName", "dateStart"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Migrations/20231012112644_MigrationInit.cs b/ExerciseTracker.HappyReni/ExerciseUI/Migrations/20231012112644_MigrationInit.cs deleted file mode 100644 index f4193c2a..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Migrations/20231012112644_MigrationInit.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseUI.Migrations -{ - /// - public partial class MigrationInit : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Migrations/ExerciseContextModelSnapshot.cs b/ExerciseTracker.HappyReni/ExerciseUI/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index db313f57..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,54 +0,0 @@ -// -using System; -using ExerciseUI.Model; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseUI.Migrations -{ - [DbContext(typeof(ExerciseContext))] - partial class ExerciseContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.11") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseUI.Model.ExerciseModel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("Relational:JsonPropertyName", "id"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)") - .HasAnnotation("Relational:JsonPropertyName", "comment"); - - b.Property("DateEnd") - .HasColumnType("datetime2") - .HasAnnotation("Relational:JsonPropertyName", "dateEnd"); - - b.Property("DateStart") - .HasColumnType("datetime2") - .HasAnnotation("Relational:JsonPropertyName", "dateStart"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Model/ExerciseContext.cs b/ExerciseTracker.HappyReni/ExerciseUI/Model/ExerciseContext.cs deleted file mode 100644 index 444655db..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Model/ExerciseContext.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace ExerciseUI.Model -{ - public class ExerciseContext : DbContext - { - public ExerciseContext() { } - - public ExerciseContext(DbContextOptions options) : base(options) { } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - - optionsBuilder.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Exercises;Integrated Security=true"); - } - - public DbSet Exercises { get; set; } = null!; - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Model/ExerciseModel.cs b/ExerciseTracker.HappyReni/ExerciseUI/Model/ExerciseModel.cs deleted file mode 100644 index 011986d4..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Model/ExerciseModel.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Text.Json.Serialization; - -namespace ExerciseUI.Model -{ - public class ExerciseModel - { - public int Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration => DateEnd - DateStart; - public string Comments { get; set; } - - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Program.cs b/ExerciseTracker.HappyReni/ExerciseUI/Program.cs deleted file mode 100644 index 7d590303..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Program.cs +++ /dev/null @@ -1,20 +0,0 @@ -using ExerciseUI; -using ExerciseUI.Controllers; -using ExerciseUI.Model; -using ExerciseUI.Repositories; -using ExerciseUI.Services; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; - -ServiceCollection collection = new(); - -collection.AddDbContext(option => -{}) - .AddScoped, ExerciseRepository>() - .AddScoped, ExerciseService>() - .AddScoped, ExerciseController>(); - -ServiceProvider provider = collection.BuildServiceProvider(); -var controller = provider.GetService>(); - -new UserInterface(controller); diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Properties/launchSettings.json b/ExerciseTracker.HappyReni/ExerciseUI/Properties/launchSettings.json deleted file mode 100644 index 499a7815..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Properties/launchSettings.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:19681", - "sslPort": 44335 - } - }, - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "launchUrl": "swagger", - "applicationUrl": "http://localhost:5233", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "launchUrl": "swagger", - "applicationUrl": "https://localhost:7077;http://localhost:5233", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "launchUrl": "swagger", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Repositories/ExerciseRepository.cs b/ExerciseTracker.HappyReni/ExerciseUI/Repositories/ExerciseRepository.cs deleted file mode 100644 index 72897b76..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,89 +0,0 @@ -using ExerciseUI.Model; - -namespace ExerciseUI.Repositories -{ - public interface IRepository - { - T Get(int id); - IEnumerable GetAll(); - bool Create(T entity); - bool Delete(int id); - bool Update(T entity); - } - public class ExerciseRepository : IRepository where T : class - { - private readonly ExerciseContext _context; - - public ExerciseRepository(ExerciseContext context) - { - _context = context; - } - - public bool Create(T entity) - { - try - { - _context.Set().Add(entity); - _context.SaveChanges(); - return true; - } - catch - { - throw new Exception("Error occured while adding an exercise."); - } - } - - public bool Delete(int id) - { - try - { - var item = _context.Set().Find(id); - _context.Set().Remove(item); - _context.SaveChanges(); - return true; - } - catch - { - throw new Exception("Error occured while deleting an exercise."); - } - } - - public T Get(int id) - { - try - { - return _context.Set().Find(id); - } - catch - { - throw new Exception("Error occured while fetching an exercise."); - } - } - - public IEnumerable GetAll() - { - try - { - return _context.Set(); - } - catch - { - throw new Exception("Error occured while fetching exercises."); - } - } - - public bool Update(T entity) - { - try - { - _context.Set().Update(entity); - _context.SaveChanges(); - return true; - } - catch - { - throw new Exception("Error occured while updating an exercise."); - } - } - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/SELECTOR.cs b/ExerciseTracker.HappyReni/ExerciseUI/SELECTOR.cs deleted file mode 100644 index e826ccb7..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/SELECTOR.cs +++ /dev/null @@ -1,10 +0,0 @@ -enum SELECTOR -{ - INVALID_SELECT = -1, - EXIT = 0, - CREATE, - READ, - UPDATE, - DELETE, - VIEWALL, -} \ No newline at end of file diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Services/ExerciseService.cs b/ExerciseTracker.HappyReni/ExerciseUI/Services/ExerciseService.cs deleted file mode 100644 index 753b8edf..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Services/ExerciseService.cs +++ /dev/null @@ -1,35 +0,0 @@ -using ExerciseUI.Model; -using ExerciseUI.Repositories; - -namespace ExerciseUI.Services -{ - internal class ExerciseService : IExerciseService - { - private readonly IRepository _repository; - public ExerciseService(IRepository repository) - { - _repository = repository; - } - - public IEnumerable GetExercises() => _repository.GetAll(); - public bool AddExercise(ExerciseModel entity) - { - return _repository.Create(entity); - } - - public bool RemoveExercise(int id) - { - return _repository.Delete(id); - } - - public bool UpdatingExercise(ExerciseModel entity) - { - return _repository.Update(entity); - } - - public ExerciseModel GetExercise(int id) - { - return _repository.Get(id); - } - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Services/IExerciseService.cs b/ExerciseTracker.HappyReni/ExerciseUI/Services/IExerciseService.cs deleted file mode 100644 index d94ade28..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Services/IExerciseService.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciseUI.Services -{ - public interface IExerciseService where T : class - { - public IEnumerable GetExercises(); - public bool AddExercise(T entity); - public bool RemoveExercise(int id); - public bool UpdatingExercise(T entity); - public T GetExercise(int id); - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/UserInterface.cs b/ExerciseTracker.HappyReni/ExerciseUI/UserInterface.cs deleted file mode 100644 index a54e106b..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/UserInterface.cs +++ /dev/null @@ -1,195 +0,0 @@ -using ConsoleTableExt; -using ExerciseUI.Controllers; -using ExerciseUI.Model; - -namespace ExerciseUI -{ - internal class UserInterface - { - private SELECTOR Selector { get; set; } - private IExerciseController _controller; - public UserInterface(IExerciseController controller) - { - Selector = MainMenu(); - _controller = controller; - while (true) - { - Action(); - } - } - - public static SELECTOR MainMenu() - { - Console.Clear(); - Write("Exercise Tracker"); - Write("".PadRight(24, '=')); - Write("1. Add a track"); - Write("2. View a track"); - Write("3. Update a track"); - Write("4. Delete a track"); - Write("5. View all track"); - Write("0. Exit\n"); - - return (SELECTOR)GetInput("Select ").val; - } - private void Action() - { - switch (Selector) - { - case SELECTOR.CREATE: - CreateTrack(); - break; - case SELECTOR.READ: - ReadTrack(); - break; - case SELECTOR.UPDATE: - UpdateTrack(); - break; - case SELECTOR.DELETE: - DeleteTrack(); - break; - case SELECTOR.VIEWALL: - ViewAllTracks(); - break; - case SELECTOR.EXIT: - Environment.Exit(0); - break; - default: - Write("Invalid Input"); - break; - } - Selector = GoToMainMenu("Type any keys to continue."); - } - - private void CreateTrack() - { - Clear(); - try - { - DateTime startTime = Validation.CheckDateTime(GetInput("Input a start time. (YYYY-MM-dd)").str); - DateTime endTime = Validation.CheckDateTime(GetInput("Input an end time. (YYYY-MM-dd)").str); - Validation.CheckStartEndTime(startTime, endTime); - string comment = GetInput("Type a comment.").str; - var exercise = new ExerciseModel() { DateStart = startTime, DateEnd = endTime, Comments = comment }; - - if (_controller.AddExercise(exercise)) - Write("Successfully Added."); - } - catch (Exception ex) - { - Write($"{ex.Message}"); - } - } - - private void UpdateTrack() - { - ViewAllTracks(); - try - { - int id = GetInput("Input an id to update.").val; - DateTime startTime = Validation.CheckDateTime(GetInput("Input a start time. (YYYY-MM-dd)").str); - DateTime endTime = Validation.CheckDateTime(GetInput("Input an end time. (YYYY-MM-dd)").str); - Validation.CheckStartEndTime(startTime, endTime); - string comment = GetInput("Type a comment.").str; - var exercise = _controller.GetExercise(id); - exercise.DateStart = startTime; - exercise.DateEnd = endTime; - exercise.Comments = comment; - - if (_controller.UpdateExercise(exercise)) - Write("Successfully Updated."); - } - catch (Exception ex) - { - Write($"{ex.Message}"); - } - } - - private void DeleteTrack() - { - ViewAllTracks(); - try - { - int id = GetInput("Input an id to delete.").val; - if (_controller.RemoveExercise(id)) - Write("Successfully deleted."); - } - catch (Exception ex) - { - Write($"{ex.Message}"); - } - } - - private void ReadTrack() - { - ViewAllTracks(); - try - { - int id = GetInput("Input an id to read.").val; - List list = new() { _controller.GetExercise(id) }; - MakeTable(list, "Track"); - } - catch (Exception ex) - { - Write($"{ex.Message}"); - } - } - - private void ViewAllTracks() - { - var exercises = _controller.GetExercises().ToList(); - MakeTable(exercises, "All Tracks"); - } - - public static void Write(string text) - { - Console.WriteLine(text); - } - public static void Write(int text) - { - Console.WriteLine(text); - } - public static void Clear() - { - // Somehow, Console.Clear() doesn't work properly. it just skips lines. - // This code clears the console. - // https://github.com/dotnet/runtime/issues/28355 - - Console.Write("\f\u001bc\x1b[3J"); - } - public static void MakeTable(List data, string tableName) where T : class - { - Clear(); - ConsoleTableBuilder - .From(data) - .WithTitle(tableName, ConsoleColor.Green) - .ExportAndWriteLine(); - Console.WriteLine("".PadRight(24, '=')); - } - - public static (bool res, string str, int val) GetInput(string message) - { - // This function returns string input too in case you need it - int number; - Write(message); - Console.Write(">> "); - string str = Console.ReadLine(); - var res = int.TryParse(str, out number); - - number = res ? number : -1; - str = str == null ? "" : str; - - return (res, str, number); - } - public static void WaitForInput(string message = "") - { - Write(message); - Console.ReadKey(); - } - public SELECTOR GoToMainMenu(string message = "") - { - WaitForInput(message); - return MainMenu(); - } - } -} diff --git a/ExerciseTracker.HappyReni/ExerciseUI/Validation.cs b/ExerciseTracker.HappyReni/ExerciseUI/Validation.cs deleted file mode 100644 index 86dc29ff..00000000 --- a/ExerciseTracker.HappyReni/ExerciseUI/Validation.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Globalization; - -namespace ExerciseUI -{ - public class Validation - { - public static DateTime CheckDateTime(string date) - { - string format = "yyyy-MM-dd HH:mm:ss"; - - if (DateTime.TryParseExact(date, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out _)) - { - return DateTime.Parse(date); - } - - throw new Exception("Invalid DateTime format."); - } - public static bool CheckStartEndTime(DateTime start, DateTime end) - { - if (end - start > TimeSpan.Zero) - { - return true; - } - - throw new Exception("end time shouldn't come before start time."); - } - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut.sln b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut.sln deleted file mode 100644 index 300f3ba4..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.6.33829.357 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.JsPeanut", "ExerciseTracker.JsPeanut\ExerciseTracker.JsPeanut.csproj", "{F4C5F0D7-D003-4E7F-A619-38E410584266}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F4C5F0D7-D003-4E7F-A619-38E410584266}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F4C5F0D7-D003-4E7F-A619-38E410584266}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F4C5F0D7-D003-4E7F-A619-38E410584266}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F4C5F0D7-D003-4E7F-A619-38E410584266}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {C84A219D-7ECE-4994-830B-8A5D8BD280D1} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Exercise.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Exercise.cs deleted file mode 100644 index 1c5b5b1a..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Exercise.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace ExerciseTracker.JsPeanut -{ - public class Exercise - { - public int Id { get; set; } - - public DateTime StartTime { get; set; } - - public DateTime EndTime { get; set; } - - public TimeSpan Duration { get; set; } - - public string Comments { get; set; } - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseContext.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseContext.cs deleted file mode 100644 index 3c73ab29..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseContext.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.JsPeanut -{ - public class ExerciseContext : DbContext - { - public DbSet Exercises { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => - optionsBuilder.UseSqlServer("Data Source=(localdb)\\LocalDBDemo;Initial Catalog=Exercises;Integrated Security=True;Connect Timeout=30;Encrypt=False"); - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseController.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseController.cs deleted file mode 100644 index 17989c8b..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseController.cs +++ /dev/null @@ -1,99 +0,0 @@ -using Microsoft.EntityFrameworkCore.Metadata.Internal; -using static System.Runtime.InteropServices.JavaScript.JSType; - -namespace ExerciseTracker.JsPeanut -{ - public class ExerciseController - { - private readonly IExerciseService _service; - - public ExerciseController() - { - _service = new ExerciseService(); - } - public ExerciseController(IExerciseService service) - { - _service = service; - } - - public void InsertExercise() - { - DateTime startTime = DateTime.Parse(UserInput.GetStartTime()); - DateTime endTime = DateTime.Parse(UserInput.GetEndTime(startTime.ToString())); - TimeSpan duration = endTime - startTime; - string comments = UserInput.GetCommentsString(); - - var exercise = new Exercise - { - StartTime = startTime, - EndTime = endTime, - Duration = duration, - Comments = comments - }; - - _service.Insert(exercise); - } - - public List ReadExercises() - { - List exercises = _service.GetExercises().ToList(); - - UserInterface.ShowExercisesTable(exercises); - - return exercises; - } - - public void ReadExercise() - { - List exercises = ReadExercises(); - - string exerciseIdString = UserInput.GetId("\nPlease enter the id of the exercise session you want to see:", exercises); - - int exerciseId = Int32.Parse(exerciseIdString); - Exercise exercise =_service.Get(exerciseId); - UserInterface.ShowExercise(exercise); - - Console.WriteLine("\nPress any key to go back to the main menu."); - Console.ReadKey(); - Program.MainMenu(); - } - - public void Delete() - { - List exercises = ReadExercises(); - - string exerciseIdString = UserInput.GetId("\nPlease enter the id of the exercise session you want to delete:", exercises); - - int exerciseId = Int32.Parse(exerciseIdString); - - _service.Delete(exerciseId); - - Console.WriteLine("\nExercise session was deleted with success.\n\nPress any key to go back to the main menu."); - Console.ReadKey(); - Program.MainMenu(); - } - - public void Update() - { - List exercises = ReadExercises(); - - string exerciseIdString = UserInput.GetId("\nPlease enter the id of the exercise session you want to update", exercises); - - int exerciseId = Int32.Parse(exerciseIdString); - - Exercise exercise = _service.Get(exerciseId); - - exercise.StartTime = DateTime.Parse(UserInput.GetStartTime()); - exercise.EndTime = DateTime.Parse(UserInput.GetStartTime()); - exercise.Duration = exercise.EndTime - exercise.StartTime; - exercise.Comments = UserInput.GetCommentsString(); - - _service.Update(exercise); - - Console.WriteLine("\nExercise session was updated with success.\n\nPress any key to go back to the main menu."); - Console.ReadKey(); - Program.MainMenu(); - } - - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseRepository.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseRepository.cs deleted file mode 100644 index 9c908315..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseRepository.cs +++ /dev/null @@ -1,84 +0,0 @@ -namespace ExerciseTracker.JsPeanut -{ - public class ExerciseRepository : IExerciseRepository - { - private ExerciseContext context; - - public ExerciseRepository(ExerciseContext context) - { - this.context = context; - } - - public IEnumerable GetAll() - { - try - { - return context.Exercises.ToList(); - } - catch (Exception ex) - { - throw new Exception($"Couldn't get the list of exercise sessions: {ex.Message}"); - } - } - - public Exercise Get(int id) - { - try - { - return context.Exercises.Find(id); - } - catch (Exception ex) when (context.Exercises.Find(id) != null) - { - throw new Exception($"Couldn't get the exercise session: {ex.Message}"); - } - } - - public void Insert(Exercise exercise) - { - try - { - context.Exercises.Add(exercise); - - Save(); - } - catch (Exception ex) - { - throw new Exception($"Couldn't add the exercise session: {ex.Message}"); - } - } - - public void Delete(int id) - { - Exercise exercise = context.Exercises.Find(id); - try - { - context.Exercises.Remove(exercise); - - Save(); - } - catch (Exception ex) - { - throw new Exception($"Couldn't delete the exercise session: {ex.Message}"); - } - } - - public void Update(Exercise exercise) - { - try - { - context.Entry(exercise).State = Microsoft.EntityFrameworkCore.EntityState.Modified; - - Save(); - } - catch (Exception ex) - { - throw new Exception($"Couldn't update the exercise session: {ex.Message}"); - } - } - - public void Save() - { - context.SaveChanges(); - } - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseService.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseService.cs deleted file mode 100644 index 8b1423e7..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseService.cs +++ /dev/null @@ -1,47 +0,0 @@ -namespace ExerciseTracker.JsPeanut -{ - public class ExerciseService : IExerciseService - { - private IExerciseRepository exerciseRepository; - - public ExerciseService() - { - exerciseRepository = new ExerciseRepository(new ExerciseContext()); - } - - public ExerciseService(IExerciseRepository exerciseRepository) - { - this.exerciseRepository = exerciseRepository; - } - - public IEnumerable GetExercises() - { - return exerciseRepository.GetAll(); - } - - public Exercise Get(int id) - { - return exerciseRepository.Get(id); - } - - public void Insert(Exercise exercise) - { - exerciseRepository.Insert(exercise); - } - - public void Delete(int id) - { - exerciseRepository.Delete(id); - } - - public void Update(Exercise exercise) - { - exerciseRepository.Update(exercise); - } - - public void Save() - { - exerciseRepository.Save(); - } - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut.csproj b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut.csproj deleted file mode 100644 index 13e4d2de..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/IExerciseRepository.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/IExerciseRepository.cs deleted file mode 100644 index bad491ac..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/IExerciseRepository.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace ExerciseTracker.JsPeanut -{ - public interface IExerciseRepository - { - void Insert(Exercise exercise); - void Delete(int id); - void Update(Exercise exercise); - void Save(); - Exercise Get(int id); - IEnumerable GetAll(); - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/IExerciseService.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/IExerciseService.cs deleted file mode 100644 index faef0cdd..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/IExerciseService.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ExerciseTracker.JsPeanut -{ - public interface IExerciseService - { - IEnumerable GetExercises(); - - Exercise Get(int id); - - void Insert(Exercise exercise); - - void Delete(int id); - - void Update(Exercise exercise); - - void Save(); - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Migrations/20230727173407_initialmigration.Designer.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Migrations/20230727173407_initialmigration.Designer.cs deleted file mode 100644 index 2e589bba..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Migrations/20230727173407_initialmigration.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using ExerciseTracker.JsPeanut; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.JsPeanut.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20230727173407_initialmigration")] - partial class initialmigration - { - /// - protected void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.9") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.JsPeanut.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndTime") - .HasColumnType("datetime2"); - - b.Property("StartTime") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Migrations/20230727173407_initialmigration.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Migrations/20230727173407_initialmigration.cs deleted file mode 100644 index 2be96d2d..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Migrations/20230727173407_initialmigration.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.JsPeanut.Migrations -{ - /// - public partial class Initialmigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - StartTime = table.Column(type: "datetime2", nullable: false), - EndTime = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Migrations/ExerciseContextModelSnapshot.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index 18d76fdd..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker.JsPeanut; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.JsPeanut.Migrations -{ - [DbContext(typeof(ExerciseContext))] - partial class ExerciseContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.9") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.JsPeanut.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndTime") - .HasColumnType("datetime2"); - - b.Property("StartTime") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Program.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Program.cs deleted file mode 100644 index abc44152..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Program.cs +++ /dev/null @@ -1,68 +0,0 @@ -using Spectre.Console; - -namespace ExerciseTracker.JsPeanut -{ - class Program - { - public static bool exit; - public static void Main(string[] args) - { - while(!exit) - { - MainMenu(); - } - } - - public static void MainMenu() - { - ExerciseController exerciseController = new ExerciseController(); - Console.Clear(); - var option = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("------------------- Exercise Tracker ------------------- \n\nWelcome! What do you want to do?") - .AddChoices( - MenuOptions.InsertExerciseSession, - MenuOptions.DeleteExerciseSession, - MenuOptions.GetExerciseSession, - MenuOptions.GetAllExerciseSessions, - MenuOptions.UpdateExerciseSession, - MenuOptions.Quit)); - - switch (option) - { - case MenuOptions.InsertExerciseSession: - exerciseController.InsertExercise(); - break; - case MenuOptions.DeleteExerciseSession: - exerciseController.Delete(); - break; - case MenuOptions.GetAllExerciseSessions: - exerciseController.ReadExercises(); - Console.WriteLine("\nPress any key to go back to the main menu."); - Console.ReadKey(); - MainMenu(); - break; - case MenuOptions.GetExerciseSession: - exerciseController.ReadExercise(); - break; - case MenuOptions.UpdateExerciseSession: - exerciseController.Update(); - break; - case MenuOptions.Quit: - Console.Clear(); - Console.WriteLine("Goodbye!"); - exit = true; - break; - } - } - } - enum MenuOptions - { - InsertExerciseSession, - GetAllExerciseSessions, - GetExerciseSession, - DeleteExerciseSession, - UpdateExerciseSession, - Quit - } -} \ No newline at end of file diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/UserInput.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/UserInput.cs deleted file mode 100644 index 8d5eae33..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/UserInput.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Spectre.Console; - -namespace ExerciseTracker.JsPeanut -{ - internal class UserInput - { - public static string GetStartTime() - { - string startTime = AnsiConsole.Ask("Date and time in which your exercise session started:"); - - while (!Validator.ValidateStartDateString(startTime)) - { - startTime = AnsiConsole.Ask("Date and time in which your exercise session started:"); - } - - return startTime; - } - - public static string GetEndTime(string startTime) - { - string endTime = AnsiConsole.Ask("Date and time in which your exercise session ended:"); - - while (!Validator.ValidateEndDateString(startTime, endTime)) - { - endTime = AnsiConsole.Ask("Date and time in which your exercise session started:"); - } - - return endTime; - } - - public static string GetCommentsString() - { - string comment = AnsiConsole.Ask("Comments?"); - - while (!Validator.IsStringValid(comment)) - { - comment = AnsiConsole.Ask("Comments?"); - } - - return comment; - } - - public static string GetId(string message, List exercises) - { - string id = AnsiConsole.Ask(message); - - while (!Validator.IsIdValid(id, exercises)) - { - id = AnsiConsole.Ask(message); - } - - return id; - } - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/UserInterface.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/UserInterface.cs deleted file mode 100644 index 41fe0b5c..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/UserInterface.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Spectre.Console; - -namespace ExerciseTracker.JsPeanut -{ - internal class UserInterface - { - static internal void ShowExercisesTable(List exercises) - { - var table = new Table(); - table.AddColumn("Id"); - table.AddColumn("StartTime"); - table.AddColumn("EndTime"); - table.AddColumn("Duration"); - table.AddColumn("Comments"); - - foreach (var exercise in exercises) - { - table.AddRow(exercise.Id.ToString(), - exercise.StartTime.ToString(), - exercise.EndTime.ToString(), - exercise.Duration.ToString(), - exercise.Comments.ToString()); - } - - AnsiConsole.Write(table); - } - - static internal void ShowExercise(Exercise exercise) - { - var panel = new Panel($@"Id: {exercise.Id} -StartTime: {exercise.StartTime} -EndTime: {exercise.EndTime} -Duration: {exercise.Duration} -Comments: {exercise.Comments}"); - panel.Header = new PanelHeader("Exercise Session Info"); - panel.Padding = new Padding(2, 2, 2, 2); - - AnsiConsole.Write(panel); - } - } -} diff --git a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Validator.cs b/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Validator.cs deleted file mode 100644 index 8de1c106..00000000 --- a/ExerciseTracker.JsPeanut/ExerciseTracker.JsPeanut/Validator.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System.Globalization; - -namespace ExerciseTracker.JsPeanut -{ - internal class Validator - { - public static bool ValidateStartDateString(string startTimeString) - { - string format = "dd/MM/yyyy HH:mm"; - CultureInfo culture = CultureInfo.InvariantCulture; - DateTimeStyles styles = DateTimeStyles.None; - bool isDateValid = DateTime.TryParseExact(startTimeString, format, culture, styles, out _); - - if (isDateValid == false) - { - Console.WriteLine("Wrong format. You can only use the one provided that is dd/mm/yyyy hh:mm. Example: 01/01/2023 12:00 "); - - return false; - } - - return true; - } - - public static bool ValidateEndDateString(string startTimeString, string endTimeString) - { - string format = "dd/MM/yyyy HH:mm"; - CultureInfo culture = CultureInfo.InvariantCulture; - DateTimeStyles styles = DateTimeStyles.None; - - bool isDateValid = DateTime.TryParseExact(endTimeString, format, culture, styles, out _); - DateTime startTime = DateTime.Parse(startTimeString); - DateTime endTime = DateTime.Parse(endTimeString); - - if (!isDateValid) - { - Console.WriteLine("Wrong format. You can only use the one provided that is dd/mm/yyyy hh:mm. Example: 01/01/2023 12:00 "); - - return false; - } - if (endTime < startTime) - { - Console.WriteLine("The time in which your workout ended was before it even started! Try again, or go back to the main menu to insert the time in which your workout started once again."); - - return false; - } - - return true; - } - - public static bool IsStringValid(string stringToValidate) - { - if (String.IsNullOrEmpty(stringToValidate)) - { - Console.WriteLine("You can't leave this field empty!"); - - return false; - } - - foreach (char c in stringToValidate) - { - if (!Char.IsLetter(c) && c != ' ' && c != '?' && c != '!' && c != ',' && c != '.' && c != ';') - { - Console.WriteLine("Your comment must only contain letters. Please don't use numbers or special characters and try again"); - return false; - } - } - - return true; - } - - public static bool IsIdValid(string idToValidate, List exerciseList) - { - if (!Int32.TryParse(idToValidate, out _)) - { - Console.WriteLine("You didn't enter a valid id. Please enter a number."); - - return false; - } - - if (!exerciseList.Any(e => e.Id == Int32.Parse(idToValidate))) - { - Console.WriteLine("No exercise contains that id. Please check your exercises and try again."); - - return false; - } - - return true; - } - } -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR.sln b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR.sln deleted file mode 100644 index e607e304..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34309.116 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.K-MYR", "ExerciseTracker.K-MYR\ExerciseTracker.K-MYR.csproj", "{AE85B8B7-3456-46A0-A52D-77E6DE8EFAE7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AE85B8B7-3456-46A0-A52D-77E6DE8EFAE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AE85B8B7-3456-46A0-A52D-77E6DE8EFAE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE85B8B7-3456-46A0-A52D-77E6DE8EFAE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AE85B8B7-3456-46A0-A52D-77E6DE8EFAE7}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {4909930B-D605-4037-B226-368C3F31ABBB} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Controller/ExerciseController.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Controller/ExerciseController.cs deleted file mode 100644 index 51d978a1..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Controller/ExerciseController.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace ExerciseTracker.K_MYR; - -internal class ExerciseController : IExerciseController -{ - IExerciseService _ExerciseService; - public ExerciseController(IExerciseService exerciseService) - { - _ExerciseService = exerciseService; - } - - public IEnumerable GetAll() - { - return _ExerciseService.GetAll(); - } - - public Task AddAsync(ExerciseInsertModel exerciseEntity) - { - return _ExerciseService.AddAsync(exerciseEntity); - } - - public Task UpdateAsync(Exercise exerciseEntity) - { - return _ExerciseService.UpdateAsync(exerciseEntity); - } - public Task DeleteAsync(Exercise exerciseEntity) - { - return _ExerciseService.DeleteAsync(exerciseEntity); - } -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Controller/IExerciseController.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Controller/IExerciseController.cs deleted file mode 100644 index 8526bc27..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Controller/IExerciseController.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ExerciseTracker.K_MYR; - -internal interface IExerciseController -{ - internal IEnumerable GetAll(); - internal Task AddAsync(ExerciseInsertModel exerciseEntity); - internal Task UpdateAsync(Exercise exerciseEntity); - internal Task DeleteAsync(Exercise exerciseEntity); -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/DapperContext.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/DapperContext.cs deleted file mode 100644 index c8c90b3a..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/DapperContext.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Dapper; -using Microsoft.Data.Sqlite; -using System.Data; - -namespace ExerciseTracker.K_MYR; - -public class DapperContext -{ - private readonly string _connectionString; - public DapperContext() - { - _connectionString = "Data Source = ExerciseTracker.db"; - CreateTables(); - } - - private async void CreateTables() - { - try - { - var sql = @"CREATE TABLE IF NOT EXISTS Exercises - ( - Id INTEGER PRIMARY KEY AUTOINCREMENT, - Type String, - StartTime String, - EndTime String, - Duration INTEGER, - Comments String - )"; - - using var connection = CreateConnection(); - await connection.ExecuteAsync(sql); - } - catch (Exception ex) - { - throw new Exception($"Couldn't create database: {ex.Message}"); - } - } - - public IDbConnection CreateConnection() => new SqliteConnection(_connectionString); -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/ExerciseDbContext.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/ExerciseDbContext.cs deleted file mode 100644 index 4deab954..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/ExerciseDbContext.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.K_MYR; - -public class ExerciseDbContext : DbContext -{ - private readonly string _ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; - - public DbSet Exercises { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseSqlServer(_ConnectionString); -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/Models/Exercise.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/Models/Exercise.cs deleted file mode 100644 index 590b2978..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/Models/Exercise.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciseTracker.K_MYR; - -public class Exercise -{ - public int Id { get; set; } - public string Type { get; set; } = ""; - public DateTime StartTime { get; set; } - public DateTime EndTime { get; set; } - public long Duration { get; set; } - public string Comments { get; set; } = ""; -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/Models/ExerciseInsertModel.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/Models/ExerciseInsertModel.cs deleted file mode 100644 index 55ece600..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Data/Models/ExerciseInsertModel.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ExerciseTracker.K_MYR; - -public class ExerciseInsertModel -{ - public string Type { get; set; } = ""; - public DateTime StartTime { get; set; } - public DateTime EndTime { get; set; } - public string Comments { get; set; } = ""; -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Enums.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Enums.cs deleted file mode 100644 index 1b67cb5a..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Enums.cs +++ /dev/null @@ -1,27 +0,0 @@ -namespace ExerciseTracker.K_MYR; - -public class Enums -{ - public enum MainMenu - { - AddExercise, - UpdateExercise, - DeleteExercise, - ViewExercise, - ViewAllExercises, - Quit - } - - public enum ExerciseTypes - { - Cardio, - CrossFit, - HIIT, - MartialArts, - Stretching, - Strength, - Tabata, - Yoga, - Custom - } -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR.csproj b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR.csproj deleted file mode 100644 index d8ad90a9..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR.csproj +++ /dev/null @@ -1,30 +0,0 @@ - - - - Exe - net8.0 - ExerciseTracker.K_MYR - enable - enable - - - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - - - - - diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Helpers.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Helpers.cs deleted file mode 100644 index 49a8c0e2..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Helpers.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Spectre.Console; - -namespace ExerciseTracker.K_MYR; - -public class Helpers -{ - public static void PrintAndWait(string text) - { - AnsiConsole.Write(new Panel($"[springgreen2_1]{text}[/]").BorderColor(Color.DarkOrange3_1)); - Console.ReadKey(); - } -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Migrations/20231127180816_Initial.Designer.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Migrations/20231127180816_Initial.Designer.cs deleted file mode 100644 index 89355f88..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Migrations/20231127180816_Initial.Designer.cs +++ /dev/null @@ -1,60 +0,0 @@ -// -using System; -using ExerciseTracker.K_MYR; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.K_MYR.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - [Migration("20231127180816_Initial")] - partial class Initial - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.K_MYR.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("bigint"); - - b.Property("EndTime") - .HasColumnType("datetime2"); - - b.Property("StartTime") - .HasColumnType("datetime2"); - - b.Property("Type") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Migrations/20231127180816_Initial.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Migrations/20231127180816_Initial.cs deleted file mode 100644 index ebd66bbd..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Migrations/20231127180816_Initial.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.K_MYR.Migrations -{ - /// - public partial class Initial : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Type = table.Column(type: "nvarchar(max)", nullable: false), - StartTime = table.Column(type: "datetime2", nullable: false), - EndTime = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "bigint", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Migrations/ExerciseDbContextModelSnapshot.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Migrations/ExerciseDbContextModelSnapshot.cs deleted file mode 100644 index 08cb5af7..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Migrations/ExerciseDbContextModelSnapshot.cs +++ /dev/null @@ -1,57 +0,0 @@ -// -using System; -using ExerciseTracker.K_MYR; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.K_MYR.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - partial class ExerciseDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.K_MYR.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("bigint"); - - b.Property("EndTime") - .HasColumnType("datetime2"); - - b.Property("StartTime") - .HasColumnType("datetime2"); - - b.Property("Type") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Program.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Program.cs deleted file mode 100644 index df7a4d18..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Program.cs +++ /dev/null @@ -1,29 +0,0 @@ -using ExerciseTracker.K_MYR; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - - -HostApplicationBuilder builder = Host.CreateApplicationBuilder(args); - -//Dapper Repository with SQLite -//builder.Services.AddSingleton(); -//builder.Services.AddScoped(); - -//EF Repository with SQL Server -builder.Services.AddDbContext(); -builder.Services.AddScoped(); - -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); - -using IHost host = builder.Build(); - -//EF Repository with SQL Server -using var scope = host.Services.CreateScope(); -var db = scope.ServiceProvider.GetRequiredService(); -db.Database.Migrate(); - -var ui = host.Services.GetRequiredService(); -await ui.ShowMainMenu(); diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Repositories/ExerciseDapperRepository.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Repositories/ExerciseDapperRepository.cs deleted file mode 100644 index fcc9ddcc..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Repositories/ExerciseDapperRepository.cs +++ /dev/null @@ -1,122 +0,0 @@ -using Dapper; -using System.Data; - -namespace ExerciseTracker.K_MYR; - -internal class ExerciseDapperRepository : IExerciseRepository -{ - private readonly DapperContext _DapperContext; - - public ExerciseDapperRepository(DapperContext dapperContext) - { - _DapperContext = dapperContext; - } - - public IEnumerable GetAll() - { - try - { - var sql = "SELECT * FROM Exercises"; - - using var connection = _DapperContext.CreateConnection(); - - - var exercises = connection.Query(sql); - - return exercises; - } - catch (Exception ex) - { - throw new Exception($"Couldn't retrieve Entities: {ex.Message}"); - } - } - - public async Task AddAsync(ExerciseInsertModel exerciseEntity) - { - try - { - ArgumentNullException.ThrowIfNull(exerciseEntity); - - var sql = "INSERT INTO Exercises (Type, StartTime,EndTime,Duration,Comments) VALUES (@Type, @StartTime,@EndTime,@Duration,@Comments); SELECT last_insert_rowid()"; - - using var connection = _DapperContext.CreateConnection(); - - var parameters = new DynamicParameters(); - parameters.Add("Type", exerciseEntity.Type, DbType.String); - parameters.Add("StartTime", exerciseEntity.StartTime.ToString(), DbType.String); - parameters.Add("EndTime", exerciseEntity.EndTime.ToString(), DbType.String); - parameters.Add("Duration", (exerciseEntity.EndTime - exerciseEntity.StartTime).Ticks, DbType.Int64); - parameters.Add("Comments", exerciseEntity.Comments, DbType.String); - - var id = await connection.QuerySingleAsync(sql, parameters); - - var exercise = new Exercise() - { - Id = id, - Type = exerciseEntity.Type, - StartTime = exerciseEntity.StartTime, - EndTime = exerciseEntity.EndTime, - Duration = (exerciseEntity.EndTime - exerciseEntity.StartTime).Ticks, - Comments = exerciseEntity.Comments - }; - - return exercise; - } - catch (Exception ex) - { - throw new Exception($"{nameof(exerciseEntity)} couldn't be saved: {ex.Message}"); - } - - } - - public async Task UpdateAsync(Exercise exerciseEntity) - { - try - { - ArgumentNullException.ThrowIfNull(exerciseEntity); - - var sql = "UPDATE Exercises SET Type=@Type,StartTime=@StartTime,EndTime=@EndTime,Duration=@Duration,Comments=@Comments WHERE Id=@Id"; - - using var connection = _DapperContext.CreateConnection(); - - var parameters = new DynamicParameters(); - parameters.Add("Type", exerciseEntity.Type, DbType.String); - parameters.Add("StartTime", exerciseEntity.StartTime.ToString(), DbType.String); - parameters.Add("EndTime", exerciseEntity.EndTime.ToString(), DbType.String); - parameters.Add("Duration", exerciseEntity.Duration, DbType.Int64); - parameters.Add("Comments", exerciseEntity.Comments, DbType.String); - parameters.Add("Id", exerciseEntity.Id, DbType.Int64); - - await connection.ExecuteAsync(sql, parameters); - - return exerciseEntity; - } - catch (Exception ex) - { - throw new Exception($"{nameof(exerciseEntity)} couldn't be updated: {ex.Message}"); - } - } - - public async Task DeleteAsync(Exercise exerciseEntity) - { - try - { - ArgumentNullException.ThrowIfNull(exerciseEntity); - - var sql = "DELETE FROM Exercises WHERE Id=@Id"; - - using var connection = _DapperContext.CreateConnection(); - - var parameters = new DynamicParameters(); - parameters.Add("Id", exerciseEntity.Id, DbType.Int64); - - await connection.ExecuteAsync(sql, parameters); - - return; - } - catch (Exception ex) - { - throw new Exception($"{nameof(exerciseEntity)} couldn't be updated: {ex.Message}"); - } - } -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Repositories/ExerciseRepository.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Repositories/ExerciseRepository.cs deleted file mode 100644 index 6c8d4a48..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,81 +0,0 @@ -namespace ExerciseTracker.K_MYR; - -internal class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseDbContext _ExerciseDbContext; - - public ExerciseRepository(ExerciseDbContext exerciseDbContext) - { - _ExerciseDbContext = exerciseDbContext; - } - - public IEnumerable GetAll() - { - try - { - return _ExerciseDbContext.Set(); - } - catch (Exception ex) - { - throw new Exception($"Couldn't retrieve Entities: {ex.Message}"); - } - } - - public async Task AddAsync(ExerciseInsertModel exerciseEntity) - { - ArgumentNullException.ThrowIfNull(exerciseEntity); - - try - { - var exercise = new Exercise() - { - Type = exerciseEntity.Type, - StartTime = exerciseEntity.StartTime, - EndTime = exerciseEntity.EndTime, - Duration = (exerciseEntity.EndTime - exerciseEntity.StartTime).Ticks, - Comments = exerciseEntity.Comments - }; - - await _ExerciseDbContext.AddAsync(exercise); - await _ExerciseDbContext.SaveChangesAsync(); - - return exercise; - } - catch (Exception ex) - { - throw new Exception($"{nameof(exerciseEntity)} couldn't be saved: {ex.Message}"); - } - } - - public async Task UpdateAsync(Exercise exerciseEntity) - { - ArgumentNullException.ThrowIfNull(exerciseEntity); - - try - { - _ExerciseDbContext.Update(exerciseEntity); - await _ExerciseDbContext.SaveChangesAsync(); - - return exerciseEntity; - } - catch (Exception ex) - { - throw new Exception($"{nameof(exerciseEntity)} couldn't be updated: {ex.Message}"); - } - } - - public async Task DeleteAsync(Exercise exerciseEntity) - { - ArgumentNullException.ThrowIfNull(exerciseEntity); - - try - { - _ExerciseDbContext.Remove(exerciseEntity); - await _ExerciseDbContext.SaveChangesAsync(); - } - catch (Exception ex) - { - throw new Exception($"{nameof(exerciseEntity)} couldn't be deleted: {ex.Message}"); - } - } -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Repositories/IExerciseRepository.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Repositories/IExerciseRepository.cs deleted file mode 100644 index e6d3f1f0..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,10 +0,0 @@ - -namespace ExerciseTracker.K_MYR; - -internal interface IExerciseRepository -{ - IEnumerable GetAll(); - Task AddAsync(ExerciseInsertModel exerciseEntity); - Task UpdateAsync(Exercise exerciseEntity); - Task DeleteAsync(Exercise exerciseEntity); -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Services/ExerciseService.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Services/ExerciseService.cs deleted file mode 100644 index b97f611d..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Services/ExerciseService.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace ExerciseTracker.K_MYR; - -internal class ExerciseService : IExerciseService -{ - private IExerciseRepository _ExerciseRepository; - public ExerciseService(IExerciseRepository exerciseRepository) - { - _ExerciseRepository = exerciseRepository; - } - public IEnumerable GetAll() - { - return _ExerciseRepository.GetAll(); - } - - public Task AddAsync(ExerciseInsertModel exerciseEntity) - { - return _ExerciseRepository.AddAsync(exerciseEntity); - } - - public Task UpdateAsync(Exercise exerciseEntity) - { - return _ExerciseRepository.UpdateAsync(exerciseEntity); - } - public Task DeleteAsync(Exercise exerciseEntity) - { - return _ExerciseRepository.DeleteAsync(exerciseEntity); - } -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Services/IExerciseService.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Services/IExerciseService.cs deleted file mode 100644 index 09683c25..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/Services/IExerciseService.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ExerciseTracker.K_MYR; - -internal interface IExerciseService -{ - internal IEnumerable GetAll(); - internal Task AddAsync(ExerciseInsertModel exerciseEntity); - internal Task UpdateAsync(Exercise exerciseEntity); - internal Task DeleteAsync(Exercise exerciseEntity); -} \ No newline at end of file diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/UserInput.cs b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/UserInput.cs deleted file mode 100644 index bf0232de..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/UserInput.cs +++ /dev/null @@ -1,311 +0,0 @@ -using Spectre.Console; -using System.Globalization; -using System.Text; -using static ExerciseTracker.K_MYR.Enums; - -namespace ExerciseTracker.K_MYR; - -internal class UserInput -{ - private readonly IExerciseController _ExerciseController; - public UserInput(IExerciseController exerciseController) - { - _ExerciseController = exerciseController; - } - - public async Task ShowMainMenu() - { - while (true) - { - Console.Clear(); - AnsiConsole.Write(new Panel("[springgreen2_1]Exercise Tracker[/]").BorderColor(Color.DarkOrange3_1)); - var choice = AnsiConsole.Prompt(new SelectionPrompt() - .AddChoices(Enum.GetValues(typeof(MainMenu)).Cast())); - - switch (choice) - { - case MainMenu.AddExercise: - await AddExercise(); - break; - case MainMenu.UpdateExercise: - await UpdateExercise(); - break; - case MainMenu.DeleteExercise: - await DeleteExercise(); - break; - case MainMenu.ViewExercise: - ShowExercise(); - break; - case MainMenu.ViewAllExercises: - ShowAllExercises(); - break; - case MainMenu.Quit: - Console.Clear(); - AnsiConsole.Write(new Panel("[springgreen2_1]GOODBYE[/]").BorderColor(Color.DarkOrange3_1)); - Environment.Exit(0); - break; - } - } - } - - private async Task AddExercise() - { - Console.Clear(); - - (var startTime, var endTime) = GetExerciseTimes(); - var exerciseType = GetExerciseType(); - - Console.Write("Comments: "); - var comments = Console.ReadLine() ?? ""; - - try - { - await _ExerciseController.AddAsync(new ExerciseInsertModel - { - Type = exerciseType, - StartTime = startTime, - EndTime = endTime, - Comments = comments - }); - } - catch (Exception ex) - { - AnsiConsole.Write(new Panel($"An Error Occured Saving The Entity: {ex.Message}")); - } - } - - private async Task UpdateExercise() - { - Console.Clear(); - - var training = GetExercise(); - - if (training is not null) - { - if (AnsiConsole.Confirm("Update Exercise Times?", false)) - { - (training.StartTime, training.EndTime) = GetExerciseTimes(); - training.Duration = (training.EndTime - training.StartTime).Ticks; - } - - if (AnsiConsole.Confirm("Update Exercise Type?", false)) - training.Type = GetExerciseType(); - - if (AnsiConsole.Confirm("Update Comments?", false)) - { - Console.Write("Comments: "); - training.Comments = Console.ReadLine() ?? ""; - } - - try - { - await _ExerciseController.UpdateAsync(training); - - } - catch (Exception ex) - { - AnsiConsole.Write(new Panel($"An Error Occured Updating The Entity: {ex.Message}")); - } - } - } - - private async Task DeleteExercise() - { - Console.Clear(); - - var training = GetExercise(); - - if (training is not null) - { - try - { - await _ExerciseController.DeleteAsync(training); - } - catch (Exception ex) - { - AnsiConsole.Write(new Panel($"An Error Occured Deleting The Entity: {ex.Message}")); - } - } - } - - private void ShowAllExercises() - { - try - { - Console.Clear(); - PrintAllExercises(_ExerciseController.GetAll().OrderBy(e => e.StartTime).ToArray()); - Helpers.PrintAndWait("Press Any Key To Return"); - } - catch (Exception ex) - { - AnsiConsole.Write(new Panel($"An Error Occured Getting The Entities: {ex.Message}")); - } - } - - private void ShowExercise() - { - try - { - var exercise = GetExercise(); - - if (exercise is null) - return; - - var table = new Table() - .BorderColor(Color.DarkOrange3_1) - .AddColumns("[springgreen2_1]Type[/]", "[springgreen2_1]Start Time[/]", "[springgreen2_1]End Time[/]", - "[springgreen2_1]Duration[/]"); - - var duration = TimeSpan.FromTicks(exercise.Duration); - - table.AddRow(exercise.Type, - exercise.StartTime.ToString("dd/MM/yyyy HH:mm"), - exercise.EndTime.ToString("dd/MM/yyyy HH:mm"), - string.Format("{0} h {1} m", duration.Hours + duration.Days * 24, duration.Minutes)); - - var commentsPanel = new Panel(exercise.Comments) - .Header("[springgreen2_1]Comments[/]") - .BorderColor(Color.DarkOrange3_1); - - Console.Clear(); - AnsiConsole.Write(new Panel(new Rows(table, commentsPanel)) - .BorderColor(Color.DarkOrange3_1)); - Helpers.PrintAndWait("Press Any Key To Return"); - } - catch (Exception ex) - { - AnsiConsole.Write(new Panel($"An Error Occured Getting The Entity: {ex.Message}")); - } - } - - private string GetExerciseType() - { - string type; - - var input = AnsiConsole.Prompt(new SelectionPrompt() - .Title("Choose A Exercise Type: ") - .AddChoices(Enum.GetValues(typeof(ExerciseTypes)).Cast())); - - if (input == ExerciseTypes.Custom) - type = AnsiConsole.Ask("Please Enter The Exercise Type:"); - else - type = input.ToString(); - - return type; - } - - private DateTime GetDate(string text, string format = "dd-mm-yy hh:mm", string preset = "") - { - var sb = new StringBuilder(); - bool enterPressed; - ConsoleKeyInfo key; - DateTime date; - - do - { - enterPressed = false; - - Console.Write($"{text}: "); - Console.Write(format); - Console.CursorLeft -= format.Length; - Console.Write(preset); - - sb.Clear(); - sb.Append(preset); - - while (!enterPressed) - { - key = Console.ReadKey(true); - - switch (key.Key) - { - case ConsoleKey.Backspace: - if (sb.Length > 0) - { - sb.Remove(sb.Length - 1, 1); - Console.CursorLeft -= 1; - Console.Write(format[sb.Length]); - Console.CursorLeft -= 1; - } - break; - case ConsoleKey.Enter: - if (sb.Length == format.Length) - { - enterPressed = true; - Console.Write('\n'); - } - break; - default: - if (sb.Length < format.Length && !char.IsControl(key.KeyChar)) - { - sb.Append(key.KeyChar); - AnsiConsole.Write($"{key.KeyChar}"); - } - break; - } - } - } while (!DateTime.TryParseExact(sb.ToString().Trim(), "dd-MM-yy HH:mm", new CultureInfo("de-DE"), DateTimeStyles.None, out date)); - - return date; - } - - private (DateTime, DateTime) GetExerciseTimes() - { - var startTime = GetDate("Training Start Time"); - var endTime = GetDate("Training End Time", preset: startTime.ToString("dd-MM-yy ")); - - while (endTime <= startTime) - { - AnsiConsole.Write(new Panel("[red]The Shift End Time Cannot Be Or Be Before The Shift Start Time[/]").BorderColor(Color.DarkOrange3_1)); - startTime = GetDate("Shift Start Time"); - endTime = GetDate("Shift End Time", preset: startTime.ToString("dd-MM-yy ")); - } - - return (startTime, endTime); - } - - private Exercise? GetExercise() - { - var trainings = _ExerciseController.GetAll().OrderBy(e => e.StartTime).ToArray(); - - PrintAllExercises(trainings); - - var id = AnsiConsole.Ask("Please enter the Id or 0 to return: "); - - while (id < 0 || id > trainings.Length) - { - AnsiConsole.Write(new Markup("[red]Invalid Input[/]\n")); - id = AnsiConsole.Ask("Please enter the Id or 0 to return: "); - } - - if (id == 0) - return null; - - return trainings[id - 1]; - } - - private void PrintAllExercises(Exercise[] data) - { - var table = new Table() - .BorderColor(Color.DarkOrange3_1) - .AddColumns("[springgreen2_1]ID[/]", "[springgreen2_1]Type[/]", "[springgreen2_1]Start Time[/]", "[springgreen2_1]End Time[/]", - "[springgreen2_1]Duration[/]", "[springgreen2_1]Comments[/]"); - - var exercises = data.AsSpan(); - - TimeSpan duration; - - for (int i = 0; i < exercises.Length; i++) - { - duration = TimeSpan.FromTicks(exercises[i].Duration); - table.AddRow((i + 1).ToString(), - exercises[i].Type, - exercises[i].StartTime.ToString("dd/MM/yyyy HH:mm"), - exercises[i].EndTime.ToString("dd/MM/yyyy HH:mm"), - string.Format("{0} h {1} m", duration.Hours + duration.Days * 24, duration.Minutes), - exercises[i].Comments.Length > 15 ? exercises[i].Comments[..12] + "..." : exercises[i].Comments); - } - - AnsiConsole.Write(table); - } -} diff --git a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/app.config b/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/app.config deleted file mode 100644 index acf50b52..00000000 --- a/ExerciseTracker.K-MYR/ExerciseTracker.K-MYR/app.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - diff --git a/ExerciseTracker.ManuelE-Osorio/.gitignore b/ExerciseTracker.ManuelE-Osorio/.gitignore deleted file mode 100644 index dd449725..00000000 --- a/ExerciseTracker.ManuelE-Osorio/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.md diff --git a/ExerciseTracker.ManuelE-Osorio/.vscode/settings.json b/ExerciseTracker.ManuelE-Osorio/.vscode/settings.json deleted file mode 100644 index fd6cf492..00000000 --- a/ExerciseTracker.ManuelE-Osorio/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "dotnet.defaultSolution": "ExerciseTracker.sln" -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker.sln b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker.sln deleted file mode 100644 index 0dec81a5..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker", "ExerciseTracker\ExerciseTracker.csproj", "{8D61D9B9-0E43-466D-A5F9-13B0EC692137}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8D61D9B9-0E43-466D-A5F9-13B0EC692137}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D61D9B9-0E43-466D-A5F9-13B0EC692137}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8D61D9B9-0E43-466D-A5F9-13B0EC692137}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8D61D9B9-0E43-466D-A5F9-13B0EC692137}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Controllers/InputController.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Controllers/InputController.cs deleted file mode 100644 index d190b1b4..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Controllers/InputController.cs +++ /dev/null @@ -1,179 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.UserInterface; -using ExerciseTracker.Validation; - -namespace ExerciseTracker.Controllers; - -public class InputController -{ - public static int? GetId(List? exerciseList) where T : class, IExerciseModel - { - string idString = ""; - string? errorMessage = null; - ConsoleKeyInfo pressedKey; - - while(true) - { - if(exerciseList != null || exerciseList?.Count > 0) - MainUI.DisplayExerciseList(exerciseList); - MainUI.DisplayEnterId(errorMessage); - Console.Write(idString); - pressedKey = Console.ReadKey(); - - switch(pressedKey.Key) - { - case(ConsoleKey.Enter): - errorMessage = InputValidation.IdValidation(idString, exerciseList ?? [], out int id); - if(errorMessage == null) - return id; - break; - - case(ConsoleKey.Backspace): - if(idString.Length > 0) - idString = idString.Remove(idString.Length-1); - break; - - default: - idString += pressedKey.KeyChar.ToString(); - break; - - case(ConsoleKey.Escape): - return null; - } - } - } - - public static DateTime? GetDate(DateOptions dateType, ConfirmationOptions confirmationType) - { - string dateString = ""; - string? errorMessage = null; - ConsoleKeyInfo pressedKey; - - while(true) - { - MainUI.DisplayEnterDate(dateType, confirmationType, errorMessage); - Console.Write(dateString); - pressedKey = Console.ReadKey(); - - switch(pressedKey.Key) - { - case(ConsoleKey.Enter): - errorMessage = InputValidation.DateValidation(dateString, out DateTime date); - if(errorMessage == null) - return date; - - break; - - case(ConsoleKey.Backspace): - if(dateString.Length > 0) - dateString = dateString.Remove(dateString.Length-1); - break; - - default: - dateString += pressedKey.KeyChar.ToString(); - break; - - case(ConsoleKey.Escape): - return null; - } - } - } - - public static DateTime? GetDate(DateOptions dateType, ConfirmationOptions confirmationType, DateTime? existingDate) - { - string dateString = ""; - string? errorMessage = null; - ConsoleKeyInfo pressedKey; - - while(true) - { - MainUI.DisplayEnterDate(dateType, confirmationType, errorMessage); - Console.Write(dateString); - pressedKey = Console.ReadKey(); - - switch(pressedKey.Key) - { - case(ConsoleKey.Enter): - errorMessage = InputValidation.DateValidation(dateString, existingDate, dateType, out DateTime date); - if(errorMessage == null) - return date; - break; - - case(ConsoleKey.Backspace): - if(dateString.Length > 0) - dateString = dateString.Remove(dateString.Length-1); - break; - - default: - dateString += pressedKey.KeyChar.ToString(); - break; - - case(ConsoleKey.Escape): - return null; - } - } - } - - public static string? GetComments(ConfirmationOptions confirmationType) - { - string? comments = ""; - string? errorMessage = null; - ConsoleKeyInfo pressedKey; - - while(true) - { - MainUI.DisplayEnterComments(confirmationType, errorMessage); - Console.Write(comments); - pressedKey = Console.ReadKey(); - - switch(pressedKey.Key) - { - case(ConsoleKey.Enter): - errorMessage = InputValidation.CommentsValidation(comments); - if(errorMessage == null) - return comments; - break; - - case(ConsoleKey.Backspace): - if(comments.Length > 0) - comments = comments.Remove(comments.Length-1); - break; - - default: - comments += pressedKey.KeyChar.ToString(); - break; - - case(ConsoleKey.Escape): - return null; - } - } - } - - public static T? GetExercise(ConfirmationOptions confirmationType) where T : class, IExerciseModel, new() - { - var startDate = GetDate(DateOptions.start, confirmationType); - if(startDate == null) - return default; - - var endDate = GetDate(DateOptions.end, confirmationType, startDate); - if(endDate == null) - return default; - - var comments = GetComments(confirmationType); - if(comments == null) - return default; - - var inputExercise = new T{StartDate = (DateTime)startDate, - EndDate = (DateTime)endDate, Duration = (TimeSpan)(endDate - startDate), Comments = comments}; - return inputExercise; - } - - public static bool GetConfirmation(ConfirmationOptions confirmationType) - { - MainUI.DisplayConfirmationPromt(confirmationType); - var confirmation = Console.ReadLine() ?? ""; - if(confirmation.Equals("y", StringComparison.InvariantCultureIgnoreCase)) - return true; - return false; - } -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Controllers/MenuController.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Controllers/MenuController.cs deleted file mode 100644 index 92e23174..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Controllers/MenuController.cs +++ /dev/null @@ -1,115 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.UserInterface; - -namespace ExerciseTracker.Controllers; - -public class MenuController(RunningController runningController) -{ - public RunningController RunningControllerInstance = runningController; - - public void Start() - { - MainUI.DisplayWelcomeMessage(); - MainMenu(); - } - - public void MainMenu() - { - ConsoleKey? pressedKey = null; - bool runMainMenu = true; - string? errorMessage = null; - do - { - if(pressedKey != ConsoleKey.D1) - MainUI.ClearUI(); - MainUI.DisplayMainMenu(errorMessage); - pressedKey = Console.ReadKey(true).Key; - switch (pressedKey) - { - case(ConsoleKey.D1): - errorMessage = ListExerciseMenu(); - break; - case(ConsoleKey.D2): - if(InsertExerciseMenu()) - MainUI.DisplaySuccessMessage(); - errorMessage = null; - break; - case(ConsoleKey.D3): - errorMessage = UpdateMenu(); - break; - case(ConsoleKey.D4): - errorMessage = DeleteMenu(); - break; - case(ConsoleKey.Escape): - case(ConsoleKey.Backspace): - runMainMenu = false; - break; - } - } - while(runMainMenu); - MainUI.DisplayExitMessage(); - } - - public string? ListExerciseMenu() - { - var exerciseList = RunningControllerInstance.GetAll(); - if (exerciseList == null || exerciseList.Count == 0) - { - MainUI.ClearUI(); - return "The log is empty"; - } - else - MainUI.DisplayExerciseList(exerciseList); - return null; - } - - public bool InsertExerciseMenu() - { - return RunningControllerInstance.Insert(); - } - - public string? UpdateMenu() - { - var exerciseToUpdate = RunningControllerInstance.GetById(); - if(exerciseToUpdate == null) - return "The log is empty"; - - bool runUpdateMenu = true; - ConsoleKey pressedKey; - - do - { - MainUI.DisplayModifyMenu(exerciseToUpdate); - pressedKey = Console.ReadKey(true).Key; - switch(pressedKey) - { - case(ConsoleKey.D1): - case(ConsoleKey.D2): - case(ConsoleKey.D3): - if(RunningControllerInstance.Update((UpdateOptions) (Convert.ToInt32(pressedKey) - 49), - exerciseToUpdate)) - MainUI.DisplaySuccessMessage(); - break; - - case(ConsoleKey.Backspace): - case(ConsoleKey.Escape): - runUpdateMenu = false; - break; - } - } - while(runUpdateMenu); - return null; - } - - public string? DeleteMenu() - { - var exerciseToDelete = RunningControllerInstance.GetById(); - if(exerciseToDelete == null) - return "The log is empty"; - - if(InputController.GetConfirmation(ConfirmationOptions.delete) == true) - if(RunningControllerInstance.Delete(exerciseToDelete)) - MainUI.DisplaySuccessMessage(); - return null; - } -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Controllers/RunningController.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Controllers/RunningController.cs deleted file mode 100644 index 54b21603..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Controllers/RunningController.cs +++ /dev/null @@ -1,94 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.Services; -using ExerciseTracker.UserInterface; - -namespace ExerciseTracker.Controllers; - -public class RunningController(IExerciseService runningService) -{ - private readonly IExerciseService RunningServiceInstance = runningService; - - public bool TryConnection() - { - try - { - return RunningServiceInstance.TryConnection(); - } - catch - { - throw; - } - } - - public List? GetAll() - { - MainUI.DisplayLoadingMessage(); - return RunningServiceInstance.GetAll()?.ToList(); - } - - public Running? GetById() - { - var exerciseList = GetAll(); - if(exerciseList is null || exerciseList.Count == 0) - return null; - - var id = InputController.GetId(exerciseList); - if(id is null) - return null; - - MainUI.DisplayLoadingMessage(); - return RunningServiceInstance.GetById((int)id); - } - - public bool Insert() - { - var exercise = InputController.GetExercise(ConfirmationOptions.add); - if (exercise is null) - return false; - MainUI.DisplayLoadingMessage(); - return RunningServiceInstance.Insert(exercise); - } - - public bool Delete(Running runningToDelete) - { - MainUI.DisplayLoadingMessage(); - return RunningServiceInstance.Delete(runningToDelete); - } - - public bool Update(UpdateOptions updateOption, Running runningToUpdate) - { - DateTime? dateToUpdate; - string? commentsToUpdate; - - switch(updateOption) - { - case(UpdateOptions.startdate): - dateToUpdate = InputController.GetDate(DateOptions.start, ConfirmationOptions.modify, - runningToUpdate.EndDate); - if(dateToUpdate == null) - return false; - runningToUpdate.StartDate = (DateTime) dateToUpdate; - runningToUpdate.Duration = runningToUpdate.EndDate - runningToUpdate.StartDate; - break; - - case(UpdateOptions.enddate): - dateToUpdate = InputController.GetDate(DateOptions.end, ConfirmationOptions.modify, - runningToUpdate.StartDate); - if(dateToUpdate == null) - return false; - runningToUpdate.EndDate = (DateTime) dateToUpdate; - runningToUpdate.Duration = runningToUpdate.EndDate - runningToUpdate.StartDate; - break; - - case(UpdateOptions.comments): - commentsToUpdate = InputController.GetComments(ConfirmationOptions.modify); - if(commentsToUpdate == null) - return false; - runningToUpdate.Comments = commentsToUpdate; - break; - - } - MainUI.DisplayLoadingMessage(); - return RunningServiceInstance.Update(runningToUpdate); - } -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/ExerciseTracker.csproj b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/ExerciseTracker.csproj deleted file mode 100644 index 8a883b4a..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/ExerciseTracker.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - - Always - - - - - diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/ConfirmationOptions.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/ConfirmationOptions.cs deleted file mode 100644 index 800c40d9..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/ConfirmationOptions.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace ExerciseTracker.Models; - -public enum ConfirmationOptions -{ - delete, - add, - modify -} diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/DateOptions.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/DateOptions.cs deleted file mode 100644 index abd9ca3a..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/DateOptions.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace ExerciseTracker.Models; - -public enum DateOptions -{ - start, - end -} diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/ExerciseTrackerContext.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/ExerciseTrackerContext.cs deleted file mode 100644 index 430e683c..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/ExerciseTrackerContext.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -namespace ExerciseTracker.Models; -public class ExerciseTrackerContext(DbContextOptions options) : DbContext(options) -{ - public const int CommentsLength = 200; - - public DbSet RunningExercise {get; set;} - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity() - .HasKey(p => p.Id); - - modelBuilder.Entity() - .Property(p => p.Id) - .UseIdentityColumn(); - - modelBuilder.Entity() - .Property( p => p.Duration) - .HasConversion(new TimeSpanToTicksConverter()); - - modelBuilder.Entity() - .Property(p => p.Comments) - .HasMaxLength(CommentsLength) - .IsUnicode(true); - } -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/IExerciseModel.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/IExerciseModel.cs deleted file mode 100644 index dfe8b5e7..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/IExerciseModel.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.Models; - -public interface IExerciseModel -{ - public int Id {get; set;} - public DateTime StartDate {get; set;} - public DateTime EndDate {get; set;} - public TimeSpan Duration {get; set;} - public string? Comments {get; set;} -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/Running.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/Running.cs deleted file mode 100644 index e0b3a47f..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/Running.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.Models; - -public class Running: IExerciseModel -{ - public int Id {get; set;} - public DateTime StartDate {get; set;} - public DateTime EndDate {get; set;} - public TimeSpan Duration {get; set;} - public string? Comments {get; set;} -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/UpdateOptions.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/UpdateOptions.cs deleted file mode 100644 index e796b14f..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Models/UpdateOptions.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace ExerciseTracker.Models; - -public enum UpdateOptions -{ - startdate, - enddate, - comments -} diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Program.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Program.cs deleted file mode 100644 index 15bbee04..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Program.cs +++ /dev/null @@ -1,27 +0,0 @@ -using ExerciseTracker.Controllers; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.DependencyInjection; - -namespace ExerciseTracker; - -public class ExerciseTracker -{ - public static void Main() - { - IHost? app; - try - { - app = StartUp.AppInit(); - } - catch(Exception e) - { - Console.WriteLine(e.Message); - Thread.Sleep(4000); - return; - } - - var menu = new MenuController(app.Services.CreateScope() - .ServiceProvider.GetRequiredService()); - menu.Start(); - } -} diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Repositories/IExerciseRepository.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Repositories/IExerciseRepository.cs deleted file mode 100644 index 0a1e49fa..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciseTracker.Repositories; - -public interface IExerciseRepository where T : class -{ - bool TryConnection(); - bool Insert(T model); - IEnumerable? GetAll(); - T? GetById(int id); - bool Update(T model); - bool Delete(T model); -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Repositories/RunningRepository.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Repositories/RunningRepository.cs deleted file mode 100644 index 0b65522b..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Repositories/RunningRepository.cs +++ /dev/null @@ -1,64 +0,0 @@ -using ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.Repositories; - -public class RunningRepository(ExerciseTrackerContext dbContext): IExerciseRepository -{ - private readonly ExerciseTrackerContext DbContext = dbContext; - - public bool TryConnection() - { - try - { - DbContext.Database.EnsureCreated(); - DbContext.Database.OpenConnection(); - DbContext.Database.CanConnect(); - return true; - } - catch - { - throw new Exception("The app cannot connect to the Database. "+ - "Please check your Connection String configuration in your appsettings.json"); - } - } - - public bool Insert(Running model) - { - DbContext.RunningExercise.Add(model); - DbContext.SaveChanges(); - return true; - } - - public IEnumerable? GetAll() - { - return DbContext.RunningExercise.AsEnumerable(); - } - - public Running? GetById(int id) - { - return DbContext.RunningExercise.Find(id); - } - - public bool Update(Running model) - { - var runningToUpdate = GetById(model.Id); - if ( runningToUpdate == null) - return false; - - DbContext.Entry(runningToUpdate).CurrentValues.SetValues(model); - DbContext.SaveChanges(); - return true; - } - - public bool Delete(Running model) - { - var runningToDelete = DbContext.RunningExercise.Where(p => p.Id == model.Id).First(); - if ( runningToDelete == null) - return false; - - DbContext.Remove(runningToDelete); - DbContext.SaveChanges(); - return true; - } -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Services/IExerciseService.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Services/IExerciseService.cs deleted file mode 100644 index 5ea69846..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Services/IExerciseService.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciseTracker.Services; - -public interface IExerciseService where T : class -{ - bool TryConnection(); - IEnumerable? GetAll(); - T? GetById(int id); - bool Insert(T model); - bool Update(T model); - bool Delete(T model); -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Services/RunningService.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Services/RunningService.cs deleted file mode 100644 index 9a5a9278..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Services/RunningService.cs +++ /dev/null @@ -1,46 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.Repositories; - -namespace ExerciseTracker.Services; - -public class RunningService(IExerciseRepository runningRepository) : IExerciseService -{ - private readonly IExerciseRepository RunningRepositoryInstance = runningRepository; - - public bool TryConnection() - { - try - { - return RunningRepositoryInstance.TryConnection(); - } - catch - { - throw; - } - } - - public IEnumerable? GetAll() - { - return RunningRepositoryInstance.GetAll(); - } - - public Running? GetById(int id) - { - return RunningRepositoryInstance.GetById(id); - } - - public bool Insert(Running modelToInsert) - { - return RunningRepositoryInstance.Insert(modelToInsert); - } - - public bool Update(Running modelToUpdate) - { - return RunningRepositoryInstance.Update(modelToUpdate); - } - - public bool Delete(Running modelToDelete) - { - return RunningRepositoryInstance.Delete(modelToDelete); - } -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Statup.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Statup.cs deleted file mode 100644 index 3b777f2b..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Statup.cs +++ /dev/null @@ -1,40 +0,0 @@ -using ExerciseTracker.Controllers; -using ExerciseTracker.Models; -using ExerciseTracker.Repositories; -using ExerciseTracker.Services; -using ExerciseTracker.UserInterface; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace ExerciseTracker; - -public class StartUp -{ - public static IHost AppInit() - { - MainUI.DisplayLoadingMessage(); - - var appBuilder = new HostBuilder(); - appBuilder.ConfigureAppConfiguration(p => - p.AddJsonFile("appsettings.json").Build()); - - appBuilder.ConfigureServices((host, services) => - { - services.AddDbContext(options => options - .UseSqlServer(host.Configuration.GetConnectionString("DefaultConnection"))); - services.AddScoped, RunningRepository>(); - services.AddScoped, RunningService>(); - services.AddScoped(); - }); - - var app = appBuilder.Build(); - var exerciseController = app.Services.CreateScope() - .ServiceProvider.GetRequiredService(); - - exerciseController.TryConnection(); - - return app; - } -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/UserInterface/MainUI.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/UserInterface/MainUI.cs deleted file mode 100644 index 52870294..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/UserInterface/MainUI.cs +++ /dev/null @@ -1,97 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.UserInterface; - -public class MainUI -{ - public static void DisplayWelcomeMessage() - { - Console.WriteLine("Welcome to the exercise tracker app!"); - Thread.Sleep(2000); - } - - public static void ClearUI() - { - Console.Clear(); - } - - public static void DisplayMainMenu(string? errorMessage) - { - if(errorMessage != null) - Console.WriteLine($"Error: {errorMessage}"); - Console.WriteLine("Please select one of the following options or press Esc to exit the app:\n"+ - "1) Display all running logs\n"+ - "2) Insert a new running log\n"+ - "3) Update an existing running log\n"+ - "4) Delete a running log\n"); - } - - public static void DisplayExerciseList(List? exerciseList) where T : class - { - Console.Clear(); - TableUI.PrintTable(exerciseList); - } - - public static void DisplayConfirmationPromt(ConfirmationOptions confirmationOption) - { - Console.Clear(); - Console.WriteLine($"Do you want to {confirmationOption} the selected log? [y/N]"); - } - - public static void DisplayModifyMenu(T exerciseToModify) where T : IExerciseModel - { - Console.Clear(); - Console.WriteLine("Select the field you want to modify or press ESC to return:"); - Console.WriteLine($"1) Start Date: {exerciseToModify.StartDate}\n"+ - $"2) End Date: {exerciseToModify.EndDate}\n"+ - $"3) Comments: {exerciseToModify.Comments}"); - } - - public static void DisplayEnterId(string? errorMessage = null) - { - if(errorMessage != null) - Console.WriteLine($"Error: {errorMessage}"); - - Console.WriteLine("Please enter a log ID or press ESC to return:"); - } - - public static void DisplayEnterDate(DateOptions dateType, ConfirmationOptions confirmationType, string? errorMessage = null) - { - Console.Clear(); - if(errorMessage != null) - Console.WriteLine($"Error: {errorMessage}"); - - Console.WriteLine($"Please enter a {dateType} date to {confirmationType} with the following format yyyy/MM/dd HH:mm "+ - "or press ESC to return:\n"); - } - - public static void DisplayExitMessage() - { - Console.Clear(); - Console.WriteLine("Thank you for using the exercise tracker app!"); - Thread.Sleep(2000); - } - - public static void DisplaySuccessMessage() - { - Console.Clear(); - Console.WriteLine("Operation successful!"); - Thread.Sleep(2000); - } - - public static void DisplayEnterComments(ConfirmationOptions confirmationType, string? errorMessage) - { - Console.Clear(); - if(errorMessage != null) - Console.WriteLine($"Error: {errorMessage}"); - - Console.WriteLine($"Please enter the comments (within {ExerciseTrackerContext.CommentsLength} characters) " + - $"to the exercise log to {confirmationType} or press ESC to return:\n"); - } - - public static void DisplayLoadingMessage() - { - Console.Clear(); - Console.WriteLine("Loading ..."); - } -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/UserInterface/TableUI.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/UserInterface/TableUI.cs deleted file mode 100644 index e99c5398..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/UserInterface/TableUI.cs +++ /dev/null @@ -1,30 +0,0 @@ -using ConsoleTableExt; - -namespace ExerciseTracker.UserInterface; -public class TableUI -{ - public static void PrintTable(List? tableToUI, string? title = "") where T: class - { - ConsoleTableBuilder - .From(tableToUI) - .WithTitle(title) - .WithCharMapDefinition( - CharMapDefinition.FramePipDefinition, - new Dictionary { - {HeaderCharMapPositions.TopLeft, '╒' }, - {HeaderCharMapPositions.TopCenter, '╤' }, - {HeaderCharMapPositions.TopRight, '╕' }, - {HeaderCharMapPositions.BottomLeft, '╞' }, - {HeaderCharMapPositions.BottomCenter, '╪' }, - {HeaderCharMapPositions.BottomRight, '╡' }, - {HeaderCharMapPositions.BorderTop, '═' }, - {HeaderCharMapPositions.BorderRight, '│' }, - {HeaderCharMapPositions.BorderBottom, '═' }, - {HeaderCharMapPositions.BorderLeft, '│' }, - {HeaderCharMapPositions.Divider, '│' }, - }) - .ExportAndWriteLine(TableAligntment.Center); - - Console.WriteLine(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Validation/InputValidation.cs b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Validation/InputValidation.cs deleted file mode 100644 index 1946414c..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/Validation/InputValidation.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System.Globalization; -using ExerciseTracker.Models; - -namespace ExerciseTracker.Validation; - -public class InputValidation -{ - public static string? IntValidation(string input, out int inputAsInt) - { - if(int.TryParse(input, out inputAsInt)) - return null; - else - return "Please enter a valid number."; - } - - public static string? IdValidation(string input, List exerciseList, out int id) where T: IExerciseModel - { - var errorMessage = IntValidation(input, out id); - var idToMatch = id; - if(errorMessage == null) - { - if(exerciseList.Exists(p => p.Id == idToMatch)) - return null; - else - return "The Id you entered does not exists"; - } - return errorMessage; - } - - public static string? IntValidation(string input, int max, int min, out int inputAsInt) - { - if(int.TryParse(input, out inputAsInt)) - { - if(inputAsInt >= min && inputAsInt <= max) - return null; - } - return $"Please enter a valid number within {min} and {max}."; - } - - public static string? DateValidation(string input, out DateTime date) - { - if(DateTime.TryParseExact(input, "yyyy/MM/dd HH:mm", - CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) - return null; - else - return "Please enter a valid date with the specified format."; - } - - public static string? DateValidation(string input, DateTime? existingDate, DateOptions dateType, out DateTime date) - { - if(DateTime.TryParseExact(input, "yyyy/MM/dd HH:mm", - CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) - { - switch(dateType) - { - case(DateOptions.start): - if (date < existingDate) - return null; - else - return "The start date is after the end date."; - case(DateOptions.end): - if (date > existingDate) - return null; - else - return "The end date is before the start date."; - } - } - return "Please enter a valid date with the specified format."; - } - - public static string? CommentsValidation(string comments) - { - if(comments.Length <= ExerciseTrackerContext.CommentsLength) - return null; - return "The length of the comments exceeds the maximum characters."; - } -} \ No newline at end of file diff --git a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/appsettings.json b/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/appsettings.json deleted file mode 100644 index 7aaf96a4..00000000 --- a/ExerciseTracker.ManuelE-Osorio/ExerciseTracker/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Settings": { - - }, - "ConnectionStrings": { - "DefaultConnection": "Data Source=localhost;Database='ExerciseTrackerProgram';Integrated Security=false;Encrypt=false;MultipleActiveResultSets=true;User ID=sa;Password=Root1234" - } -} - \ No newline at end of file diff --git a/ExerciseTracker.PaulWSaltzman/.gitattributes b/ExerciseTracker.PaulWSaltzman/.gitattributes deleted file mode 100644 index 1ff0c423..00000000 --- a/ExerciseTracker.PaulWSaltzman/.gitattributes +++ /dev/null @@ -1,63 +0,0 @@ -############################################################################### -# Set default behavior to automatically normalize line endings. -############################################################################### -* text=auto - -############################################################################### -# Set default behavior for command prompt diff. -# -# This is need for earlier builds of msysgit that does not have it on by -# default for csharp files. -# Note: This is only used by command line -############################################################################### -#*.cs diff=csharp - -############################################################################### -# Set the merge driver for project and solution files -# -# Merging from the command prompt will add diff markers to the files if there -# are conflicts (Merging from VS is not affected by the settings below, in VS -# the diff markers are never inserted). Diff markers may cause the following -# file extensions to fail to load in VS. An alternative would be to treat -# these files as binary and thus will always conflict and require user -# intervention with every merge. To do so, just uncomment the entries below -############################################################################### -#*.sln merge=binary -#*.csproj merge=binary -#*.vbproj merge=binary -#*.vcxproj merge=binary -#*.vcproj merge=binary -#*.dbproj merge=binary -#*.fsproj merge=binary -#*.lsproj merge=binary -#*.wixproj merge=binary -#*.modelproj merge=binary -#*.sqlproj merge=binary -#*.wwaproj merge=binary - -############################################################################### -# behavior for image files -# -# image files are treated as binary by default. -############################################################################### -#*.jpg binary -#*.png binary -#*.gif binary - -############################################################################### -# diff behavior for common document formats -# -# Convert binary document formats to text before diffing them. This feature -# is only available from the command line. Turn it on by uncommenting the -# entries below. -############################################################################### -#*.doc diff=astextplain -#*.DOC diff=astextplain -#*.docx diff=astextplain -#*.DOCX diff=astextplain -#*.dot diff=astextplain -#*.DOT diff=astextplain -#*.pdf diff=astextplain -#*.PDF diff=astextplain -#*.rtf diff=astextplain -#*.RTF diff=astextplain diff --git a/ExerciseTracker.PaulWSaltzman/.gitignore b/ExerciseTracker.PaulWSaltzman/.gitignore deleted file mode 100644 index 9491a2fd..00000000 --- a/ExerciseTracker.PaulWSaltzman/.gitignore +++ /dev/null @@ -1,363 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Oo]ut/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd \ No newline at end of file diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker.sln b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker.sln deleted file mode 100644 index 6303495f..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34330.188 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExerciseTracker", "ExcerciseTracker\ExerciseTracker.csproj", "{4496A2A8-F258-49A4-ACEC-B3294571D838}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4496A2A8-F258-49A4-ACEC-B3294571D838}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4496A2A8-F258-49A4-ACEC-B3294571D838}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4496A2A8-F258-49A4-ACEC-B3294571D838}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4496A2A8-F258-49A4-ACEC-B3294571D838}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {824FD861-C52A-4A17-838E-549FFB586F29} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Controllers/ExerciseController.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Controllers/ExerciseController.cs deleted file mode 100644 index e02811d4..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Controllers/ExerciseController.cs +++ /dev/null @@ -1,37 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.Repositories; -using ExerciseTracker.Services; - -namespace ExerciseTracker.Controllers; - -public class ExerciseController -{ - - private readonly IExerciseService _exerciseService; - - public ExerciseController(IExerciseService excerciseService) - { - _exerciseService = excerciseService; - } - - public Exercise AddExercise(Exercise exercise) - { - return _exerciseService.AddExercise(exercise); - } - - public void DeleteExercise(Exercise exercise) - { - _exerciseService.DeleteExercise(exercise); - - } - - public List GetAllExercises() - { - return _exerciseService.GetAllExercises(); - } - - public Exercise UpdateExercise(Exercise exercise) - { - return _exerciseService.UpdateExercise(exercise); - } -} diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Data/ExerciseTrackerContext.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Data/ExerciseTrackerContext.cs deleted file mode 100644 index 89475473..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Data/ExerciseTrackerContext.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using ExerciseTracker.Models; - -namespace ExerciseTracker.Data; - -public class ExerciseTrackerContext : DbContext -{ - public DbSet Exercises { get; set; } - - public string DbPath { get; } - public ExerciseTrackerContext() - { - var folder = Environment.SpecialFolder.LocalApplicationData; - var path = Environment.GetFolderPath(folder); - //users//AppData/Local on Windows - DbPath = System.IO.Path.Join(path, "exercise.db"); - } - - protected override void OnConfiguring(DbContextOptionsBuilder options) - => options.UseSqlite($"Data Source={DbPath}"); -} - diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/ExerciseTracker.csproj b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/ExerciseTracker.csproj deleted file mode 100644 index c6183a9b..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/ExerciseTracker.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Migrations/20240628011301_init.Designer.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Migrations/20240628011301_init.Designer.cs deleted file mode 100644 index 772047a9..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Migrations/20240628011301_init.Designer.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -using System; -using ExerciseTracker.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - [Migration("20240628011301_init")] - partial class init - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.4"); - - modelBuilder.Entity("ExerciseTracker.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Comments") - .HasColumnType("TEXT"); - - b.Property("DateEnd") - .HasColumnType("TEXT"); - - b.Property("DateStart") - .HasColumnType("TEXT"); - - b.Property("Duration") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Migrations/20240628011301_init.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Migrations/20240628011301_init.cs deleted file mode 100644 index 1209867d..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Migrations/20240628011301_init.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - /// - public partial class init : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - DateStart = table.Column(type: "TEXT", nullable: false), - DateEnd = table.Column(type: "TEXT", nullable: false), - Duration = table.Column(type: "TEXT", nullable: false), - Comments = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Migrations/ExerciseTrackerContextModelSnapshot.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Migrations/ExerciseTrackerContextModelSnapshot.cs deleted file mode 100644 index b6701f88..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Migrations/ExerciseTrackerContextModelSnapshot.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -using System; -using ExerciseTracker.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - partial class ExerciseTrackerContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.4"); - - modelBuilder.Entity("ExerciseTracker.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Comments") - .HasColumnType("TEXT"); - - b.Property("DateEnd") - .HasColumnType("TEXT"); - - b.Property("DateStart") - .HasColumnType("TEXT"); - - b.Property("Duration") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Models/Enums.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Models/Enums.cs deleted file mode 100644 index 8ac67187..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Models/Enums.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace ExerciseTracker.Models; - -internal class Enums -{ - internal enum MainMenuOptions - { - AddExerciseSession, - ExerciseSessionHistory, - ExitProgram - } - internal enum CreateViewUpdateDeleteMenuOptions - { - AddExerciseSession, - ViewSession, - UpdateSession, - DeleteSession, - Back - } -} diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Models/Exercise.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Models/Exercise.cs deleted file mode 100644 index be8ad252..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Models/Exercise.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace ExerciseTracker.Models; - -public class Exercise -{ - [Key] - public int Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration { get; set; } - public string? Comments { get; set; } -} diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Program.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Program.cs deleted file mode 100644 index ddc58d73..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Program.cs +++ /dev/null @@ -1,35 +0,0 @@ -using ExerciseTracker.Controllers; -using ExerciseTracker.Data; -using ExerciseTracker.Repositories; -using ExerciseTracker.Services; -using ExerciseTracker.UserInterface; -using Microsoft.Extensions.DependencyInjection; - - - -namespace ExerciseTracker; - -public class Program -{ - public static void Main(string[] args) - { - var serviceProvider = new ServiceCollection() - .AddDbContext() - .AddScoped() - .AddScoped() - .AddScoped() - .BuildServiceProvider(); - - var controller = serviceProvider.GetService(); - - if (controller != null) - { - var menu = new Menu(controller); - menu.MainMenu(); - } - else - { - Console.WriteLine("Failed to initialize controller."); - } - } -} diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Repositories/ExerciseRepository.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Repositories/ExerciseRepository.cs deleted file mode 100644 index d3095dba..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,46 +0,0 @@ -using ExerciseTracker.Data; -using ExerciseTracker.Models; - -namespace ExerciseTracker.Repositories; - -public class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseTrackerContext _context; - - public ExerciseRepository(ExerciseTrackerContext context) - { - _context = context; - } - - public void Delete(Exercise exercise) - { - _context.Remove(exercise); - } - - public IEnumerable GetAll() - { - return _context.Exercises.ToList(); - } - - public Exercise GetById(int id) - { - return _context.Exercises.Find(id); - } - - public Exercise Insert(Exercise exercise) - { - _context.Add(exercise); - return exercise; - } - - public void Save() - { - _context.SaveChanges(); - } - - public Exercise Update(Exercise exercise) - { - _context.Update(exercise); - return exercise; - } -} diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Repositories/IExerciseRepository.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Repositories/IExerciseRepository.cs deleted file mode 100644 index 5f0562dd..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,14 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Repositories; - -public interface IExerciseRepository -{ - public IEnumerable GetAll(); - public Exercise GetById(int id); - public Exercise Insert(Exercise exercise); - public Exercise Update(Exercise exercise); - public void Delete(Exercise exercise); - public void Save(); - -} diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Services/ExerciseService.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Services/ExerciseService.cs deleted file mode 100644 index 48a7d00f..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Services/ExerciseService.cs +++ /dev/null @@ -1,44 +0,0 @@ -using ExerciseTracker.Controllers; -using ExerciseTracker.Models; -using ExerciseTracker.Repositories; - - -namespace ExerciseTracker.Services; - -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository _exerciseRepository; - - public ExerciseService(IExerciseRepository exerciseRepository) - { - _exerciseRepository = exerciseRepository; - } - - public Exercise AddExercise(Exercise exercise) - { - exercise = _exerciseRepository.Insert(exercise); - _exerciseRepository.Save(); - return exercise; - - } - - public void DeleteExercise(Exercise exercise) - { - _exerciseRepository.Delete(exercise); - _exerciseRepository.Save(); - } - - public List GetAllExercises() - { - - return _exerciseRepository.GetAll().ToList(); - - } - - public Exercise UpdateExercise(Exercise exercise) - { - _exerciseRepository.Update(exercise); - _exerciseRepository.Save(); - return exercise; - } -} diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Services/IExerciseService.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Services/IExerciseService.cs deleted file mode 100644 index f2d7af90..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/Services/IExerciseService.cs +++ /dev/null @@ -1,12 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Services -{ - public interface IExerciseService - { - Exercise AddExercise(Exercise exercise); - void DeleteExercise(Exercise exercise); - List GetAllExercises(); - Exercise UpdateExercise(Exercise exercise); - } -} \ No newline at end of file diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/DTValidEntry.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/DTValidEntry.cs deleted file mode 100644 index 3f9f1750..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/DTValidEntry.cs +++ /dev/null @@ -1,161 +0,0 @@ -using Spectre.Console; - -namespace ExerciseTracker; - -internal class DTValidEntry -{ - internal static DateTime GetDateTime() - { - var sessionDateTime = new DateTime(); - int year = AnsiConsole.Prompt( - new TextPrompt("Year YYYY:") - .ValidationErrorMessage("[red] That is not a valid year.[/]") - .Validate(year => - { - if (year > DateTime.Now.Year) - { - return ValidationResult.Error("[red]You may not enter a future date[/]"); - } - else if (year <= 2000) - { - return ValidationResult.Error("[red]You may not enter a date older than they year 2000.[/]"); - } - else - { - return ValidationResult.Success(); - } - })); - - int month = AnsiConsole.Prompt( - new TextPrompt("Month MM:") - .ValidationErrorMessage("[red] That is not a valid month[/]") - .Validate(month => - { - - if (month < 1 || month > 12) - { - return ValidationResult.Error("[red]Valid months are 1-12 [/]"); - } - else - { - - var sessionDateTime = new DateTime(year, month, 1, 0, 0, 0); - if (sessionDateTime > DateTime.Now) - { - return ValidationResult.Error("[red]You may not enter a future date[/]"); - } - else - { - return ValidationResult.Success(); - } - } - })); - - int day = AnsiConsole.Prompt( - new TextPrompt("Day DD:") - .ValidationErrorMessage("[red] That is not a valid day[/]") - .Validate(day => - { - if (day < 1 || day > 31) - { - return ValidationResult.Error("[red]Valid days are 1-31 [/]"); - } - else if ((sessionDateTime = new DateTime(year, month, day, 0, 0, 0)) > DateTime.Now) - { - return ValidationResult.Error("[red]You may not enter a future date[/]"); - } - else - { - int daysInMonth = DateTime.DaysInMonth(year, month); - - if (day > daysInMonth) - { - return ValidationResult.Error("[red]There are not that many days in the month.[/]"); - } - else - { - return ValidationResult.Success(); - } - } - })); - - int hour = AnsiConsole.Prompt( - new TextPrompt("24 Hour hh:") - .ValidationErrorMessage("[red] That is not a valid hour[/]") - .Validate(hour => - { - if (0 > hour || hour > 23) - { - return ValidationResult.Error("[red]Valid days are 0 - 23[/]"); - } - else - { - return ValidationResult.Success(); - } - })); - - int min = AnsiConsole.Prompt( - new TextPrompt("Min mm:") - .ValidationErrorMessage("[red] That is not a valid minute[/]") - .Validate(min => - { - if (0 > min || min > 59) - { - return ValidationResult.Error("[red]Valid minutes are 0 - 59[/]"); - } - else - { - return ValidationResult.Success(); - } - })); - - sessionDateTime = new DateTime(year, month, day, hour, min, 0); - return sessionDateTime; - } - - - internal static DateTime GetEndDateTime(DateTime startDateTime) - { - int hour = AnsiConsole.Prompt( - new TextPrompt("24 Hour hh:") - .ValidationErrorMessage("[red] That is not a valid hour[/]") - .Validate(hour => - { - if (0 > hour || hour > 23) - { - return ValidationResult.Error("[red]Valid days are 0 - 23[/]"); - } - else if (hour < startDateTime.Hour) - { - return ValidationResult.Error("[red]Time may not be earlier than Start Time[/]"); - } - else - { - return ValidationResult.Success(); - } - })); - - int min = AnsiConsole.Prompt( - new TextPrompt("Min mm:") - .ValidationErrorMessage("[red] That is not a valid minute[/]") - .Validate(min => - { - if (0 > min || min > 59) - { - return ValidationResult.Error("[red]Valid minutes are 0 - 59[/]"); - } - else if (hour == startDateTime.Hour && min < startDateTime.Minute) - { - return ValidationResult.Error("[red]Time may not be earlier than Start Time[/]"); - } - else - { - return ValidationResult.Success(); - } - })); - - DateTime sessionDateTime = new DateTime(startDateTime.Year, startDateTime.Month, startDateTime.Day, hour, min, 0); - - return sessionDateTime; - } -} diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/Menu.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/Menu.cs deleted file mode 100644 index ca31ffde..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/Menu.cs +++ /dev/null @@ -1,138 +0,0 @@ -using ExerciseTracker.Controllers; -using ExerciseTracker.Models; -using Spectre.Console; -using static ExerciseTracker.Models.Enums; - -namespace ExerciseTracker.UserInterface; - -internal class Menu -{ - private readonly ExerciseController _exerciseController; - - public Menu(ExerciseController exerciseController) - { - _exerciseController = exerciseController; - } - - internal void MainMenu() - { - bool exitProgram = false; - while (!exitProgram) - { - ShowTitle(); - var option = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What would you like to do?") - .AddChoices( - MainMenuOptions.AddExerciseSession, - MainMenuOptions.ExerciseSessionHistory, - MainMenuOptions.ExitProgram)); - - switch (option) - { - case MainMenuOptions.AddExerciseSession: - AddExerciseMenu(); - break; - case MainMenuOptions.ExerciseSessionHistory: - ExerciseSessionHistory(); - break; - case MainMenuOptions.ExitProgram: - exitProgram = true; - break; - } - } - } - - private void AddExerciseMenu() - { - Exercise exercise = UserInput.CreateExerciseSession(); - exercise = _exerciseController.AddExercise(exercise); - ShowExercise(exercise); - Console.WriteLine("Exercise created! Press any key to continue."); - Console.ReadKey(); - } - - private void ExerciseSessionHistory() - { - var exitMenu = false; - - while (!exitMenu) - { - List exercises = _exerciseController.GetAllExercises(); - - Console.Clear(); - - var table = new Spectre.Console.Table() - .AddColumns("ID", "Start", "End", "Duration", "Comments"); - - foreach (Exercise session in exercises) - { - table.AddRow($"{session.Id}", - $"{session.DateStart}", - $"{session.DateEnd}", - $"{session.Duration}", - $"{session.Comments}"); - } - AnsiConsole.Write(table); - - var option = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What would you like to do?") - .AddChoices( - CreateViewUpdateDeleteMenuOptions.AddExerciseSession, - CreateViewUpdateDeleteMenuOptions.ViewSession, - CreateViewUpdateDeleteMenuOptions.UpdateSession, - CreateViewUpdateDeleteMenuOptions.DeleteSession, - CreateViewUpdateDeleteMenuOptions.Back)); - - switch (option) - { - case CreateViewUpdateDeleteMenuOptions.AddExerciseSession: - AddExerciseMenu(); - break; - case CreateViewUpdateDeleteMenuOptions.ViewSession: - Exercise exercise = UserInput.GetSingleSession(exercises); - ShowExercise(exercise); - break; - case CreateViewUpdateDeleteMenuOptions.UpdateSession: - exercise = UserInput.GetSingleSession(exercises); - UserInput.UpdateSession(exercise); - _exerciseController.UpdateExercise(exercise); - ShowExercise(exercise); - break; - case CreateViewUpdateDeleteMenuOptions.DeleteSession: - exercise = UserInput.GetSingleSession(exercises); - _exerciseController.DeleteExercise(exercise); - break; - case CreateViewUpdateDeleteMenuOptions.Back: - exitMenu = true; - break; - } - } - } - - private static void ShowTitle() - { - Console.Clear(); - AnsiConsole.Write( - new FigletText("Exercise Tracker") - .LeftJustified()); - } - - private static void ShowExercise(Exercise exercise) - { - Console.Clear(); - - var table = new Spectre.Console.Table() - .AddColumn("Exercise") - .AddRow(new Panel($"ID: {exercise.Id}")) - .AddRow(new Panel($"Start: {exercise.DateStart}")) - .AddRow(new Panel($"End: {exercise.DateEnd}")) - .AddRow(new Panel($"Duration: {exercise.Duration}")) - .AddRow(new Panel($"Comments: {exercise.Comments}")); - - AnsiConsole.Write(table); - Console.ReadKey(); - } -} - diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/UserInput.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/UserInput.cs deleted file mode 100644 index f49818f3..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/UserInput.cs +++ /dev/null @@ -1,86 +0,0 @@ -using ExerciseTracker.Models; -using Spectre.Console; - -namespace ExerciseTracker.UserInterface; - -internal class UserInput -{ - - internal static Exercise CreateExerciseSession() - { - var datesValid = false; - - Exercise exercise = new Exercise(); - - Console.WriteLine("Please enter the start date time."); - exercise.DateStart = DTValidEntry.GetDateTime(); - - Console.WriteLine("Please enter the end time."); - exercise.DateEnd = DTValidEntry.GetEndDateTime(exercise.DateStart); - - exercise.Comments = AnsiConsole.Ask("Please enter comments about this exercise session."); - - - while (!datesValid) - { - datesValid = Validators.DateValidator(exercise); - if (!datesValid) - { - exercise = UpdateSession(exercise); - } - } - - if (exercise.Duration == TimeSpan.Zero) - { - exercise = Validators.CalculateSessionLength(exercise); - } - - return exercise; - } - - internal static Exercise GetSingleSession(List exercises) - { - int exerxciseId = AnsiConsole.Prompt( - new TextPrompt("Session Id") - .ValidationErrorMessage("[red] That is not a valid Id.[/]") - .Validate(exerxciseId => - { - if (!exercises.Any(exercise => exercise.Id == exerxciseId)) - { - return ValidationResult.Error("[red]There is no session with that Id.[/]"); - } - else - { - return ValidationResult.Success(); - } - - })); - - var exercise = exercises.FirstOrDefault(ex => ex.Id == exerxciseId); - return exercise; - } - - internal static Exercise UpdateSession(Exercise exerciseToUpdate) - { - var exitMenu = false; - while (!exitMenu) - { - exerciseToUpdate.DateStart = AnsiConsole.Confirm("Change the start time?") - ? exerciseToUpdate.DateStart = DTValidEntry.GetDateTime() - : exerciseToUpdate.DateStart; - - exerciseToUpdate.DateEnd = AnsiConsole.Confirm("Change the end time?") - ? exerciseToUpdate.DateEnd = DTValidEntry.GetDateTime() - : exerciseToUpdate.DateEnd; - - exerciseToUpdate.Comments = AnsiConsole.Confirm("Change the comments?") - ? exerciseToUpdate.Comments = AnsiConsole.Ask("Please enter comments about this exercise session.") - : exerciseToUpdate.Comments; - - exitMenu = Validators.DateValidator(exerciseToUpdate); - } - exerciseToUpdate = Validators.CalculateSessionLength(exerciseToUpdate); - - return exerciseToUpdate; - } -} \ No newline at end of file diff --git a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/Validators.cs b/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/Validators.cs deleted file mode 100644 index 392e36ff..00000000 --- a/ExerciseTracker.PaulWSaltzman/ExcerciseTracker/UserInterface/Validators.cs +++ /dev/null @@ -1,29 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.UserInterface; - -internal class Validators -{ - internal static Exercise CalculateSessionLength(Exercise exercise) - { - TimeSpan maxDuration = TimeSpan.FromHours(23); - TimeSpan calculateDuration = (TimeSpan)(exercise.DateEnd - exercise.DateStart); - exercise.Duration = calculateDuration <= maxDuration ? calculateDuration : maxDuration; - - return exercise; - } - - internal static bool DateValidator(Exercise exercise) - { - if (exercise.DateStart > exercise.DateEnd) - { - Console.WriteLine("The session start time can not be after the end time."); - Console.ReadKey(); - return false; - } - else - { - return true; - } - } -} diff --git a/ExerciseTracker.PaulWSaltzman/README.md b/ExerciseTracker.PaulWSaltzman/README.md deleted file mode 100644 index a6debc55..00000000 --- a/ExerciseTracker.PaulWSaltzman/README.md +++ /dev/null @@ -1,40 +0,0 @@ -#Exercise Tracker -### Introduction -So far we have been developing our applications without thinking too much about their design. In software development, -we’ll often use “general repeatable solutions to commonly occurring problems”, the so called design patterns. - -We will build an exercise tracker using the “Repository Pattern”, an almost universally used solution for data persistence. -It creates a layer between business logic and data access, which helps us create more loosely-coupled, testable and maintainable applications. -You’ll be dealing with repositories on a daily-basis when you get your C# job! -### Requirements - - [x] This is an application where you should record exercise data. - - [x] You should choose one type of exercise only. We want to keep the app simple so you focus on the subject you're learning and not on the business complexities. - - [x] You can choose raw SQL or Entity Framework for your data-persistence. - - [x] The model for your exercise class should have at least the following properties: {Id INT, DateStart DateTime, DateEnd DateTime, Duration TimeSpan, Comments string} - - [x] Your application should have the following classes: UserInput, ExerciseController, ExerciseService (where business logic will be handled) and ExerciseRepository. These classes might feel empty at first but they'll be needed in most applications as they grow. - - [x] You can choose between SQLite or SQLServer. - - [x] You need to use dependency injection to access the repository from the controller. -### Resources -[Microsoft](https://learn.microsoft.com/en-us/ef/core/get-started/overview/first-app?tabs=visual-studio) - -[Implementing the Repository Pattern in C# and .NET](https://medium.com/@kerimkkara/implementing-the-repository-pattern-in-c-and-net-5fdd91950485) - -[Repository Pattern in .NET Core](https://programmingwithwolfgang.com/repository-pattern-net-core/) - -[Tutorial: Use dependency injection in .NET](https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection-usage) - - -### YouTube Videos -[ASP.NET Core Web API Repository Pattern Using Entity Framework Core DBContext | C# And .NET 8](https://www.youtube.com/watch?v=shzPIfZ70Pw) - -[How to use the Repository Design Pattern in C# and ASP.NET](https://www.youtube.com/watch?v=8fFBWmbUaIg&t=994s) - -[C# Interfaces Explained in Simple Terms | Mosh](https://www.youtube.com/watch?v=aQ8YkJrAbzE) - -[Interfaces in C# - What they are, how to use them, and why they are so powerful](https://www.youtube.com/watch?v=A7qwuFnyIpM) - -### Chalanges - -This was a particurlay challanging assignment for me. I hadn't worked with interfaces before and I had to bootstrap my knowlege up. - - diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone.sln b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone.sln deleted file mode 100644 index 6d0977f1..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.7.34221.43 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExerciseTracker.Speedierone", "ExerciseTracker.Speedierone\ExerciseTracker.Speedierone.csproj", "{958670A9-EC40-4A2E-ABD0-5D391A3DAA7B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {958670A9-EC40-4A2E-ABD0-5D391A3DAA7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {958670A9-EC40-4A2E-ABD0-5D391A3DAA7B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {958670A9-EC40-4A2E-ABD0-5D391A3DAA7B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {958670A9-EC40-4A2E-ABD0-5D391A3DAA7B}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {9D44EE09-C82B-4021-AAB6-ACC1ACA73769} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/App.config b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/App.config deleted file mode 100644 index 4f0676e0..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/ExerciseDbContext.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/ExerciseDbContext.cs deleted file mode 100644 index b2028a75..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/ExerciseDbContext.cs +++ /dev/null @@ -1,17 +0,0 @@ -using ExerciseTracker.Speedierone.Model; -using Microsoft.EntityFrameworkCore; -using System.Configuration; - -namespace ExerciseTracker.Speedierone -{ - public class ExerciseDbContext : DbContext - { - public DbSet Exercises { get; set;} - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - var connectionString = ConfigurationManager.AppSettings.Get("connectionString"); - optionsBuilder.UseSqlServer(connectionString); - } - } -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone.csproj b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone.csproj deleted file mode 100644 index 1853759e..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - Exe - net8.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - \ No newline at end of file diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/MainMenu.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/MainMenu.cs deleted file mode 100644 index 12304c79..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/MainMenu.cs +++ /dev/null @@ -1,105 +0,0 @@ -using ExerciseTracker.Speedierone.Model; -using ExerciseTracker.Speedierone.Service; - -namespace ExerciseTracker.Speedierone -{ - public class MainMenu - { - private readonly IExerciseService _exerciseService; - private readonly UserInput _userInput; - public MainMenu(IExerciseService exerciseService, UserInput userInput) - { - _exerciseService = exerciseService; - _userInput = userInput; - } - public void ShowMenu() - { - Console.Clear(); - bool closeApp = false; - while (closeApp == false) - { - Console.WriteLine("Welcome to the exercise tracker app"); - Console.WriteLine("Please choose from the following options"); - Console.WriteLine("0 = Exit Program"); - Console.WriteLine("1 = View all exercises"); - Console.WriteLine("2 = View exercises by Id"); - Console.WriteLine("3 = Add new exercise"); - Console.WriteLine("4 = Update current exercise"); - Console.WriteLine("5 = Delete exercise"); - - var command = Console.ReadLine(); - - switch (command) - { - case "0": - Console.WriteLine("Goodbye"); - closeApp = true; - Environment.Exit(0); - break; - case "1": - var tableList = _exerciseService.GetAllExercises(); - TableLayout.DisplayTableAll(tableList); - Console.WriteLine("Press any key to continue."); - Console.ReadLine(); - Console.Clear(); - break; - - case "2": - Console.WriteLine("Please enter Id of record you wish to view."); - var id = Int32.Parse(Console.ReadLine()); - Console.Clear(); - var tableListId = _exerciseService.GetExerciseById(id); - TableLayout.DisplayTable(tableListId); - Console.WriteLine("Press any key to continue."); - Console.ReadLine(); - Console.Clear(); - break; - - case "3": - Console.Clear(); - Exercises newExercise = new Exercises(); - _exerciseService.AddExercise(newExercise); - Console.WriteLine("New sessions added."); - break; - - case "4": - var viewTable = _exerciseService.GetAllExercises(); - TableLayout.DisplayTableAll(viewTable); - Console.WriteLine("Please enter ID of record you wish to update."); - if(int.TryParse(Console.ReadLine(), out id)) - { - List exerciseList = _exerciseService.GetExerciseById(id); - - if(exerciseList.Count > 0) - { - Exercises exerciseToUpdate = exerciseList[0]; - _exerciseService.UpdateExercise(exerciseToUpdate); - Console.WriteLine("Session Updated. Press any key to continue."); - Console.ReadLine(); - Console.Clear(); - } - else - { - Console.WriteLine("Exercise not found."); - } - } - break; - - case "5": - var viewToDelete = _exerciseService.GetAllExercises(); - TableLayout.DisplayTableAll(viewToDelete); - Console.WriteLine("Please enter ID of session you wish to delete."); - var deleteId = Int32.Parse(Console.ReadLine()); - _exerciseService.DeleteExercise(deleteId); - Console.WriteLine("Record deleted"); - break; - - default: - Console.WriteLine("Invalid entry."); - command = Console.ReadLine(); - break; - } - } - } - } -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Migrations/20231126135426_Initial.Designer.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Migrations/20231126135426_Initial.Designer.cs deleted file mode 100644 index 52da3e98..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Migrations/20231126135426_Initial.Designer.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -using System; -using ExerciseTracker.Speedierone; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Speedierone.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - [Migration("20231126135426_Initial")] - partial class Initial - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Speedierone.Model.Exercises", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Migrations/20231126135426_Initial.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Migrations/20231126135426_Initial.cs deleted file mode 100644 index fd92710e..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Migrations/20231126135426_Initial.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Speedierone.Migrations -{ - /// - public partial class Initial : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Migrations/ExerciseDbContextModelSnapshot.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Migrations/ExerciseDbContextModelSnapshot.cs deleted file mode 100644 index 7af85380..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Migrations/ExerciseDbContextModelSnapshot.cs +++ /dev/null @@ -1,52 +0,0 @@ -// -using System; -using ExerciseTracker.Speedierone; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Speedierone.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - partial class ExerciseDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Speedierone.Model.Exercises", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Model/Exercises.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Model/Exercises.cs deleted file mode 100644 index c6677fdd..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Model/Exercises.cs +++ /dev/null @@ -1,12 +0,0 @@ - -namespace ExerciseTracker.Speedierone.Model -{ - public class Exercises - { - public int Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration { get; set; } - public string? Comments { get; set; } - } -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Program.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Program.cs deleted file mode 100644 index 7c99cc0e..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Program.cs +++ /dev/null @@ -1,30 +0,0 @@ -using ExerciseTracker.Speedierone; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using ExerciseTracker.Speedierone.Repository; -using ExerciseTracker.Speedierone.Service; - -namespace ExerciseTracker; - -class Program -{ - static void Main(string[] args) - { - var host = CreateHostBuilder(args).Build(); - var mainMenu = host.Services.GetRequiredService(); - mainMenu.ShowMenu(); - host.Run(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureServices((hostContext, services) => - { - services.AddDbContext(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - }) - .UseConsoleLifetime(); -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Repository/ExerciseRepository.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Repository/ExerciseRepository.cs deleted file mode 100644 index 8ff143c6..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Repository/ExerciseRepository.cs +++ /dev/null @@ -1,48 +0,0 @@ -using ExerciseTracker.Speedierone.Model; - -namespace ExerciseTracker.Speedierone.Repository -{ - public class ExerciseRepository : IExerciseRepository - { - public readonly ExerciseDbContext _context; - public ExerciseRepository(ExerciseDbContext context) - { - _context = context; - } - public void Add(Exercises exercises) - { - _context.Exercises.Add(exercises); - } - public void Delete(int id) - { - var exerciseToDelete = _context.Exercises.Find(id); - if (exerciseToDelete != null) - { - _context.Exercises.Remove(exerciseToDelete); - } - else - { - Console.WriteLine("Could not find session matching that ID"); - } - } - - public IEnumerable GetAll() - { - return _context.Exercises.ToList(); - } - public List GetById(int id) - { - return _context.Exercises.Where(exercise => exercise.Id == id).ToList(); - } - - public void Update(Exercises exercisesToUpdate) - { - _context.Update(exercisesToUpdate); - _context.SaveChanges(); - } - public void SaveChanges() - { - _context.SaveChanges(); - } - } -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Repository/IExerciseRepository.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Repository/IExerciseRepository.cs deleted file mode 100644 index 4676e9ac..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Repository/IExerciseRepository.cs +++ /dev/null @@ -1,14 +0,0 @@ -using ExerciseTracker.Speedierone.Model; - -namespace ExerciseTracker.Speedierone.Repository -{ - public interface IExerciseRepository - { - IEnumerable GetAll(); - List GetById(int id); - void Add(Exercises exercises); - void Update(Exercises exercises); - void Delete(int id); - void SaveChanges(); - } -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Service/ExerciseService.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Service/ExerciseService.cs deleted file mode 100644 index 2ad943a4..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Service/ExerciseService.cs +++ /dev/null @@ -1,138 +0,0 @@ -using ExerciseTracker.Speedierone.Model; -using ExerciseTracker.Speedierone.Repository; - -namespace ExerciseTracker.Speedierone.Service -{ - public class ExerciseService : IExerciseService - { - private readonly IExerciseRepository _exerciseRepository; - private readonly UserInput _userInput; - - public ExerciseService(IExerciseRepository exerciseRepository, UserInput userInput) - { - _exerciseRepository = exerciseRepository; - _userInput = userInput; - } - public IEnumerable GetAllExercises() - { - return _exerciseRepository.GetAll(); - } - public List GetExerciseById(int id) - { - int IdToFind = id; - List exerciseFound = _exerciseRepository.GetById(IdToFind); - List resultList = new List(); - if (exerciseFound != null) - { - resultList.AddRange(exerciseFound); - } - return resultList; - } - - public void AddExercise(Exercises exercises) - { - Console.WriteLine("Please enter start date in format dd/mm/yyyy"); - var startDateAdd = UserInput.CheckDate(); - - Console.WriteLine("Please enter start time in format hh:mm"); - var startTimeAdd = UserInput.CheckTime(); - - var combinedStartDateAdd = _userInput.CombinedDateTime(startDateAdd, startTimeAdd); - var stringCombinedStartDateAdd = combinedStartDateAdd.ToString(); - - Console.WriteLine("Please enter end date in format dd/mm/yyyy"); - var endDateAdd = UserInput.CheckDate(); - - Console.WriteLine("Please enter end time in format hh:mm"); - var endTimeAdd = UserInput.CheckTime(); - - var combinedEndDateAdd = _userInput.CombinedDateTime(endDateAdd, endTimeAdd); - var stringCombinedEndDateAdd = combinedEndDateAdd.ToString(); - - var checkEndDate = UserInput.CheckEndDate(stringCombinedStartDateAdd, stringCombinedEndDateAdd); - - while (checkEndDate == false) - { - Console.WriteLine("Please enter endDate"); - endDateAdd = UserInput.CheckDate(); - Console.WriteLine("Please enter end Time"); - endTimeAdd = UserInput.CheckTime(); - combinedEndDateAdd = _userInput.CombinedDateTime(endDateAdd, endTimeAdd); - stringCombinedEndDateAdd = combinedEndDateAdd.ToString(); - - checkEndDate = UserInput.CheckEndDate(stringCombinedStartDateAdd, stringCombinedEndDateAdd); - } - var durationAdd = _userInput.GetDuration(combinedStartDateAdd, combinedEndDateAdd); - - Console.WriteLine("Please enter any comments you wish to make. Press enter when finished or wish to leave it blank."); - var comments = Console.ReadLine(); - - var exercise = new Exercises - { - DateStart = combinedStartDateAdd, - DateEnd = combinedEndDateAdd, - Duration = durationAdd, - Comments = comments - }; - _exerciseRepository.Add(exercise); - _exerciseRepository.SaveChanges(); - } - public void UpdateExercise(Exercises exercisesToUpdate) - { - Console.WriteLine("Please enter start date in format dd/mm/yyyy"); - var startDate = UserInput.CheckDate(); - - Console.WriteLine("Please enter start time in format hh:mm"); - var startTime = UserInput.CheckTime(); - - var combinedStartDate = _userInput.CombinedDateTime(startDate, startTime); - var stringCombinedStartDate = combinedStartDate.ToString(); - - Console.WriteLine("Please enter end date in format dd/mm/yyyy"); - var endDate = UserInput.CheckDate(); - - Console.WriteLine("Please enter end time in format hh:mm"); - var endTime = UserInput.CheckTime(); - - var combinedEndDate = _userInput.CombinedDateTime(endDate, endTime); - var stringCombinedEndDate = combinedEndDate.ToString(); - - var checkEndDate = UserInput.CheckEndDate(stringCombinedStartDate, stringCombinedEndDate); - - if (!checkEndDate) - { - Console.WriteLine("End date is before start date. Press any key to try again."); - endDate = UserInput.CheckDate(); - endTime = UserInput.CheckTime(); - - combinedEndDate = _userInput.CombinedDateTime(endDate, endTime); - stringCombinedEndDate = combinedEndDate.ToString(); - - checkEndDate = UserInput.CheckEndDate(stringCombinedStartDate, stringCombinedEndDate); - - while (!checkEndDate) - { - endDate = UserInput.CheckDate(); - endTime = UserInput.CheckTime(); - combinedEndDate = _userInput.CombinedDateTime(endDate, endTime); - stringCombinedEndDate = combinedEndDate.ToString(); - checkEndDate = UserInput.CheckEndDate(stringCombinedStartDate, stringCombinedEndDate); - } - } - var duration = _userInput.GetDuration(combinedStartDate, combinedEndDate); - - Console.WriteLine("Please enter any comments you wish to make. Press enter when finished or wish to leave it blank."); - var comments = Console.ReadLine(); - - exercisesToUpdate.DateStart = combinedStartDate; - exercisesToUpdate.DateEnd = combinedEndDate; - exercisesToUpdate.Duration = duration; - exercisesToUpdate.Comments = comments; - } - public void DeleteExercise(int id) - { - _exerciseRepository.Delete(id); - _exerciseRepository.SaveChanges(); - } - } -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Service/IExerciseService.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Service/IExerciseService.cs deleted file mode 100644 index 456a6bf7..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/Service/IExerciseService.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTracker.Speedierone.Model; - -namespace ExerciseTracker.Speedierone.Service -{ - public interface IExerciseService - { - IEnumerable GetAllExercises(); - List GetExerciseById(int id); - void AddExercise(Exercises exercise); - void UpdateExercise(Exercises exercise); - void DeleteExercise(int id); - } -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/TableLayout.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/TableLayout.cs deleted file mode 100644 index 02b950ec..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/TableLayout.cs +++ /dev/null @@ -1,42 +0,0 @@ -using ConsoleTableExt; -using ExerciseTracker.Speedierone.Model; - -namespace ExerciseTracker.Speedierone -{ - internal class TableLayout - { - public static void DisplayTable(List sessions) - { - var tableData = new List>(); - foreach (Exercises exercises in sessions) - { - tableData.Add(new List - { - exercises.Id, - exercises.DateStart, - exercises.DateEnd, - exercises.Duration, - exercises.Comments - }); - } - ConsoleTableBuilder.From(tableData).WithColumn("ID", "Start Date", "End Time", "Duration", "Comments").ExportAndWriteLine(); - } - public static void DisplayTableAll(IEnumerable sessions) - { - Console.Clear(); - var tableData = new List>(); - foreach (Exercises exercises in sessions) - { - tableData.Add(new List - { - exercises.Id, - exercises.DateStart, - exercises.DateEnd, - exercises.Duration, - exercises.Comments - }); - } - ConsoleTableBuilder.From(tableData).WithColumn("ID", "Start Date", "End Time", "Duration", "Comments").ExportAndWriteLine(); - } - } -} diff --git a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/UserInput.cs b/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/UserInput.cs deleted file mode 100644 index 224f6a5f..00000000 --- a/ExerciseTracker.Speedierone/ExerciseTracker.Speedierone/UserInput.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Globalization; - -namespace ExerciseTracker.Speedierone -{ - public class UserInput - { - internal static string CheckDate() - { - string dateString = Console.ReadLine(); - string format = "dd/MM/yyyy"; - - while (!DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out _)) - { - Console.WriteLine($"Invalid format. Please enter in format {format}."); - dateString = Console.ReadLine(); - } - return dateString; - } - - public static bool CheckEndDate(string startDate, string endDate) - { - try - { - var startDateParsed = DateTime.Parse(startDate); - var endDateParsed = DateTime.Parse(endDate); - - if (startDateParsed > endDateParsed) - { - Console.WriteLine("End date is before start date. Press any button to continue"); - return false; - } - if (endDateParsed > startDateParsed.AddDays(1)) - { - Console.WriteLine("End date must be less then 1 day from start date."); - return false; - } - return true; - } - catch (Exception ex) - { - Console.WriteLine(ex.Message ); - return false; - } - } - public static string CheckTime() - { - string timeString = Console.ReadLine(); - string format = "HH:mm"; - - while (!DateTime.TryParseExact(timeString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out _)) - { - Console.WriteLine($"Invalid format. Please enter in format {format}"); - timeString = Console.ReadLine(); - } - return timeString; - } - - public TimeSpan GetDuration(DateTime startTime, DateTime endTime) - { - TimeSpan duration = endTime - startTime; - return duration; - } - - public DateTime CombinedDateTime(string date, string time) - { - try - { - var userDate = date; - var userTime = time; - - DateTime parsedDate = DateTime.Parse(userDate); - DateTime parsedTime = DateTime.Parse(userTime); - - DateTime combinedDateTime = new DateTime( - parsedDate.Year, - parsedDate.Month, - parsedDate.Day, - parsedTime.Hour, - parsedTime.Minute, - 0); - - return combinedDateTime; - } - catch (Exception ex) - { - Console.WriteLine(ex.ToString()); - throw; - } - } - } -} diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan.sln b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan.sln deleted file mode 100644 index 1094753b..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34525.116 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.StanimalTheMan", "ExerciseTracker.StanimalTheMan\ExerciseTracker.StanimalTheMan.csproj", "{DB73124F-DEF5-4B4B-A063-A584B07321CC}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {DB73124F-DEF5-4B4B-A063-A584B07321CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DB73124F-DEF5-4B4B-A063-A584B07321CC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DB73124F-DEF5-4B4B-A063-A584B07321CC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DB73124F-DEF5-4B4B-A063-A584B07321CC}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {E155E30D-137B-4659-8325-CB0E44F43F73} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Controllers/ExerciseController.cs b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Controllers/ExerciseController.cs deleted file mode 100644 index 4a26bc8d..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Controllers/ExerciseController.cs +++ /dev/null @@ -1,39 +0,0 @@ -using ExerciseTracker.StanimalTheMan.Models; -using ExerciseTracker.StanimalTheMan.Services; - -namespace ExerciseTracker.StanimalTheMan.Controllers; - -public class ExerciseController -{ - private readonly ExerciseService _exerciseService; - - public ExerciseController(ExerciseService exerciseService) - { - _exerciseService = exerciseService; - } - - public void AddExercise(Run run) - { - _exerciseService.AddExercise(run); - } - - public Run GetExerciseById(int id) - { - return _exerciseService.GetExerciseById(id); - } - - public IEnumerable GetAllExercises() - { - return _exerciseService.GetAllExercises(); - } - - public void UpdateExercise(Run run) - { - _exerciseService.UpdateExercise(run); - } - - public void DeleteExercise(int id) - { - _exerciseService.DeleteExercise(id); - } -} diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Data/ExerciseContext.cs b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Data/ExerciseContext.cs deleted file mode 100644 index 8c3f052d..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Data/ExerciseContext.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTracker.StanimalTheMan.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.StanimalTheMan.Data; - -public class ExerciseContext : DbContext -{ - public ExerciseContext(DbContextOptions options) : base(options) - { - } - - public DbSet RunEntries { get; set; } -} diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Enums.cs b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Enums.cs deleted file mode 100644 index 46b80b93..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Enums.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace ExerciseTracker.StanimalTheMan; - -internal class Enums -{ - internal enum MenuOptions - { - AddExercise, - DeleteExercise, - UpdateExercise, - GetAllExercises, - GetExerciseById, - Quit - } -} \ No newline at end of file diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan.csproj b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan.csproj deleted file mode 100644 index 1a2dfd67..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Models/Run.cs b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Models/Run.cs deleted file mode 100644 index cd39e6c1..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Models/Run.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciseTracker.StanimalTheMan.Models; - -public class Run -{ - public int Id { get; set; } - public double Distance { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration { get; set; } - public string Comments { get; set; } -} diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Program.cs b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Program.cs deleted file mode 100644 index 1dced94e..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Program.cs +++ /dev/null @@ -1,42 +0,0 @@ -using ExerciseTracker.StanimalTheMan; -using ExerciseTracker.StanimalTheMan.Controllers; -using ExerciseTracker.StanimalTheMan.Data; -using ExerciseTracker.StanimalTheMan.Repository; -using ExerciseTracker.StanimalTheMan.Services; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; - -class Program -{ - static void Main(string[] args) - { - var connectionString = "Server=(LocalDb)\\LocalDBDemo;Database=RunEntries;Integrated Security=True;Encrypt=False"; - - - var serviceProvider = new ServiceCollection() - .AddDbContext(options => - options.UseSqlServer(connectionString)) - .AddTransient() - .AddTransient() - .AddTransient() - .BuildServiceProvider(); - - using (var serviceScope = serviceProvider.CreateScope()) - { - var dbContext = serviceScope.ServiceProvider.GetRequiredService(); - dbContext.Database.EnsureCreated(); - } - - var exerciseController = serviceProvider.GetService(); - - if (exerciseController != null) - { - UserInput.ShowMainMenu(exerciseController); - } - else - { - Console.WriteLine("Failed to retrieve ExerciseController."); - } - } - -} diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Repository/ExerciseRepository.cs b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Repository/ExerciseRepository.cs deleted file mode 100644 index c95d71e9..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Repository/ExerciseRepository.cs +++ /dev/null @@ -1,66 +0,0 @@ -using ExerciseTracker.StanimalTheMan.Data; -using ExerciseTracker.StanimalTheMan.Models; - -namespace ExerciseTracker.StanimalTheMan.Repository; - -public class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseContext _context; - - public ExerciseRepository(ExerciseContext context) - { - _context = context; - } - - public void AddExercise(Run run) - { - _context.RunEntries.Add(run); - _context.SaveChanges(); - } - - public void DeleteExercise(int id) - { - var run = _context.RunEntries.Find(id); - if (run != null) - { - _context.RunEntries.Remove(run); - _context.SaveChanges(); - Console.WriteLine($"Run entry {id} was succesfully deleted."); - } - else - { - Console.WriteLine($"Run entry with ID {id} does not exist."); - } - } - - public IEnumerable GetAllExercises() - { - return _context.RunEntries.ToList(); - } - - public Run GetExerciseById(int id) - { - return _context.RunEntries.FirstOrDefault(run => run.Id == id); - } - - public void UpdateExercise(Run updatedRun) - { - var currentRun = _context.RunEntries.Find(updatedRun.Id); - - if (currentRun != null) - { - currentRun.Distance = updatedRun.Distance; - currentRun.DateStart = updatedRun.DateStart; - currentRun.DateEnd = updatedRun.DateEnd; - currentRun.Duration = updatedRun.Duration; - currentRun.Comments = updatedRun.Comments; - - _context.SaveChanges(); - Console.WriteLine($"Run {updatedRun.Id} was successfully updated."); - } - else - { - Console.WriteLine($"Run with ID {updatedRun.Id} does not exist."); - } - } -} diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Repository/IExerciseRepository.cs b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Repository/IExerciseRepository.cs deleted file mode 100644 index 7b0f6c64..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Repository/IExerciseRepository.cs +++ /dev/null @@ -1,12 +0,0 @@ -using ExerciseTracker.StanimalTheMan.Models; - -namespace ExerciseTracker.StanimalTheMan.Repository; - -public interface IExerciseRepository -{ - void AddExercise(Run run); - Run GetExerciseById(int id); - IEnumerable GetAllExercises(); - void UpdateExercise(Run run); - void DeleteExercise(int id); -} diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Services/ExerciseService.cs b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Services/ExerciseService.cs deleted file mode 100644 index 7b13e470..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Services/ExerciseService.cs +++ /dev/null @@ -1,39 +0,0 @@ -using ExerciseTracker.StanimalTheMan.Models; -using ExerciseTracker.StanimalTheMan.Repository; - -namespace ExerciseTracker.StanimalTheMan.Services; - -public class ExerciseService -{ - private readonly IExerciseRepository _exerciseRepository; - - public ExerciseService(IExerciseRepository exerciseRepository) - { - _exerciseRepository = exerciseRepository; - } - - public void AddExercise(Run run) - { - _exerciseRepository.AddExercise(run); - } - - public Run GetExerciseById(int id) - { - return _exerciseRepository.GetExerciseById(id); - } - - public IEnumerable GetAllExercises() - { - return _exerciseRepository.GetAllExercises(); - } - - public void UpdateExercise(Run run) - { - _exerciseRepository.UpdateExercise(run); - } - - public void DeleteExercise(int id) - { - _exerciseRepository.DeleteExercise(id); - } -} diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/UserInput.cs b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/UserInput.cs deleted file mode 100644 index dae2f342..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/UserInput.cs +++ /dev/null @@ -1,141 +0,0 @@ -using ConsoleTableExt; -using ExerciseTracker.StanimalTheMan.Controllers; -using ExerciseTracker.StanimalTheMan.Models; -using Spectre.Console; -using static ExerciseTracker.StanimalTheMan.Enums; - -namespace ExerciseTracker.StanimalTheMan; - -public class UserInput -{ - public static void ShowMainMenu(ExerciseController exerciseController) - { - var isAppRunning = true; - while (isAppRunning) - { - Console.Clear(); - var option = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What would you like to do?") - .AddChoices( - MenuOptions.AddExercise, - MenuOptions.DeleteExercise, - MenuOptions.UpdateExercise, - MenuOptions.GetAllExercises, - MenuOptions.GetExerciseById, - MenuOptions.Quit)); - - var exercises = exerciseController.GetAllExercises().ToList(); - Console.WriteLine("Exercise List:"); - ConsoleTableBuilder - .From(exercises) - .WithFormat(ConsoleTableBuilderFormat.MarkDown) - .ExportAndWriteLine(); - - switch (option) - { - case MenuOptions.GetAllExercises: - Console.WriteLine("Press any key to return to main menu"); - Console.ReadLine(); - break; - case MenuOptions.GetExerciseById: - // prompt user for id; if that is not acceptable, will make api request to fetch all valid ids - int id = GetExerciseId(); - var exercise = exerciseController.GetExerciseById(id); - while (exercise == null) - { - Console.WriteLine("No exercise found with that id. Choose from table."); - id = GetExerciseId(); - exercise = exerciseController.GetExerciseById(id); - } - Console.WriteLine(ConsoleTableBuilder.From(new List { exercise }).Export()); - Console.WriteLine("Press any key to return to main menu..."); - Console.ReadLine(); - break; - case MenuOptions.AddExercise: - Console.WriteLine("Enter distance in miles (e.g. 1, 1.5, 2)"); - double distance; - while (!double.TryParse(Console.ReadLine(), out distance)) - { - Console.WriteLine("Invalid distance. Enter an id of the run you want to fetch info of"); - } - - Console.WriteLine("Enter Start Time of exercise: "); - var startTimeInfo = Utility.GetDateTimeInput(); - - Console.WriteLine("Enter End Time of exercise: "); - var endTimeInfo = Utility.GetDateTimeInput(); - while (endTimeInfo.dateTime < startTimeInfo.dateTime) - { - Console.WriteLine("End time has to be after start time. Enter End Time of shift:"); - endTimeInfo = Utility.GetDateTimeInput(); - } - - Console.WriteLine("Enter any comments on your run"); - string comments = Console.ReadLine(); - - TimeSpan duration = Utility.CalculateDuration(endTimeInfo.dateTime, startTimeInfo.dateTime); - exerciseController.AddExercise(new Run() { Distance = distance, DateStart = startTimeInfo.dateTime, DateEnd = endTimeInfo.dateTime, Duration = duration, Comments = comments }); - break; - case MenuOptions.UpdateExercise: - Console.WriteLine("Select id of exercise you want to update:"); - id = GetExerciseId(); - while (exerciseController.GetExerciseById(id) == null) - { - Console.WriteLine("No exercise found with that id. Choose from table."); - id = GetExerciseId(); - } - Console.WriteLine("Enter distance in miles (e.g. 1, 1.5, 2)"); - while (!double.TryParse(Console.ReadLine(), out distance)) - { - Console.WriteLine("Invalid distance. Enter an id of the run you want to fetch info of"); - } - - Console.WriteLine("Enter Start Time of exercise: "); - startTimeInfo = Utility.GetDateTimeInput(); - - Console.WriteLine("Enter End Time of exercise: "); - endTimeInfo = Utility.GetDateTimeInput(); - while (endTimeInfo.dateTime < startTimeInfo.dateTime) - { - Console.WriteLine("End time has to be after start time. Enter End Time of shift:"); - endTimeInfo = Utility.GetDateTimeInput(); - } - - Console.WriteLine("Enter any comments on your run"); - comments = Console.ReadLine(); - - duration = Utility.CalculateDuration(endTimeInfo.dateTime, startTimeInfo.dateTime); - exerciseController.UpdateExercise(new Run {Id = id, Distance = distance, DateStart = startTimeInfo.dateTime, DateEnd = endTimeInfo.dateTime, Duration = duration, Comments = comments }); - Console.WriteLine("Press any key to return to main menu."); - Console.ReadLine(); - break; - case MenuOptions.DeleteExercise: - Console.WriteLine("Select id of exercise you want to delete:"); - while (!Int32.TryParse(Console.ReadLine(), out id)) - { - Console.WriteLine("Invalid id. Enter an id of the exercise you want to delete"); - } - exerciseController.DeleteExercise(id); - Console.WriteLine("Press any key to return to main menu."); - Console.ReadLine(); - break; - case MenuOptions.Quit: - Console.WriteLine("Goodbye"); - isAppRunning = false; - break; - } - } - } - - internal static int GetExerciseId() - { - int id; - Console.WriteLine("Enter an id of the exercise you want to fetch"); - while (!Int32.TryParse(Console.ReadLine(), out id)) - { - Console.WriteLine("Invalid id. Enter an id of the run you want to fetch"); - } - return id; - } -} diff --git a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Utility.cs b/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Utility.cs deleted file mode 100644 index ecbc6440..00000000 --- a/ExerciseTracker.StanimalTheMan/ExerciseTracker.StanimalTheMan/Utility.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Globalization; - -namespace ExerciseTracker.StanimalTheMan; - -internal class Utility -{ - internal static (string dateTimeString, DateTime dateTime) GetDateTimeInput() - { - Console.Write("Enter a date and time (e.g., 'yyyy-MM-dd HH:mm'). Type 0 to return to main menu.\n\n"); - - string dateTimeInput = Console.ReadLine(); - - DateTime dateTime; - while (!DateTime.TryParseExact(dateTimeInput, "yyyy-MM-dd HH:mm", new CultureInfo("en-US"), DateTimeStyles.None, out dateTime)) - { - Console.WriteLine("\n\nNot a valid datetime. Please insert the datetime with the format: yyyy-MM-dd HH:mm.\n\n"); - dateTimeInput = Console.ReadLine(); - } - - Console.WriteLine(); - - return (dateTimeInput, dateTime); - } - - internal static TimeSpan CalculateDuration(DateTime endDateTime, DateTime startDateTime) - { - TimeSpan duration = endDateTime - startDateTime; - - return TimeSpan.Parse($"{duration.Hours}:{duration.Minutes}"); - } -} diff --git a/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/.gitignore b/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/.gitignore deleted file mode 100644 index d698efe4..00000000 --- a/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Rider ignored files -/modules.xml -/projectSettingsUpdater.xml -/contentModel.xml -/.idea.ExerciseTracker.StevieTV.iml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/dataSources.xml b/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/dataSources.xml deleted file mode 100644 index 9a630f11..00000000 --- a/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/dataSources.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - sqlserver.ms - true - com.microsoft.sqlserver.jdbc.SQLServerDriver - jdbc:sqlserver://localhost\MSSQLSERVER;database=exercise - $ProjectFileDir$ - - - - - - \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/indexLayout.xml b/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/indexLayout.xml deleted file mode 100644 index 7b08163c..00000000 --- a/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/indexLayout.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/vcs.xml b/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/vcs.xml deleted file mode 100644 index 6c0b8635..00000000 --- a/ExerciseTracker.StevieTV/.idea/.idea.ExerciseTracker.StevieTV/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV.sln b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV.sln deleted file mode 100644 index ff683f7f..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV.sln +++ /dev/null @@ -1,15 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.StevieTV", "ExerciseTracker.StevieTV\ExerciseTracker.StevieTV.csproj", "{60406FE4-50C8-41EB-BB74-BDEB641C7C9F}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {60406FE4-50C8-41EB-BB74-BDEB641C7C9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60406FE4-50C8-41EB-BB74-BDEB641C7C9F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60406FE4-50C8-41EB-BB74-BDEB641C7C9F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60406FE4-50C8-41EB-BB74-BDEB641C7C9F}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Controllers/ExerciseController.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Controllers/ExerciseController.cs deleted file mode 100644 index 6db44313..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Controllers/ExerciseController.cs +++ /dev/null @@ -1,29 +0,0 @@ -using ExerciseTracker.StevieTV.Models; -using ExerciseTracker.StevieTV.Services; - -namespace ExerciseTracker.StevieTV.Controllers; - -public class ExerciseController -{ - private readonly IExerciseService _exerciseService; - - public ExerciseController(IExerciseService exerciseService) - { - _exerciseService = exerciseService; - } - - public List GetExercises() - { - return _exerciseService.GetExercises(); - } - - public bool AddExercise(Exercise exercise) - { - return _exerciseService.AddExercise(exercise); - } - - public bool RemoveExercise(Exercise exercise) - { - return _exerciseService.RemoveExercise(exercise); - } -} \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Database/ExerciseContext.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Database/ExerciseContext.cs deleted file mode 100644 index 3c576f93..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Database/ExerciseContext.cs +++ /dev/null @@ -1,15 +0,0 @@ -using ExerciseTracker.StevieTV.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.StevieTV.Database; - -public class ExerciseContext : DbContext -{ - public DbSet Exercises { get; set; } - - public ExerciseContext(DbContextOptions options) : base(options) - { - } - -} - \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV.csproj b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV.csproj deleted file mode 100644 index c9ddc102..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Helpers/EnumExtensionMethods.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Helpers/EnumExtensionMethods.cs deleted file mode 100644 index 90681845..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Helpers/EnumExtensionMethods.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.ComponentModel; - -namespace ExerciseTracker.StevieTV.Helpers; - -public static class EnumExtensionMethods -{ - public static string GetEnumDescription(this Enum enumValue) - { - var fieldInfo = enumValue.GetType().GetField(enumValue.ToString()); - var descriptionAttributes = (DescriptionAttribute[]) fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); - - return descriptionAttributes.Length > 0 ? descriptionAttributes[0].Description : enumValue.ToString(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Migrations/20240121183604_Initialise.Designer.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Migrations/20240121183604_Initialise.Designer.cs deleted file mode 100644 index b3826572..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Migrations/20240121183604_Initialise.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using ExerciseTracker.StevieTV.Database; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.StevieTV.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20240121183604_Initialise")] - partial class Initialise - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.StevieTV.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comment") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Migrations/20240121183604_Initialise.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Migrations/20240121183604_Initialise.cs deleted file mode 100644 index c9ee37c5..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Migrations/20240121183604_Initialise.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.StevieTV.Migrations -{ - /// - public partial class Initialise : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "bigint", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comment = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Migrations/ExerciseContextModelSnapshot.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index 9e9a38be..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker.StevieTV.Database; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.StevieTV.Migrations -{ - [DbContext(typeof(ExerciseContext))] - partial class ExerciseContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.StevieTV.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comment") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Models/Exercise.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Models/Exercise.cs deleted file mode 100644 index 3f509f93..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Models/Exercise.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.StevieTV.Models; - -public class Exercise -{ - public long Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration { get; set; } - public string Comment { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Program.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Program.cs deleted file mode 100644 index 426ab310..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Program.cs +++ /dev/null @@ -1,30 +0,0 @@ -using ExerciseTracker.StevieTV.Controllers; -using ExerciseTracker.StevieTV.Database; -using ExerciseTracker.StevieTV.Repositories; -using ExerciseTracker.StevieTV.Services; -using ExerciseTracker.StevieTV.UserInterface; -using Microsoft.Extensions.Hosting; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; - -var builder = Host.CreateApplicationBuilder(); - -builder.Services.AddDbContext(options => -{ - options.UseSqlServer("server=localhost;initial catalog=exercise;Trusted_Connection=True;Integrated Security=SSPI;TrustServerCertificate=True"); -}); - -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Logging.ClearProviders(); - -var app = builder.Build(); - -var scope = app.Services.CreateScope(); -var exerciseServices = scope.ServiceProvider; -var exerciseController = exerciseServices.GetRequiredService(); - -Menu menu = new Menu(exerciseController); -menu.MainMenu(); diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Repositories/ExerciseRepository.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Repositories/ExerciseRepository.cs deleted file mode 100644 index 53de9776..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Data.Common; -using ExerciseTracker.StevieTV.Database; -using ExerciseTracker.StevieTV.Models; - -namespace ExerciseTracker.StevieTV.Repositories; - -public class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseContext _exerciseContext; - - public ExerciseRepository(ExerciseContext exerciseContext) - { - _exerciseContext = exerciseContext; - } - - public List GetExercises() - { - return _exerciseContext.Exercises.ToList(); - } - - public bool AddExercise(Exercise exercise) - { - _exerciseContext.Exercises.Add(exercise); - - try - { - _exerciseContext.SaveChanges(); - } - catch (DbException) - { - return false; - } - - return true; - } - - public bool RemoveExercise(Exercise exercise) - { - _exerciseContext.Exercises.Remove(exercise); - - try - { - _exerciseContext.SaveChanges(); - } - catch (DbException) - { - return false; - } - - return true; - } -} \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Repositories/IExerciseRepository.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Repositories/IExerciseRepository.cs deleted file mode 100644 index 86c680c8..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,10 +0,0 @@ -using ExerciseTracker.StevieTV.Models; - -namespace ExerciseTracker.StevieTV.Repositories; - -public interface IExerciseRepository -{ - List GetExercises(); - bool AddExercise(Exercise exercise); - bool RemoveExercise(Exercise exercise); -} \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Services/ExerciseService.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Services/ExerciseService.cs deleted file mode 100644 index 99375da0..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Services/ExerciseService.cs +++ /dev/null @@ -1,29 +0,0 @@ -using ExerciseTracker.StevieTV.Models; -using ExerciseTracker.StevieTV.Repositories; - -namespace ExerciseTracker.StevieTV.Services; - -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository _exerciseRepository; - - public ExerciseService(IExerciseRepository exerciseRepository) - { - _exerciseRepository = exerciseRepository; - } - - public List GetExercises() - { - return _exerciseRepository.GetExercises(); - } - - public bool AddExercise(Exercise exercise) - { - return _exerciseRepository.AddExercise(exercise); - } - - public bool RemoveExercise(Exercise exercise) - { - return _exerciseRepository.RemoveExercise(exercise); - } -} \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Services/IExerciseService.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Services/IExerciseService.cs deleted file mode 100644 index 65620e5f..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/Services/IExerciseService.cs +++ /dev/null @@ -1,10 +0,0 @@ -using ExerciseTracker.StevieTV.Models; - -namespace ExerciseTracker.StevieTV.Services; - -public interface IExerciseService -{ - List GetExercises(); - bool AddExercise(Exercise exercise); - bool RemoveExercise(Exercise exercise); -} \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/UserInterface/Menu.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/UserInterface/Menu.cs deleted file mode 100644 index 05a89a48..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/UserInterface/Menu.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System.Globalization; -using ExerciseTracker.StevieTV.Controllers; -using ExerciseTracker.StevieTV.Helpers; -using ExerciseTracker.StevieTV.Models; -using Spectre.Console; - -namespace ExerciseTracker.StevieTV.UserInterface; - -public class Menu -{ - private readonly ExerciseController _exerciseController; - - public Menu(ExerciseController exerciseController) - { - _exerciseController = exerciseController; - } - - public void MainMenu() - { - var exitMenu = false; - - while (!exitMenu) - { - AnsiConsole.Clear(); - AnsiConsole.Write(new FigletText("Exercise Tracker")); - - var menuSelection = new SelectionPrompt(); - menuSelection.Title("Please choose an option"); - menuSelection.AddChoice(MainMenuOptions.ViewExercises); - menuSelection.AddChoice(MainMenuOptions.AddExercise); - menuSelection.AddChoice(MainMenuOptions.DeleteExercise); - menuSelection.AddChoice(MainMenuOptions.Exit); - menuSelection.UseConverter(option => option.GetEnumDescription()); - - var selectedOption = AnsiConsole.Prompt(menuSelection); - - switch (selectedOption) - { - case MainMenuOptions.ViewExercises: - ViewExercises(); - break; - case MainMenuOptions.AddExercise: - AddExercise(); - break; - case MainMenuOptions.DeleteExercise: - DeleteExercise(); - break; - case MainMenuOptions.Exit: - exitMenu = true; - Environment.Exit(0); - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - } - - private void ViewExercises() - { - var exercises = _exerciseController.GetExercises(); - var sortedExercises = exercises.OrderBy(x => x.DateStart).ToList(); - var table = new Table(); - table.AddColumns("Start", "End", "Duration", "Comment"); - - foreach (var exercise in sortedExercises) - { - table.AddRow( - exercise.DateStart.ToString("g"), - exercise.DateEnd.ToString("g"), - $"{exercise.Duration.Hours}h {exercise.Duration.Minutes:00}m", - exercise.Comment - ); - } - - AnsiConsole.Clear(); - AnsiConsole.Write(new FigletText("Exercises Logged")); - AnsiConsole.Write(table); - - if (!AnsiConsole.Prompt(new ConfirmationPrompt("Press enter to continue"))) - Environment.Exit(0); - } - - private void AddExercise() - { - AnsiConsole.Clear(); - - AnsiConsole.Write(new FigletText("Add an Exercise") - .Color(Color.Green)); - - var date = UserInput.GetDate(); - var startTime = UserInput.GetTime(true); - var endTime = UserInput.GetTime(false, DateTime.ParseExact(startTime, @"H\:m", CultureInfo.InvariantCulture)); - var dateStart = DateTime.ParseExact($"{date} {startTime}", "dd/MM/yy HH:mm", CultureInfo.InvariantCulture); - var dateEnd = DateTime.ParseExact($"{date} {endTime}", "dd/MM/yy HH:mm", CultureInfo.InvariantCulture); - var duration = dateEnd - dateStart; - var comment = UserInput.GetComment(); - - - var exercise = new Exercise - { - DateStart = dateStart, - DateEnd = dateEnd, - Duration = duration, - Comment = comment - }; - - var result = _exerciseController.AddExercise(exercise); - - if (!result) - { - AnsiConsole.Prompt(new ConfirmationPrompt("Unable to record this exercise. Press enter to continue")); - } - else if (!AnsiConsole.Prompt(new ConfirmationPrompt("Exercise Added - Do you wish to do more?"))) - { - Environment.Exit(0); - } - } - - private void DeleteExercise() - { - AnsiConsole.Clear(); - AnsiConsole.Write(new FigletText("Delete an Exercise") - .Color(Color.Red)); - - var selectedExercise = SelectExercise(); - - if (selectedExercise.Id == 0) return; - - var result = _exerciseController.RemoveExercise(selectedExercise); - - if (!result) - { - AnsiConsole.Prompt(new ConfirmationPrompt("Unable to delete this exercise. Press enter to continue")); - } - else if (!AnsiConsole.Prompt(new ConfirmationPrompt("Exercise Deleted - Do you wish to do more?"))) - { - Environment.Exit(0); - } - } - - private Exercise SelectExercise() - { - var exercises = _exerciseController.GetExercises(); - var sortedExercises = exercises.OrderBy(x => x.DateStart).ToList(); - - var selectOptions = new SelectionPrompt(); - selectOptions.AddChoice(new Exercise() {Id = 0}); - selectOptions.AddChoices(sortedExercises); - selectOptions.UseConverter(exercise => (exercise.Id == 0 ? "CANCEL" : $"On {exercise.DateStart.ToShortDateString()} @ {exercise.DateStart.ToShortTimeString()} for {exercise.Duration.ToString()}- ({exercise.Comment})")); - - var selectedExercise = AnsiConsole.Prompt(selectOptions); - - return selectedExercise; - } -} \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/UserInterface/MenuOptions.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/UserInterface/MenuOptions.cs deleted file mode 100644 index c59c50d2..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/UserInterface/MenuOptions.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.ComponentModel; - -namespace ExerciseTracker.StevieTV.UserInterface; - -public enum MainMenuOptions -{ - [Description("View Exercises")] - ViewExercises, - [Description("Add an Exercise")] - AddExercise, - [Description("Delete an Exercise")] - DeleteExercise, - [Description("Exit")] - Exit -} \ No newline at end of file diff --git a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/UserInterface/UserInput.cs b/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/UserInterface/UserInput.cs deleted file mode 100644 index 12559226..00000000 --- a/ExerciseTracker.StevieTV/ExerciseTracker.StevieTV/UserInterface/UserInput.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Globalization; -using Spectre.Console; - -namespace ExerciseTracker.StevieTV.UserInterface; - -public class UserInput -{ - public static string GetDate(DateTime? currentDate = null) - { - return AnsiConsole.Prompt(new TextPrompt("Exercise Date (dd/mm/yy):") - .DefaultValue(currentDate != null ? currentDate.Value.ToShortDateString() : DateTime.Now.ToString("dd/MM/yy")) - .Validate( - x => DateTime.TryParseExact(x, "dd/MM/yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out _), - "Please enter a valid Exercise date in the format dd/mm/yy")); - } - - public static string GetTime(bool isStartTime, DateTime? startTime = null) - { - if (isStartTime) - { - return AnsiConsole.Prompt(new TextPrompt("Start Exercise Time (hh:mm):") - .DefaultValue(startTime != null ? startTime.Value.ToShortTimeString() : DateTime.Now.ToString("HH:mm")) - .Validate( - x => DateTime.TryParseExact(x, @"H\:m", CultureInfo.InvariantCulture, DateTimeStyles.None, out _), - "Please enter a valid Exercise time in the format hh:mm") - ); - } - return AnsiConsole.Prompt(new TextPrompt("End Exercise Time (hh:mm):") - .DefaultValue(startTime != null ? startTime.Value.ToShortTimeString() : DateTime.Now.ToString("HH:mm")) - .Validate( - x => DateTime.TryParseExact(x, @"H\:m", CultureInfo.InvariantCulture, DateTimeStyles.None, out var parsedTime) && TimeOnly.FromDateTime(parsedTime) > TimeOnly.FromDateTime(startTime.Value), - "Please enter a valid Exercise time in the format hh:mm, that is also later that your exercise start time") - ); - } - - public static string GetComment(string currentComment = "") - { - return AnsiConsole.Prompt(new TextPrompt("Exercise comment (optional):") - .DefaultValue(currentComment)); - } -} \ No newline at end of file diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze.sln b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze.sln deleted file mode 100644 index 4d8d36a9..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze.sln +++ /dev/null @@ -1,16 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.UgniusFalze", "ExerciseTracker.UgniusFalze\ExerciseTracker.UgniusFalze.csproj", "{B8226AED-E180-479E-9B89-76C3A120D83A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B8226AED-E180-479E-9B89-76C3A120D83A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B8226AED-E180-479E-9B89-76C3A120D83A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B8226AED-E180-479E-9B89-76C3A120D83A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B8226AED-E180-479E-9B89-76C3A120D83A}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Controllers/ExerciseController.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Controllers/ExerciseController.cs deleted file mode 100644 index a5164893..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Controllers/ExerciseController.cs +++ /dev/null @@ -1,34 +0,0 @@ -using ExerciseTracker.UgniusFalze.Models; -using ExerciseTracker.UgniusFalze.Services; - -namespace ExerciseTracker.UgniusFalze.Controllers; - -public class ExerciseController -{ - private readonly IExerciseService ExerciseService; - - public ExerciseController(IExerciseService exerciseService) - { - ExerciseService = exerciseService; - } - - public List GetExercises() - { - return ExerciseService.GetExercises(); - } - - public bool AddExercise(Pullup pullup) - { - return ExerciseService.AddExercise(pullup); - } - - public bool UpdateExercise(Pullup pullup) - { - return ExerciseService.UpdateExercise(pullup); - } - - public bool DeleteExercise(int id) - { - return ExerciseService.DeleteExercise(id); - } -} \ No newline at end of file diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze.csproj b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze.csproj deleted file mode 100644 index 7ef59da0..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Menu.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Menu.cs deleted file mode 100644 index 099fe6e2..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Menu.cs +++ /dev/null @@ -1,98 +0,0 @@ -using ExerciseTracker.UgniusFalze.Controllers; -using ExerciseTracker.UgniusFalze.Models; -using ExerciseTracker.UgniusFalze.Utils; -using Spectre.Console; - -namespace ExerciseTracker.UgniusFalze; - -public class Menu(ExerciseController exerciseController) -{ - public void Start() - { - var exit = false; - do - { - AnsiConsole.Clear(); - var choice = UserInput.DisplayInitialMenu(); - switch (choice) - { - case InitialMenuOptions.ViewExercises: - var pullups = exerciseController.GetExercises(); - Display.DisplayExercises(pullups); - break; - case InitialMenuOptions.AddExercise: - AddExercise(); - break; - case InitialMenuOptions.ManageExercises: - ManageExercises(); - break; - case InitialMenuOptions.Exit: - exit = true; - break; - } - } while (!exit); - } - - private void AddExercise() - { - var startDate = UserInput.GetStartDate(); - var endDate = UserInput.GetEndDate(startDate); - var comment = UserInput.GetCommentInput(); - var reps = UserInput.GetRepetitionInput(); - var exercise = new Pullup - { Comment = comment, DateEnd = endDate, DateStart = startDate, PullupId = 0, Repetitions = reps }; - if (exerciseController.AddExercise(exercise) == false) - { - Display.FailedToInsert(); - } - - Display.InsertSucceeded(); - Display.Continue(); - } - - private void ManageExercises() - { - var exercise = UserInput.GetExerciseToManage(exerciseController.GetExercises()); - if (exercise == null) - { - return; - } - - var choice = UserInput.DisplayManageMenu(); - switch (choice) - { - case ManageMenuOptions.UpdateComment: - var comment = UserInput.GetCommentInput(); - exercise.Comment = comment; - break; - case ManageMenuOptions.UpdateRepetitions: - var repetitions = UserInput.GetRepetitionInput(); - exercise.Repetitions = repetitions; - break; - case ManageMenuOptions.UpdateStartDate: - var startDate = UserInput.GetStartDate(exercise.DateEnd); - exercise.DateStart = startDate; - break; - case ManageMenuOptions.UpdateEndDate: - var endDate = UserInput.GetEndDate(exercise.DateStart); - exercise.DateEnd = endDate; - break; - case ManageMenuOptions.Delete: - if (exerciseController.DeleteExercise(exercise.PullupId) == false) - { - Display.FailedToDelete(); - } - Display.Continue(); - return; - case ManageMenuOptions.Exit: - return; - } - - if (exerciseController.UpdateExercise(exercise) == false) - { - Display.FailedToUpdate(); - } - Display.UpdateSucceeded(); - Display.Continue(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Migrations/PullUpContextModelSnapshot.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Migrations/PullUpContextModelSnapshot.cs deleted file mode 100644 index a69f17b3..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Migrations/PullUpContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker.UgniusFalze.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.UgniusFalze.Migrations -{ - [DbContext(typeof(PullUpContext))] - partial class PullUpContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.UgniusFalze.Models.Pullup", b => - { - b.Property("PullupId") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("PullupId")); - - b.Property("Comment") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Repetitions") - .HasColumnType("int"); - - b.HasKey("PullupId"); - - b.ToTable("Pullups"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Models/PullUpContext.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Models/PullUpContext.cs deleted file mode 100644 index a1ce56fb..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Models/PullUpContext.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.UgniusFalze.Models; - -public class PullUpContext:DbContext -{ - public PullUpContext(DbContextOptions options) - : base(options) - { - - } - - public DbSet Pullups { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Models/Pullup.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Models/Pullup.cs deleted file mode 100644 index a58444d9..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Models/Pullup.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace ExerciseTracker.UgniusFalze.Models; - -public class Pullup -{ - public int PullupId { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public string Comment { get; set; } - public int Repetitions { get; set; } - - public TimeSpan Duration => DateEnd - DateStart; -} \ No newline at end of file diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Program.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Program.cs deleted file mode 100644 index bb85425f..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Program.cs +++ /dev/null @@ -1,25 +0,0 @@ -using ExerciseTracker.UgniusFalze; -using ExerciseTracker.UgniusFalze.Controllers; -using ExerciseTracker.UgniusFalze.Models; -using ExerciseTracker.UgniusFalze.Repositories; -using ExerciseTracker.UgniusFalze.Services; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; - -var builder = Host.CreateApplicationBuilder(args); -builder.Services - .AddDbContext(opt => - opt.UseSqlServer( - "Server=(LocalDb)\\MSSQLLocalDB;Initial Catalog=ExerciseTracker;Integrated Security=SSPI;Trusted_Connection=yes")) - .AddScoped() - .AddScoped() - .AddTransient(); -builder.Logging.AddFilter("Microsoft.EntityFrameworkCore", LogLevel.Warning); -var app = builder.Build(); - -using var scope = app.Services.CreateScope(); -var controller = scope.ServiceProvider.GetRequiredService(); -var menu = new Menu(controller); -menu.Start(); \ No newline at end of file diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Repositories/ExerciseRepository.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Repositories/ExerciseRepository.cs deleted file mode 100644 index a5d4f3ed..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,61 +0,0 @@ -using ExerciseTracker.UgniusFalze.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.UgniusFalze.Repositories; - -public class ExerciseRepository(PullUpContext pullUpContext) : IExerciseRepository -{ - public List GetExercises() - { - return pullUpContext.Pullups.ToList(); - } - - public bool InsertExercise(Pullup pullup) - { - pullUpContext.Pullups.Add(pullup); - try - { - pullUpContext.SaveChanges(); - } - catch(DbUpdateException) - { - return false; - } - - return true; - } - - public bool UpdateExercise(Pullup pullup) - { - pullUpContext.Pullups.Update(pullup); - try - { - pullUpContext.SaveChanges(); - } - catch(DbUpdateException) - { - return false; - } - return true; - } - - public bool DeleteExercise(int id) - { - var exercise = pullUpContext.Pullups.Find(id); - if (exercise == null) - { - return false; - } - - pullUpContext.Pullups.Remove(exercise); - try - { - pullUpContext.SaveChanges(); - } - catch(DbUpdateException) - { - return false; - } - return true; - } -} \ No newline at end of file diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Repositories/IExerciseRepository.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Repositories/IExerciseRepository.cs deleted file mode 100644 index 73a3a56f..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,11 +0,0 @@ -using ExerciseTracker.UgniusFalze.Models; - -namespace ExerciseTracker.UgniusFalze.Repositories; - -public interface IExerciseRepository -{ - public List GetExercises(); - public bool InsertExercise(Pullup pullup); - public bool UpdateExercise(Pullup pullup); - public bool DeleteExercise(int id); -} \ No newline at end of file diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Services/ExerciseService.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Services/ExerciseService.cs deleted file mode 100644 index 6c211257..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Services/ExerciseService.cs +++ /dev/null @@ -1,30 +0,0 @@ -using ExerciseTracker.UgniusFalze.Models; -using ExerciseTracker.UgniusFalze.Repositories; - -namespace ExerciseTracker.UgniusFalze.Services; - -public class ExerciseService(IExerciseRepository exerciseRepository) : IExerciseService -{ - private readonly IExerciseRepository ExerciseRepository = exerciseRepository; - - public List GetExercises() - { - return ExerciseRepository.GetExercises(); - } - - public bool DeleteExercise(int id) - { - return ExerciseRepository.DeleteExercise(id); - } - - public bool UpdateExercise(Pullup pullup) - { - return ExerciseRepository.UpdateExercise(pullup); - } - - public bool AddExercise(Pullup pullup) - { - return ExerciseRepository.InsertExercise(pullup); - } - -} \ No newline at end of file diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Services/IExerciseService.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Services/IExerciseService.cs deleted file mode 100644 index f4125326..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Services/IExerciseService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using ExerciseTracker.UgniusFalze.Models; - -namespace ExerciseTracker.UgniusFalze.Services; - -public interface IExerciseService -{ - public List GetExercises(); - public bool UpdateExercise(Pullup pullup); - public bool AddExercise(Pullup pullup); - public bool DeleteExercise(int id); -} \ No newline at end of file diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Utils/Display.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Utils/Display.cs deleted file mode 100644 index a2b825b1..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Utils/Display.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Globalization; -using ExerciseTracker.UgniusFalze.Models; -using Spectre.Console; - -namespace ExerciseTracker.UgniusFalze.Utils; - - -public static class Display -{ - public static void DisplayExercises(List exercises) - { - if (exercises.Count == 0) - { - EmptyExercises(); - Continue(); - return; - } - var table = new Table(); - table.Title("Your current exercises"); - table.AddColumns("Start Date", "End date", "Comment", "Duration in minutes", "Repetitions"); - foreach (var exercise in exercises) - { - table.AddRow(exercise.DateStart.ToString(CultureInfo.CurrentCulture), - exercise.DateEnd.ToString(CultureInfo.CurrentCulture), exercise.Comment, exercise.Duration.TotalMinutes.ToString(CultureInfo.CurrentCulture), exercise.Repetitions.ToString()); - } - - AnsiConsole.Write(table); - Continue(); - } - - public static void Continue() - { - Console.WriteLine("Press any key to continue.."); - Console.ReadKey(); - } - - public static string InvalidDate() - { - return "Your entered date is invalid, please use mm/dd/yyyy format"; - } - - public static void FailedToInsert() - { - Console.WriteLine("Failed to insert new exercise"); - } - - public static void FailedToUpdate() - { - Console.WriteLine("Failed to update exercise"); - } - - public static void FailedToDelete() - { - Console.WriteLine("Failed to delete exercise"); - } - - public static void EmptyExercises() - { - Console.WriteLine("There are currently no exercises"); - } - - public static void UpdateSucceeded() - { - Console.WriteLine("Exercise updated successfully"); - } - - public static void InsertSucceeded() - { - Console.WriteLine("Exercise inserted successfully"); - } - -} \ No newline at end of file diff --git a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Utils/UserInput.cs b/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Utils/UserInput.cs deleted file mode 100644 index c4583743..00000000 --- a/ExerciseTracker.UgniusFalze/ExerciseTracker.UgniusFalze/Utils/UserInput.cs +++ /dev/null @@ -1,149 +0,0 @@ -using System.Text.RegularExpressions; -using ExerciseTracker.UgniusFalze.Models; -using Spectre.Console; - -namespace ExerciseTracker.UgniusFalze.Utils; - -public enum InitialMenuOptions -{ - ViewExercises, - ManageExercises, - AddExercise, - Exit -} - -public enum ManageMenuOptions -{ - UpdateComment, - UpdateStartDate, - UpdateEndDate, - UpdateRepetitions, - Delete, - Exit -} - -public static partial class UserInput -{ - public static InitialMenuOptions DisplayInitialMenu() - { - var selectionPrompt = new SelectionPrompt() - .AddChoices( - InitialMenuOptions.ViewExercises, - InitialMenuOptions.ManageExercises, - InitialMenuOptions.AddExercise, - InitialMenuOptions.Exit); - AddConverter(selectionPrompt); - var choice = AnsiConsole.Prompt(selectionPrompt); - return choice; - } - - private static void AddConverter(SelectionPrompt selectionPrompt) where T : System.Enum - { - selectionPrompt.Converter = arg => EnumRegex().Replace(arg.ToString(), " $1"); - } - -public static Pullup? GetExerciseToManage(List exercises) - { - if (exercises.Count == 0) - { - Display.EmptyExercises(); - Display.Continue(); - return null; - } - var selectionPrompt = new SelectionPrompt(); - selectionPrompt.Title("Select which exercise you want to manage"); - selectionPrompt.Converter = pullup => $"{pullup.PullupId} {pullup.Duration.TotalMinutes} {pullup.Comment}"; - foreach (var exercise in exercises) - { - selectionPrompt.AddChoice(exercise); - } - - var choice = AnsiConsole.Prompt(selectionPrompt); - return choice; - } - - private static T GetInput(string message) - { - var textPrompt = AnsiConsole.Ask(message); - return textPrompt; - } - - public static string GetCommentInput() - { - return GetInput("Please enter the comment for your exercise: "); - } - - public static int GetRepetitionInput() - { - var prompt = new TextPrompt("Please enter your total repetitions for this exercise: "); - prompt.Validate(repetition => repetition < 0 ? ValidationResult.Error("Repetitions must be greater or equal to zero.") : ValidationResult.Success()); - return AnsiConsole.Prompt(prompt); - } - - public static ManageMenuOptions DisplayManageMenu() - { - var selectionPrompt = new SelectionPrompt() - .AddChoices( - ManageMenuOptions.UpdateComment, - ManageMenuOptions.UpdateStartDate, - ManageMenuOptions.UpdateEndDate, - ManageMenuOptions.UpdateRepetitions, - ManageMenuOptions.Delete, - ManageMenuOptions.Exit - ); - AddConverter(selectionPrompt); - var choice = AnsiConsole.Prompt(selectionPrompt); - return choice; - } - - public static DateTime GetStartDate(DateTime? endDate = null) - { - var textPrompt = new TextPrompt("Enter the starting date for the exercise") - .ValidationErrorMessage(Display.InvalidDate()); - if (endDate != null) - { - textPrompt.Validate( - startDate => - { - if (endDate > startDate) - { - return ValidationResult.Success(); - } - else - { - return ValidationResult.Error( - $"Start date should be lower than the end date, end date is {endDate.ToString()}"); - } - }); - } - - return AnsiConsole.Prompt(textPrompt); - } - - public static DateTime GetEndDate(DateTime? startDate = null) - { - var textPrompt = new TextPrompt("Enter the starting date for the exercise") - .ValidationErrorMessage(Display.InvalidDate()); - if (startDate != null) - { - textPrompt.Validate( - endDate => - { - if (endDate > startDate) - { - return ValidationResult.Success(); - } - else - { - return ValidationResult.Error( - $"End date should be lower than the start date, start date is {startDate.ToString()}"); - } - }); - } - - return AnsiConsole.Prompt(textPrompt); - } - - [GeneratedRegex("(\\B[A-Z])")] - private static partial Regex EnumRegex(); -} \ No newline at end of file diff --git a/ExerciseTracker.Vocalnight/Controller/ExcerciseController.cs b/ExerciseTracker.Vocalnight/Controller/ExcerciseController.cs deleted file mode 100644 index 18379681..00000000 --- a/ExerciseTracker.Vocalnight/Controller/ExcerciseController.cs +++ /dev/null @@ -1,59 +0,0 @@ -using Exercise_Tracker.Model; -using Exercise_Tracker.Services; -using System.Globalization; - -namespace Exercise_Tracker.Controller -{ - internal class ExcerciseController - { - private readonly ExcerciseService _service; - - public ExcerciseController(ExcerciseService service) - { - _service = service; - } - - public void AddExercise(Exercise exercise) - { - _service.AddExercise(exercise); - } - - public IEnumerable GetExercises() - { - return _service.GetExercises(); - } - - public void RemoveExercise(int id) - { - _service.RemoveRegistry(id); - } - - public string checkTimeValidity( string time ) - { - while (!DateTime.TryParseExact(time, "HH:mm", new CultureInfo("en-US"), DateTimeStyles.None, out _)) - { - Console.Clear(); - Console.WriteLine("\nInvalid time. Try again:\n"); - time = Console.ReadLine(); - } - - return time; - } - - public string checkTimeChronology( string startTime, string endTime ) - { - DateTime start = DateTime.Parse(startTime); - DateTime end = DateTime.Parse(endTime); - - while (DateTime.Compare(start, end) > 0) - { - Console.Clear(); - Console.WriteLine("The end time is earlier than the start time, please insert a valid time!"); - endTime = Console.ReadLine(); - end = DateTime.Parse(endTime); - } - - return endTime; - } - } -} diff --git a/ExerciseTracker.Vocalnight/ExerciseTracker.Vocalnight.csproj b/ExerciseTracker.Vocalnight/ExerciseTracker.Vocalnight.csproj deleted file mode 100644 index 23644c38..00000000 --- a/ExerciseTracker.Vocalnight/ExerciseTracker.Vocalnight.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - diff --git a/ExerciseTracker.Vocalnight/ExerciseTracker.Vocalnight.sln b/ExerciseTracker.Vocalnight/ExerciseTracker.Vocalnight.sln deleted file mode 100644 index a4154349..00000000 --- a/ExerciseTracker.Vocalnight/ExerciseTracker.Vocalnight.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34309.116 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.Vocalnight", "ExerciseTracker.Vocalnight.csproj", "{E6F33098-D5D3-48A7-BB5A-28EA601F9186}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E6F33098-D5D3-48A7-BB5A-28EA601F9186}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E6F33098-D5D3-48A7-BB5A-28EA601F9186}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E6F33098-D5D3-48A7-BB5A-28EA601F9186}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E6F33098-D5D3-48A7-BB5A-28EA601F9186}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {93FB9142-FE7D-46AE-8F61-FF9CD78E9EB5} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.Vocalnight/ExerciseTrackerContext.cs b/ExerciseTracker.Vocalnight/ExerciseTrackerContext.cs deleted file mode 100644 index 17e11e7a..00000000 --- a/ExerciseTracker.Vocalnight/ExerciseTrackerContext.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Exercise_Tracker.Model; -using Microsoft.Data.SqlClient; -using Microsoft.EntityFrameworkCore; - -namespace Exercise_Tracker -{ - public class ExerciseTrackerContext : DbContext - { - // Declare the tables with DbSet - DbSet exercises { get; set; } - - protected override void OnConfiguring( DbContextOptionsBuilder optionsBuilder ) - { - SqlConnectionStringBuilder builder = new(); - - builder.DataSource = "(localdb)\\mssqllocaldb"; - builder.InitialCatalog = "ExerciseTracker"; - builder.IntegratedSecurity = true; - builder.TrustServerCertificate = true; - builder.MultipleActiveResultSets = true; - builder.ConnectTimeout = 3; - - string? connection = builder.ConnectionString; - - optionsBuilder.UseSqlServer( connection ); - } - } -} diff --git a/ExerciseTracker.Vocalnight/Interfaces/IExcerciseRepository.cs b/ExerciseTracker.Vocalnight/Interfaces/IExcerciseRepository.cs deleted file mode 100644 index 1aaa69c9..00000000 --- a/ExerciseTracker.Vocalnight/Interfaces/IExcerciseRepository.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Exercise_Tracker.Model; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Exercise_Tracker.Interfaces -{ - public interface IExcerciseRepository - { - Exercise SearchById( int id ); - - IEnumerable GetAll(); - - void AddRegistry( Exercise exercise ); - void RemoveRegistry( int id ); - - void UpdateRegistry( Exercise exercise ); - } -} diff --git a/ExerciseTracker.Vocalnight/Migrations/20230723231241_InitialCreate.Designer.cs b/ExerciseTracker.Vocalnight/Migrations/20230723231241_InitialCreate.Designer.cs deleted file mode 100644 index 9681da51..00000000 --- a/ExerciseTracker.Vocalnight/Migrations/20230723231241_InitialCreate.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using Exercise_Tracker; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Exercise_Tracker.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - [Migration("20230723231241_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.9") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("Exercise_Tracker.Model.Pushup", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("TimeSpan") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Pushups"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Vocalnight/Migrations/20230723231241_InitialCreate.cs b/ExerciseTracker.Vocalnight/Migrations/20230723231241_InitialCreate.cs deleted file mode 100644 index 4958f552..00000000 --- a/ExerciseTracker.Vocalnight/Migrations/20230723231241_InitialCreate.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Exercise_Tracker.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Pushups", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - TimeSpan = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Pushups", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Pushups"); - } - } -} diff --git a/ExerciseTracker.Vocalnight/Migrations/20231115185408_newTableLayout202311.Designer.cs b/ExerciseTracker.Vocalnight/Migrations/20231115185408_newTableLayout202311.Designer.cs deleted file mode 100644 index 32402aaf..00000000 --- a/ExerciseTracker.Vocalnight/Migrations/20231115185408_newTableLayout202311.Designer.cs +++ /dev/null @@ -1,59 +0,0 @@ -// -using System; -using Exercise_Tracker; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Exercise_Tracker.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - [Migration("20231115185408_newTableLayout202311")] - partial class newTableLayout202311 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.9") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("Exercise_Tracker.Model.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("ExerciseType") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Vocalnight/Migrations/20231115185408_newTableLayout202311.cs b/ExerciseTracker.Vocalnight/Migrations/20231115185408_newTableLayout202311.cs deleted file mode 100644 index c0327a6b..00000000 --- a/ExerciseTracker.Vocalnight/Migrations/20231115185408_newTableLayout202311.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Exercise_Tracker.Migrations -{ - /// - public partial class newTableLayout202311 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Pushups"); - - migrationBuilder.CreateTable( - name: "exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - ExerciseType = table.Column(type: "int", nullable: false), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "exercises"); - - migrationBuilder.CreateTable( - name: "Pushups", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Comments = table.Column(type: "nvarchar(max)", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - DateStart = table.Column(type: "datetime2", nullable: false), - TimeSpan = table.Column(type: "time", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Pushups", x => x.Id); - }); - } - } -} diff --git a/ExerciseTracker.Vocalnight/Migrations/ExerciseTrackerContextModelSnapshot.cs b/ExerciseTracker.Vocalnight/Migrations/ExerciseTrackerContextModelSnapshot.cs deleted file mode 100644 index 010d0fa0..00000000 --- a/ExerciseTracker.Vocalnight/Migrations/ExerciseTrackerContextModelSnapshot.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using Exercise_Tracker; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Exercise_Tracker.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - partial class ExerciseTrackerContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.9") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("Exercise_Tracker.Model.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("ExerciseType") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.Vocalnight/Model/Exercise.cs b/ExerciseTracker.Vocalnight/Model/Exercise.cs deleted file mode 100644 index d6ad1b15..00000000 --- a/ExerciseTracker.Vocalnight/Model/Exercise.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Exercise_Tracker.Model -{ - public class Exercise - { - [Key] - public int Id { get; set; } - public ExerciseEnum ExerciseType { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration { get; set; } - public string? Comments { get; set; } - } -} diff --git a/ExerciseTracker.Vocalnight/Model/ExerciseEnum.cs b/ExerciseTracker.Vocalnight/Model/ExerciseEnum.cs deleted file mode 100644 index 0538f495..00000000 --- a/ExerciseTracker.Vocalnight/Model/ExerciseEnum.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Exercise_Tracker.Model -{ - public enum ExerciseEnum - { - Cardio = 1, - PushUp = 2 - - } -} diff --git a/ExerciseTracker.Vocalnight/Program.cs b/ExerciseTracker.Vocalnight/Program.cs deleted file mode 100644 index 6b0a298a..00000000 --- a/ExerciseTracker.Vocalnight/Program.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Exercise_Tracker; -using Exercise_Tracker.Controller; -using Exercise_Tracker.Model; -using Exercise_Tracker.Repository; -using Exercise_Tracker.Services; - - -//Instance of the context db -var dbContenxt = new ExerciseTrackerContext(); - -// Repository connects with the generic context of whichever db you are using -var repository = new ExcerciseRepository(dbContenxt); - -//Service connects to the repository and receives data from controller. -var service = new ExcerciseService(repository); -var controller = new ExcerciseController(service); - -//Insert the controller into the view -var view = new UserInput(controller); - -view.Run(); - - diff --git a/ExerciseTracker.Vocalnight/Repository/ExcerciseRepository.cs b/ExerciseTracker.Vocalnight/Repository/ExcerciseRepository.cs deleted file mode 100644 index 49558827..00000000 --- a/ExerciseTracker.Vocalnight/Repository/ExcerciseRepository.cs +++ /dev/null @@ -1,47 +0,0 @@ -using Exercise_Tracker.Interfaces; -using Exercise_Tracker.Model; - -namespace Exercise_Tracker.Repository -{ - public class ExcerciseRepository : IExcerciseRepository - { - private readonly ExerciseTrackerContext _context; - - public ExcerciseRepository(ExerciseTrackerContext context) - { - _context = context; - } - - public void AddRegistry( Exercise exercise ) - { - _context.Add(exercise); - _context.SaveChanges(); - } - - public IEnumerable GetAll() - { - return _context.Set().ToList(); - } - - public void RemoveRegistry( int id ) - { - var dbAcess = _context.Set().Find(id); - if (dbAcess != null) - { - _context.Remove(dbAcess); - _context.SaveChanges(); - } - } - - public Exercise SearchById( int id ) - { - return _context.Find(id); - } - - public void UpdateRegistry( Exercise exercise ) - { - _context.Update(exercise); - _context.SaveChanges(); - } - } -} diff --git a/ExerciseTracker.Vocalnight/Services/ExcerciseService.cs b/ExerciseTracker.Vocalnight/Services/ExcerciseService.cs deleted file mode 100644 index b976b4cc..00000000 --- a/ExerciseTracker.Vocalnight/Services/ExcerciseService.cs +++ /dev/null @@ -1,53 +0,0 @@ -using Exercise_Tracker.Interfaces; -using Exercise_Tracker.Model; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Exercise_Tracker.Services -{ - internal class ExcerciseService - { - private readonly IExcerciseRepository exerciseRepository; - - public ExcerciseService(IExcerciseRepository exerciseRepository ) - { - this.exerciseRepository = exerciseRepository; - } - - public void AddExercise(Exercise exercise) - { - if (exercise != null) - { - exerciseRepository.AddRegistry(exercise); - } - } - - public IEnumerable GetExercises() - { - return exerciseRepository.GetAll(); - } - - public void RemoveRegistry(int id) - { - List exercises = (List)GetExercises(); - - if (exercises.Where(e => e.Id == id).Count() == 0) - { - Console.Clear(); - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("Id not valid. Try again\n"); - Console.ForegroundColor = ConsoleColor.White; - return; - } - - exerciseRepository.RemoveRegistry(id); - Console.Clear(); - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine("\nRegistry removed!\n"); - Console.ForegroundColor = ConsoleColor.White; - } - } -} diff --git a/ExerciseTracker.Vocalnight/UserInput.cs b/ExerciseTracker.Vocalnight/UserInput.cs deleted file mode 100644 index b29c194c..00000000 --- a/ExerciseTracker.Vocalnight/UserInput.cs +++ /dev/null @@ -1,172 +0,0 @@ -using ConsoleTableExt; -using Exercise_Tracker.Controller; -using Exercise_Tracker.Model; - -namespace Exercise_Tracker -{ - internal class UserInput - { - private readonly ExcerciseController excerciseController; - - public UserInput(ExcerciseController excerciseController ) - { - this.excerciseController = excerciseController; - } - - public void Menu() - { - Console.WriteLine("Welcome, what would you like to do? Select with the numpad."); - Console.WriteLine("1 - Add exercise"); - Console.WriteLine("2 - Remove exercise"); - Console.WriteLine("3 - See exercise list"); - Console.WriteLine("4 - Leave application"); - } - - - public void Run() - { - while (true) { - - Menu(); - - var key = Console.ReadKey(false).Key; - - switch (key) - { - case ConsoleKey.NumPad1: - Console.Clear(); - ExerciseSelection(); - break; - case ConsoleKey.NumPad2: - Console.Clear(); - RemoveExercise(); - break; - case ConsoleKey.NumPad3: - Console.Clear(); - ShowExercises(); - break; - case ConsoleKey.NumPad4: - Console.Clear(); - Console.WriteLine("Bye!"); - return; - default: - Console.Clear(); - Console.WriteLine("Invalid input."); - break; - - } - } - } - - private void RemoveExercise() - { - int id; - - while (true) - { - ShowExercises(); - Console.WriteLine("\nType the Id of the Exercise you wish to remove."); - - if (Int32.TryParse(Console.ReadLine(), out id)) { - excerciseController.RemoveExercise(id); - break; - - } - else - { - Console.Clear(); - Console.WriteLine("\nNot a valid number, try again"); - } - - } - } - - private void ShowExercises() - { - var tableBuilder = ConsoleTableBuilder.From((List)excerciseController.GetExercises()) - .WithFormat(ConsoleTableBuilderFormat.Minimal); - - // Print the table to the console - tableBuilder.ExportAndWriteLine(); - Console.WriteLine("\n"); - } - - private void ExerciseSelection() - { - Console.WriteLine("What exercise would you like to track? Select with the numpad."); - Console.WriteLine("1 - Push-Ups"); - Console.WriteLine("2 - Cardio"); - Console.WriteLine("3 - Exit"); - - var key = Console.ReadKey(false).Key; - Console.Clear(); - - if (key == ConsoleKey.NumPad1) - { - AddNewExercise(ExerciseEnum.PushUp); - - } - else if (key == ConsoleKey.NumPad2) - { - AddNewExercise(ExerciseEnum.Cardio); - - } - else if (key == ConsoleKey.NumPad3) - { - Console.WriteLine("Bye!"); - return; - } - else - { - Console.Clear(); - Console.WriteLine("Invalid input."); - } - } - - private void AddNewExercise(ExerciseEnum exerciseType) - { - var exercise = new Exercise(); - - - Console.WriteLine("Insert the start time (Format HH:mm)"); - Console.WriteLine("\nMake sure the ending time is higher than the starting time!"); - - string startTime = excerciseController.checkTimeValidity(Console.ReadLine()); - - Console.WriteLine("Insert the end time (Format HH:mm)"); - Console.WriteLine("\nMake sure the ending time is higher than the starting time!"); - - string endTime = excerciseController.checkTimeValidity(Console.ReadLine()); - - endTime = excerciseController.checkTimeChronology(startTime, endTime); - - //Get only the date without time. - DateTime dateTimeNow = DateTime.Now; - string dateOnlyString = dateTimeNow.ToString("dd/MM/yyyy"); - - DateTime startingTimeDate = DateTime.ParseExact($"{dateOnlyString} {startTime}", "dd/MM/yyyy HH:mm", - System.Globalization.CultureInfo.InvariantCulture); - - DateTime endTimeDate = DateTime.ParseExact($"{dateOnlyString} {endTime}", "dd/MM/yyyy HH:mm", - System.Globalization.CultureInfo.InvariantCulture); - - exercise.ExerciseType = exerciseType; - exercise.DateEnd = startingTimeDate; - exercise.DateStart = endTimeDate; - exercise.Duration = endTimeDate - startingTimeDate; - - Console.WriteLine("Would you like to add any extra comments? Type anything"); - - string? comment = Console.ReadLine(); - - exercise.Comments = comment; - - excerciseController.AddExercise(exercise); - Console.Clear(); - - Console.WriteLine("Added sucessfully"); - Console.WriteLine("----------"); - - } - } -} diff --git a/ExerciseTracker.antonderegt/Controller/ExerciseController.cs b/ExerciseTracker.antonderegt/Controller/ExerciseController.cs deleted file mode 100644 index 40430807..00000000 --- a/ExerciseTracker.antonderegt/Controller/ExerciseController.cs +++ /dev/null @@ -1,121 +0,0 @@ -using ExerciseTracker.Service; -using static ExerciseTracker.Models.Enums; -using Spectre.Console; -using ExerciseTracker.Input; -using ExerciseTracker.Models; - -namespace ExerciseTracker.Controller; - -public class ExerciseController(IService service, IInput input) : IController -{ - private readonly IService _service = service; - private readonly IInput _input = input; - - public async Task MainMenu() - { - while (true) - { - AnsiConsole.Clear(); - switch (_input.GetMenuOption()) - { - case MainMenuOption.ShowAllExercises: - await ShowAllExercisesAsync(); - AnsiConsole.MarkupLine("Press enter to return to main menu..."); - Console.ReadLine(); - break; - case MainMenuOption.Add: - await AddExerciseAsync(); - break; - case MainMenuOption.Update: - await UpdateExerciseAsync(); - break; - case MainMenuOption.Remove: - await DeleteExerciseByIdAsync(); - break; - case MainMenuOption.Quit: - Environment.Exit(0); - return; - } - } - } - public async Task?> ShowAllExercisesAsync() - { - List exercises = await _service.GetAllExercisesAsync(); - - if (exercises == null || exercises.Count == 0) - { - AnsiConsole.Markup("[red]No exercises[/] "); - return null; - } - - Table table = new() { Title = new TableTitle("All Exercises") }; - table.AddColumn("Id"); - table.AddColumn("Start"); - table.AddColumn("End"); - table.AddColumn("Duration"); - table.AddColumn("Comments"); - table.AddColumn("Type"); - - foreach (Exercise exercise in exercises) - { - table.AddRow(exercise.Id.ToString(), exercise.DateStart.ToString(), exercise.DateEnd.ToString(), exercise.Duration.ToString(), exercise.Comments, exercise.Type.ToString()); - } - - AnsiConsole.Write(table); - return exercises; - } - - public async Task AddExerciseAsync() - { - (DateTime start, DateTime end) = _input.GetDates(); - await _service.AddExerciseAsync(start, end, _input.GetComments(), _input.GetType()); - } - - public async Task UpdateExerciseAsync() - { - IEnumerable? exercises = await ShowAllExercisesAsync(); - - if (exercises == null || !exercises.Any()) - { - AnsiConsole.MarkupLine("Press enter to return to menu..."); - Console.ReadLine(); - return; - } - - try - { - int id = _input.GetId("Update"); - (DateTime start, DateTime end) = _input.GetDates(); - string comments = _input.GetComments(); - ExerciseType type = _input.GetType(); - await _service.UpdateExerciseAsync(id, start, end, comments, type); - } - catch (ApplicationException ex) - { - AnsiConsole.MarkupLine($"[red]Unable to update:[/] {ex.Message}"); - Console.ReadLine(); - } - } - - public async Task DeleteExerciseByIdAsync() - { - List? exercises = await ShowAllExercisesAsync(); - - if (exercises == null || exercises.Count == 0) - { - AnsiConsole.MarkupLine("Press enter to return to menu..."); - Console.ReadLine(); - return; - } - - try - { - await _service.DeleteExerciseByIdAsync(_input.GetId("Delete")); - } - catch (ApplicationException ex) - { - AnsiConsole.MarkupLine($"[red]Unable to delete:[/] {ex.Message}"); - Console.ReadLine(); - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/Controller/IController.cs b/ExerciseTracker.antonderegt/Controller/IController.cs deleted file mode 100644 index 40db64e1..00000000 --- a/ExerciseTracker.antonderegt/Controller/IController.cs +++ /dev/null @@ -1,12 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Controller; - -public interface IController -{ - Task MainMenu(); - Task?> ShowAllExercisesAsync(); - Task AddExerciseAsync(); - Task UpdateExerciseAsync(); - Task DeleteExerciseByIdAsync(); -} \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/ExerciseContext.cs b/ExerciseTracker.antonderegt/ExerciseContext.cs deleted file mode 100644 index 8ddd4130..00000000 --- a/ExerciseTracker.antonderegt/ExerciseContext.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using ExerciseTracker.Models; - -namespace ExerciseTracker; - -public class ExerciseContext : DbContext -{ - public DbSet Exercises { get; set; } - private readonly string _connectionString; - - public ExerciseContext(IConfiguration configuration) - { - _connectionString = configuration.GetConnectionString("DefaultConnection") ?? string.Empty; - } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlServer(_connectionString); - } -} \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/ExerciseTracker.csproj b/ExerciseTracker.antonderegt/ExerciseTracker.csproj deleted file mode 100644 index dcc7d83c..00000000 --- a/ExerciseTracker.antonderegt/ExerciseTracker.csproj +++ /dev/null @@ -1,27 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - PreserveNewest - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - diff --git a/ExerciseTracker.antonderegt/ExerciseTracker.sln b/ExerciseTracker.antonderegt/ExerciseTracker.sln deleted file mode 100644 index aebd73a9..00000000 --- a/ExerciseTracker.antonderegt/ExerciseTracker.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.5.002.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExerciseTracker", "ExerciseTracker.csproj", "{B2395DBD-1882-416D-9EBC-B58DCEC19DB6}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B2395DBD-1882-416D-9EBC-B58DCEC19DB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B2395DBD-1882-416D-9EBC-B58DCEC19DB6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B2395DBD-1882-416D-9EBC-B58DCEC19DB6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B2395DBD-1882-416D-9EBC-B58DCEC19DB6}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {68FCA94E-0912-406F-ABCA-760984C068E1} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.antonderegt/Input/IInput.cs b/ExerciseTracker.antonderegt/Input/IInput.cs deleted file mode 100644 index 3efa2d89..00000000 --- a/ExerciseTracker.antonderegt/Input/IInput.cs +++ /dev/null @@ -1,12 +0,0 @@ -using static ExerciseTracker.Models.Enums; - -namespace ExerciseTracker.Input; - -public interface IInput -{ - MainMenuOption GetMenuOption(); - (DateTime, DateTime) GetDates(); - string GetComments(); - ExerciseType GetType(); - int GetId(string type); -} \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/Input/UserInput.cs b/ExerciseTracker.antonderegt/Input/UserInput.cs deleted file mode 100644 index c96d9321..00000000 --- a/ExerciseTracker.antonderegt/Input/UserInput.cs +++ /dev/null @@ -1,87 +0,0 @@ -using Spectre.Console; -using static ExerciseTracker.Models.Enums; - -namespace ExerciseTracker.Input; - -public class UserInput : IInput -{ - public string GetComments() - { - AnsiConsole.Clear(); - return AnsiConsole.Ask("Add comments: "); - } - - public (DateTime, DateTime) GetDates() - { - AnsiConsole.Clear(); - DateTime start; - DateTime end; - bool valid = false; - - do - { - start = GetDate("start"); - end = GetDate("end"); - if (end > start) - { - valid = true; - } - else - { - AnsiConsole.MarkupLine("[red]Start time can't be after end time...[/]"); - } - } while (!valid); - - return (start, end); - } - - - static public DateTime GetDate(string type) - { - DateTime result; - bool valid; - do - { - string time = AnsiConsole.Ask($"Enter {type} time of exercise (dd-mm-yyyy hh:mm): "); - if (DateTime.TryParse(time, out result)) - { - valid = true; - } - else - { - AnsiConsole.MarkupLine("[red]Please enter a valid date-time...[/]"); - valid = false; - } - } while (!valid); - - return result; - } - - public int GetId(string type) - { - return AnsiConsole.Ask($"Which exercise do you want to {type.Trim().ToLower()}? "); - } - - public MainMenuOption GetMenuOption() - { - AnsiConsole.Clear(); - return AnsiConsole.Prompt(new SelectionPrompt() - .Title("Main Menu") - .AddChoices(MainMenuOption.ShowAllExercises, - MainMenuOption.Add, - MainMenuOption.Update, - MainMenuOption.Remove, - MainMenuOption.Quit - )); - } - - ExerciseType IInput.GetType() - { - AnsiConsole.Clear(); - return AnsiConsole.Prompt(new SelectionPrompt() - .Title("Exercise Types") - .AddChoices(ExerciseType.Cardio, - ExerciseType.WeightLifting - )); - } -} \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/Migrations/20240331151803_Initial.Designer.cs b/ExerciseTracker.antonderegt/Migrations/20240331151803_Initial.Designer.cs deleted file mode 100644 index b04e2f9f..00000000 --- a/ExerciseTracker.antonderegt/Migrations/20240331151803_Initial.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using ExerciseTracker; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20240331151803_Initial")] - partial class Initial - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Type") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.antonderegt/Migrations/20240331151803_Initial.cs b/ExerciseTracker.antonderegt/Migrations/20240331151803_Initial.cs deleted file mode 100644 index f0c6df97..00000000 --- a/ExerciseTracker.antonderegt/Migrations/20240331151803_Initial.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - /// - public partial class Initial : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false), - Type = table.Column(type: "int", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.antonderegt/Migrations/ExerciseContextModelSnapshot.cs b/ExerciseTracker.antonderegt/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index 73c8fe16..00000000 --- a/ExerciseTracker.antonderegt/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseContext))] - partial class ExerciseContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Type") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.antonderegt/Models/Enums.cs b/ExerciseTracker.antonderegt/Models/Enums.cs deleted file mode 100644 index 501bed01..00000000 --- a/ExerciseTracker.antonderegt/Models/Enums.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace ExerciseTracker.Models; - -public class Enums -{ - public enum ExerciseType - { - Cardio, - WeightLifting - } - - public enum MainMenuOption - { - ShowAllExercises, - Add, - Update, - Remove, - Quit - } -} \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/Models/Exercise.cs b/ExerciseTracker.antonderegt/Models/Exercise.cs deleted file mode 100644 index 3a84f7b9..00000000 --- a/ExerciseTracker.antonderegt/Models/Exercise.cs +++ /dev/null @@ -1,13 +0,0 @@ -using static ExerciseTracker.Models.Enums; - -namespace ExerciseTracker.Models; - -public class Exercise -{ - public int Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration => DateEnd - DateStart; - public string Comments { get; set; } = string.Empty; - public ExerciseType Type { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/Program.cs b/ExerciseTracker.antonderegt/Program.cs deleted file mode 100644 index cc60ccac..00000000 --- a/ExerciseTracker.antonderegt/Program.cs +++ /dev/null @@ -1,15 +0,0 @@ -using ExerciseTracker; -using ExerciseTracker.Controller; -using ExerciseTracker.Input; -using ExerciseTracker.Repository; -using ExerciseTracker.Service; -using Microsoft.Extensions.Configuration; - -IConfiguration configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build(); -ExerciseContext context = new(configuration); -ExerciseRepository repository = new(context); -ExerciseService service = new(repository); -UserInput input = new(); -ExerciseController exerciseController = new(service, input); - -await exerciseController.MainMenu(); \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/Repository/ExerciseRepository.cs b/ExerciseTracker.antonderegt/Repository/ExerciseRepository.cs deleted file mode 100644 index ceccc31d..00000000 --- a/ExerciseTracker.antonderegt/Repository/ExerciseRepository.cs +++ /dev/null @@ -1,44 +0,0 @@ -using ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.Repository; - -public class ExerciseRepository(ExerciseContext context) : IRepository -{ - private readonly ExerciseContext _context = context; - - public async Task> GetAllExercisesAsync() - { - return await _context.Exercises.ToListAsync(); - } - - public async Task GetExerciseByIdAsync(int id) - { - return await _context.Exercises.FindAsync(id); - } - - public async Task AddExerciseAsync(Exercise exercise) - { - await _context.Exercises.AddAsync(exercise); - await _context.SaveChangesAsync(); - } - - public async Task DeleteExerciseByIdAsync(int id) - { - Exercise? exercise = await _context.Exercises.FindAsync(id) ?? throw new ApplicationException("No exercise with the given ID exists."); - _context.Exercises.Remove(exercise); - await _context.SaveChangesAsync(); - } - - public async Task UpdateExerciseAsync(Exercise updatedExercise) - { - Exercise? exercise = await _context.Exercises.FindAsync(updatedExercise.Id) ?? throw new ApplicationException("No exercise with the given ID exists."); - - exercise.DateStart = updatedExercise.DateStart; - exercise.DateEnd = updatedExercise.DateEnd; - exercise.Comments = updatedExercise.Comments; - exercise.Type = updatedExercise.Type; - - await _context.SaveChangesAsync(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/Repository/IRepository.cs b/ExerciseTracker.antonderegt/Repository/IRepository.cs deleted file mode 100644 index a98a036d..00000000 --- a/ExerciseTracker.antonderegt/Repository/IRepository.cs +++ /dev/null @@ -1,12 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Repository; - -public interface IRepository -{ - Task> GetAllExercisesAsync(); - Task GetExerciseByIdAsync(int id); - Task AddExerciseAsync(Exercise exercise); - Task DeleteExerciseByIdAsync(int id); - Task UpdateExerciseAsync(Exercise exercise); -} \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/Service/ExerciseService.cs b/ExerciseTracker.antonderegt/Service/ExerciseService.cs deleted file mode 100644 index 910a7201..00000000 --- a/ExerciseTracker.antonderegt/Service/ExerciseService.cs +++ /dev/null @@ -1,52 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.Repository; -using static ExerciseTracker.Models.Enums; - -namespace ExerciseTracker.Service; - -public class ExerciseService(IRepository repository) : IService -{ - private readonly IRepository _repository = repository; - - public async Task> GetAllExercisesAsync() - { - return await _repository.GetAllExercisesAsync(); - } - - public async Task GetExerciseByIdAsync(int id) - { - return await _repository.GetExerciseByIdAsync(id); - } - - public async Task AddExerciseAsync(DateTime dateStart, DateTime dateEnd, string comments, ExerciseType exerciseType) - { - Exercise exercise = new() - { - DateStart = dateStart, - DateEnd = dateEnd, - Comments = comments, - Type = exerciseType - }; - - await _repository.AddExerciseAsync(exercise); - } - - public async Task UpdateExerciseAsync(int id, DateTime dateStart, DateTime dateEnd, string comments, ExerciseType exerciseType) - { - Exercise exercise = new() - { - Id = id, - DateStart = dateStart, - DateEnd = dateEnd, - Comments = comments, - Type = exerciseType - }; - - await _repository.UpdateExerciseAsync(exercise); - } - - public async Task DeleteExerciseByIdAsync(int id) - { - await _repository.DeleteExerciseByIdAsync(id); - } -} \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/Service/IService.cs b/ExerciseTracker.antonderegt/Service/IService.cs deleted file mode 100644 index d89e8b7a..00000000 --- a/ExerciseTracker.antonderegt/Service/IService.cs +++ /dev/null @@ -1,14 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.Repository; -using static ExerciseTracker.Models.Enums; - -namespace ExerciseTracker.Service; - -public interface IService -{ - Task> GetAllExercisesAsync(); - Task GetExerciseByIdAsync(int id); - Task AddExerciseAsync(DateTime dateStart, DateTime dateEnd, string comments, ExerciseType exerciseType); - Task UpdateExerciseAsync(int id, DateTime dateStart, DateTime dateEnd, string comments, ExerciseType exerciseType); - Task DeleteExerciseByIdAsync(int id); -} \ No newline at end of file diff --git a/ExerciseTracker.antonderegt/appsettings.json b/ExerciseTracker.antonderegt/appsettings.json deleted file mode 100644 index 64557c62..00000000 --- a/ExerciseTracker.antonderegt/appsettings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ConnectionStrings": { - "DefaultConnection": "Data Source=localhost; Initial Catalog=ExerciseTracker; User id=SA; password=123456aA; Encrypt=false" - } -} \ No newline at end of file diff --git a/ExerciseTracker.broki1/.gitattributes b/ExerciseTracker.broki1/.gitattributes deleted file mode 100644 index 1ff0c423..00000000 --- a/ExerciseTracker.broki1/.gitattributes +++ /dev/null @@ -1,63 +0,0 @@ -############################################################################### -# Set default behavior to automatically normalize line endings. -############################################################################### -* text=auto - -############################################################################### -# Set default behavior for command prompt diff. -# -# This is need for earlier builds of msysgit that does not have it on by -# default for csharp files. -# Note: This is only used by command line -############################################################################### -#*.cs diff=csharp - -############################################################################### -# Set the merge driver for project and solution files -# -# Merging from the command prompt will add diff markers to the files if there -# are conflicts (Merging from VS is not affected by the settings below, in VS -# the diff markers are never inserted). Diff markers may cause the following -# file extensions to fail to load in VS. An alternative would be to treat -# these files as binary and thus will always conflict and require user -# intervention with every merge. To do so, just uncomment the entries below -############################################################################### -#*.sln merge=binary -#*.csproj merge=binary -#*.vbproj merge=binary -#*.vcxproj merge=binary -#*.vcproj merge=binary -#*.dbproj merge=binary -#*.fsproj merge=binary -#*.lsproj merge=binary -#*.wixproj merge=binary -#*.modelproj merge=binary -#*.sqlproj merge=binary -#*.wwaproj merge=binary - -############################################################################### -# behavior for image files -# -# image files are treated as binary by default. -############################################################################### -#*.jpg binary -#*.png binary -#*.gif binary - -############################################################################### -# diff behavior for common document formats -# -# Convert binary document formats to text before diffing them. This feature -# is only available from the command line. Turn it on by uncommenting the -# entries below. -############################################################################### -#*.doc diff=astextplain -#*.DOC diff=astextplain -#*.docx diff=astextplain -#*.DOCX diff=astextplain -#*.dot diff=astextplain -#*.DOT diff=astextplain -#*.pdf diff=astextplain -#*.PDF diff=astextplain -#*.rtf diff=astextplain -#*.RTF diff=astextplain diff --git a/ExerciseTracker.broki1/.gitignore b/ExerciseTracker.broki1/.gitignore deleted file mode 100644 index 9491a2fd..00000000 --- a/ExerciseTracker.broki1/.gitignore +++ /dev/null @@ -1,363 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Oo]ut/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd \ No newline at end of file diff --git a/ExerciseTracker.broki1/ExerciseTracker.sln b/ExerciseTracker.broki1/ExerciseTracker.sln deleted file mode 100644 index 3631b191..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34309.116 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker", "ExerciseTracker\ExerciseTracker.csproj", "{3D2C290D-F725-4074-BBDE-3F3925036843}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3D2C290D-F725-4074-BBDE-3F3925036843}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D2C290D-F725-4074-BBDE-3F3925036843}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D2C290D-F725-4074-BBDE-3F3925036843}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D2C290D-F725-4074-BBDE-3F3925036843}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {F04AC562-48DF-40F6-8DF9-28F573561A58} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.broki1/ExerciseTracker/DTOs/ExerciseDTO.cs b/ExerciseTracker.broki1/ExerciseTracker/DTOs/ExerciseDTO.cs deleted file mode 100644 index 1b9ab2a9..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/DTOs/ExerciseDTO.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ExerciseTracker.DTOs; - -internal class ExerciseDTO -{ - public string StartDate { get; set; } - public string EndDate { get; set; } - public TimeSpan Duration { get; set; } - public string Comments { get; set; } -} diff --git a/ExerciseTracker.broki1/ExerciseTracker/Data/App.config b/ExerciseTracker.broki1/ExerciseTracker/Data/App.config deleted file mode 100644 index 0938628d..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/Data/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ExerciseTracker.broki1/ExerciseTracker/Data/ExerciseContext.cs b/ExerciseTracker.broki1/ExerciseTracker/Data/ExerciseContext.cs deleted file mode 100644 index b5d05da3..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/Data/ExerciseContext.cs +++ /dev/null @@ -1,16 +0,0 @@ -using ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; -using System.Configuration; - -namespace ExerciseTracker.Data; - -public class ExerciseContext : DbContext -{ - internal DbSet Exercises { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - var dbPath = ConfigurationManager.AppSettings.Get("DbPath"); - optionsBuilder.UseSqlServer(dbPath); - } -} diff --git a/ExerciseTracker.broki1/ExerciseTracker/ExerciseController.cs b/ExerciseTracker.broki1/ExerciseTracker/ExerciseController.cs deleted file mode 100644 index 90ca913e..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/ExerciseController.cs +++ /dev/null @@ -1,42 +0,0 @@ - -using ExerciseTracker.Interfaces; -using ExerciseTracker.Models; - -namespace ExerciseTracker; - -internal class ExerciseController -{ - private readonly IExerciseService _service; - private readonly IExerciseRepository _repository; - - public ExerciseController(IExerciseService service, IExerciseRepository repository) - { - _service = service; - _repository = repository; - } - - internal void AddExerciseSession() - { - var exercise = this._service.CreateNewExercise(); - this._repository.PostExercise(exercise); - } - - internal void ViewAllExercises() - { - this._service.ViewAllExercises(); - } - - internal void UpdateExercise() - { - var exercise = this._service.GetExercise(); - if (exercise == null) return; - this._service.UpdateExercise(exercise); - } - - internal void DeleteExercise() - { - var exercise = this._service.GetExercise(); - if (exercise == null) return; - this._service.DeleteExercise(exercise); - } -} diff --git a/ExerciseTracker.broki1/ExerciseTracker/ExerciseRepository.cs b/ExerciseTracker.broki1/ExerciseTracker/ExerciseRepository.cs deleted file mode 100644 index 200760b0..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/ExerciseRepository.cs +++ /dev/null @@ -1,43 +0,0 @@ -using ExerciseTracker.Data; -using ExerciseTracker.Interfaces; -using ExerciseTracker.Models; - -namespace ExerciseTracker; - -public class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseContext _context; - - public ExerciseRepository(ExerciseContext context) - { - _context = context; - } - - public void PostExercise(Exercise exercise) - { - this._context.Exercises.Add(exercise); - this._context.SaveChanges(); - } - - public List GetAllExercises() - { - return this._context.Exercises.ToList(); - } - - public Exercise? GetExercise(int id) - { - return this._context.Exercises.FirstOrDefault(x => x.Id == id); - } - - public void UpdateExercise(Exercise exercise) - { - this._context.Exercises.Update(exercise); - this._context.SaveChanges(); - } - - public void DeleteExercise(Exercise exercise) - { - this._context.Exercises.Remove(exercise); - this._context.SaveChanges(); - } -} diff --git a/ExerciseTracker.broki1/ExerciseTracker/ExerciseService.cs b/ExerciseTracker.broki1/ExerciseTracker/ExerciseService.cs deleted file mode 100644 index e9383fed..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/ExerciseService.cs +++ /dev/null @@ -1,135 +0,0 @@ -using ConsoleTableExt; -using ExerciseTracker.DTOs; -using ExerciseTracker.Interfaces; -using ExerciseTracker.Models; -using Spectre.Console; - -namespace ExerciseTracker; - -internal class ExerciseService : IExerciseService -{ - private readonly UserInput _userInput; - private readonly IExerciseRepository _exerciseRepository; - - public ExerciseService(UserInput userInput, IExerciseRepository exerciseRepository) - { - _userInput = userInput; - _exerciseRepository = exerciseRepository; - } - public Exercise CreateNewExercise() - { - var startDate = this._userInput.GetDate("start"); - var startTime = this._userInput.GetTime("start"); - var startDateTime = startDate.ToDateTime(startTime); - - Console.Clear(); - - var endDate = this._userInput.GetDate("end"); - var endTime = this._userInput.GetTime("end"); - var endDateTime = endDate.ToDateTime(endTime); - - var duration = endDateTime - startDateTime; - - if (duration.TotalSeconds < 0) throw new Microsoft.EntityFrameworkCore.DbUpdateException(); - - Console.Clear(); - - var comments = this._userInput.GetComments(); - - var exercise = new Exercise - { - StartDate = startDateTime, - EndDate = endDateTime, - Duration = duration, - Comments = comments - }; - - return exercise; - } - - public void ViewAllExercises() - { - var exercises = this._exerciseRepository.GetAllExercises(); - var exerciseDTOs = exercises.Select(exercise => - new ExerciseDTO - { - StartDate = exercise.StartDate.ToString("MM-dd-yyyy hh:mm tt"), - EndDate = exercise.EndDate.ToString("MM-dd-yyyy hh:mm tt"), - Duration = exercise.Duration, - Comments = exercise.Comments - } - ).ToList(); - - - if (exercises.Count == 0) - { - Console.WriteLine("No exercises found.\n"); - } - else - { - ConsoleTableBuilder.From(exerciseDTOs).WithTitle("EXERCISE HISTORY").ExportAndWriteLine(); - } - } - - public Exercise? GetExercise() - { - var exercises = this._exerciseRepository.GetAllExercises(); - if (exercises.Count == 0) - { - Console.WriteLine("No exercises found.\n"); - return null; - } - - var exerciseStrings = exercises - .Select(exercise => $"{exercise.Id}. {exercise.StartDate} - {exercise.EndDate} ({exercise.Duration}) | {exercise.Comments}") - .ToList(); - - var exerciseId = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("Choose exercise") - .AddChoices(exerciseStrings) - ).Split(".")[0]; - - var exercise = this._exerciseRepository.GetExercise(int.Parse(exerciseId)); - - return exercise; - } - - public void UpdateExercise(Exercise exercise) - { - Console.WriteLine(exercise.StartDate.ToString()); - var updatedStart = AnsiConsole.Confirm("Update start date?") ? - this._userInput.GetDate("start").ToDateTime(this._userInput.GetTime("start")) : exercise.StartDate; - - Console.WriteLine(exercise.EndDate.ToString()); - var updatedEnd = AnsiConsole.Confirm("Update end date?") ? - this._userInput.GetDate("end").ToDateTime(this._userInput.GetTime("end")) : exercise.EndDate; - - var updatedDuration = updatedEnd - updatedStart; - - if (updatedDuration.TotalSeconds < 0) throw new Microsoft.EntityFrameworkCore.DbUpdateException(); - - Console.WriteLine(exercise.Comments); - var updatedComments = AnsiConsole.Confirm("Update comments?") ? this._userInput.GetComments() : exercise.Comments; - - exercise.StartDate = updatedStart; - exercise.EndDate = updatedEnd; - exercise.Duration = updatedDuration; - exercise.Comments = updatedComments; - - this._exerciseRepository.UpdateExercise(exercise); - } - - public void DeleteExercise(Exercise exercise) - { - try - { - this._exerciseRepository.DeleteExercise(exercise); - Console.WriteLine("Exercise successfully deleted."); - } - catch (Exception ex) - { - Console.WriteLine("Something went wrong."); - } - } -} diff --git a/ExerciseTracker.broki1/ExerciseTracker/ExerciseTracker.csproj b/ExerciseTracker.broki1/ExerciseTracker/ExerciseTracker.csproj deleted file mode 100644 index 2ecf54c7..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/ExerciseTracker.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - diff --git a/ExerciseTracker.broki1/ExerciseTracker/Interfaces/IExerciseRepository.cs b/ExerciseTracker.broki1/ExerciseTracker/Interfaces/IExerciseRepository.cs deleted file mode 100644 index 3217d41b..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/Interfaces/IExerciseRepository.cs +++ /dev/null @@ -1,16 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Interfaces; - -public interface IExerciseRepository -{ - public void PostExercise(Exercise exercise); - - public List GetAllExercises(); - - public Exercise GetExercise(int id); - - public void UpdateExercise(Exercise exercise); - - public void DeleteExercise(Exercise exercise); -} diff --git a/ExerciseTracker.broki1/ExerciseTracker/Interfaces/IExerciseService.cs b/ExerciseTracker.broki1/ExerciseTracker/Interfaces/IExerciseService.cs deleted file mode 100644 index 2a890aa3..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/Interfaces/IExerciseService.cs +++ /dev/null @@ -1,16 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Interfaces; - -internal interface IExerciseService -{ - public Exercise CreateNewExercise(); - - public void ViewAllExercises(); - - public Exercise GetExercise(); - - public void UpdateExercise(Exercise exercise); - - public void DeleteExercise(Exercise exercise); -} \ No newline at end of file diff --git a/ExerciseTracker.broki1/ExerciseTracker/Menu.cs b/ExerciseTracker.broki1/ExerciseTracker/Menu.cs deleted file mode 100644 index f56c426c..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/Menu.cs +++ /dev/null @@ -1,68 +0,0 @@ -namespace ExerciseTracker; - -internal class Menu -{ - private readonly UserInput _userInput; - private readonly ExerciseController _controller; - - public Menu(UserInput userInput, ExerciseController controller) - { - _userInput = userInput; - _controller = controller; - } - - public void MainMenu() - { - var exitApplication = false; - - while (!exitApplication) - { - Console.Clear(); - var userInput = this._userInput.GetMainMenuInput(); - - switch (userInput) - { - case '1': - try - { - this._controller.AddExerciseSession(); - Console.WriteLine("Exercise added successfully. Press any key to continue."); - Console.ReadKey(); - } - catch (Microsoft.EntityFrameworkCore.DbUpdateException ex) - { - Console.WriteLine("\nExercise end date/time cannot be before exercise start date/time.\nPress any key to continue."); - Console.ReadKey(); - } - break; - case '2': - this._controller.ViewAllExercises(); - Console.WriteLine("Press any key to continue."); - Console.ReadKey(); - break; - case '3': - try - { - this._controller.UpdateExercise(); - Console.WriteLine("Press any key to continue."); - Console.ReadKey(); - } - catch (Microsoft.EntityFrameworkCore.DbUpdateException) - { - Console.WriteLine("\nInvalid exercise date range.\nPress any key to continue."); - Console.ReadKey(); - } - break; - case '4': - this._controller.DeleteExercise(); - Console.WriteLine("Press any key to continue."); - Console.ReadKey(); - break; - case '5': - Console.WriteLine("Goodbye!"); - exitApplication = true; - break; - } - } - } -} diff --git a/ExerciseTracker.broki1/ExerciseTracker/Models/Exercise.cs b/ExerciseTracker.broki1/ExerciseTracker/Models/Exercise.cs deleted file mode 100644 index 8230e086..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/Models/Exercise.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace ExerciseTracker.Models; - -public - class Exercise -{ - public int Id { get; set; } - - public DateTime StartDate { get; set; } - - public DateTime EndDate { get; set; } - - public TimeSpan Duration { get; set; } - - public string Comments { get; set; } = null!; -} diff --git a/ExerciseTracker.broki1/ExerciseTracker/Program.cs b/ExerciseTracker.broki1/ExerciseTracker/Program.cs deleted file mode 100644 index 9d0beb8a..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/Program.cs +++ /dev/null @@ -1,31 +0,0 @@ -using ExerciseTracker.Data; -using ExerciseTracker.Interfaces; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace ExerciseTracker; - -internal class Program -{ - static void Main(string[] args) - { - HostApplicationBuilder builder = Host.CreateApplicationBuilder(args); - builder.Services.AddDbContext(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - - using IHost app = builder.Build(); - - var dbContext = app.Services.GetRequiredService(); - - // dbContext.Database.EnsureDeleted(); - dbContext.Database.EnsureCreated(); - - var _menu = app.Services.GetRequiredService(); - - _menu.MainMenu(); - } -} diff --git a/ExerciseTracker.broki1/ExerciseTracker/UserInput.cs b/ExerciseTracker.broki1/ExerciseTracker/UserInput.cs deleted file mode 100644 index 33efdd0a..00000000 --- a/ExerciseTracker.broki1/ExerciseTracker/UserInput.cs +++ /dev/null @@ -1,59 +0,0 @@ -using Microsoft.IdentityModel.Tokens; -using Spectre.Console; - -namespace ExerciseTracker; - -internal class UserInput -{ - internal char GetMainMenuInput() - { - return AnsiConsole.Prompt( - new SelectionPrompt() - .Title("MAIN MENU") - .AddChoices("1. Add exercise", - "2. View exercises", - "3. Update exercise", - "4. Delete exercise", - "5. Exit application") - )[0]; - } - - internal DateOnly GetDate(string startOrEnd) - { - var dateString = AnsiConsole.Prompt( - new TextPrompt($"[green]Enter exercise {startOrEnd} date (MM-DD-YY):[/]") - .PromptStyle("purple") - .ValidationErrorMessage("\n[red]INVALID DATE. MUST BE IN MM-DD-YY FORMAT.[/]\n") - .Validate(date => DateOnly.TryParseExact(date, "MM-dd-yy", out _)) - ); - - var date = DateOnly.ParseExact(dateString, "MM-dd-yy"); - - return date; - } - - internal TimeOnly GetTime(string startOrEnd) - { - var timeString = AnsiConsole.Prompt( - new TextPrompt($"[green]Enter exercise {startOrEnd} time (HH:MM AM/PM):[/]") - .PromptStyle("purple") - .ValidationErrorMessage("\n[red]INVALID TIME. MUST BE IN HH:MM AM/PM FORMAT.[/]\n") - .Validate(time => TimeOnly.TryParseExact(time, "hh:mm tt", out _)) - ); - - var time = TimeOnly.ParseExact(timeString, "hh:mm tt"); - - return time; - } - - internal string GetComments() - { - var comments = AnsiConsole.Prompt( - new TextPrompt($"[green]Enter exercise comments:[/]") - .PromptStyle("purple") - .ValidationErrorMessage("\n[red]CANNOT BE EMPTY. ENTER EXERCISE COMMENTS.[/]\n") - .Validate(str => !str.IsNullOrEmpty())); - - return comments; - } -} diff --git a/ExerciseTracker.broki1/README.md b/ExerciseTracker.broki1/README.md deleted file mode 100644 index ad86bb68..00000000 --- a/ExerciseTracker.broki1/README.md +++ /dev/null @@ -1 +0,0 @@ -# ExerciseTracker \ No newline at end of file diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett.sln b/ExerciseTracker.frockett/ExerciseTracker.frockett.sln deleted file mode 100644 index 688f9e36..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.9.34622.214 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.frockett", "ExerciseTracker.frockett\ExerciseTracker.frockett.csproj", "{068B8931-C1DE-4309-91EF-E7F13B2DBCB4}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {068B8931-C1DE-4309-91EF-E7F13B2DBCB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {068B8931-C1DE-4309-91EF-E7F13B2DBCB4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {068B8931-C1DE-4309-91EF-E7F13B2DBCB4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {068B8931-C1DE-4309-91EF-E7F13B2DBCB4}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {26FBB31B-1E8D-45E3-9995-7A879AD11F9D} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Controllers/ExerciseController.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Controllers/ExerciseController.cs deleted file mode 100644 index 9fd35122..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Controllers/ExerciseController.cs +++ /dev/null @@ -1,34 +0,0 @@ -using ExerciseTracker.frockett.Models; -using ExerciseTracker.frockett.Services; - -namespace ExerciseTracker.frockett.Controllers; - -public class ExerciseController -{ - private readonly IExerciseService exerciseService; - - public ExerciseController(IExerciseService exerciseService) - { - this.exerciseService = exerciseService; - } - - public bool AddExerciseSession(ExerciseSession session) - { - return exerciseService.AddExerciseSession(session); - } - - public List? GetExerciseSessions() - { - return exerciseService.GetExerciseSessions(); - } - - public ExerciseSession? UpdateExerciseSession(ExerciseSession session) - { - return exerciseService.UpdateExerciseSession(session); - } - - public bool RemoveExerciseSession(ExerciseSession session) - { - return exerciseService.RemoveExerciseSession(session); - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Data/ExerciseTrackerContext.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Data/ExerciseTrackerContext.cs deleted file mode 100644 index fff6fd77..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Data/ExerciseTrackerContext.cs +++ /dev/null @@ -1,16 +0,0 @@ - - -using ExerciseTracker.frockett.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.frockett.Data; - -public class ExerciseTrackerContext : DbContext -{ - public DbSet Sessions { get; set; } - - public ExerciseTrackerContext(DbContextOptions options) : base(options) - { - } - -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/ExerciseTracker.db b/ExerciseTracker.frockett/ExerciseTracker.frockett/ExerciseTracker.db deleted file mode 100644 index de2dd69e..00000000 Binary files a/ExerciseTracker.frockett/ExerciseTracker.frockett/ExerciseTracker.db and /dev/null differ diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/ExerciseTracker.frockett.csproj b/ExerciseTracker.frockett/ExerciseTracker.frockett/ExerciseTracker.frockett.csproj deleted file mode 100644 index e2462a1a..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/ExerciseTracker.frockett.csproj +++ /dev/null @@ -1,28 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - PreserveNewest - - - - diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320045416_InitialCreate.Designer.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320045416_InitialCreate.Designer.cs deleted file mode 100644 index 739f6d24..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320045416_InitialCreate.Designer.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -using System; -using ExerciseTracker.frockett.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.frockett.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - [Migration("20240320045416_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.3"); - - modelBuilder.Entity("ExerciseTracker.frockett.Models.ExerciseSession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Comments") - .HasColumnType("TEXT"); - - b.Property("EndTime") - .HasColumnType("TEXT"); - - b.Property("StartTime") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Sessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320045416_InitialCreate.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320045416_InitialCreate.cs deleted file mode 100644 index 3229760c..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320045416_InitialCreate.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.frockett.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Sessions", - columns: table => new - { - Id = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - StartTime = table.Column(type: "TEXT", nullable: false), - EndTime = table.Column(type: "TEXT", nullable: false), - Comments = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Sessions", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Sessions"); - } - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320080558_DItest.Designer.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320080558_DItest.Designer.cs deleted file mode 100644 index 38e8b1d3..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320080558_DItest.Designer.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -using System; -using ExerciseTracker.frockett.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.frockett.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - [Migration("20240320080558_DItest")] - partial class DItest - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.3"); - - modelBuilder.Entity("ExerciseTracker.frockett.Models.ExerciseSession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Comments") - .HasColumnType("TEXT"); - - b.Property("EndTime") - .HasColumnType("TEXT"); - - b.Property("StartTime") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Sessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320080558_DItest.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320080558_DItest.cs deleted file mode 100644 index 39810c4a..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/20240320080558_DItest.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.frockett.Migrations -{ - /// - public partial class DItest : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/ExerciseTrackerContextModelSnapshot.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/ExerciseTrackerContextModelSnapshot.cs deleted file mode 100644 index b97261a1..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Migrations/ExerciseTrackerContextModelSnapshot.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -using System; -using ExerciseTracker.frockett.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.frockett.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - partial class ExerciseTrackerContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.3"); - - modelBuilder.Entity("ExerciseTracker.frockett.Models.ExerciseSession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Comments") - .HasColumnType("TEXT"); - - b.Property("EndTime") - .HasColumnType("TEXT"); - - b.Property("StartTime") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Sessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Models/ExerciseSession.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Models/ExerciseSession.cs deleted file mode 100644 index cf3e096e..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Models/ExerciseSession.cs +++ /dev/null @@ -1,11 +0,0 @@ - -namespace ExerciseTracker.frockett.Models; - -public class ExerciseSession -{ - public int Id { get; set; } - public DateTime StartTime { get; set; } - public DateTime EndTime { get; set; } - public TimeSpan Duration => EndTime - StartTime; - public string? Comments { get; set; } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Program.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Program.cs deleted file mode 100644 index e4e7c49c..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Program.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Microsoft.Extensions.Hosting; -using ExerciseTracker.frockett.Data; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using ExerciseTracker.frockett.Repositories; -using ExerciseTracker.frockett.Services; -using ExerciseTracker.frockett.Controllers; -using ExerciseTracker.frockett.UI; - -var builder = Host.CreateApplicationBuilder(); - -var configuration = new ConfigurationBuilder() - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .Build(); - -builder.Services.AddDbContext(options => -{ - options.UseSqlite(configuration.GetConnectionString("ExerciseTrackerConnection")); -}); - -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); - -var app = builder.Build(); - -var scope = app.Services.CreateScope(); -var exerciseServices = scope.ServiceProvider; -var exerciseController = exerciseServices.GetRequiredService(); -var userInput = exerciseServices.GetRequiredService(); -var tableEngine = exerciseServices.GetRequiredService(); - -MenuHandler menuHandler = new(exerciseController, userInput, tableEngine); -menuHandler.ShowMainMenu(); \ No newline at end of file diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Properties/launchSettings.json b/ExerciseTracker.frockett/ExerciseTracker.frockett/Properties/launchSettings.json deleted file mode 100644 index c3107775..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Properties/launchSettings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "profiles": { - "ExerciseTracker.frockett": { - "commandName": "Project", - "workingDirectory": "C:\\Users\\itscr\\source\\repos\\CodeReviews.Console.ExerciseTracker\\ExerciseTracker.frockett\\ExerciseTracker.frockett" - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Repositories/ExerciseRepository.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Repositories/ExerciseRepository.cs deleted file mode 100644 index 3bf26d3d..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,75 +0,0 @@ -using ExerciseTracker.frockett.Data; -using ExerciseTracker.frockett.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.frockett.Repositories; - -public class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseTrackerContext context; - - public ExerciseRepository(ExerciseTrackerContext context) - { - this.context = context; - } - - public List GetExerciseSessions() - { - return context.Sessions.OrderBy(s => s.StartTime).ToList(); - } - public ExerciseSession? UpdateExerciseSession(ExerciseSession session) - { - var sessionToUpdate = context.Sessions.FirstOrDefault(s => s.Id == session.Id); - - if (sessionToUpdate != null) - { - sessionToUpdate.StartTime = session.StartTime; - sessionToUpdate.EndTime = session.EndTime; - sessionToUpdate.Comments = session.Comments; - - try - { - context.SaveChanges(); - return sessionToUpdate; - } - catch (Exception ex) - { - Console.WriteLine(ex.ToString()); - return null; - } - } - return null; - } - public ExerciseSession? GetSessionById(int id) - { - return context.Sessions.FirstOrDefault(x => x.Id == id); - } - public bool AddExerciseSession(ExerciseSession session) - { - context.Sessions.Add(session); - try - { - context.SaveChanges(); - } - catch (Exception ex) - { - Console.WriteLine(ex.ToString()); - return false; - } - return true; - } - public bool RemoveExerciseSession(ExerciseSession session) - { - context.Sessions.Remove(session); - try - { - context.SaveChanges(); - } - catch (Exception ex) - { - Console.WriteLine(ex.ToString()); - return false; - } - return true; - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Repositories/IExerciseRepository.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Repositories/IExerciseRepository.cs deleted file mode 100644 index 515319be..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,13 +0,0 @@ - -using ExerciseTracker.frockett.Models; - -namespace ExerciseTracker.frockett.Repositories; - -public interface IExerciseRepository -{ - List? GetExerciseSessions(); - ExerciseSession? UpdateExerciseSession(ExerciseSession session); - ExerciseSession? GetSessionById(int id); - bool AddExerciseSession(ExerciseSession session); - bool RemoveExerciseSession(ExerciseSession session); -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Services/ExerciseService.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Services/ExerciseService.cs deleted file mode 100644 index ce092592..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Services/ExerciseService.cs +++ /dev/null @@ -1,39 +0,0 @@ -using ExerciseTracker.frockett.Models; -using ExerciseTracker.frockett.Repositories; - -namespace ExerciseTracker.frockett.Services; - -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository exerciseRepository; - - public ExerciseService(IExerciseRepository exerciseRepository) - { - this.exerciseRepository = exerciseRepository; - } - - public bool AddExerciseSession(ExerciseSession session) - { - return exerciseRepository.AddExerciseSession(session); - } - - public List? GetExerciseSessions() - { - return exerciseRepository.GetExerciseSessions(); - } - - public ExerciseSession? GetSessionById(int id) - { - return exerciseRepository.GetSessionById(id); - } - - public bool RemoveExerciseSession(ExerciseSession session) - { - return exerciseRepository.RemoveExerciseSession(session); - } - - public ExerciseSession? UpdateExerciseSession(ExerciseSession session) - { - return exerciseRepository.UpdateExerciseSession(session); - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/Services/IExerciseService.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/Services/IExerciseService.cs deleted file mode 100644 index 83393cf8..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/Services/IExerciseService.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTracker.frockett.Models; - - -namespace ExerciseTracker.frockett.Services; - -public interface IExerciseService -{ - List? GetExerciseSessions(); - ExerciseSession? UpdateExerciseSession(ExerciseSession session); - ExerciseSession? GetSessionById(int id); - bool AddExerciseSession(ExerciseSession session); - bool RemoveExerciseSession(ExerciseSession session); -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/EnumExtensions.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/EnumExtensions.cs deleted file mode 100644 index 6a0a63c5..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/EnumExtensions.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.ComponentModel; - -namespace ExerciseTracker.frockett.UI; - -public static class EnumExtensions -{ - public static string GetEnumDescription(this Enum enumValue) - { - var info = enumValue.GetType().GetField(enumValue.ToString()); - var attributes = (DescriptionAttribute[])info.GetCustomAttributes(typeof(DescriptionAttribute), false); - - if (attributes != null && attributes.Length > 0) - { - return attributes[0].Description; - } - else - { - return enumValue.ToString(); - } - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/MainMenuOptions.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/MainMenuOptions.cs deleted file mode 100644 index 91ec6e12..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/MainMenuOptions.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.ComponentModel; - -namespace ExerciseTracker.frockett.UI; - -public enum MainMenuOptions -{ - [Description("View All Exercise Sessions")] - ViewSessions, - [Description("Add a Session")] - AddSession, - [Description("Delete a Session")] - DeleteSession, - [Description("Update a Session")] - UpdateSession, - [Description("Exit")] - Exit -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/MenuHandler.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/MenuHandler.cs deleted file mode 100644 index ff70ce4f..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/MenuHandler.cs +++ /dev/null @@ -1,105 +0,0 @@ -using ExerciseTracker.frockett.Controllers; -using Spectre.Console; - -namespace ExerciseTracker.frockett.UI; - -public class MenuHandler -{ - private readonly ExerciseController controller; - private readonly UserInput userInput; - private readonly TableEngine tableEngine; - - public MenuHandler(ExerciseController controller, UserInput userInput, TableEngine tableEngine) - { - this.controller = controller; - this.userInput = userInput; - this.tableEngine = tableEngine; - } - - public void ShowMainMenu() - { - var menuSelection = new SelectionPrompt() - .Title("Main Menu") - .AddChoices(Enum.GetValues()) - .UseConverter(option => option.GetEnumDescription()); - - var selection = AnsiConsole.Prompt(menuSelection); - - switch (selection) - { - case MainMenuOptions.ViewSessions: - HandlesViewSessions(); - break; - case MainMenuOptions.AddSession: - HandleAddSession(); - break; - case MainMenuOptions.UpdateSession: - HandleUpdateSession(); - break; - case MainMenuOptions.DeleteSession: - HandleDeleteSession(); - break; - case MainMenuOptions.Exit: - Environment.Exit(0); - break; - } - } - - private void HandlesViewSessions() - { - tableEngine.PrintSessions(controller.GetExerciseSessions()); - PauseForUser(); - } - - private void HandleAddSession() - { - bool response = controller.AddExerciseSession(userInput.GetNewSession()); - - if (response) - { - AnsiConsole.WriteLine("Session added successfully!"); - PauseForUser(); - } - else - { - AnsiConsole.WriteLine("An unknown error occured. Try again."); - PauseForUser(); - } - } - - private void HandleUpdateSession() - { - var sessionToUpdate = tableEngine.SelectSession(controller.GetExerciseSessions()); - if (sessionToUpdate == null) - { - PauseForUser(); - return; - } - - var updatedSession = userInput.GetNewSession(); - updatedSession.Id = sessionToUpdate.Id; - - controller.UpdateExerciseSession(updatedSession); - PauseForUser(); - } - - private void HandleDeleteSession() - { - var session = tableEngine.SelectSession(controller.GetExerciseSessions()); - if (session == null) - { - PauseForUser(); - return; - } - controller.RemoveExerciseSession(session); - PauseForUser(); - } - - private void PauseForUser() - { - AnsiConsole.WriteLine("Press enter to continue..."); - Console.ReadLine(); - AnsiConsole.Clear(); - ShowMainMenu(); - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/TableEngine.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/TableEngine.cs deleted file mode 100644 index 413540a5..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/TableEngine.cs +++ /dev/null @@ -1,46 +0,0 @@ -using ExerciseTracker.frockett.Models; -using Spectre.Console; - -namespace ExerciseTracker.frockett.UI; - -public class TableEngine -{ - public void PrintSessions(List sessions) - { - if (!sessions.Any()) - { - AnsiConsole.MarkupLine("[red]No sessions found![/]"); - return; - } - - Table table = new Table(); - table.Alignment(Justify.Center); - table.Title("Exercise Sessions"); - table.AddColumns(new[] { "Start Time", "End Time", "Duration", "Comments" }); - - foreach (ExerciseSession session in sessions) - { - table.AddRow(session.StartTime.ToString("MMM dd yyyy HH:mm"), session.EndTime.ToString("MMM dd yyyy HH:mm"), session.Duration.ToString(), session.Comments); - } - - AnsiConsole.Write(table); - } - - public ExerciseSession SelectSession(List sessions) - { - if (!sessions.Any()) - { - AnsiConsole.MarkupLine("[red]No sessions found![/]"); - return null; - } - - var selection = new SelectionPrompt(); - selection.AddChoices(sessions); - selection.Title("Select session") - .UseConverter(session => $"{session.Duration.Hours}h{session.Duration.Minutes}m long session on {session.StartTime:yyyy/MM/dd} from {session.StartTime:HH:mm} to {session.EndTime:HH:mm} // Comment: {session.Comments}"); - - ExerciseSession selectedSession = AnsiConsole.Prompt(selection); - - return selectedSession; - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/UserInput.cs b/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/UserInput.cs deleted file mode 100644 index b0e0f754..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/UI/UserInput.cs +++ /dev/null @@ -1,62 +0,0 @@ -using ExerciseTracker.frockett.Models; -using Spectre.Console; -using System.Globalization; - -namespace ExerciseTracker.frockett.UI; - -public class UserInput -{ - public ExerciseSession GetNewSession() - { - DateTime startTime = GetDateTime("Enter session start in format yyyy-MM-dd HH:mm: "); - DateTime endTime = GetDateTime("Enter session end: "); - - while (startTime > endTime) - { - AnsiConsole.MarkupLine("[red]Invalid input, the session can't end before it starts![/]"); - startTime = GetDateTime("Enter session start in format yyyy-MM-dd HH:mm: "); - endTime = GetDateTime("Enter session end in format yyyy-MM-dd HH:mm: "); - } - - string? comment = GetComment(); - - return new ExerciseSession { StartTime = startTime, EndTime = endTime, Comments = comment }; - } - - private DateTime GetDateTime(string prompt) - { - DateTime dateTime; - string validFormat = "yyyy-MM-dd HH:mm"; - - var sDateTime = AnsiConsole.Ask(prompt); - - while (!DateTime.TryParseExact(sDateTime, validFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) - { - AnsiConsole.WriteLine("\nIncorrect date/time format."); - sDateTime = AnsiConsole.Ask(prompt); - } - - return dateTime; - } - - private TimeSpan GetTimeOnly(string prompt) - { - TimeSpan timeSpan; - string validFormat = "HH\\:mm"; - - var input = AnsiConsole.Ask(prompt); - - while (!TimeSpan.TryParseExact(input, validFormat, CultureInfo.InvariantCulture, out timeSpan)) - { - AnsiConsole.WriteLine("\nIncorrect time format."); - input = AnsiConsole.Ask(prompt); - } - - return timeSpan; - } - - private string? GetComment() - { - return AnsiConsole.Prompt(new TextPrompt("(Optional) Comments: ").AllowEmpty()); - } -} diff --git a/ExerciseTracker.frockett/ExerciseTracker.frockett/appsettings.json b/ExerciseTracker.frockett/ExerciseTracker.frockett/appsettings.json deleted file mode 100644 index 99a3990a..00000000 --- a/ExerciseTracker.frockett/ExerciseTracker.frockett/appsettings.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "ConnectionStrings": { - "ExerciseTrackerConnection": "Data Source=ExerciseTracker.db" - }, - "exclude": [ - "**/bin", - "**/bower_components", - "**/jspm_packages", - "**/node_modules", - "**/obj", - "**/platforms" - ] -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTracker.sln b/ExerciseTracker.gabriel2443/ExerciseTracker.sln deleted file mode 100644 index 9617f563..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTracker.sln +++ /dev/null @@ -1,37 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.9.34728.123 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExerciseTracker", "ExerciseTracker\ExerciseTracker.csproj", "{806B1AE0-5A54-435B-A904-FCDC4A49877D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExerciseTrackerUI", "ExerciseTrackerUI\ExerciseTrackerUI\ExerciseTrackerUI.csproj", "{4DC6362C-CC90-42D0-ADB2-91179FA0FC62}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExerciseTrackerAPI", "ExerciseTrackerAPI\ExerciseTrackerAPI.csproj", "{B359DB29-5E57-4DE9-AD41-0E01ADECEBBA}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {806B1AE0-5A54-435B-A904-FCDC4A49877D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {806B1AE0-5A54-435B-A904-FCDC4A49877D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {806B1AE0-5A54-435B-A904-FCDC4A49877D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {806B1AE0-5A54-435B-A904-FCDC4A49877D}.Release|Any CPU.Build.0 = Release|Any CPU - {4DC6362C-CC90-42D0-ADB2-91179FA0FC62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4DC6362C-CC90-42D0-ADB2-91179FA0FC62}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4DC6362C-CC90-42D0-ADB2-91179FA0FC62}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4DC6362C-CC90-42D0-ADB2-91179FA0FC62}.Release|Any CPU.Build.0 = Release|Any CPU - {B359DB29-5E57-4DE9-AD41-0E01ADECEBBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B359DB29-5E57-4DE9-AD41-0E01ADECEBBA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B359DB29-5E57-4DE9-AD41-0E01ADECEBBA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B359DB29-5E57-4DE9-AD41-0E01ADECEBBA}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {99D8B97A-7E68-4289-9797-26BFD75D9B1F} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Controllers/ExerciseController.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Controllers/ExerciseController.cs deleted file mode 100644 index f02ffcfb..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Controllers/ExerciseController.cs +++ /dev/null @@ -1,54 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.Services; -using Microsoft.AspNetCore.Mvc; - -namespace ExerciseTracker.Controllers; - -[Route("api/exercises")] -[ApiController] -public class ExerciseController : ControllerBase -{ - private readonly IExerciseService _exerciseService; - - public ExerciseController(IExerciseService exerciseService) - { - _exerciseService = exerciseService; - } - - [HttpPost] - public async Task PostExercise(Exercise exerciseToAdd) - { - await _exerciseService.CreateExercise(exerciseToAdd); - - return CreatedAtAction(nameof(GetExerciseById), new { id = exerciseToAdd.Id }, exerciseToAdd); - } - - [HttpPut("{id}")] - public async Task PutExercise(int id, Exercise exerciseToUpdate) - { - await _exerciseService.UpdateExercise(id, exerciseToUpdate); - return NoContent(); - } - - [HttpGet] - public async Task GetAllExercises() - { - var exercises = await _exerciseService.GetAllExercises(); - return Ok(exercises); - } - - [HttpGet("{id}")] - public async Task GetExerciseById(int id) - { - var exercise = await _exerciseService.GetExerciseById(id); - return Ok(exercise); - } - - [HttpDelete("{id}")] - public async Task DeleteExercise(int id) - { - if (id <= 0) return BadRequest(); - await _exerciseService.DeleteExercise(id); - return NoContent(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Data/DataContext.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Data/DataContext.cs deleted file mode 100644 index 73c9509d..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Data/DataContext.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.Data; - -public class DataContext : DbContext -{ - public DataContext(DbContextOptions options) : base(options) - { - } - - public DbSet Exercises { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/ExerciseTracker.http b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/ExerciseTracker.http deleted file mode 100644 index 090ea3ed..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/ExerciseTracker.http +++ /dev/null @@ -1,6 +0,0 @@ -@ExerciseTracker_HostAddress = http://localhost:5094 - -GET {{ExerciseTracker_HostAddress}}/weatherforecast/ -Accept: application/json - -### diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/ExerciseTrackerAPI.csproj b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/ExerciseTrackerAPI.csproj deleted file mode 100644 index 97d7d6f3..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/ExerciseTrackerAPI.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - net8.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Migrations/20240702130548_InitialCreate.Designer.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Migrations/20240702130548_InitialCreate.Designer.cs deleted file mode 100644 index 1bad1746..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Migrations/20240702130548_InitialCreate.Designer.cs +++ /dev/null @@ -1,59 +0,0 @@ -// -using System; -using ExerciseTracker.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(DataContext))] - [Migration("20240702130548_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.6") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndTime") - .HasColumnType("datetime2"); - - b.Property("ExerciseName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("StartTime") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Migrations/20240702130548_InitialCreate.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Migrations/20240702130548_InitialCreate.cs deleted file mode 100644 index e056c010..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Migrations/20240702130548_InitialCreate.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Migrations; - -/// -public partial class InitialCreate : Migration -{ - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - ExerciseName = table.Column(type: "nvarchar(max)", nullable: false), - StartTime = table.Column(type: "datetime2", nullable: false), - EndTime = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Migrations/DataContextModelSnapshot.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Migrations/DataContextModelSnapshot.cs deleted file mode 100644 index acdfc939..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Migrations/DataContextModelSnapshot.cs +++ /dev/null @@ -1,54 +0,0 @@ -// -using System; -using ExerciseTracker.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(DataContext))] - partial class DataContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.6") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndTime") - .HasColumnType("datetime2"); - - b.Property("ExerciseName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("StartTime") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Models/Exercise.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Models/Exercise.cs deleted file mode 100644 index e68757e8..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Models/Exercise.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace ExerciseTracker.Models; - -public class Exercise -{ - public int Id { get; set; } - - [Required] - public string? ExerciseName { get; set; } - - public DateTime StartTime { get; set; } - public DateTime EndTime { get; set; } - public TimeSpan Duration { get; set; } - public string? Comments { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Repository/ExerciseRepository.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Repository/ExerciseRepository.cs deleted file mode 100644 index 2ba65d35..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Repository/ExerciseRepository.cs +++ /dev/null @@ -1,52 +0,0 @@ -using ExerciseTracker.Data; -using ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTrackerAPI.Repository; - -public class ExerciseRepository : IExerciseRepository -{ - private readonly DataContext _context; - - public ExerciseRepository(DataContext context) - { - _context = context; - } - - public async Task> GetAllExercises() - { - return await _context.Exercises.ToListAsync(); - } - - public async Task GetExerciseById(int id) - { - return await _context.Exercises.FindAsync(id); - } - - public async Task CreateExercise(Exercise exercise) - { - _context.Exercises.Add(exercise); - await _context.SaveChangesAsync(); - } - - public async Task UpdateExercise(int id, Exercise exerciseToUpdate) - { - var exerciseDb = await _context.Exercises.FindAsync(id); - - exerciseDb.ExerciseName = exerciseToUpdate.ExerciseName; - exerciseDb.StartTime = exerciseToUpdate.StartTime; - exerciseDb.EndTime = exerciseToUpdate.EndTime; - exerciseDb.Duration = exerciseToUpdate.EndTime - exerciseToUpdate.StartTime; - exerciseDb.Comments = exerciseToUpdate.Comments; - - await _context.SaveChangesAsync(); - } - - public async Task DeleteExercise(int id) - { - var exerciseDb = await _context.Exercises.FindAsync(id); - - if (exerciseDb is not null) _context.Exercises.Remove(exerciseDb); - await _context.SaveChangesAsync(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Repository/IExerciseRepository.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Repository/IExerciseRepository.cs deleted file mode 100644 index fb183d2b..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Repository/IExerciseRepository.cs +++ /dev/null @@ -1,16 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTrackerAPI.Repository; - -public interface IExerciseRepository -{ - Task> GetAllExercises(); - - Task GetExerciseById(int id); - - Task CreateExercise(Exercise exercise); - - Task UpdateExercise(int id, Exercise exerciseToUpdate); - - Task DeleteExercise(int id); -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Services/ExerciseService.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Services/ExerciseService.cs deleted file mode 100644 index b4c43880..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Services/ExerciseService.cs +++ /dev/null @@ -1,39 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTrackerAPI.Repository; - -namespace ExerciseTracker.Services; - -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository _exerciseRepository; - - public ExerciseService(IExerciseRepository exerciseRepository) - { - _exerciseRepository = exerciseRepository; - } - - public async Task> GetAllExercises() - { - return await _exerciseRepository.GetAllExercises(); - } - - public async Task GetExerciseById(int id) - { - return await _exerciseRepository.GetExerciseById(id); - } - - public async Task CreateExercise(Exercise exercise) - { - await _exerciseRepository.CreateExercise(exercise); - } - - public async Task UpdateExercise(int id, Exercise exerciseToUpdate) - { - await _exerciseRepository.UpdateExercise(id, exerciseToUpdate); - } - - public async Task DeleteExercise(int id) - { - await _exerciseRepository.DeleteExercise(id); - } -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Services/IExerciseService.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Services/IExerciseService.cs deleted file mode 100644 index 2367ef4f..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/Services/IExerciseService.cs +++ /dev/null @@ -1,16 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Services; - -public interface IExerciseService -{ - Task> GetAllExercises(); - - Task GetExerciseById(int id); - - Task CreateExercise(Exercise exercise); - - Task UpdateExercise(int id, Exercise exerciseToUpdate); - - Task DeleteExercise(int id); -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/appsettings.json b/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/appsettings.json deleted file mode 100644 index 4d0891fe..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerAPI/appsettings.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "ConnectionStrings": { - "DefaultConnection": "Server=(LocalDB)\\ExerciseTrackerDb;Initial Catalog=ExerciseTrackerDb;Integrated Security=true;TrustServerCertificate=True" - }, - - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI.sln b/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI.sln deleted file mode 100644 index 198db23a..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.9.34728.123 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTrackerUI", "ExerciseTrackerUI\ExerciseTrackerUI.csproj", "{9B31BFB1-A039-46A2-9737-AAFB7A3C3D66}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9B31BFB1-A039-46A2-9737-AAFB7A3C3D66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9B31BFB1-A039-46A2-9737-AAFB7A3C3D66}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9B31BFB1-A039-46A2-9737-AAFB7A3C3D66}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9B31BFB1-A039-46A2-9737-AAFB7A3C3D66}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B527B0B6-776B-4529-B281-370759C82776} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/ExerciseHtpp.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/ExerciseHtpp.cs deleted file mode 100644 index f14f7477..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/ExerciseHtpp.cs +++ /dev/null @@ -1,76 +0,0 @@ -using ExerciseTrackerUI.Models; -using System.Text; -using System.Text.Json; - -namespace ExerciseTrackerUI; - -public static class ExerciseHtpp -{ - private static HttpClient httpClient = new HttpClient(); - - internal static async Task> GetAllExercises() - { - try - { - string url = "https://localhost:7112/api/exercises"; - HttpResponseMessage res = await httpClient.GetAsync(url); - res.EnsureSuccessStatusCode(); - - string resBody = await res.Content.ReadAsStringAsync(); - - return JsonSerializer.Deserialize>(resBody, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); - } - catch (Exception ex) - { - Console.WriteLine($"{ex.Message}"); - throw; - } - } - - internal static async Task AddExercise(Exercise exercise) - { - try - { - string url = "https://localhost:7112/api/exercises"; - string json = JsonSerializer.Serialize(exercise); - StringContent httpContent = new(json, Encoding.UTF8, "application/json"); - HttpResponseMessage res = await httpClient.PostAsync(url, httpContent); - res.EnsureSuccessStatusCode(); - } - catch (Exception ex) - { - Console.WriteLine($"{ex.Message}"); - } - } - - internal static async Task UpdateExercise(int id, Exercise exercise) - { - try - { - string url = $"https://localhost:7112/api/exercises/{id}"; - string json = JsonSerializer.Serialize(exercise); - StringContent httpContent = new(json, Encoding.UTF8, "application/json"); - HttpResponseMessage res = await httpClient.PutAsync(url, httpContent); - res.EnsureSuccessStatusCode(); - } - catch (Exception ex) - { - Console.WriteLine($"{ex.Message}"); - } - } - - internal static async Task DeleteExercise(int id) - { - try - { - string url = $"https://localhost:7112/api/exercises/{id}"; - HttpResponseMessage res = await httpClient.DeleteAsync(url); - - res.EnsureSuccessStatusCode(); - } - catch (Exception ex) - { - Console.WriteLine($"{ex.Message}"); - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/ExerciseTrackerUI.csproj b/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/ExerciseTrackerUI.csproj deleted file mode 100644 index 2150e379..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/ExerciseTrackerUI.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/Models/Exercise.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/Models/Exercise.cs deleted file mode 100644 index 0c647402..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/Models/Exercise.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ExerciseTrackerUI.Models; - -public class Exercise -{ - public int Id { get; set; } - public string? ExerciseName { get; set; } - public DateTime StartTime { get; set; } - public DateTime EndTime { get; set; } - public TimeSpan Duration { get; set; } - public string? Comments { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/Program.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/Program.cs deleted file mode 100644 index 04cbe1a2..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/Program.cs +++ /dev/null @@ -1,5 +0,0 @@ -using ExerciseTrackerUI; - -var userInput = new UserInput(); - -await userInput.Menu(); \ No newline at end of file diff --git a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/UserInput.cs b/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/UserInput.cs deleted file mode 100644 index ecfa5b85..00000000 --- a/ExerciseTracker.gabriel2443/ExerciseTrackerUI/ExerciseTrackerUI/UserInput.cs +++ /dev/null @@ -1,192 +0,0 @@ -using ExerciseTrackerUI.Models; - -namespace ExerciseTrackerUI; - -public class UserInput -{ - public async Task Menu() - { - bool isRunning = true; - - while (isRunning) - { - Console.WriteLine("Shift menu\n"); - Console.WriteLine("----------------------------------"); - Console.WriteLine("Press '0' to exit the application"); - Console.WriteLine("Press '1' to view all Exercises"); - Console.WriteLine("Press '2' to add a exercise"); - Console.WriteLine("Press '3' to update a exercise"); - Console.WriteLine("Press '4' to delete a exercise"); - Console.WriteLine("----------------------------------"); - var input = Console.ReadLine(); - - switch (input) - { - case "0": - isRunning = false; - Environment.Exit(0); - break; - - case "1": - await ShowExercises(); - break; - - case "2": - await AddExercise(); - break; - - case "3": - await UpdateExercise(); - break; - - case "4": - - await DeleteExercise(); - break; - - default: - Console.WriteLine("Invalid input"); - break; - } - } - } - - public async Task ShowExercises() - { - var exercises = await ExerciseHtpp.GetAllExercises(); - if (exercises.Any()) - { - foreach (var exercise in exercises) - { - Console.WriteLine($"{exercise.Id}. Name:{exercise.ExerciseName} || Start Date:{exercise.StartTime.ToString("MM-dd-yyyy HH:mm:ss")} || End Date:{exercise.EndTime.ToString("MM-dd-yyyy HH:mm:ss")} || Duration:{exercise.Duration.ToString(@"hh\:mm\:ss")} || Comments:{exercise.Comments}\n"); - } - } - else Console.WriteLine("No exercise found"); - } - - public async Task AddExercise() - - { - Console.Clear(); - var exercise = new Exercise(); - Console.WriteLine("Please enter the exercise name or type 0 to go back to menu"); - var name = Console.ReadLine(); - if (name == "0") return; - while (string.IsNullOrEmpty(name)) - { - Console.WriteLine("Input can not be empty try again."); - name = Console.ReadLine(); - } - Console.WriteLine("Please enter the start date in the HH:mm format"); - var startDate = Console.ReadLine(); - while (!DateTime.TryParseExact(startDate, "HH:mm", null, System.Globalization.DateTimeStyles.None, out _) || string.IsNullOrEmpty(startDate)) - { - Console.WriteLine("Invalid date time"); - startDate = Console.ReadLine(); - } - - Console.WriteLine("Please enter the end date in the HH:mm format"); - var endDate = Console.ReadLine(); - while (string.IsNullOrEmpty(endDate) || - !DateTime.TryParseExact(endDate, "HH:mm", null, System.Globalization.DateTimeStyles.None, out DateTime endTime) || - DateTime.Parse(startDate) >= endTime) - { - Console.WriteLine("End time can't be earlier than start time and must be in HH:mm format. Try again."); - endDate = Console.ReadLine(); - } - - Console.WriteLine("Add a comment to your workout or press any key to skip "); - var comment = Console.ReadLine(); - - exercise.ExerciseName = name; - exercise.StartTime = DateTime.Parse(startDate); - exercise.EndTime = DateTime.Parse(endDate); - exercise.Duration = DateTime.Parse(endDate) - DateTime.Parse(startDate); - exercise.Comments = comment; - await ExerciseHtpp.AddExercise(exercise); - } - - public async Task UpdateExercise() - - { - Console.Clear(); - var exercises = await ExerciseHtpp.GetAllExercises(); - await ShowExercises(); - var exercise = new Exercise(); - Console.WriteLine("Please enter the exercise number you want to update or type 0 to go back to menu"); - var inputId = Console.ReadLine(); - if (!int.TryParse(inputId, out int exerciseId) || - !exercises.Any(e => e.Id == exerciseId)) - { - Console.WriteLine("Exercise does not exist"); - return; - } - while (!int.TryParse(inputId, out _)) - { - Console.WriteLine("Invalid exercise ID. Please enter a valid number."); - - inputId = Console.ReadLine(); - } - Console.WriteLine("Please enter the updated exercise you want to update or type 0 to go back to menu"); - var name = Console.ReadLine(); - - while (string.IsNullOrEmpty(name)) - { - Console.WriteLine("Input can not be empty try again."); - name = Console.ReadLine(); - } - - if (name == "0") return; - while (string.IsNullOrEmpty(name)) Console.WriteLine("Input can not be empty try again."); - - Console.WriteLine("Please enter the updated start date in the HH:mm format"); - var startDate = Console.ReadLine(); - while (!DateTime.TryParseExact(startDate, "HH:mm", null, System.Globalization.DateTimeStyles.None, out _) || string.IsNullOrEmpty(startDate)) - { - Console.WriteLine("Invalid date time"); - startDate = Console.ReadLine(); - } - - Console.WriteLine("Please enter the updated end date in the HH:mm format"); - var endDate = Console.ReadLine(); - - while (string.IsNullOrEmpty(endDate) || - !DateTime.TryParseExact(endDate, "HH:mm", null, System.Globalization.DateTimeStyles.None, out DateTime endTime) || - DateTime.Parse(startDate) >= endTime) - { - Console.WriteLine("End time can't be earlier than start time and must be in HH:mm format. Try again."); - endDate = Console.ReadLine(); - } - while (!DateTime.TryParseExact(endDate, "HH:mm", null, System.Globalization.DateTimeStyles.None, out _) || string.IsNullOrEmpty(startDate)) - { - Console.WriteLine("Invalid date time"); - endDate = Console.ReadLine(); - } - - Console.WriteLine("Add a comment to your workout or press any key to skip "); - var comment = Console.ReadLine(); - - exercise.ExerciseName = name; - exercise.StartTime = DateTime.Parse(startDate); - exercise.EndTime = DateTime.Parse(endDate); - exercise.Duration = DateTime.Parse(endDate) - DateTime.Parse(startDate); - exercise.Comments = comment; - await ExerciseHtpp.UpdateExercise(Convert.ToInt32(exerciseId), exercise); - } - - private async Task DeleteExercise() - { - Console.Clear(); - await ShowExercises(); - var exercises = await ExerciseHtpp.GetAllExercises(); - Console.WriteLine("Please enter the number you want to delete"); - var input = Console.ReadLine(); - if (!int.TryParse(input, out int exerciseId) || - !exercises.Any(e => e.Id == exerciseId)) - { - Console.WriteLine("Exercise does not exist"); - return; - } - await ExerciseHtpp.DeleteExercise(exerciseId); - } -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/.gitignore b/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/.gitignore deleted file mode 100644 index 3ef9468b..00000000 --- a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Rider ignored files -/projectSettingsUpdater.xml -/.idea.ExerciseTracker.hasona23.iml -/modules.xml -/contentModel.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/dataSources.xml b/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/dataSources.xml deleted file mode 100644 index 0c694cec..00000000 --- a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/dataSources.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - sqlserver.localdb.jb - true - com.jetbrains.jdbc.sqlserver.SqlServerDriver - Server=(localdb)\MSSQLLocalDB;Database=ExerciseTrackerDB - - - - - $ProjectFileDir$ - - - \ No newline at end of file diff --git a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/encodings.xml b/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/encodings.xml deleted file mode 100644 index df87cf95..00000000 --- a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/encodings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/indexLayout.xml b/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/indexLayout.xml deleted file mode 100644 index 7b08163c..00000000 --- a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/indexLayout.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/material_theme_project_new.xml b/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/material_theme_project_new.xml deleted file mode 100644 index c5b5aae3..00000000 --- a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/material_theme_project_new.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/vcs.xml b/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/vcs.xml deleted file mode 100644 index 6c0b8635..00000000 --- a/ExerciseTracker.hasona23/.idea/.idea.ExerciseTracker.hasona23/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23.sln b/ExerciseTracker.hasona23/ExerciseTracker.hasona23.sln deleted file mode 100644 index a64c47e6..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23.sln +++ /dev/null @@ -1,16 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.hasona23", "ExerciseTracker.hasona23\ExerciseTracker.hasona23.csproj", "{56A0A188-E0B0-4A23-B367-D5453CD6DE89}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {56A0A188-E0B0-4A23-B367-D5453CD6DE89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {56A0A188-E0B0-4A23-B367-D5453CD6DE89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {56A0A188-E0B0-4A23-B367-D5453CD6DE89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {56A0A188-E0B0-4A23-B367-D5453CD6DE89}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/AppSettings.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/AppSettings.cs deleted file mode 100644 index 5ab25ddf..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/AppSettings.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.Extensions.Configuration; - -namespace ExerciseTracker.hasona23; - -public static class AppSettings -{ - public static string DefaultConnectionString { get; set; } = string.Empty; - - static AppSettings() - { - IConfigurationRoot config ; - try - { - config = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .Build(); - } - catch (Exception ex) - { - Console.WriteLine($"Error Loading ConnectionString :{ex.Message}"); - return; - } - - DefaultConnectionString = config.GetConnectionString("DefaultConnection"); - - - } -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Controllers/ExerciseController.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Controllers/ExerciseController.cs deleted file mode 100644 index 4be646b8..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Controllers/ExerciseController.cs +++ /dev/null @@ -1,55 +0,0 @@ -using ExerciseTracker.hasona23.Enums; -using ExerciseTracker.hasona23.Handlers; -using ExerciseTracker.hasona23.Services; -using Spectre.Console; - -namespace ExerciseTracker.hasona23.Controllers; - -public class ExerciseController(ExerciseService exerciseService,InputHandler inputHandler) -{ - private void AddExercise() - { - var newExercise = inputHandler.CreateExercise(); - exerciseService.AddExercise(newExercise); - } - - private void UpdateExercise() - { - var updatedExercise = inputHandler.UpdateExercise(exerciseService.GetAllExercises()); - bool success = exerciseService.UpdateExercise(updatedExercise); - AnsiConsole.MarkupLine($"{(success?"[green]Updated Exercise Successfully[/]":"[red]Couldn't Update Exercise[/]")}"); - } - - private void DeleteExercise() - { - int deletedId = inputHandler.SelectExercise(exerciseService.GetAllExercises()).Id; - bool success = exerciseService.DeleteExercise(deletedId); - AnsiConsole.MarkupLine($"{(success?"[green]Deleted Exercise Successfully[/]":"[red]Couldn't Delete Exercise[/]")}"); - } - - private void DisplayAllExercises() - { - VisualisationHandler.DisplayExercisesTable(exerciseService.GetAllExercises()); - } - - public void HandleExercises() - { - switch (MenuBuilder.GetExerciseOption()) - { - case ExerciseOptions.Add: - AddExercise(); - break; - case ExerciseOptions.Delete: - DeleteExercise(); - break; - case ExerciseOptions.Update: - UpdateExercise(); - break; - case ExerciseOptions.ReadAll: - DisplayAllExercises(); - break; - case ExerciseOptions.Return: - break; - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Data/ExerciseTrackerContext.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Data/ExerciseTrackerContext.cs deleted file mode 100644 index 667e3c8e..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Data/ExerciseTrackerContext.cs +++ /dev/null @@ -1,15 +0,0 @@ -using ExerciseTracker.hasona23.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.hasona23.Data; - -public class ExerciseTrackerContext : DbContext -{ - public DbSet Exercises { get ; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlServer(AppSettings.DefaultConnectionString); - base.OnConfiguring(optionsBuilder); - } -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Enums/ExerciseOptions.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Enums/ExerciseOptions.cs deleted file mode 100644 index c5a6081b..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Enums/ExerciseOptions.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.hasona23.Enums; - -public enum ExerciseOptions -{ - Add, - Update, - Delete, - ReadAll, - Return, -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Enums/Options.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Enums/Options.cs deleted file mode 100644 index 4cc67aca..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Enums/Options.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace ExerciseTracker.hasona23.Enums; - -public enum Options -{ - Exercises, - Help, - Exit, -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/ExerciseTracker.hasona23.csproj b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/ExerciseTracker.hasona23.csproj deleted file mode 100644 index 4b527462..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/ExerciseTracker.hasona23.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Handlers/InputHandler.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Handlers/InputHandler.cs deleted file mode 100644 index 31d6ae4d..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Handlers/InputHandler.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System.Globalization; -using ExerciseTracker.hasona23.Models; -using Spectre.Console; - -namespace ExerciseTracker.hasona23.Handlers; - -public class InputHandler -{ - private const string DateFormat = "dd/MM/yyyy"; - private const string TimeFormat = "HH:mm"; - public Exercise SelectExercise(List exercises) - { - var selectionPrompt = new SelectionPrompt() - .Title("[yellow]Choose an Exercise: [/]") - .AddChoices(exercises) - .HighlightStyle(new Style(Color.Yellow)); - - return AnsiConsole.Prompt(selectionPrompt); - } - - public ExerciseCreate CreateExercise() - { - string? description = GetDescription(); - DateTime day = GetDay(); - DateTime start = GetStartTime(day); - DateTime end = GetEndTime(day,start); - return new ExerciseCreate(description,start,end); - } - - private DateTime GetStartTime(DateTime day , bool optional = false) - { - DateTime start ; - var prompt = - new TextPrompt( - $"[yellow]Enter a start time ({TimeFormat}) {(optional ? "or Press enter to skip" : "")}: [/]") - .PromptStyle(Color.White); - if (optional) - prompt.AllowEmpty(); - do - { - var startStr = AnsiConsole.Prompt(prompt); - if (string.IsNullOrEmpty(startStr) && optional) - { - return DateTime.MinValue; - } - bool success = DateTime.TryParseExact(startStr, TimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out start); - if (!success) - { - AnsiConsole.MarkupLine($"[red]Wrong Time Format. Check format is {TimeFormat}[/]"); - continue; - } - start = new DateTime(day.Year, day.Month, day.Day, start.Hour, start.Minute, 0); - if (start > DateTime.Now) - { - AnsiConsole.MarkupLine("[red]Cant Accept future timings[/]"); - } - } while (start > DateTime.Now || start == DateTime.MinValue); - return start; - } - - private DateTime GetEndTime(DateTime day, DateTime start, bool optional = false) - { - DateTime end ; - var prompt = - new TextPrompt( - $"[yellow]Enter a End time ({TimeFormat}) {(optional ? "or press enter to skip" : "")}: [/]") - .PromptStyle(Color.White); - if (optional) - prompt.AllowEmpty(); - - do - { - var endStr = AnsiConsole.Prompt(prompt); - if (string.IsNullOrEmpty(endStr) && optional) - { - return DateTime.MinValue; - } - bool success = DateTime.TryParseExact(endStr, TimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out end); - if (!success) - { - AnsiConsole.MarkupLine($"[red]Wrong Time Format. Check format is {TimeFormat}[/]"); - continue; - } - end = new DateTime(day.Year, day.Month, day.Day, end.Hour, end.Minute, 0); - if (end <= start) - { - end = end.AddDays(1); - } - if (end > DateTime.Now) - { - AnsiConsole.MarkupLine("[red]Cant Accept future timings[/]"); - } - - } while (end > DateTime.Now || end == DateTime.MinValue); - return end; - } - - private DateTime GetDay(bool optional = false) - { - DateTime day; - do - { - var dayStr = AnsiConsole.Prompt(new TextPrompt($"[yellow]Enter a date ({DateFormat}) or press enter {(optional?"To skip":"to get current date")}: [/]").PromptStyle(Color.White).AllowEmpty()); - if (string.IsNullOrEmpty(dayStr) && optional) - { - return DateTime.MinValue; - } - if (string.IsNullOrEmpty(dayStr)) - { - day = DateTime.Today; - break; - } - bool success = DateTime.TryParseExact(dayStr, DateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out day); - if (!success) - { - AnsiConsole.MarkupLine($"[red]Wrong date format. Check format is ({DateFormat})[/]"); - - } - if (day > DateTime.Today) - { - AnsiConsole.MarkupLine("[red]Cant Accept Future date[/]"); - } - }while(day == DateTime.MinValue || day > DateTime.Today); - - return day; - } - - private string? GetDescription() - { - return AnsiConsole.Prompt(new TextPrompt("[yellow]Enter Description or press enter to skip: [/]").AllowEmpty().PromptStyle(new Style(Color.White))); - } - - public ExerciseUpdate UpdateExercise(List exercises) - { - int exerciseId = SelectExercise(exercises).Id; - DateTime day = GetDay(true); - DateTime start = GetStartTime(day,true); - DateTime end = GetEndTime(day,start,true); - return new ExerciseUpdate(exerciseId,GetDescription(),start,end); - } -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Handlers/VisualisationHandler.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Handlers/VisualisationHandler.cs deleted file mode 100644 index 1e975feb..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Handlers/VisualisationHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -using ExerciseTracker.hasona23.Models; -using Spectre.Console; - -namespace ExerciseTracker.hasona23.Handlers; - -public static class VisualisationHandler -{ - public static void DisplayExercisesTable(List exercises) - { - Console.Clear(); - var table = new Table().Title("Exercises"); - table.Border(TableBorder.Rounded); - table.BorderStyle(new Style(Color.White)); - table.AddColumns("[yellow]Id[/]", "[yellow]Day[/]", "[yellow]Start[/]", "[yellow]End[/]", - "[yellow]Duration[/]","[yellow]Description[/]"); - foreach (var exercise in exercises) - { - table.AddRow($"[darkturquoise]{exercises.IndexOf(exercise)}[/]", - $"[darkturquoise]{exercise.Start:dd/MM/yyyy}[/]", - $"[darkturquoise]{exercise.Start:hh:mm}[/]", - $"[darkturquoise]{exercise.End:hh:mm}[/]", - $"[darkturquoise]{exercise.Duration.Hours}h : {exercise.Duration.Minutes}m[/]", - $"[darkturquoise]{exercise.Description}[/]"); - } - - table.Expand(); - foreach (var tableColumn in table.Columns) - { - tableColumn.Alignment = Justify.Center; - } - - AnsiConsole.Write(table); - MenuBuilder.Pause(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/MenuBuilder.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/MenuBuilder.cs deleted file mode 100644 index 1074321d..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/MenuBuilder.cs +++ /dev/null @@ -1,37 +0,0 @@ -using ExerciseTracker.hasona23.Enums; -using Spectre.Console; - -namespace ExerciseTracker.hasona23; - -public static class MenuBuilder -{ - public static void Pause() - { - AnsiConsole.MarkupLine("[yellow]Press any key to continue...[/]"); - Console.ReadLine(); - } - - public static ExerciseOptions GetExerciseOption() - { - return AnsiConsole.Prompt(new SelectionPrompt() - .Title("[yellow]Choose Options[/]") - .AddChoices(Enum.GetValues()) - .HighlightStyle(new Style(Color.Yellow))); - } - - public static Options GetOptions() - { - return AnsiConsole.Prompt(new SelectionPrompt() - .Title("[yellow]Choose Option[/]") - .AddChoices(Enum.GetValues()) - .HighlightStyle(new Style(Color.Yellow))); - } - - public static void ShowHelpMenu() - { - AnsiConsole.MarkupLine("[yellow]--Help--[/]"); - AnsiConsole.MarkupLine($"[darkturquoise]{Options.Exercises.ToString()}[/] -> Manage Exercises (Add,Delete,Update,Read)"); - AnsiConsole.MarkupLine($"[darkturquoise]{Options.Exit.ToString()}[/] -> Exit App"); - Pause(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Migrations/20241102105447_InitialMigration.Designer.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Migrations/20241102105447_InitialMigration.Designer.cs deleted file mode 100644 index 2ae81aff..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Migrations/20241102105447_InitialMigration.Designer.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker.hasona23.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.hasona23.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - [Migration("20241102105447_InitialMigration")] - partial class InitialMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.0-rc.2.24474.1") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.hasona23.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Description") - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("End") - .HasColumnType("datetime2"); - - b.Property("Start") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Migrations/20241102105447_InitialMigration.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Migrations/20241102105447_InitialMigration.cs deleted file mode 100644 index 8504d91c..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Migrations/20241102105447_InitialMigration.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.hasona23.Migrations -{ - /// - public partial class InitialMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Description = table.Column(type: "nvarchar(255)", maxLength: 255, nullable: true), - Start = table.Column(type: "datetime2", nullable: false), - End = table.Column(type: "datetime2", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Migrations/ExerciseTrackerContextModelSnapshot.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Migrations/ExerciseTrackerContextModelSnapshot.cs deleted file mode 100644 index 60abbf0e..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Migrations/ExerciseTrackerContextModelSnapshot.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -using System; -using ExerciseTracker.hasona23.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.hasona23.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - partial class ExerciseTrackerContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.0-rc.2.24474.1") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.hasona23.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Description") - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("End") - .HasColumnType("datetime2"); - - b.Property("Start") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Models/Exercise.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Models/Exercise.cs deleted file mode 100644 index 37929975..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Models/Exercise.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; - -namespace ExerciseTracker.hasona23.Models; - -public class Exercise -{ - [Key,Required] - public int Id { get; set; } - [MaxLength(255)] - //type - comments - etc - public string? Description { get; set; } - [Required] - public DateTime Start { get; set; } - [Required] - public DateTime End { get; set; } - [NotMapped] - public TimeSpan Duration => End - Start; - public Exercise(){} - - public Exercise(ExerciseCreate exercise) - { - Start = exercise.Start; - End = exercise.End; - Description = exercise.Description; - } - - public Exercise(int id, string description, DateTime start, DateTime end) - { - Id = id; - Description = description; - Start = start; - End = end; - } - - public override string ToString() => $"Id: {Id} | Description: {Description} | Start: {Start} | End: {End}"; -} - -public record ExerciseCreate(string? Description, DateTime Start, DateTime End); -public record ExerciseUpdate(int Id,string? Description, DateTime Start, DateTime End); \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Program.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Program.cs deleted file mode 100644 index 18984941..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Program.cs +++ /dev/null @@ -1,36 +0,0 @@ -using ExerciseTracker.hasona23; -using ExerciseTracker.hasona23.Controllers; -using ExerciseTracker.hasona23.Enums; -using ExerciseTracker.hasona23.Handlers; -using ExerciseTracker.hasona23.Repository; -using ExerciseTracker.hasona23.Services; -using Spectre.Console; - -bool isRunning = true; -FigletText figlet = new FigletText("Exercise Tracker").Color(Color.Yellow); -figlet.Justify(Justify.Center); -AnsiConsole.Write(figlet); -ExerciseRepository exerciseRepository = new ExerciseRepository(); -ExerciseService service = new ExerciseService(exerciseRepository); -ExerciseController exerciseController = new ExerciseController(service,new InputHandler()); -MenuBuilder.Pause(); - -while (isRunning) -{ - Console.Clear(); - switch (MenuBuilder.GetOptions()) - { - case Options.Exercises: - exerciseController.HandleExercises(); - break; - case Options.Help: - MenuBuilder.ShowHelpMenu(); - break; - case Options.Exit: - AnsiConsole.MarkupLine("[bold yellow]Thanks for using Exercise Tracker![/]"); - isRunning = false; - break; - } -} - - diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Repository/ExerciseRepository.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Repository/ExerciseRepository.cs deleted file mode 100644 index 5350a5e1..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Repository/ExerciseRepository.cs +++ /dev/null @@ -1,60 +0,0 @@ -using ExerciseTracker.hasona23.Data; -using ExerciseTracker.hasona23.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.hasona23.Repository; - -public class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseTrackerContext _context; - - public ExerciseRepository() - { - _context = new ExerciseTrackerContext(); - _context.Database.Migrate(); - } - - public List GetAllExercises() - { - return _context.Exercises.ToList(); - } - - public Exercise? GetExercise(int id) - { - return _context.Exercises.FirstOrDefault(e => e.Id == id); - } - - public void AddExercise(ExerciseCreate exercise) - { - _context.Exercises.Add(new Exercise(exercise)); - _context.SaveChanges(); - } - - public bool UpdateExercise(ExerciseUpdate newExercise) - { - var exercise = _context.Exercises.FirstOrDefault(e => e.Id == newExercise.Id); - if (exercise is null) - { - return false; - } - if (!string.IsNullOrEmpty(newExercise.Description)) - exercise.Description = newExercise.Description; - if(newExercise.Start != DateTime.MinValue) - exercise.Start = newExercise.Start; - if(newExercise.End != DateTime.MinValue) - exercise.End = newExercise.End; - _context.SaveChanges(); - return true; - } - - public bool DeleteExercise(int id) - { - var exercise = _context.Exercises.FirstOrDefault(e => e.Id == id); - if(exercise is null) - return false; - _context.Exercises.Remove(exercise); - _context.SaveChanges(); - return true; - } - -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Repository/IExerciseRepository.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Repository/IExerciseRepository.cs deleted file mode 100644 index a4285320..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Repository/IExerciseRepository.cs +++ /dev/null @@ -1,12 +0,0 @@ -using ExerciseTracker.hasona23.Models; - -namespace ExerciseTracker.hasona23.Repository; - -public interface IExerciseRepository -{ - List GetAllExercises(); - Exercise? GetExercise(int id); - void AddExercise(ExerciseCreate exercise); - bool UpdateExercise(ExerciseUpdate newExercise); - bool DeleteExercise(int id); -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Services/ExerciseService.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Services/ExerciseService.cs deleted file mode 100644 index c2bd4a54..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Services/ExerciseService.cs +++ /dev/null @@ -1,32 +0,0 @@ -using ExerciseTracker.hasona23.Models; -using ExerciseTracker.hasona23.Repository; - -namespace ExerciseTracker.hasona23.Services; - -public class ExerciseService(IExerciseRepository exerciseRepository) : IExerciseService -{ - public List GetAllExercises() - { - return exerciseRepository.GetAllExercises(); - } - - public Exercise? GetExercise(int id) - { - return exerciseRepository.GetExercise(id); - } - - public void AddExercise(ExerciseCreate exercise) - { - exerciseRepository.AddExercise(exercise); - } - - public bool UpdateExercise(ExerciseUpdate newExercise) - { - return exerciseRepository.UpdateExercise(newExercise); - } - - public bool DeleteExercise(int id) - { - return exerciseRepository.DeleteExercise(id); - } -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Services/IExerciseService.cs b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Services/IExerciseService.cs deleted file mode 100644 index 8e758fd1..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/Services/IExerciseService.cs +++ /dev/null @@ -1,12 +0,0 @@ -using ExerciseTracker.hasona23.Models; - -namespace ExerciseTracker.hasona23.Services; - -public interface IExerciseService -{ - List GetAllExercises(); - Exercise? GetExercise(int id); - void AddExercise(ExerciseCreate exercise); - bool UpdateExercise(ExerciseUpdate newExercise); - bool DeleteExercise(int id); -} \ No newline at end of file diff --git a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/appsettings.json b/ExerciseTracker.hasona23/ExerciseTracker.hasona23/appsettings.json deleted file mode 100644 index 01b9f9fd..00000000 --- a/ExerciseTracker.hasona23/ExerciseTracker.hasona23/appsettings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ConnectionStrings": { - "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=ExerciseTrackerDB;Integrated Security=true" - } -} \ No newline at end of file diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI.sln b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI.sln deleted file mode 100644 index 91d09857..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI.sln +++ /dev/null @@ -1,27 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.7.33711.374 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTrackerAPI", "ExerciseTrackerAPI\ExerciseTrackerAPI.csproj", "{99D730F5-2619-4B9B-BFE7-A2BD44E86592}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NewFolder1", "NewFolder1", "{677B977E-4208-41A6-9AE0-128213A43C69}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {99D730F5-2619-4B9B-BFE7-A2BD44E86592}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {99D730F5-2619-4B9B-BFE7-A2BD44E86592}.Debug|Any CPU.Build.0 = Debug|Any CPU - {99D730F5-2619-4B9B-BFE7-A2BD44E86592}.Release|Any CPU.ActiveCfg = Release|Any CPU - {99D730F5-2619-4B9B-BFE7-A2BD44E86592}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {A6E18754-B0E3-4DC5-BF32-430D8BFCD2C7} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Controllers/CustomerController.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Controllers/CustomerController.cs deleted file mode 100644 index d507047b..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Controllers/CustomerController.cs +++ /dev/null @@ -1,59 +0,0 @@ -using ExerciseTrackerAPI.Services.CustomerServices; -using Microsoft.AspNetCore.Mvc; - -namespace ExerciseTrackerAPI.Controllers; - -[Route("api/[controller]")] -[ApiController] -public class CustomerController : ControllerBase -{ - private readonly ICustomerService _customer; - - public CustomerController(ICustomerService customer) - { - _customer = customer; - } - - [HttpGet] - public async Task>> GetAll() - { - return await _customer.GetAll(); - } - - [HttpPost] - public async Task>> AddCustomer(Customer customer) - { - var results = await _customer.AddCustomer(customer); - return results; - } - - [HttpGet("{id}")] - public async Task> Get(int id) - { - var results = await _customer.Get(id); - if (results is null) - return NotFound(); - - return Ok(results); - } - - [HttpPut("{id}")] - public async Task>> UpdateCustomer(int id, Customer response) - { - var results = await _customer.UpdateCustomer(id, response); - if (results is null) - return NotFound(); - - return Ok(results); - } - - [HttpDelete("{id}")] - public async Task>> Delete(int id) - { - var results = await _customer.Delete(id); - if (results is null) - return NotFound(); - - return Ok(results); - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Controllers/ExerciseController.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Controllers/ExerciseController.cs deleted file mode 100644 index d906a40f..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Controllers/ExerciseController.cs +++ /dev/null @@ -1,79 +0,0 @@ -using ExerciseTrackerAPI.Services.ExerciseServices; -using Microsoft.AspNetCore.Mvc; - -namespace ExerciseTrackerAPI.Controllers; - -[Route("api/[controller]")] -[ApiController] -public class ExerciseController : ControllerBase -{ - private readonly IExerciseService _exercise; - - public ExerciseController(IExerciseService exercise) - { - _exercise = exercise; - } - - [HttpGet] - public async Task>> GetAll() - { - return await _exercise.GetAll(); - } - - [HttpPost] - public async Task>> AddExercise(Exercise exercise) - { - var results = await _exercise.AddExercise(exercise); - return results; - } - - [HttpGet("{id}")] - public async Task> Get(int id) - { - var results = await _exercise.Get(id); - if (results is null) - return NotFound(); - - return Ok(results); - } - - [HttpGet("customer/{customerId}/exercises")] - public async Task>> GetExercisesByCustomerId(int customerId) - { - var results = await _exercise.GetExercisesByCustomerId(customerId); - if (results is null) - return NotFound(); - - return Ok(results); - } - - [HttpPut("{id}")] - public async Task>> UpdateExercise(int id, Exercise response) - { - var results = await _exercise.UpdateExercise(id, response); - if (results is null) - return NotFound(); - - return Ok(results); - } - - [HttpDelete("customer/{customerId}/exercises")] - public async Task>> DeleteExercisesByCustomerId(int customerId) - { - var results = await _exercise.DeleteExercisesByCustomerId(customerId); - if (results.Count == 0) - return NotFound(); - - return Ok(results); - } - - [HttpDelete("{id}")] - public async Task>> Delete(int id) - { - var results = await _exercise.Delete(id); - if (results is null) - return NotFound(); - - return Ok(results); - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Data/DataContext.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Data/DataContext.cs deleted file mode 100644 index 55e6e9f0..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Data/DataContext.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace ExerciseTrackerAPI.Data; - -public class DataContext : DbContext -{ - public DataContext(DbContextOptions options) : base(options) { } - public DbSet Customers { get; set; } - public DbSet Exercises { get; set; } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/ExerciseTrackerAPI.csproj b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/ExerciseTrackerAPI.csproj deleted file mode 100644 index c45020c4..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/ExerciseTrackerAPI.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - net6.0 - enable - enable - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Migrations/20230523160153_InitialCreate.Designer.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Migrations/20230523160153_InitialCreate.Designer.cs deleted file mode 100644 index bbb6c31d..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Migrations/20230523160153_InitialCreate.Designer.cs +++ /dev/null @@ -1,91 +0,0 @@ -// -using System; -using ExerciseTrackerAPI.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTrackerAPI.Migrations -{ - [DbContext(typeof(DataContext))] - [Migration("20230523160153_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.5") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTrackerAPI.Models.Customer", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("FirstName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("LastName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("PhoneNumber") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Customers"); - }); - - modelBuilder.Entity("ExerciseTrackerAPI.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("CustomerId") - .HasColumnType("int"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Name") - .HasColumnType("nvarchar(max)"); - - b.Property("Repetitions") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Migrations/20230523160153_InitialCreate.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Migrations/20230523160153_InitialCreate.cs deleted file mode 100644 index b6e5242f..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Migrations/20230523160153_InitialCreate.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTrackerAPI.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Customers", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - FirstName = table.Column(type: "nvarchar(max)", nullable: false), - LastName = table.Column(type: "nvarchar(max)", nullable: false), - PhoneNumber = table.Column(type: "nvarchar(max)", nullable: false), - Password = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Customers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Name = table.Column(type: "nvarchar(max)", nullable: true), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Repetitions = table.Column(type: "int", nullable: false), - CustomerId = table.Column(type: "int", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Customers"); - - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Migrations/DataContextModelSnapshot.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Migrations/DataContextModelSnapshot.cs deleted file mode 100644 index 7cf76b00..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Migrations/DataContextModelSnapshot.cs +++ /dev/null @@ -1,88 +0,0 @@ -// -using System; -using ExerciseTrackerAPI.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTrackerAPI.Migrations -{ - [DbContext(typeof(DataContext))] - partial class DataContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.5") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTrackerAPI.Models.Customer", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("FirstName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("LastName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("PhoneNumber") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Customers"); - }); - - modelBuilder.Entity("ExerciseTrackerAPI.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("CustomerId") - .HasColumnType("int"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Name") - .HasColumnType("nvarchar(max)"); - - b.Property("Repetitions") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Models/Customer.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Models/Customer.cs deleted file mode 100644 index 72570143..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Models/Customer.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTrackerAPI.Models; - -public class Customer -{ - public int Id { get; set; } - public string FirstName { get; set; } - public string LastName { get; set; } - public string PhoneNumber { get; set; } - public string Password { get; set; } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Models/Exercise.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Models/Exercise.cs deleted file mode 100644 index 79976f97..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Models/Exercise.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace ExerciseTrackerAPI.Models; - -public class Exercise -{ - public int Id { get; set; } - public string? Name { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration => DateEnd - DateStart; - public int Repetitions { get; set; } - public int CustomerId { get; set; } - public string Comments { get; set; } = string.Empty; -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Program.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Program.cs deleted file mode 100644 index 1c15d980..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Program.cs +++ /dev/null @@ -1,34 +0,0 @@ -global using ExerciseTrackerAPI.Data; -global using ExerciseTrackerAPI.Models; -global using Microsoft.EntityFrameworkCore; -using ExerciseTrackerAPI.Services.CustomerServices; -using ExerciseTrackerAPI.Services.ExerciseServices; - -var builder = WebApplication.CreateBuilder(args); - -builder.Services.AddControllers(); -builder.Services.AddDbContext(options => -{ - options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")); -}); - -builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); - -var app = builder.Build(); - -if (app.Environment.IsDevelopment()) -{ - app.UseSwagger(); - app.UseSwaggerUI(); -} - -app.UseHttpsRedirection(); - -app.UseAuthorization(); - -app.MapControllers(); - -app.Run(); diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Properties/launchSettings.json b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Properties/launchSettings.json deleted file mode 100644 index 7a11159e..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Properties/launchSettings.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:6299", - "sslPort": 44318 - } - }, - "profiles": { - "ExerciseTrackerAPI": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "launchUrl": "swagger", - "applicationUrl": "https://localhost:7136;http://localhost:5239", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "launchUrl": "swagger", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/CustomerServices/CustomerService.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/CustomerServices/CustomerService.cs deleted file mode 100644 index cc131f22..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/CustomerServices/CustomerService.cs +++ /dev/null @@ -1,61 +0,0 @@ -namespace ExerciseTrackerAPI.Services.CustomerServices; - -public class CustomerService : ICustomerService -{ - private readonly DataContext _context; - - public CustomerService(DataContext context) - { - _context = context; - } - - public async Task> AddCustomer(Customer customer) - { - _context.Customers.Add(customer); - await _context.SaveChangesAsync(); - - return await _context.Customers.ToListAsync(); - } - - public async Task> Delete(int id) - { - var dbCustomer = await _context.Customers.FindAsync(id); - if (dbCustomer == null) - return new List(); - - _context.Customers.Remove(dbCustomer); - await _context.SaveChangesAsync(); - - return await _context.Customers.ToListAsync(); - } - - public async Task Get(int id) - { - var customer = await _context.Customers.FindAsync(id); - if (customer == null) - return null; - - return customer; - } - - public async Task> GetAll() - { - return await _context.Customers.ToListAsync(); - } - - public async Task UpdateCustomer(int id, Customer request) - { - var customer = await _context.Customers.FindAsync(id); - if (customer == null) - return null; - - customer.FirstName = request.FirstName; - customer.LastName = request.LastName; - customer.PhoneNumber = request.PhoneNumber; - customer.Password = request.Password; - - await _context.SaveChangesAsync(); - - return customer; - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/CustomerServices/ICustomerService.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/CustomerServices/ICustomerService.cs deleted file mode 100644 index e8d0b1d5..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/CustomerServices/ICustomerService.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTrackerAPI.Services.CustomerServices; - -public interface ICustomerService -{ - Task> GetAll(); - Task Get(int id); - Task> AddCustomer(Customer customer); - Task? UpdateCustomer(int id, Customer request); - Task> Delete(int id); -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/ExerciseServices/ExerciseService.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/ExerciseServices/ExerciseService.cs deleted file mode 100644 index 5512e4f1..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/ExerciseServices/ExerciseService.cs +++ /dev/null @@ -1,82 +0,0 @@ -namespace ExerciseTrackerAPI.Services.ExerciseServices; - -public class ExerciseService : IExerciseService -{ - private readonly DataContext _context; - - public ExerciseService(DataContext context) - { - _context = context; - } - - public async Task> AddExercise(Exercise exercise) - { - _context.Exercises.Add(exercise); - await _context.SaveChangesAsync(); - - return await _context.Exercises.ToListAsync(); - } - - public async Task> Delete(int id) - { - var dbExercise = await _context.Exercises.FindAsync(id); - if (dbExercise == null) - return new List(); - - _context.Exercises.Remove(dbExercise); - await _context.SaveChangesAsync(); - - return await _context.Exercises.ToListAsync(); - } - - public async Task> DeleteExercisesByCustomerId(int customerId) - { - var exercises = await _context.Exercises.Where(e => e.CustomerId == customerId).ToListAsync(); - - if (exercises.Count == 0) - return new List(); - - _context.Exercises.RemoveRange(exercises); - await _context.SaveChangesAsync(); - - return await _context.Exercises.ToListAsync(); - } - - public async Task Get(int id) - { - var exercise = await _context.Exercises.FindAsync(id); - if (exercise == null) - return null; - - return exercise; - } - - public async Task> GetAll() - { - return await _context.Exercises.ToListAsync(); - } - - public async Task> GetExercisesByCustomerId(int customerId) - { - var exercises = await _context.Exercises.Where(e => e.CustomerId == customerId).ToListAsync(); - if (exercises.Count == 0) - return null; - - return exercises; - } - - public async Task> UpdateExercise(int id, Exercise request - ) - { - var exercise = await _context.Exercises.FindAsync(id); - if (exercise == null) - return null; - - exercise.DateStart = request.DateStart; - exercise.DateEnd = request.DateEnd; - exercise.Repetitions = request.Repetitions; - exercise.Comments = request.Comments; - - return await _context.Exercises.ToListAsync(); - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/ExerciseServices/IExerciseService.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/ExerciseServices/IExerciseService.cs deleted file mode 100644 index 76a510e5..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/Services/ExerciseServices/IExerciseService.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace ExerciseTrackerAPI.Services.ExerciseServices -{ - public interface IExerciseService - { - Task> GetAll(); - Task> AddExercise(Exercise exercise); - Task> DeleteExercisesByCustomerId(int customerId); - Task Get(int id); - Task> GetExercisesByCustomerId(int customerId); - Task> UpdateExercise(int id, Exercise response); - Task> Delete(int id); - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/appsettings.json b/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/appsettings.json deleted file mode 100644 index 5225b7f8..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerAPI/ExerciseTrackerAPI/appsettings.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "ConnectionStrings": { - "DefaultConnection": "Data Source=(localdb)\\ExerciseTracker;Initial Catalog=ExerciseTrackerDb;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" - - }, - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp.sln b/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp.sln deleted file mode 100644 index 9fb24124..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.7.33711.374 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTrackerConsoleApp", "ExerciseTrackerConsoleApp\ExerciseTrackerConsoleApp.csproj", "{02274322-73B1-49BE-8D20-0EBD02BF591D}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {02274322-73B1-49BE-8D20-0EBD02BF591D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {02274322-73B1-49BE-8D20-0EBD02BF591D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {02274322-73B1-49BE-8D20-0EBD02BF591D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {02274322-73B1-49BE-8D20-0EBD02BF591D}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {4AAE114D-D516-47E1-BBD4-ABF4D125B748} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/ApiClient.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/ApiClient.cs deleted file mode 100644 index dd22eebd..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/ApiClient.cs +++ /dev/null @@ -1,245 +0,0 @@ -using System.Net.Http.Json; -using System.Text; -using System.Text.Json; - -namespace ExerciseTrackerAPI; - -public class ApiClient -{ - private static readonly HttpClient httpClient = new HttpClient() - { - BaseAddress = new Uri("https://localhost:7136") - }; - - public async Task> GetAllCustomersAsync() - { - var response = await httpClient.GetAsync("/api/Customer"); - if (!response.IsSuccessStatusCode) - return null; - - response.EnsureSuccessStatusCode(); - var result = await response.Content.ReadFromJsonAsync>(); - - return result; - } - - public async Task GetCustomerByIdAsync(int id) - { - var response = await httpClient.GetAsync($"/api/Customer/{id}"); - if (!response.IsSuccessStatusCode) - return null; - - response.EnsureSuccessStatusCode(); - var result = await response.Content.ReadFromJsonAsync(); - - return result; - } - - public async Task AddCustomerAsync(string firstName, string lastName, string phoneNumber, string password) - { - var customer = new Customer - { - FirstName = firstName, - LastName = lastName, - PhoneNumber = phoneNumber, - Password = password - }; - - try - { - var json = JsonSerializer.Serialize(customer); - var content = new StringContent(json, Encoding.UTF8, "application/json"); - - var response = await httpClient.PostAsync("/api/Customer", content); - response.EnsureSuccessStatusCode(); - - var responseJson = await response.Content.ReadAsStringAsync(); - var result = JsonSerializer.Deserialize>(responseJson); - - return result?.LastOrDefault(); - } - catch (Exception ex) - { - Console.WriteLine("Error adding customer:"); - Console.WriteLine(ex.Message); - throw; - } - } - - public async Task UpdateCustomerAsync(int id, string firstName, string lastName, string phoneNumber, string password) - { - var customer = new Customer { Id = id, FirstName = firstName, LastName = lastName, PhoneNumber = phoneNumber, Password = password }; - - try - { - var json = JsonSerializer.Serialize(customer); - var content = new StringContent(json, Encoding.UTF8, "application/json"); - - var response = await httpClient.PutAsync($"/api/Customer/{id}", content); - response.EnsureSuccessStatusCode(); - - var responseJson = await response.Content.ReadAsStringAsync(); - var updatedCustomer = JsonSerializer.Deserialize(responseJson); - - return updatedCustomer; - } - catch (Exception ex) - { - Console.WriteLine("Error updating customer:"); - Console.WriteLine(ex.Message); - throw; - } - } - - public async Task DeleteCustomerAsync(int id) - { - var response = await httpClient.DeleteAsync($"/api/Customer/{id}"); - return response.IsSuccessStatusCode; - } - - public async Task> GetAllExercisesAsync() - { - var response = await httpClient.GetAsync("/api/Exercise"); - response.EnsureSuccessStatusCode(); - var result = await response.Content.ReadFromJsonAsync>(); - - return result; - } - - public async Task GetExerciseByIdAsync(int id) - { - var response = await httpClient.GetAsync($"/api/Exercise/{id}"); - if (!response.IsSuccessStatusCode) - return null; - response.EnsureSuccessStatusCode(); - var result = await response.Content.ReadFromJsonAsync(); - - return result; - } - - public async Task> GetExercisesByCustomerIdAsync(int customerId) - { - var exercises = await GetAllExercisesAsync(); - var filteredExercises = exercises.Where(e => e.CustomerId == customerId).ToList(); - - return filteredExercises; - } - - public async Task AddExerciseAsync(string Name, DateTime dateStart, DateTime dateEnd, int repetitions, int customerId, string comments) - { - var exercise = new Exercise - { - Name = Name, - DateStart = dateStart, - DateEnd = dateEnd, - Repetitions = repetitions, - CustomerId = customerId, - Comments = comments - }; - - try - { - var json = JsonSerializer.Serialize(exercise); - var content = new StringContent(json, Encoding.UTF8, "application/json"); - - var response = await httpClient.PostAsync("/api/Exercise", content); - response.EnsureSuccessStatusCode(); - - var responseJson = await response.Content.ReadAsStringAsync(); - var result = JsonSerializer.Deserialize>(responseJson); - - return result?.LastOrDefault(); - } - catch (Exception ex) - { - Console.WriteLine("Error adding exercise:"); - Console.WriteLine(ex.Message); - throw; - } - } - - public async Task UpdateExerciseAsync(int id, DateTime dateStart, DateTime dateEnd, int repetitions, int customerId, string comments) - { - var exercise = new Exercise - { - Id = id, - DateStart = dateStart, - DateEnd = dateEnd, - Repetitions = repetitions, - CustomerId = customerId, - Comments = comments - }; - - try - { - var json = JsonSerializer.Serialize(exercise); - var content = new StringContent(json, Encoding.UTF8, "application/json"); - - var response = await httpClient.PutAsync($"/api/Exercise/{id}", content); - response.EnsureSuccessStatusCode(); - - var responseJson = await response.Content.ReadAsStringAsync(); - var updatedExercise = JsonSerializer.Deserialize(responseJson); - - return updatedExercise; - } - catch (Exception ex) - { - Console.WriteLine("Error updating exercise:"); - Console.WriteLine(ex.Message); - throw; - } - } - - public async Task DeleteExerciseAsync(int id) - { - var response = await httpClient.DeleteAsync($"/api/Exercise/{id}"); - if (!response.IsSuccessStatusCode) - return null; - return response.IsSuccessStatusCode; - } - - public async Task DeleteExercisesByCustomerIdAsync(int customerId) - { - var exercises = await GetAllExercisesAsync(); - - bool success = true; - - foreach (var exercise in exercises) - { - if (exercise.CustomerId == customerId) - { - bool? result = await DeleteExerciseAsync(exercise.Id); - if (result == null) - { - success = false; - break; - } - } - } - - return success; - } - - public class Customer - { - public int Id { get; set; } - public string FirstName { get; set; } - public string LastName { get; set; } - public string PhoneNumber { get; set; } - public string Password { get; set; } - - } - - public class Exercise - { - public int Id { get; set; } - public string Name { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration => DateEnd - DateStart; - public int Repetitions { get; set; } - public int CustomerId { get; set; } - public string Comments { get; set; } = string.Empty; - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/CustomerInfoInput.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/CustomerInfoInput.cs deleted file mode 100644 index 40344d77..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/CustomerInfoInput.cs +++ /dev/null @@ -1,288 +0,0 @@ -using ConsoleTableExt; -using ExerciseTrackerAPI; -using static ExerciseTrackerAPI.ApiClient; - -namespace ExerciseTrackerConsoleApp; - -internal class CustomerInfoInput -{ - - static bool deleteCustomer; - static bool updateCustomer; - static bool getOneCustomer; - internal static async Task CustomerUI() - { - var apiClient = new ApiClient(); - - Console.Clear(); - Console.WriteLine("Customer Options:"); - Console.WriteLine("1. List all customers"); - Console.WriteLine("2. Get a customer by ID"); - Console.WriteLine("3. Add a customer"); - Console.WriteLine("4. Update an existing customer"); - Console.WriteLine("5. Delete an existing customer"); - Console.WriteLine("6. Go Back"); - - while (true) - { - var option = Console.ReadLine(); - - switch (option) - { - case "1": - await ListCustomersAsync(apiClient); - break; - - case "2": - getOneCustomer = true; - await ListCustomersAsync(apiClient); - await GetCustomerAsync(apiClient); - break; - - case "3": - await AddCustomerAsync(apiClient); - break; - - case "4": - updateCustomer = true; - await ListCustomersAsync(apiClient); - await UpdateCustomerAsync(apiClient); - break; - - case "5": - deleteCustomer = true; - await ListCustomersAsync(apiClient); - await DeleteCustomerAsync(apiClient); - break; - - case "6": - await MainMenu.StartUI(); - break; - - default: - Console.WriteLine("Invalid option, please try again."); - break; - } - } - } - - internal static async Task ListCustomersAsync(ApiClient apiClient) - { - Console.WriteLine("Listing all customers..."); - - var customers = await apiClient.GetAllCustomersAsync(); - - ConsoleTableBuilder - .From(customers) - .WithFormat(ConsoleTableBuilderFormat.Alternative) - .ExportAndWriteLine(TableAligntment.Center); - - if (!deleteCustomer && !updateCustomer && !getOneCustomer && !ExerciseInput.getCustomers) - { - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await CustomerUI(); - } - } - - private static async Task GetCustomerAsync(ApiClient apiClient) - { - getOneCustomer = false; - Console.WriteLine("Enter the ID of the customer (or 'b' to go back to Menu):"); - string input = Console.ReadLine(); - - if (input.Equals("b", StringComparison.OrdinalIgnoreCase)) - { - Console.Clear(); - await CustomerUI(); - } - - if (!int.TryParse(input, out int id)) - { - Console.WriteLine("Invalid ID, please try again."); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await GetCustomerAsync(apiClient); - } - - var customer = await apiClient.GetCustomerByIdAsync(id); - - if (customer == null) - { - Console.WriteLine("Customer not found."); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await GetCustomerAsync(apiClient); - } - - Console.WriteLine($"Getting customer with ID {customer.Id}..."); - var tableData = new List { customer }; - - ConsoleTableBuilder - .From(tableData) - .WithFormat(ConsoleTableBuilderFormat.Alternative) - .ExportAndWriteLine(TableAligntment.Center); - - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await CustomerUI(); - } - - internal static async Task AddCustomerAsync(ApiClient apiClient) - { - Console.WriteLine("Enter the first name of the new customer:"); - var firstName = Console.ReadLine(); - - Console.WriteLine("Enter the last name of the new customer:"); - var lastName = Console.ReadLine(); - - Console.WriteLine("Enter the phone number of the new customer:"); - var phoneNumber = Console.ReadLine(); - - Console.WriteLine("Enter the password of the new customer:"); - var password = Console.ReadLine(); - - Console.WriteLine($"Adding new customer {firstName}..."); - - await apiClient.AddCustomerAsync(firstName, lastName, phoneNumber, password); - await PrintLastCustomerAsync(apiClient); - - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await CustomerUI(); - } - - internal static async Task PrintLastCustomerAsync(ApiClient apiClient) - { - var customers = await apiClient.GetAllCustomersAsync(); - - if (customers.Count > 0) - { - var lastCustomer = customers[^1]; - var tableData = new List { lastCustomer }; - - ConsoleTableBuilder - .From(tableData) - .WithFormat(ConsoleTableBuilderFormat.Alternative) - .ExportAndWriteLine(TableAligntment.Center); - } - else - { - Console.WriteLine("No customers found."); - } - } - - private static async Task UpdateCustomerAsync(ApiClient apiClient) - { - updateCustomer = false; - Console.WriteLine("Enter the ID of the customer (or 'b' to go back to Menu):"); - string input = Console.ReadLine(); - - if (input.Equals("b", StringComparison.OrdinalIgnoreCase)) - { - Console.Clear(); - await CustomerUI(); - } - - if (!int.TryParse(input, out int id)) - { - Console.WriteLine("Invalid ID, please try again."); - await UpdateCustomerAsync(apiClient); - } - - var customer = await apiClient.GetCustomerByIdAsync(id); - - if (customer == null) - { - Console.WriteLine("Customer not found."); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await UpdateCustomerAsync(apiClient); - } - - Console.WriteLine("Enter the new name of the customer or Enter to keep the same:"); - var firstName = Console.ReadLine(); - - if (string.IsNullOrEmpty(firstName)) - { - firstName = customer.FirstName; - } - - Console.WriteLine("Enter the new last name of the customer or Enter to keep the same:"); - var lastName = Console.ReadLine(); - - if (string.IsNullOrEmpty(lastName)) - { - lastName = customer.LastName; - } - - Console.WriteLine("Enter the new phone number of the customer or Enter to keep the same:"); - var phoneNumber = Console.ReadLine(); - - if (string.IsNullOrEmpty(phoneNumber)) - { - phoneNumber = customer.PhoneNumber; - } - - Console.WriteLine("Enter the new password of the customer or Enter to keep the same:"); - var password = Console.ReadLine(); - - if (string.IsNullOrEmpty(password)) - { - password = customer.Password; - } - - await apiClient.UpdateCustomerAsync(id, firstName, lastName, phoneNumber, password); - Console.WriteLine($"Customer with name: {firstName} updated."); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await CustomerUI(); - } - - private static async Task DeleteCustomerAsync(ApiClient apiClient) - { - deleteCustomer = false; - Console.WriteLine("Enter the ID of the customer to delete (or 'b' to go back to Menu):"); - string input = Console.ReadLine(); - - if (input.Equals("b", StringComparison.OrdinalIgnoreCase)) - { - Console.Clear(); - await CustomerUI(); - } - - if (!int.TryParse(input, out int id)) - { - Console.WriteLine("Invalid ID, please try again."); - await DeleteCustomerAsync(apiClient); - } - - var customer = await apiClient.GetCustomerByIdAsync(id); - - if (customer == null) - { - Console.WriteLine("Customer not found."); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await DeleteCustomerAsync(apiClient); - } - - bool success = await apiClient.DeleteExercisesByCustomerIdAsync(id); - - if (success) - { - Console.WriteLine($"Exercises with customer ID: {id} deleted."); - } - else - { - Console.WriteLine($"No exercises found for customer with ID: {id}."); - } - - Console.WriteLine($"Deleting customer with ID {customer.Id}..."); - await apiClient.DeleteCustomerAsync(id); - Console.WriteLine($"Customer with ID {customer.Id} deleted."); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await CustomerUI(); - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/ExerciseInput.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/ExerciseInput.cs deleted file mode 100644 index 2dd64271..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/ExerciseInput.cs +++ /dev/null @@ -1,243 +0,0 @@ -using ConsoleTableExt; -using ExerciseTrackerAPI; -using static ExerciseTrackerAPI.ApiClient; - -namespace ExerciseTrackerConsoleApp; - -internal class ExerciseInput -{ - static bool deleteExercise; - static bool getExerciseId; - public static bool getCustomers; - - internal static async Task ExerciseUI() - { - var apiClient = new ApiClient(); - - Console.Clear(); - Console.WriteLine("Exercise Options:"); - Console.WriteLine("1. List all Exercises"); - Console.WriteLine("2. Get a exercise by ID"); - Console.WriteLine("3. Delete an existing exercise"); - Console.WriteLine("4. See exercises by customer"); - Console.WriteLine("5. Delete all exercises by customer id"); - Console.WriteLine("6. Go Back"); - - while (true) - { - var option = Console.ReadLine(); - - switch (option) - { - case "1": - await ListExercises(apiClient); - break; - - case "2": - getExerciseId = true; - await ListExercises(apiClient); - await GetExerciseById(apiClient); - break; - - case "3": - deleteExercise = true; - await ListExercises(apiClient); - await DeleteExercise(apiClient); - break; - - case "4": - getCustomers = true; - await CustomerInfoInput.ListCustomersAsync(apiClient); - await GetExercisesByCustomerId(apiClient); - break; - - case "5": - getCustomers = true; - await CustomerInfoInput.ListCustomersAsync(apiClient); - await DeleteExerciseByCustomerId(apiClient); - break; - - case "6": - await MainMenu.StartUI(); - break; - - default: - Console.WriteLine("Invalid option, please try again."); - break; - } - } - } - - private static async Task DeleteExerciseByCustomerId(ApiClient apiClient) - { - getExerciseId = false; - Console.WriteLine("Enter the ID of the customer to delete exercises (or 'b' to go back to Menu):"); - string input = Console.ReadLine(); - - if (input.Equals("b", StringComparison.OrdinalIgnoreCase)) - { - Console.Clear(); - await ExerciseUI(); - } - - if (!int.TryParse(input, out int id)) - { - Console.WriteLine("Invalid ID, please try again."); - await DeleteExercise(apiClient); - } - - bool success = await apiClient.DeleteExercisesByCustomerIdAsync(id); - - if (success) - { - Console.WriteLine($"Exercises with customer ID: {id} deleted."); - } - else - { - Console.WriteLine($"No exercises found for customer with ID: {id}."); - } - - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await ExerciseUI(); - } - - private static async Task GetExercisesByCustomerId(ApiClient apiClient) - { - getCustomers = false; - Console.WriteLine("Enter the ID of the customer to retrieve exercises (or 'b' to go back to Menu):"); - string input = Console.ReadLine(); - - if (input.Equals("b", StringComparison.OrdinalIgnoreCase)) - { - Console.Clear(); - await ExerciseUI(); - return; - } - - if (!int.TryParse(input, out int customerId)) - { - Console.WriteLine("Invalid ID, please try again."); - await GetExercisesByCustomerId(apiClient); - return; - } - - var exercises = await apiClient.GetExercisesByCustomerIdAsync(customerId); - - if (exercises == null) - { - Console.WriteLine("No exercises found for the customer."); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await ExerciseUI(); - - } - - ConsoleTableBuilder - .From(exercises) - .WithFormat(ConsoleTableBuilderFormat.Alternative) - .ExportAndWriteLine(TableAligntment.Center); - - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await ExerciseUI(); - } - - private static async Task DeleteExercise(ApiClient apiClient) - { - deleteExercise = false; - Console.WriteLine("Enter the ID of the exercise to delete (or 'b' to go back to Menu):"); - string input = Console.ReadLine(); - - if (input.Equals("b", StringComparison.OrdinalIgnoreCase)) - { - Console.Clear(); - await ExerciseUI(); - } - - if (!int.TryParse(input, out int id)) - { - Console.WriteLine("Invalid ID, please try again."); - await DeleteExercise(apiClient); - } - - var exercise = await apiClient.GetExerciseByIdAsync(id); - - if (exercise == null) - { - Console.WriteLine("No Exercise ID Found, please try again"); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await ExerciseUI(); - } - - Console.WriteLine($"Deleting exercise with ID {exercise.Id}..."); - await apiClient.DeleteExerciseAsync(id); - Console.WriteLine($"Exercise with ID {exercise.Id} deleted."); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await ExerciseUI(); - - } - - private static async Task GetExerciseById(ApiClient apiClient) - { - getExerciseId = false; - Console.WriteLine("Enter the ID of the exercise (or 'b' to go back to Menu):"); - string input = Console.ReadLine(); - - if (input.Equals("b", StringComparison.OrdinalIgnoreCase)) - { - Console.Clear(); - await ExerciseUI(); - } - - if (!int.TryParse(input, out int id)) - { - Console.WriteLine("Invalid ID, please try again."); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await GetExerciseById(apiClient); - } - - var exercise = await apiClient.GetExerciseByIdAsync(id); - - if (exercise == null) - { - Console.WriteLine("Exercise not found."); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await GetExerciseById(apiClient); - } - - Console.WriteLine($"Getting exercise with ID {exercise.Id}..."); - var tableData = new List { exercise }; - - ConsoleTableBuilder - .From(tableData) - .WithFormat(ConsoleTableBuilderFormat.Alternative) - .ExportAndWriteLine(TableAligntment.Center); - - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await ExerciseUI(); - } - - private static async Task ListExercises(ApiClient apiClient) - { - Console.WriteLine("Listing all exercises..."); - var exercises = await apiClient.GetAllExercisesAsync(); - - ConsoleTableBuilder - .From(exercises) - .WithFormat(ConsoleTableBuilderFormat.Alternative) - .ExportAndWriteLine(TableAligntment.Center); - - if (!deleteExercise && !getExerciseId) - { - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await ExerciseUI(); - } - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp.csproj b/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp.csproj deleted file mode 100644 index 0582155b..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - Exe - net6.0 - enable - enable - - - - - - - diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/MainMenu.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/MainMenu.cs deleted file mode 100644 index c2a294db..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/MainMenu.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace ExerciseTrackerConsoleApp; - -internal class MainMenu -{ - internal static async Task StartUI() - { - Console.Clear(); - Console.WriteLine("Main Options:"); - Console.WriteLine("1. Customer Info Menu"); - Console.WriteLine("2. Exercise Info Menu"); - Console.WriteLine("3. User Menu"); - - var option = Console.ReadLine(); - - switch (option) - { - case "1": - await CustomerInfoInput.CustomerUI(); - break; - - case "2": - await ExerciseInput.ExerciseUI(); - break; - case "3": - await UserInput.UserUI(); - break; - - default: - Console.WriteLine("Invalid option, please try again."); - break; - } - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/Program.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/Program.cs deleted file mode 100644 index ca98939e..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/Program.cs +++ /dev/null @@ -1,9 +0,0 @@ -global using ExerciseTrackerConsoleApp; - -class Program -{ - static async Task Main() - { - await MainMenu.StartUI(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/UserInput.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/UserInput.cs deleted file mode 100644 index 2304f40b..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/UserInput.cs +++ /dev/null @@ -1,111 +0,0 @@ -using ExerciseTrackerAPI; - -namespace ExerciseTrackerConsoleApp; - -internal class UserInput -{ - internal static async Task UserUI() - { - var apiClient = new ApiClient(); - - Console.Clear(); - Console.WriteLine("User Options:"); - Console.WriteLine("1. Sign In"); - Console.WriteLine("2. Create New Account"); - Console.WriteLine("3. Go Back"); - - while (true) - { - var option = Console.ReadLine(); - - switch (option) - { - case "1": - await SignIn(apiClient); - break; - - case "2": - await AddNewCustomer(apiClient); - break; - - case "3": - await MainMenu.StartUI(); - break; - - default: - Console.WriteLine("Invalid option, please try again."); - break; - } - } - } - - private async static Task AddNewCustomer(ApiClient apiClient) - { - Console.WriteLine("Enter the first name of the new customer: (or 'b' to go back to Menu):"); - var firstName = Console.ReadLine(); - - if (firstName.Equals("b", StringComparison.OrdinalIgnoreCase)) - { - Console.Clear(); - await UserUI(); - } - - Console.WriteLine("Enter the last name of the new customer:"); - var lastName = Console.ReadLine(); - - Console.WriteLine("Enter the phone number of the new customer:"); - var phoneNumber = Console.ReadLine(); - - Console.WriteLine("Enter the password of the new customer:"); - var password = Console.ReadLine(); - - Console.WriteLine($"Adding new customer {firstName}..."); - await apiClient.AddCustomerAsync(firstName, lastName, phoneNumber, password); - await CustomerInfoInput.PrintLastCustomerAsync(apiClient); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await UserUI(); - } - - private static async Task SignIn(ApiClient apiClient) - { - Console.WriteLine("Enter your customer ID: (or 'b' to go back to Menu):"); - string customerIdInput = Console.ReadLine(); - - if (customerIdInput.Equals("b", StringComparison.OrdinalIgnoreCase)) - { - Console.Clear(); - await UserUI(); - } - - if (!int.TryParse(customerIdInput, out int customerId)) - { - Console.WriteLine("Invalid customer ID format. Please try again."); - await SignIn(apiClient); - } - - var customer = await apiClient.GetCustomerByIdAsync(customerId); - - bool isValid = false; - Console.WriteLine("Enter your password:"); - string password = Console.ReadLine(); - - if (customer != null && password == customer.Password) - { - isValid = true; - Console.WriteLine($"{customer.FirstName} signed in"); - } - - if (!isValid) - { - Console.WriteLine("Invalid customer ID or password."); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await UserUI(); - } - - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await UserSignedInInput.UserMenu(customerId); - } -} diff --git a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/UserSignedInInput.cs b/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/UserSignedInInput.cs deleted file mode 100644 index 2638ab96..00000000 --- a/ExerciseTracker.heartingNinja/ExerciseTrackerConsoleApp/ExerciseTrackerConsoleApp/UserSignedInInput.cs +++ /dev/null @@ -1,93 +0,0 @@ -using ConsoleTableExt; -using ExerciseTrackerAPI; - -namespace ExerciseTrackerConsoleApp; - -internal class UserSignedInInput -{ - internal static async Task UserMenu(int customerId) - { - var apiClient = new ApiClient(); - - Console.Clear(); - Console.WriteLine("User Options:"); - Console.WriteLine("1. New Exercise"); - Console.WriteLine("2. See Past Exercises"); - Console.WriteLine("3. Log Out"); - - while (true) - { - var option = Console.ReadLine(); - - switch (option) - { - case "1": - await NewExercise(apiClient, customerId); - break; - - case "2": - await SeePastExercises(apiClient, customerId); - break; - - case "3": - await UserInput.UserUI(); - break; - - default: - Console.WriteLine("Invalid option, please try again."); - break; - } - } - } - - private static async Task SeePastExercises(ApiClient apiClient, int customerId) - { - var exercises = await apiClient.GetExercisesByCustomerIdAsync(customerId); - - ConsoleTableBuilder - .From(exercises) - .WithFormat(ConsoleTableBuilderFormat.Alternative) - .ExportAndWriteLine(TableAligntment.Center); - - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - Console.Clear(); - await UserMenu(customerId); - } - - private static async Task NewExercise(ApiClient apiClient, int customerId) - { - var customer = await apiClient.GetCustomerByIdAsync(customerId); - - string name = $"{customer.FirstName} {customer.LastName}"; - Console.Write("Hit Enter To start exercise time"); - Console.ReadLine(); - DateTime dateStart = DateTime.Now; - - Console.Write("Hit Enter to end exercise time"); - Console.ReadLine(); - DateTime dateEnd = DateTime.Now; - - int repetitions; - - while (true) - { - Console.Write("Enter the number of repetitions: "); - if (!int.TryParse(Console.ReadLine(), out repetitions)) - { - Console.WriteLine("Invalid number format. Please try again."); - } - else - { - break; - } - } - - Console.Write("Enter the comments: "); - string comments = Console.ReadLine(); - await apiClient.AddExerciseAsync(name, dateStart, dateEnd, repetitions, customerId, comments); - Console.WriteLine("Hit Enter to continue"); - Console.ReadLine(); - await UserMenu(customerId); - } -} diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89.sln b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89.sln deleted file mode 100644 index f908f31d..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.11.35208.52 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.kjanos89", "ExerciseTracker.kjanos89\ExerciseTracker.kjanos89.csproj", "{32064587-EF35-4072-B089-2663A9C35D2C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {32064587-EF35-4072-B089-2663A9C35D2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32064587-EF35-4072-B089-2663A9C35D2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32064587-EF35-4072-B089-2663A9C35D2C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32064587-EF35-4072-B089-2663A9C35D2C}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {1E816836-BC5F-4DA5-8E07-EB0C92036D43} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Controllers/Controller.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Controllers/Controller.cs deleted file mode 100644 index b04874e5..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Controllers/Controller.cs +++ /dev/null @@ -1,209 +0,0 @@ -using ExerciseTracker.kjanos89.Models; -using ExerciseTracker.kjanos89.Services; - -namespace ExerciseTracker.kjanos89.Controllers; - -public class Controller -{ - private readonly Service service; - public Input input; - - public Controller(Service _service) - { - service = _service; - input = new Input(); - } - public void ShowMenu() - { - Console.Clear(); - Console.WriteLine("Choose an option from below:"); - Console.WriteLine("1 - List every record"); - Console.WriteLine("2 - Add record"); - Console.WriteLine("3 - Get a record by id"); - Console.WriteLine("4 - Update a record by id"); - Console.WriteLine("5 - Delete a record by id"); - Console.WriteLine("0 - Exit"); - string choice = Console.ReadLine(); - while (String.IsNullOrEmpty(choice)) - { - Console.WriteLine("Wrong input, please try again!"); - choice = Console.ReadLine(); - } - Selection(choice[0]); - } - public void Selection(char choice) - { - switch (choice) - { - case '0': - Environment.Exit(0); - break; - case '1': - GetAll(); - break; - case '2': - Add(); - break; - case '3': - Read(); - break; - case '4': - Update(); - break; - case '5': - Delete(); - break; - default: - Console.WriteLine("Wrong input, try again!"); - Task.Delay(1000).Wait(); - ShowMenu(); - break; - } - } - - private void Delete() - { - ListAll(); - int id; - while (true) - { - id = input.GetId(); - if (id == 0) - { - ShowMenu(); - return; - } - else if (service.IdExists(id)) - { - break; - } - } - Console.WriteLine("Are you sure you want to delete the record? Answer with 'Y' (yes), 'N' (no) or press '0' to return to the menu."); - string answer = Console.ReadLine().ToLower(); - if (answer != null && answer == "y") - { - service.DeleteExercise(id); - } - else if(answer=="0") - { - ShowMenu(); - return; - } - else - { - Console.WriteLine("Removing the record is canceled. Returning to the menu."); - Thread.Sleep(1000); - ShowMenu(); - return; - } - Console.WriteLine("Record deleted successfully. Returning to the menu."); - Thread.Sleep(1000); - ShowMenu(); - } - - private void Update() - { - ListAll(); - int id; - while (true) - { - id = input.GetId(); - if (id == 0) - { - ShowMenu(); - return; - } - else if (service.IdExists(id)) - { - break; - } - } - var exercise = input.GetExerciseData(); - if (exercise != null) - { - service.UpdateExercise(id, exercise.Start, exercise.End, exercise.Duration, exercise.Comments); - } - else - { - Console.WriteLine("Returned input not acceptable, returning to the menu."); - Thread.Sleep(1000); - ShowMenu(); - return; - } - Console.WriteLine("Record updated. Returning to the menu."); - Thread.Sleep(1000); - ShowMenu(); - } - - private void Read() - { - ListAll(); - int id; - while (true) - { - id = input.GetId(); - if(id==0) - { - Console.WriteLine("Returning to menu."); - Thread.Sleep(1000); - ShowMenu(); - return; - } - else if (service.IdExists(id)) - { - break; - } - else - { - Console.WriteLine("Id does not exist, try again or press '0' to return to the menu."); - } - } - var exercise = service.ReadExercise(id); - Console.WriteLine($"Id: {exercise.Id}, Start date: {exercise.Start}, End date: {exercise.End}, Duration: {exercise.Duration}, Comment: {exercise.Comments}"); - Console.WriteLine("\nPressing any button will return to the menu."); - Console.ReadLine(); - ShowMenu(); - } - - public void GetAll() - { - Console.Clear(); - IEnumerable list = service.ListAll(); - foreach (Exercise exercise in list) - { - Console.WriteLine($"Id: {exercise.Id}, Start date: {exercise.Start}, End date: {exercise.End}, Whole duration: {exercise.Duration}, Comment: {exercise.Comments}."); - } - Console.WriteLine("\nPressing any button will return to the menu."); - Console.ReadKey(); - ShowMenu(); - return; - } - - public void ListAll() - { - Console.Clear(); - IEnumerable list = service.ListAll(); - foreach (Exercise exercise in list) - { - Console.WriteLine($"Id: {exercise.Id}, Start date: {exercise.Start}, End date: {exercise.End}, Whole duration: {exercise.Duration}, Comment: {exercise.Comments}."); - } - } - - public void Add() - { - Console.Clear(); - var exercise = input.GetExerciseData(); - if (exercise != null) - { - service.AddExercise(exercise.Start, exercise.End, exercise.Duration, exercise.Comments); - } - else - { - Console.WriteLine("Returned input not acceptable, returning to the menu."); - ShowMenu(); - return; - } - ShowMenu(); - return; - } -} \ No newline at end of file diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89.csproj b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89.csproj deleted file mode 100644 index 14a13f22..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Input.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Input.cs deleted file mode 100644 index 10862bc5..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Input.cs +++ /dev/null @@ -1,115 +0,0 @@ -using ExerciseTracker.kjanos89.Models; - -namespace ExerciseTracker.kjanos89; - -public class Input -{ - Validation validation = new Validation(); - public Exercise GetExerciseData() - { - DateTime startDate; - DateTime endDate; - string dateString; - string comment; - //start date - while (true) - { - Console.WriteLine("Please enter the start date of the exercise or press '0' to return to the menu:"); - Console.WriteLine("Example: 2024.09.08. 14:16"); - dateString = Console.ReadLine(); - if (!string.IsNullOrEmpty(dateString)) - { - if(dateString=="0") - { - return null; - } - if (validation.IsValidDate(dateString)) - { - startDate = validation.DateConverter(dateString); - break; - } - } - else - { - Console.WriteLine("Wrong input, try again!"); - Thread.Sleep(1000); - } - } - //end date - while (true) - { - Console.WriteLine("Please enter the end date of the exercise or press '0' to return to the menu:"); - Console.WriteLine("Example: 2024.09.08. 14:56"); - dateString = Console.ReadLine(); - if (!string.IsNullOrEmpty(dateString)) - { - if (dateString == "0") - { - return null; - } - if (validation.IsValidDate(dateString)) - { - endDate = validation.DateConverter(dateString); - break; - } - else - { - Console.WriteLine($"Invalid date: {dateString}. Please try again."); - Thread.Sleep(1000); - } - } - else - { - Console.WriteLine("Wrong input, try again!"); - Thread.Sleep(1000); - } - } - if (!validation.IsEndLater(startDate, endDate)) - { - Console.WriteLine("End date must be later than the start date and the duration must be less than 24 hours."); - Console.WriteLine("Record addition canceled, pressing any button will return to the menu."); - Console.ReadLine(); - return null; - } - //comment - Console.WriteLine("Please add a comment below or press '0' to return to the menu:"); - while (true) - { - comment = Console.ReadLine(); - if (!string.IsNullOrEmpty(comment)) - { - if (comment == "0") - { - return null; - } - break; - } - else - { - Console.WriteLine("Wrong input, try again!"); - Thread.Sleep(1000); - } - } - var exercise = new Exercise - { - Start = startDate, - End = endDate, - Duration = endDate - startDate, - Comments = comment - }; - return exercise; - } - - public int GetId() - { - Console.WriteLine("Enter an id from the list:"); - if(Int32.TryParse(Console.ReadLine(), out int id)) - { - return id; - } - else - { - return 0; - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240905195114_InitialMigration.Designer.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240905195114_InitialMigration.Designer.cs deleted file mode 100644 index 9d37d705..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240905195114_InitialMigration.Designer.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -using System; -using ExerciseTracker.kjanos89.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.kjanos89.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - [Migration("20240905195114_InitialMigration")] - partial class InitialMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.8") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.kjanos89.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("End") - .HasColumnType("datetime2"); - - b.Property("Start") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240905195114_InitialMigration.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240905195114_InitialMigration.cs deleted file mode 100644 index 7759a79e..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240905195114_InitialMigration.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.kjanos89.Migrations -{ - /// - public partial class InitialMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Start = table.Column(type: "datetime2", nullable: false), - End = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240906201920_MakeCommentsNonNullable.Designer.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240906201920_MakeCommentsNonNullable.Designer.cs deleted file mode 100644 index f930429e..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240906201920_MakeCommentsNonNullable.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using ExerciseTracker.kjanos89.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.kjanos89.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - [Migration("20240906201920_MakeCommentsNonNullable")] - partial class MakeCommentsNonNullable - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.8") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.kjanos89.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("End") - .HasColumnType("datetime2"); - - b.Property("Start") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240906201920_MakeCommentsNonNullable.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240906201920_MakeCommentsNonNullable.cs deleted file mode 100644 index 7e771ad3..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/20240906201920_MakeCommentsNonNullable.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.kjanos89.Migrations -{ - /// - public partial class MakeCommentsNonNullable : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "Comments", - table: "Exercises", - type: "nvarchar(max)", - nullable: false, - defaultValue: "", - oldClrType: typeof(string), - oldType: "nvarchar(max)", - oldNullable: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "Comments", - table: "Exercises", - type: "nvarchar(max)", - nullable: true, - oldClrType: typeof(string), - oldType: "nvarchar(max)"); - } - } -} diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/ExerciseDbContextModelSnapshot.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/ExerciseDbContextModelSnapshot.cs deleted file mode 100644 index 3bf1eb43..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Migrations/ExerciseDbContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker.kjanos89.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.kjanos89.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - partial class ExerciseDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.8") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.kjanos89.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("End") - .HasColumnType("datetime2"); - - b.Property("Start") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Models/Exercise.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Models/Exercise.cs deleted file mode 100644 index 8056c42a..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Models/Exercise.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Microsoft.EntityFrameworkCore; -namespace ExerciseTracker.kjanos89.Models; - -public class Exercise -{ - public int Id { get; set; } - public DateTime Start { get; set; } - public DateTime End { get; set; } - public TimeSpan Duration { get; set; } - public string Comments { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Models/ExerciseDbContext.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Models/ExerciseDbContext.cs deleted file mode 100644 index 3cf9548e..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Models/ExerciseDbContext.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.kjanos89.Models; - -public class ExerciseDbContext : DbContext -{ - public ExerciseDbContext(DbContextOptions options) : base(options) { } - public DbSet Exercises { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Program.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Program.cs deleted file mode 100644 index 836699a6..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Program.cs +++ /dev/null @@ -1,26 +0,0 @@ -using ExerciseTracker.kjanos89.Controllers; -using ExerciseTracker.kjanos89.Models; -using ExerciseTracker.kjanos89.Repository; -using ExerciseTracker.kjanos89.Services; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; -public static class Program -{ - static void Main(string[] args) - { - Console.WriteLine("Loading, please wait."); - var serviceProvider = new ServiceCollection() - .AddDbContext(options => - options.UseSqlServer("Server=localhost;Database=Exercises;Integrated Security=True;TrustServerCertificate=True;")) - .AddScoped() - .AddScoped() - .AddScoped() - .BuildServiceProvider(); - - var context = serviceProvider.GetRequiredService(); - context.Database.EnsureCreated(); - - var controller = serviceProvider.GetRequiredService(); - controller.ShowMenu(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Repository/ExerciseRepository.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Repository/ExerciseRepository.cs deleted file mode 100644 index 3f73e115..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Repository/ExerciseRepository.cs +++ /dev/null @@ -1,58 +0,0 @@ -using ExerciseTracker.kjanos89.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.kjanos89.Repository; - -public class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseDbContext context; - - public ExerciseRepository(ExerciseDbContext _context) - { - context = _context; - } - - public bool Exists(int id) - { - return context.Set().Any(e => e.Id == id); - } - - public void Create(Exercise exercise) - { - context.Exercises.Add(exercise); - context.SaveChanges(); - } - - public void Delete(int id) - { - var exerciseToDelete = context.Exercises.Find(id); - context.Exercises.Remove(exerciseToDelete); - context.SaveChanges(); - } - - public IEnumerable ListAll() - { - List list = context.Exercises.ToList(); - return list; - } - - public Exercise Read(int id) - { - return context.Exercises.Find(id); - } - - public void Update(Exercise exercise) - { - var recordToUpdate = context.Exercises.Find(exercise.Id); - if (recordToUpdate != null) - { - recordToUpdate.Start = exercise.Start; - recordToUpdate.End = exercise.End; - recordToUpdate.Duration = exercise.Duration; - recordToUpdate.Comments = exercise.Comments; - } - context.Exercises.Update(recordToUpdate); - context.Entry(recordToUpdate).State = EntityState.Modified; - context.SaveChanges(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Repository/IExerciseRepository.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Repository/IExerciseRepository.cs deleted file mode 100644 index 8e174843..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Repository/IExerciseRepository.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTracker.kjanos89.Models; - -namespace ExerciseTracker.kjanos89.Repository; - -public interface IExerciseRepository -{ - IEnumerable ListAll(); - void Create(Exercise exercise); - Exercise Read(int id); - void Update(Exercise exercise); - void Delete(int id); - bool Exists(int id); -} \ No newline at end of file diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Services/Service.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Services/Service.cs deleted file mode 100644 index 770543ff..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Services/Service.cs +++ /dev/null @@ -1,59 +0,0 @@ -using ExerciseTracker.kjanos89.Models; -using ExerciseTracker.kjanos89.Repository; - -namespace ExerciseTracker.kjanos89.Services; - -public class Service -{ - IExerciseRepository repo; - - public Service(IExerciseRepository repository) - { - repo = repository; - } - - public IEnumerable ListAll() - { - return repo.ListAll(); - } - - public void AddExercise(DateTime start, DateTime end, TimeSpan duration, string comment) - { - Exercise exercise = new Exercise - { - Start = start, - End = end, - Duration = duration, - Comments = comment - }; - repo.Create(exercise); - } - - public Exercise ReadExercise(int id) - { - return repo.Read(id); - } - - public bool IdExists(int id) - { - return repo.Exists(id); - } - - public void UpdateExercise(int id, DateTime start, DateTime end, TimeSpan duration, string comment) - { - Exercise newExercise = new Exercise - { - Id = id, - Start = start, - End = end, - Duration = duration, - Comments = comment - }; - repo.Update(newExercise); - } - - public void DeleteExercise(int id) - { - repo.Delete(id); - } -} \ No newline at end of file diff --git a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Validation.cs b/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Validation.cs deleted file mode 100644 index 97ba43cb..00000000 --- a/ExerciseTracker.kjanos89/ExerciseTracker.kjanos89/Validation.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Globalization; - -namespace ExerciseTracker.kjanos89; - -public class Validation -{ - public bool IsEndLater(DateTime start, DateTime end) - { - if (start >= end) - { - return false; - } - TimeSpan duration = end - start; - if (duration > TimeSpan.FromHours(24)) - { - return false; - } - return true; - } - - - public DateTime DateConverter(string date) - { - DateTime checkedDate; - if (!DateTime.TryParse(date, out checkedDate)) - { - Console.WriteLine("The format of the date is not acceptable, try again!"); - } - return checkedDate; - } - - public bool IsValidDate(string input) - { - DateTime date; - if (DateTime.TryParseExact(input, "yyyy.MM.dd. HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) - { - return true; - } - else - { - return false; - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.kronyer/.gitignore b/ExerciseTracker.kronyer/.gitignore deleted file mode 100644 index 104b5441..00000000 --- a/ExerciseTracker.kronyer/.gitignore +++ /dev/null @@ -1,484 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from `dotnet new gitignore` - -# dotenv files -.env - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET -project.lock.json -project.fragment.lock.json -artifacts/ - -# Tye -.tye/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.tlog -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml -.idea - -## -## Visual studio for Mac -## - - -# globs -Makefile.in -*.userprefs -*.usertasks -config.make -config.status -aclocal.m4 -install-sh -autom4te.cache/ -*.tar.gz -tarballs/ -test-results/ - -# Mac bundle stuff -*.dmg -*.app - -# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -# Vim temporary swap files -*.swp diff --git a/ExerciseTracker.kronyer/ExerciseTracker.sln b/ExerciseTracker.kronyer/ExerciseTracker.sln deleted file mode 100644 index a56ece4d..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34525.116 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker", "ExerciseTracker\ExerciseTracker.csproj", "{58E662DA-F455-4C7E-8BAA-2DAEB9105BFB}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {58E662DA-F455-4C7E-8BAA-2DAEB9105BFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {58E662DA-F455-4C7E-8BAA-2DAEB9105BFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {58E662DA-F455-4C7E-8BAA-2DAEB9105BFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {58E662DA-F455-4C7E-8BAA-2DAEB9105BFB}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {D97F7955-9E5C-47F2-8D3B-0FBC3A050ED8} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.kronyer/ExerciseTracker/Controllers/ExerciseController.cs b/ExerciseTracker.kronyer/ExerciseTracker/Controllers/ExerciseController.cs deleted file mode 100644 index 9733df69..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/Controllers/ExerciseController.cs +++ /dev/null @@ -1,42 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.Services; -using Spectre.Console; - -namespace ExerciseTracker.Controllers; - -internal class ExerciseController -{ - private readonly ExerciseService _service; - - public ExerciseController(ExerciseService service) - { - _service = service; - } - - public void AddExercise() - { - AnsiConsole.MarkupLine("Creating exercise:"); - _service.AddExercise(); - } - - public void Update() - { - AnsiConsole.MarkupLine("Updating exercise:"); - _service.UpdateExercise(); - } - - public void Delete() - { - _service.DeleteExercise(); - } - - public Exercise Get() - { - return _service.GetExercise(); - } - - public List GetAll() - { - return _service.GetAllExercises(); - } -} diff --git a/ExerciseTracker.kronyer/ExerciseTracker/ExerciseTracker.csproj b/ExerciseTracker.kronyer/ExerciseTracker/ExerciseTracker.csproj deleted file mode 100644 index 000e1004..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/ExerciseTracker.csproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - diff --git a/ExerciseTracker.kronyer/ExerciseTracker/Migrations/20240312192535_FirstMigration.Designer.cs b/ExerciseTracker.kronyer/ExerciseTracker/Migrations/20240312192535_FirstMigration.Designer.cs deleted file mode 100644 index 9ac64d0f..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/Migrations/20240312192535_FirstMigration.Designer.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -using System; -using ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20240312192535_FirstMigration")] - partial class FirstMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.3"); - - modelBuilder.Entity("ExerciseTracker.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Comments") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("DateEnd") - .HasColumnType("TEXT"); - - b.Property("DateStart") - .HasColumnType("TEXT"); - - b.Property("Duration") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.kronyer/ExerciseTracker/Migrations/20240312192535_FirstMigration.cs b/ExerciseTracker.kronyer/ExerciseTracker/Migrations/20240312192535_FirstMigration.cs deleted file mode 100644 index 8ef30799..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/Migrations/20240312192535_FirstMigration.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - /// - public partial class FirstMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - DateStart = table.Column(type: "TEXT", nullable: false), - DateEnd = table.Column(type: "TEXT", nullable: false), - Duration = table.Column(type: "TEXT", nullable: false), - Comments = table.Column(type: "TEXT", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.kronyer/ExerciseTracker/Migrations/ExerciseContextModelSnapshot.cs b/ExerciseTracker.kronyer/ExerciseTracker/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index ddf3e117..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,46 +0,0 @@ -// -using System; -using ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseContext))] - partial class ExerciseContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.3"); - - modelBuilder.Entity("ExerciseTracker.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Comments") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("DateEnd") - .HasColumnType("TEXT"); - - b.Property("DateStart") - .HasColumnType("TEXT"); - - b.Property("Duration") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.kronyer/ExerciseTracker/Models/Exercise.cs b/ExerciseTracker.kronyer/ExerciseTracker/Models/Exercise.cs deleted file mode 100644 index 6be2a9cd..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/Models/Exercise.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; - -namespace ExerciseTracker.Models; - -internal class Exercise -{ - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration { get; set; } - public string Comments { get; set; } - - public override string ToString() - { - return $"{DateStart} / {DateEnd} = {Duration} \n {Comments}"; - } -} diff --git a/ExerciseTracker.kronyer/ExerciseTracker/Models/ExerciseContext.cs b/ExerciseTracker.kronyer/ExerciseTracker/Models/ExerciseContext.cs deleted file mode 100644 index 1b401f64..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/Models/ExerciseContext.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.Models; - -internal class ExerciseContext : DbContext -{ - public DbSet Exercises { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlite("Data Source=exercise-tracker.db"); - } -} diff --git a/ExerciseTracker.kronyer/ExerciseTracker/Program.cs b/ExerciseTracker.kronyer/ExerciseTracker/Program.cs deleted file mode 100644 index 0606a40d..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/Program.cs +++ /dev/null @@ -1,3 +0,0 @@ -using ExerciseTracker; - -UserInterface.MainMenu(); \ No newline at end of file diff --git a/ExerciseTracker.kronyer/ExerciseTracker/Properties/launchSettings.json b/ExerciseTracker.kronyer/ExerciseTracker/Properties/launchSettings.json deleted file mode 100644 index 537979dd..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/Properties/launchSettings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "profiles": { - "ExerciseTracker": { - "commandName": "Project", - "workingDirectory": "C:\\Users\\pedro\\OneDrive\\Área de Trabalho\\Journey\\ExerciseTracker\\ExerciseTracker" - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.kronyer/ExerciseTracker/Repositories/ExerciseRepository.cs b/ExerciseTracker.kronyer/ExerciseTracker/Repositories/ExerciseRepository.cs deleted file mode 100644 index f21270eb..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,49 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.Repositories.Interfaces; -using Spectre.Console; - -namespace ExerciseTracker.Repositories -{ - internal class ExerciseRepository : IExerciseRepository - { - private readonly ExerciseContext _context; - - public ExerciseRepository(ExerciseContext context) - { - _context = context; - } - - public void AddExercise(Exercise exercise) - { - _context.Add(exercise); - _context.SaveChanges(); - } - - public Exercise GetById(int id) - { - return _context.Exercises.Find(id); - } - - public List GetAll() - { - return _context.Exercises.ToList(); - } - - public void UpdateExercise(Exercise exercise) - { - _context.Update(exercise); - _context.SaveChanges(); - } - - public void DeleteExercise(int id) - { - var exercise = _context.Exercises.Find(id); - if (exercise == null) - { - AnsiConsole.MarkupLine($"There is no exercise for id {id}"); - } - _context.Remove(exercise); - _context.SaveChanges(); - } - } -} diff --git a/ExerciseTracker.kronyer/ExerciseTracker/Repositories/Interfaces/IExerciseRepository.cs b/ExerciseTracker.kronyer/ExerciseTracker/Repositories/Interfaces/IExerciseRepository.cs deleted file mode 100644 index 4a538cc3..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/Repositories/Interfaces/IExerciseRepository.cs +++ /dev/null @@ -1,12 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Repositories.Interfaces; - -internal interface IExerciseRepository -{ - void AddExercise(Exercise exercise); - Exercise GetById(int id); - List GetAll(); - void UpdateExercise(Exercise exercise); - void DeleteExercise(int id); -} diff --git a/ExerciseTracker.kronyer/ExerciseTracker/Services/ExerciseService.cs b/ExerciseTracker.kronyer/ExerciseTracker/Services/ExerciseService.cs deleted file mode 100644 index 4ed85729..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/Services/ExerciseService.cs +++ /dev/null @@ -1,68 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.Repositories.Interfaces; -using Spectre.Console; - -namespace ExerciseTracker.Services; - -internal class ExerciseService -{ - private readonly IExerciseRepository _exerciseRepository; - public ExerciseService(IExerciseRepository exerciseRepository) - { - _exerciseRepository = exerciseRepository; - } - - public void AddExercise() - { - Exercise newExercise = new Exercise(); - - newExercise.DateStart = UserInput.GetDateInputs(); - newExercise.DateEnd = UserInput.GetDateInputs(); - while (newExercise.DateEnd < newExercise.DateStart) - { - AnsiConsole.MarkupLine("End date must be greather than the start date"); - newExercise.DateEnd = UserInput.GetDateInputs(); - } - newExercise.Comments = UserInput.GetCommentInput(); - newExercise.Duration = newExercise.DateEnd - newExercise.DateStart; - - _exerciseRepository.AddExercise(newExercise); - } - - public void UpdateExercise() - { - int exerciseId = GetChooseExercise("update"); - var exercise = _exerciseRepository.GetById(exerciseId); - - exercise.DateStart = UserInput.GetDateInputs(); - exercise.DateEnd = UserInput.GetDateInputs(); - exercise.Comments = UserInput.GetCommentInput(); - exercise.Duration = exercise.DateEnd - exercise.DateStart; - - _exerciseRepository.UpdateExercise(exercise); - } - - public void DeleteExercise() - { - int exercise = GetChooseExercise("delete"); - _exerciseRepository.DeleteExercise(exercise); - } - - public Exercise GetExercise() - { - int exercise = GetChooseExercise("see"); - return _exerciseRepository.GetById(exercise); - } - - public List GetAllExercises() - { - return _exerciseRepository.GetAll(); - } - - internal int GetChooseExercise(string message) - { - var exercise = AnsiConsole.Prompt(new SelectionPrompt().Title($"Choose an exercise to {message}").AddChoices(GetAllExercises())); - - return exercise.Id; - } -} diff --git a/ExerciseTracker.kronyer/ExerciseTracker/UserInput.cs b/ExerciseTracker.kronyer/ExerciseTracker/UserInput.cs deleted file mode 100644 index f985162f..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/UserInput.cs +++ /dev/null @@ -1,34 +0,0 @@ -using ExerciseTracker.Models; -using Spectre.Console; -using System.Globalization; - -namespace ExerciseTracker; - -internal class UserInput -{ - public static DateTime GetDateInputs() - { - DateTime input; - while (!DateTime.TryParseExact(AnsiConsole.Ask("Enter a date (dd-mm-yy hh:mm)"), "dd-MM-yy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out input)) - { - AnsiConsole.MarkupLine("Invalid date format (dd-mm-yy hh:mm)"); - } - return input; - } - - internal static string GetCommentInput() - { - var comment = AnsiConsole.Ask("Enter a comment:").Trim(); - return comment; - } - - internal static int GetExerciseId(string message) - { - int input; - while (!int.TryParse(AnsiConsole.Ask($"Enter the id of the exercise you want to {message}"), out input)) - { - AnsiConsole.MarkupLine("Enter a valid number"); - } - return input; - } -} diff --git a/ExerciseTracker.kronyer/ExerciseTracker/UserInterface.cs b/ExerciseTracker.kronyer/ExerciseTracker/UserInterface.cs deleted file mode 100644 index 54cf62b1..00000000 --- a/ExerciseTracker.kronyer/ExerciseTracker/UserInterface.cs +++ /dev/null @@ -1,97 +0,0 @@ -using ExerciseTracker.Controllers; -using ExerciseTracker.Models; -using ExerciseTracker.Repositories; -using ExerciseTracker.Repositories.Interfaces; -using ExerciseTracker.Services; -using Microsoft.Extensions.DependencyInjection; -using Spectre.Console; - -namespace ExerciseTracker; - -internal class UserInterface -{ - enum MenuOptions - { - AddExercise, - GetExercise, - GetAllExercises, - UpdateExercise, - DeleteExercise, - Quit - } - public static void MainMenu() - { - Console.Clear(); - var serviceProvider = new ServiceCollection() - .AddSingleton() - .AddSingleton() - //aqui é a chave da parada --> indentificação de que o IRepository é o Exercise Repository - .AddSingleton() - .AddSingleton() - .BuildServiceProvider(); - - var controller = serviceProvider.GetRequiredService(); - - bool isRunning = true; - while (isRunning) - { - var option = AnsiConsole.Prompt(new SelectionPrompt() - .Title("What do you want to do?") - .AddChoices(MenuOptions.AddExercise, - MenuOptions.GetExercise, - MenuOptions.GetAllExercises, - MenuOptions.UpdateExercise, - MenuOptions.DeleteExercise, - MenuOptions.Quit)); - - switch (option) - { - case MenuOptions.AddExercise: - controller.AddExercise(); - break; - case MenuOptions.UpdateExercise: - controller.Update(); - break; - case MenuOptions.DeleteExercise: - controller.Delete(); - break; - case MenuOptions.GetExercise: - PrintExercise(controller.Get()); - break; - case MenuOptions.GetAllExercises: - PrintAllExercises(controller.GetAll()); - break; - case MenuOptions.Quit: - isRunning = false; - break; - } - } - } - - public static void PrintAllExercises(List exerciseList) - { - Console.Clear(); - int i = 1; - foreach (var exercise in exerciseList) - { - Console.WriteLine($"{i} - {exercise}"); - i++; - } - Console.ReadKey(); - } - - public static void PrintExercise(Exercise exercise) - { - Console.Clear(); - if (exercise == null) - { - Console.WriteLine("There is no register in this id"); - } - else - { - Console.WriteLine(exercise); - } - - Console.ReadKey(); - } -} diff --git a/ExerciseTracker.kronyer/ExerciseTracker/exercise-tracker.db b/ExerciseTracker.kronyer/ExerciseTracker/exercise-tracker.db deleted file mode 100644 index f9ef51b1..00000000 Binary files a/ExerciseTracker.kronyer/ExerciseTracker/exercise-tracker.db and /dev/null differ diff --git a/ExerciseTracker.kwm0304/.gitignore b/ExerciseTracker.kwm0304/.gitignore deleted file mode 100644 index 4f509e52..00000000 --- a/ExerciseTracker.kwm0304/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.env \ No newline at end of file diff --git a/ExerciseTracker.kwm0304/AppSession.cs b/ExerciseTracker.kwm0304/AppSession.cs deleted file mode 100644 index f5a11992..00000000 --- a/ExerciseTracker.kwm0304/AppSession.cs +++ /dev/null @@ -1,47 +0,0 @@ -using ExerciseTracker.kwm0304.Controllers; -using ExerciseTracker.kwm0304.Views; -using Spectre.Console; - -namespace ExerciseTracker.kwm0304 -{ - public class AppSession - { - private readonly ExerciseController _controller; - public AppSession(ExerciseController controller) - { - _controller = controller; - } - public async Task OnStart() - { - bool running = true; - while (running) - { - Console.Clear(); - AnsiConsole.WriteLine(@" -___________ .__ ___________ __ -\_ _____/__ ___ ___________ ____ |__| ______ ____ \__ ___/___________ ____ | | __ ___________ - | __)_\ \/ // __ \_ __ \_/ ___\| |/ ___// __ \ | | \_ __ \__ \ _/ ___\| |/ // __ \_ __ \ - | \> <\ ___/| | \/\ \___| |\___ \\ ___/ | | | | \// __ \\ \___| <\ ___/| | \/ -/_______ /__/\_ \\___ >__| \___ >__/____ >\___ > |____| |__| (____ /\___ >__|_ \\___ >__| - \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ -"); - string choice = SelectionMenus.MainMenu(); - switch (choice) - { - case "Add entry": - running = await _controller.HandleAddEntry(); - break; - case "View entries": - running = await _controller.HandleViewEntries(); - break; - case "Exit": - AnsiConsole.WriteLine("Goodbye!"); - Environment.Exit(0); - break; - default: - break; - } - } - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.kwm0304/Controllers/ExerciseController.cs b/ExerciseTracker.kwm0304/Controllers/ExerciseController.cs deleted file mode 100644 index ce2a780d..00000000 --- a/ExerciseTracker.kwm0304/Controllers/ExerciseController.cs +++ /dev/null @@ -1,132 +0,0 @@ -using ExerciseTracker.kwm0304.Models; -using ExerciseTracker.kwm0304.Services; -using ExerciseTracker.kwm0304.Views; -using Spectre.Console; -using System.Collections.Generic; -using System.Threading.Tasks; - -namespace ExerciseTracker.kwm0304.Controllers -{ - public class ExerciseController - { - private readonly ExerciseService _service; - public ExerciseController(ExerciseService service) - { - _service = service; - } - - internal async Task HandleAddEntry() - { - string title = StringPrompt.GetAndConfirmResponse("What exercise are you logging?"); - string comments = StringPrompt.GetAndConfirmResponse("Would you like to add any comments?"); - DateTime startingDate = StringPrompt.ReturnDateTime("start"); - DateTime endingDate = StringPrompt.ReturnDateTime("end"); - bool validDates = ValidateStartAndEnd(startingDate, endingDate); - if (validDates) - { - TimeSpan duration = endingDate - startingDate; - UserInput input = new() - { - StartDate = startingDate, - EndDate = endingDate, - Duration = duration, - Title = title, - Comments = comments - }; - await _service.CreateExerciseAsync(input); - AnsiConsole.WriteLine("Entry successfully added"); - return true; - } - return false; - } - - private static bool ValidateStartAndEnd(DateTime start, DateTime end) - { - return end > start; - } - - internal async Task HandleViewEntries() - { - List entries = await _service.GetAllExercisesAsync(); - if (entries.Count < 1) - { - AnsiConsole.WriteLine("No entries to display yet"); - Thread.Sleep(1500); - return true; - } - UserInput entry = SelectionMenus.UserInputSelection(entries); - AnsiConsole.WriteLine(entry.ToString()); - string choice = SelectionMenus.EntriesMenu(); - bool running = true; - while (running) - { - switch (choice) - { - case "Edit": - await HandleEdit(entry); - return true; - case "Delete": - await HandleDelete(entry); - return true; - case "Back": - running = false; - return true; - default: - running = true; - return true; - } - } - return true; - } - - private async Task HandleDelete(UserInput entry) - { - AnsiConsole.WriteLine(entry.ToString()); - bool confirmDelete = AnsiConsole.Confirm("Are you sure you want to delete this entry?"); - if (confirmDelete) - { - await _service.DeleteExerciseByIdAsync(entry.Id); - AnsiConsole.WriteLine("Entry successfully deleted"); - } - } - - private async Task HandleEdit(UserInput entry) - { - string choice = SelectionMenus.EditChoice(); - switch (choice) - { - case "Title": - string title = StringPrompt.GetAndConfirmResponse("What would you like to change the title to?"); - entry.Title = title; - break; - case "Start Date": - DateTime newStart = StringPrompt.ReturnDateTime("start"); - entry.StartDate = newStart; - break; - case "End Date": - DateTime newEnd = StringPrompt.ReturnDateTime("end"); - entry.EndDate = newEnd; - break; - case "Comments": - string comments = StringPrompt.GetAndConfirmResponse("What do you want the comments to say?"); - entry.Comments = comments; - break; - default: - break; - } - bool isValid = ValidateStartAndEnd(entry.StartDate, entry.EndDate); - if (isValid) - { - entry.Duration = entry.EndDate - entry.StartDate; - await _service.UpdateExerciseAsync(entry); - AnsiConsole.WriteLine("Entry updated successfully"); - return; - } - else - { - AnsiConsole.WriteLine("End date cannot be before start date"); - return; - } - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.kwm0304/Data/ExerciseDbContext.cs b/ExerciseTracker.kwm0304/Data/ExerciseDbContext.cs deleted file mode 100644 index 5024bcdf..00000000 --- a/ExerciseTracker.kwm0304/Data/ExerciseDbContext.cs +++ /dev/null @@ -1,22 +0,0 @@ -using ExerciseTracker.kwm0304.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.kwm0304.Data; - -public class ExerciseDbContext : DbContext -{ - public ExerciseDbContext(DbContextOptions options) : base(options) - { - } - - public DbSet UserInputs { get; set; } = null!; - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - if (!optionsBuilder.IsConfigured) - { - var connectionString = Environment.GetEnvironmentVariable("DefaultConnection"); - optionsBuilder.UseSqlServer(connectionString); - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.kwm0304/DesignTimeDbContextFactory.cs b/ExerciseTracker.kwm0304/DesignTimeDbContextFactory.cs deleted file mode 100644 index bd7f63c5..00000000 --- a/ExerciseTracker.kwm0304/DesignTimeDbContextFactory.cs +++ /dev/null @@ -1,20 +0,0 @@ -using dotenv.net; -using ExerciseTracker.kwm0304.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Design; - -namespace ExerciseTracker.kwm0304; -public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory -{ - public ExerciseDbContext CreateDbContext(string[] args) - { - DotEnv.Load(); - - var connectionString = Environment.GetEnvironmentVariable("DefaultConnection"); - - var optionsBuilder = new DbContextOptionsBuilder(); - optionsBuilder.UseSqlServer(connectionString); - - return new ExerciseDbContext(optionsBuilder.Options); - } -} diff --git a/ExerciseTracker.kwm0304/ExerciseTracker.kwm0304.csproj b/ExerciseTracker.kwm0304/ExerciseTracker.kwm0304.csproj deleted file mode 100644 index 4e067df9..00000000 --- a/ExerciseTracker.kwm0304/ExerciseTracker.kwm0304.csproj +++ /dev/null @@ -1,28 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - diff --git a/ExerciseTracker.kwm0304/ExerciseTracker.kwm0304.sln b/ExerciseTracker.kwm0304/ExerciseTracker.kwm0304.sln deleted file mode 100644 index 598a2964..00000000 --- a/ExerciseTracker.kwm0304/ExerciseTracker.kwm0304.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.5.002.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExerciseTracker.kwm0304", "ExerciseTracker.kwm0304.csproj", "{FB4503FA-5C1F-4100-9B7C-E5C12FE804D1}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {FB4503FA-5C1F-4100-9B7C-E5C12FE804D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB4503FA-5C1F-4100-9B7C-E5C12FE804D1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB4503FA-5C1F-4100-9B7C-E5C12FE804D1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB4503FA-5C1F-4100-9B7C-E5C12FE804D1}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {015735C5-5918-40FB-BE40-A170F1AD2455} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.kwm0304/Migrations/20240803003126_InitialCreate.Designer.cs b/ExerciseTracker.kwm0304/Migrations/20240803003126_InitialCreate.Designer.cs deleted file mode 100644 index 747f4dc7..00000000 --- a/ExerciseTracker.kwm0304/Migrations/20240803003126_InitialCreate.Designer.cs +++ /dev/null @@ -1,58 +0,0 @@ -// -using System; -using ExerciseTracker.kwm0304.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.kwm0304.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - [Migration("20240803003126_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.7") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.kwm0304.Models.UserInput", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.Property("Title") - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("UserInputs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.kwm0304/Migrations/20240803003126_InitialCreate.cs b/ExerciseTracker.kwm0304/Migrations/20240803003126_InitialCreate.cs deleted file mode 100644 index 6bfc6a55..00000000 --- a/ExerciseTracker.kwm0304/Migrations/20240803003126_InitialCreate.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.kwm0304.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "UserInputs", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - StartDate = table.Column(type: "datetime2", nullable: false), - EndDate = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Title = table.Column(type: "nvarchar(max)", nullable: true), - Comments = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_UserInputs", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "UserInputs"); - } - } -} diff --git a/ExerciseTracker.kwm0304/Migrations/ExerciseDbContextModelSnapshot.cs b/ExerciseTracker.kwm0304/Migrations/ExerciseDbContextModelSnapshot.cs deleted file mode 100644 index 990eff6c..00000000 --- a/ExerciseTracker.kwm0304/Migrations/ExerciseDbContextModelSnapshot.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -using System; -using ExerciseTracker.kwm0304.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.kwm0304.Migrations -{ - [DbContext(typeof(ExerciseDbContext))] - partial class ExerciseDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.7") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.kwm0304.Models.UserInput", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.Property("Title") - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("UserInputs"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.kwm0304/Models/UserInput.cs b/ExerciseTracker.kwm0304/Models/UserInput.cs deleted file mode 100644 index 5ab86987..00000000 --- a/ExerciseTracker.kwm0304/Models/UserInput.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace ExerciseTracker.kwm0304.Models; - -public class UserInput -{ - public int Id { get; set; } - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - public TimeSpan Duration { get; set; } - public string? Title { get; set; } - public string? Comments { get; set; } - - public UserInput() { } - public UserInput(DateTime startDate, DateTime endDate, TimeSpan duration, string title, string comments) - { - StartDate = startDate; - EndDate = endDate; - Duration = duration; - Title = title; - Comments = comments; - } - public override string ToString() - { - return $"Title: {Title} | Start: {StartDate:yyyy-MM-dd HH:mm:ss} | End: {EndDate:yyyy-MM-dd HH:mm:ss} | Duration: {Duration:hh\\:mm\\:ss} | Comments: {Comments}"; - } -} \ No newline at end of file diff --git a/ExerciseTracker.kwm0304/Program.cs b/ExerciseTracker.kwm0304/Program.cs deleted file mode 100644 index f00b8035..00000000 --- a/ExerciseTracker.kwm0304/Program.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using ExerciseTracker.kwm0304.Services; -using ExerciseTracker.kwm0304.Repositories; -using ExerciseTracker.kwm0304.Controllers; -using ExerciseTracker.kwm0304.Data; -using Microsoft.EntityFrameworkCore; -using dotenv.net; -namespace ExerciseTracker.kwm0304; - -public class Program -{ - static async Task Main() - { - DotEnv.Load(); - var services = new ServiceCollection(); - ConfigureServices(services); - var provider = services.BuildServiceProvider(); - var session = provider.GetRequiredService(); - await session.OnStart(); - } - - private static void ConfigureServices(IServiceCollection services) - { - var connectionString = Environment.GetEnvironmentVariable("DefaultConnection"); - services.AddDbContext(options => - options.UseSqlServer(connectionString)); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.kwm0304/Repositories/ExerciseRepository.cs b/ExerciseTracker.kwm0304/Repositories/ExerciseRepository.cs deleted file mode 100644 index e39de1ea..00000000 --- a/ExerciseTracker.kwm0304/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTracker.kwm0304.Data; -using ExerciseTracker.kwm0304.Models; - -namespace ExerciseTracker.kwm0304.Repositories; - -public class ExerciseRepository : Repository -{ - private readonly ExerciseDbContext _context; - public ExerciseRepository(ExerciseDbContext context) : base(context) - { - _context = context; - } -} \ No newline at end of file diff --git a/ExerciseTracker.kwm0304/Repositories/IRepository.cs b/ExerciseTracker.kwm0304/Repositories/IRepository.cs deleted file mode 100644 index 04a33e71..00000000 --- a/ExerciseTracker.kwm0304/Repositories/IRepository.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.kwm0304.Repositories; - -public interface IRepository where T : class -{ - Task> GetAllAsync(); - Task GetByIdAsync(int id); - Task CreateAsync(T entity); - Task UpdateAsync(T entity); - Task DeleteByIdAsync(int id); -} diff --git a/ExerciseTracker.kwm0304/Repositories/Repository.cs b/ExerciseTracker.kwm0304/Repositories/Repository.cs deleted file mode 100644 index 8a945a0b..00000000 --- a/ExerciseTracker.kwm0304/Repositories/Repository.cs +++ /dev/null @@ -1,47 +0,0 @@ -using ExerciseTracker.kwm0304.Data; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.kwm0304.Repositories; - -public class Repository : IRepository where T : class -{ - private readonly ExerciseDbContext _context; - private readonly DbSet _dbSet; - public Repository(ExerciseDbContext context) - { - _context = context; - _dbSet = _context.Set(); - } - - public async Task CreateAsync(T entity) - { - await _dbSet.AddAsync(entity); - await _context.SaveChangesAsync(); - } - - public async Task DeleteByIdAsync(int id) - { - var entity = await _dbSet.FindAsync(id); - if (entity != null) - { - _dbSet.Remove(entity); - await _context.SaveChangesAsync(); - } - } - - public async Task> GetAllAsync() - { - return await _dbSet.ToListAsync(); - } - - public async Task GetByIdAsync(int id) - { - return await _dbSet.FindAsync(id); - } - - public async Task UpdateAsync(T entity) - { - _context.Entry(entity).State = EntityState.Modified; - await _context.SaveChangesAsync(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.kwm0304/Services/ExerciseService.cs b/ExerciseTracker.kwm0304/Services/ExerciseService.cs deleted file mode 100644 index 84595182..00000000 --- a/ExerciseTracker.kwm0304/Services/ExerciseService.cs +++ /dev/null @@ -1,39 +0,0 @@ -using ExerciseTracker.kwm0304.Models; -using ExerciseTracker.kwm0304.Repositories; - -namespace ExerciseTracker.kwm0304.Services; - -public class ExerciseService -{ - private readonly ExerciseRepository _repository; - - public ExerciseService(ExerciseRepository repository) - { - _repository = repository; - } - - public async Task> GetAllExercisesAsync() - { - return await _repository.GetAllAsync(); - } - - public async Task GetExerciseByIdAsync(int id) - { - return await _repository.GetByIdAsync(id); - } - - public async Task CreateExerciseAsync(UserInput exercise) - { - await _repository.CreateAsync(exercise); - } - - public async Task UpdateExerciseAsync(UserInput exercise) - { - await _repository.UpdateAsync(exercise); - } - - public async Task DeleteExerciseByIdAsync(int id) - { - await _repository.DeleteByIdAsync(id); - } -} \ No newline at end of file diff --git a/ExerciseTracker.kwm0304/Views/BasePrompt.cs b/ExerciseTracker.kwm0304/Views/BasePrompt.cs deleted file mode 100644 index 0e0aec55..00000000 --- a/ExerciseTracker.kwm0304/Views/BasePrompt.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Spectre.Console; - -namespace ExerciseTracker.kwm0304.Views; - -public class BasePrompt(string title, List choices) where T : notnull -{ - public string Title { get; set; } = title; - public List Choices { get; set; } = choices; - - public T? Show() - { - if (Choices.Count < 1) - { - AnsiConsole.WriteLine("Nothing to display"); - return default; - } - return AnsiConsole.Prompt( - new SelectionPrompt() - .Title(Title) - .AddChoices(Choices) - ); - } -} \ No newline at end of file diff --git a/ExerciseTracker.kwm0304/Views/SelectionMenus.cs b/ExerciseTracker.kwm0304/Views/SelectionMenus.cs deleted file mode 100644 index f2774f97..00000000 --- a/ExerciseTracker.kwm0304/Views/SelectionMenus.cs +++ /dev/null @@ -1,33 +0,0 @@ -using ExerciseTracker.kwm0304.Models; - -namespace ExerciseTracker.kwm0304.Views; - -public class SelectionMenus -{ - public const string genericPrompt = "What would you like to do?"; - public static string MainMenu() - { - var menuOptions = new List{"Add entry", "View entries", "Exit"}; - var menu = new BasePrompt(genericPrompt, menuOptions); - return menu.Show()!; - } - - public static string EntriesMenu() - { - var menuOptions = new List{"Edit", "Delete", "Back"}; - var menu = new BasePrompt(genericPrompt, menuOptions); - return menu.Show()!; - } - - public static UserInput UserInputSelection(List entries) - { - var menu = new BasePrompt("Choose entry: ", entries); - return menu.Show()!; - } - public static string EditChoice() - { - var menuOptions = new List {"Title", "Start Date", "End Date", "Comments"}; - var menu = new BasePrompt("What would you like to change?", menuOptions); - return menu.Show()!; - } -} \ No newline at end of file diff --git a/ExerciseTracker.kwm0304/Views/StringPrompt.cs b/ExerciseTracker.kwm0304/Views/StringPrompt.cs deleted file mode 100644 index 4b56b193..00000000 --- a/ExerciseTracker.kwm0304/Views/StringPrompt.cs +++ /dev/null @@ -1,65 +0,0 @@ -using Spectre.Console; - -namespace ExerciseTracker.kwm0304.Views; - -public class StringPrompt -{ - public static T GetAndConfirmResponse(string question) - { - while (true) - { - T answer = AnsiConsole.Ask(question); - - if (answer != null && !string.IsNullOrWhiteSpace(answer.ToString())) - { - bool confirm = AnsiConsole.Confirm("Are you sure?"); - if (confirm) - return answer; - } - else - { - AnsiConsole.MarkupLine("[bold red]Response cannot be empty.[/]"); - AnsiConsole.WriteLine("Please enter a valid response:"); - } - } - } - - public static DateTime ReturnDateTime(string v) - { - DateTime date = GetDate(v); - TimeSpan time = GetTime(v); - return new DateTime(date.Year, date.Month, date.Day, time.Hours, time.Minutes, time.Seconds); - } - private static DateTime GetDate(string v) - { - while (true) - { - var input = AnsiConsole.Ask($"What date did you {v} (YYYY-MM-DD):"); - - if (DateTime.TryParse(input, out DateTime date)) - { - return date; - } - else - { - AnsiConsole.MarkupLine("[red]Invalid date format. Please try again.[/]"); - } - } - } - private static TimeSpan GetTime(string v) - { - while (true) - { - var input = AnsiConsole.Ask($"What time did you {v} (HH:MM:SS):"); - AnsiConsole.WriteLine("Ex: If 11PM -> 23:00:00"); - if (TimeSpan.TryParse(input, out TimeSpan time)) - { - return time; - } - else - { - AnsiConsole.MarkupLine("[red]Invalid time format. Please try again.[/]"); - } - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker.sln b/ExerciseTracker.mariusgrHiof/GymExerciseTracker.sln deleted file mode 100644 index 125fc016..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GymExerciseTracker", "GymExerciseTracker\GymExerciseTracker.csproj", "{2665F388-2D55-48A8-89C1-8E57903C045E}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2665F388-2D55-48A8-89C1-8E57903C045E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2665F388-2D55-48A8-89C1-8E57903C045E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2665F388-2D55-48A8-89C1-8E57903C045E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2665F388-2D55-48A8-89C1-8E57903C045E}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/AppSettings.json b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/AppSettings.json deleted file mode 100644 index 70847189..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/AppSettings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ConnectionStrings": { - "DefaultConnection": "Server=.;Database=GymTrackerDb;Trusted_Connection=True;TrustServerCertificate=True;" - } -} \ No newline at end of file diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Controllers/ExerciseController.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Controllers/ExerciseController.cs deleted file mode 100644 index ebc492d7..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Controllers/ExerciseController.cs +++ /dev/null @@ -1,54 +0,0 @@ -using GymExerciseTracker.Dtos; -using GymExerciseTracker.Models; -using GymExerciseTracker.Services; - -namespace GymExerciseTracker.Controllers; -public class ExerciseController -{ - private readonly IExerciseService _exerciseService; - - public ExerciseController(IExerciseService exerciseService) - { - _exerciseService = exerciseService; - } - - public List GetAllGymSessions() - { - return _exerciseService.GetGymSessions(); - } - - public GymSession GetGymSession(int id) - { - var session = _exerciseService.GetGymSession(id); - if (session == null) return null; - - return session; - } - - public GymSession AddGymSession(AddGymSessionDto newSession) - { - if (newSession == null) return null; - - var sessionToAdd = _exerciseService.AddGymSession(newSession); - if (sessionToAdd == null) return null; - - return sessionToAdd; - } - - public GymSession UpdateGymSession(int id, UpdateGymSessionDto updatedGymSessionDto) - { - var sessionToUpdate = _exerciseService.UpdateGymSession(id, updatedGymSessionDto); - if (sessionToUpdate == null) return null; - - return sessionToUpdate; - } - - public GymSession DeleteGymSession(int id) - { - var sessionToDelete = _exerciseService.DeleteGymSession(id); - if (sessionToDelete == null) return null; - - return sessionToDelete; - } -} - diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/ApplicationDbContext.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/ApplicationDbContext.cs deleted file mode 100644 index 562da8d6..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/ApplicationDbContext.cs +++ /dev/null @@ -1,12 +0,0 @@ -using GymExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; - -namespace GymExerciseTracker.Data; -public class ApplicationDbContext : DbContext -{ - public ApplicationDbContext(DbContextOptions options) : base(options) - { - } - public DbSet GymSessions { get; set; } -} - diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/Migrations/20231021132921_InitialCreate.Designer.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/Migrations/20231021132921_InitialCreate.Designer.cs deleted file mode 100644 index 2d3715ad..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/Migrations/20231021132921_InitialCreate.Designer.cs +++ /dev/null @@ -1,63 +0,0 @@ -// -using System; -using GymExerciseTracker.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace GymExerciseTracker.Data.Migrations -{ - [DbContext(typeof(ApplicationDbContext))] - [Migration("20231021132921_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.12") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("GymExerciseTracker.Models.GymSession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Reps") - .HasColumnType("int"); - - b.Property("Sets") - .HasColumnType("int"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("GymSessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/Migrations/20231021132921_InitialCreate.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/Migrations/20231021132921_InitialCreate.cs deleted file mode 100644 index 6c374a31..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/Migrations/20231021132921_InitialCreate.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace GymExerciseTracker.Data.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "GymSessions", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Name = table.Column(type: "nvarchar(max)", nullable: false), - Sets = table.Column(type: "int", nullable: false), - Reps = table.Column(type: "int", nullable: false), - StartDate = table.Column(type: "datetime2", nullable: false), - EndDate = table.Column(type: "datetime2", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_GymSessions", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "GymSessions"); - } - } -} diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/Migrations/ApplicationDbContextModelSnapshot.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/Migrations/ApplicationDbContextModelSnapshot.cs deleted file mode 100644 index 10b23abd..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Data/Migrations/ApplicationDbContextModelSnapshot.cs +++ /dev/null @@ -1,60 +0,0 @@ -// -using System; -using GymExerciseTracker.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace GymExerciseTracker.Data.Migrations -{ - [DbContext(typeof(ApplicationDbContext))] - partial class ApplicationDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.12") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("GymExerciseTracker.Models.GymSession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Reps") - .HasColumnType("int"); - - b.Property("Sets") - .HasColumnType("int"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("GymSessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Dtos/AddGymSessionDto.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Dtos/AddGymSessionDto.cs deleted file mode 100644 index 6685e8f8..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Dtos/AddGymSessionDto.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace GymExerciseTracker.Dtos; -public class AddGymSessionDto -{ - public string Name { get; set; } = string.Empty; - public int Sets { get; set; } - public int Reps { get; set; } - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - public string Comments { get; set; } = string.Empty; -} - diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Dtos/UpdateGymSessionDto.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Dtos/UpdateGymSessionDto.cs deleted file mode 100644 index 948c6487..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Dtos/UpdateGymSessionDto.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace GymExerciseTracker.Dtos; -public class UpdateGymSessionDto -{ - public int Id { get; set; } - public string Name { get; set; } = string.Empty; - public int Sets { get; set; } - public int Reps { get; set; } - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - public string Comments { get; set; } = string.Empty; -} - diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/GymExerciseTracker.csproj b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/GymExerciseTracker.csproj deleted file mode 100644 index f31c7f6f..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/GymExerciseTracker.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Models/GymSession.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Models/GymSession.cs deleted file mode 100644 index 5e798054..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Models/GymSession.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace GymExerciseTracker.Models; -public class GymSession -{ - public int Id { get; set; } - public string Name { get; set; } = string.Empty; - public int Sets { get; set; } - public int Reps { get; set; } - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - public TimeSpan Duration => EndDate - StartDate; - public string Comments { get; set; } = string.Empty; -} - diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Program.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Program.cs deleted file mode 100644 index bdc5b8f4..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Program.cs +++ /dev/null @@ -1,34 +0,0 @@ -using GymExerciseTracker.Controllers; -using GymExerciseTracker.Data; -using GymExerciseTracker.Repository; -using GymExerciseTracker.Services; -using GymExerciseTracker.Utils; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -var builder = Host.CreateDefaultBuilder(args) - .ConfigureServices((hostContext, services) => - { - // Register your services here. - services.AddDbContext(options => - { - options.UseSqlServer("Server=.;Database=GymTrackerDb;Trusted_Connection=True;TrustServerCertificate=True"); - }); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddLogging(); - }); - -var host = builder.Build(); - -var serviceProvider = host.Services; - -// Retrieve Exercise service from the DI container. -var exerciseService = serviceProvider.GetRequiredService(); - -ExerciseController controller = new ExerciseController(exerciseService); - -UserInput userInput = new UserInput(controller); -userInput.Start(); \ No newline at end of file diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Repository/ExerciseRepository.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Repository/ExerciseRepository.cs deleted file mode 100644 index 226e8bc0..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Repository/ExerciseRepository.cs +++ /dev/null @@ -1,58 +0,0 @@ -using GymExerciseTracker.Data; -using GymExerciseTracker.Models; - -namespace GymExerciseTracker.Repository; -public class ExerciseRepository : IExerciseRepository -{ - private readonly ApplicationDbContext _context; - - public ExerciseRepository(ApplicationDbContext context) - { - _context = context; - } - public GymSession CreateSession(GymSession newSession) - { - _context.GymSessions.Add(newSession); - _context.SaveChanges(); - - return newSession; - } - - public GymSession DeleteSession(int id) - { - var session = _context.GymSessions.FirstOrDefault(gs => gs.Id == id); - if (session == null) return null; - - _context.GymSessions.Remove(session); - _context.SaveChanges(); - - return session; - } - - public List GetAllSessions() - { - return _context.GymSessions.ToList(); - } - - public GymSession GetSession(int id) - { - var session = _context.GymSessions.FirstOrDefault(gs => gs.Id == id); - if (session == null) return null; - - return session; - } - - public GymSession UpdateSession(int id, GymSession updateSession) - { - if (id != updateSession.Id) return null; - - var session = _context.GymSessions.FirstOrDefault(gs => gs.Id == id); - if (session == null) return null; - - _context.GymSessions.Update(updateSession); - _context.SaveChanges(); - - return updateSession; - } -} - diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Repository/IExerciseRepository.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Repository/IExerciseRepository.cs deleted file mode 100644 index c19a98c8..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Repository/IExerciseRepository.cs +++ /dev/null @@ -1,12 +0,0 @@ -using GymExerciseTracker.Models; - -namespace GymExerciseTracker.Repository; -public interface IExerciseRepository -{ - List GetAllSessions(); - GymSession GetSession(int id); - GymSession CreateSession(GymSession newSession); - GymSession UpdateSession(int id, GymSession updateSession); - GymSession DeleteSession(int id); -} - diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Services/ExerciseService.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Services/ExerciseService.cs deleted file mode 100644 index 311e9528..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Services/ExerciseService.cs +++ /dev/null @@ -1,82 +0,0 @@ -using GymExerciseTracker.Dtos; -using GymExerciseTracker.Models; -using GymExerciseTracker.Repository; - -namespace GymExerciseTracker.Services; -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository _exerciseRepository; - - public ExerciseService(IExerciseRepository exerciseRepository) - { - _exerciseRepository = exerciseRepository; - } - - public GymSession AddGymSession(AddGymSessionDto newGymSession) - { - if (newGymSession == null) return null; - GymSession newSession = new GymSession() - { - Name = newGymSession.Name, - Sets = newGymSession.Sets, - Reps = newGymSession.Reps, - StartDate = newGymSession.StartDate, - EndDate = newGymSession.EndDate, - Comments = newGymSession.Comments, - }; - - _exerciseRepository.CreateSession(newSession); - - return newSession; - } - - public GymSession GetGymSession(int sessionId) - { - var session = _exerciseRepository.GetSession(sessionId); - if (session == null) return null; - - return session; - } - - public List GetGymSessions() - { - return _exerciseRepository.GetAllSessions(); - } - - public GymSession UpdateGymSession(int id, UpdateGymSessionDto updatedGymSession) - { - if (updatedGymSession == null || id == null) return null; - if (updatedGymSession.Id != id) return null; - - var session = _exerciseRepository.GetSession(id); - if (session == null) return null; - - session.Name = updatedGymSession.Name; - session.Sets = updatedGymSession.Sets; - session.Reps = updatedGymSession.Reps; - session.StartDate = updatedGymSession.StartDate; - session.EndDate = updatedGymSession.EndDate; - session.Comments = updatedGymSession.Comments; - - var updatedSession = _exerciseRepository.UpdateSession(id, session); - if (updatedSession == null) return null; - - return updatedSession; - - - } - - public GymSession DeleteGymSession(int id) - { - var session = _exerciseRepository.GetSession(id); - if (session == null) return null; - - var deletedSession = _exerciseRepository.DeleteSession(id); - if (deletedSession == null) return null; - - return deletedSession; - - - } -} - diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Services/IExerciseService.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Services/IExerciseService.cs deleted file mode 100644 index 917b307c..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Services/IExerciseService.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GymExerciseTracker.Dtos; -using GymExerciseTracker.Models; - -namespace GymExerciseTracker.Services -{ - public interface IExerciseService - { - List GetGymSessions(); - GymSession GetGymSession(int sessionId); - GymSession AddGymSession(AddGymSessionDto newGymSession); - GymSession UpdateGymSession(int id, UpdateGymSessionDto updatedGymSession); - GymSession DeleteGymSession(int id); - } -} \ No newline at end of file diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Utils/UserInput.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Utils/UserInput.cs deleted file mode 100644 index 1672d666..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Utils/UserInput.cs +++ /dev/null @@ -1,233 +0,0 @@ -using ConsoleTableExt; -using GymExerciseTracker.Controllers; -using GymExerciseTracker.Dtos; -using GymExerciseTracker.Models; - -namespace GymExerciseTracker.Utils; -public class UserInput -{ - private readonly ExerciseController _exerciseController; - bool keepGoing = true; - public UserInput(ExerciseController exerciseController) - { - _exerciseController = exerciseController; - } - - public void Start() - { - while (keepGoing) - { - Console.WriteLine("\nMain Menu"); - Console.WriteLine("---------\n"); - Console.WriteLine("What would you like to do?\n"); - Console.WriteLine("Type 1 to View all Gym sessions"); - Console.WriteLine("Type 2 to Insert Gym session"); - Console.WriteLine("Type 3 to Delete a Gym session"); - Console.WriteLine("Type 4 to Update a Gym session\n"); - Console.WriteLine("Type 0 to Close Application"); - Console.WriteLine("---------------------------\n"); - - Console.Write("Enter a number: "); - string? command = Console.ReadLine(); - - switch (command) - { - case "0": - CloseApp(); - break; - case "1": - GetAllGymSessions(); - break; - case "2": - InsertGymSession(); - break; - case "3": - DeleteGymSession(); - break; - case "4": - UpdateGymSession(); - break; - default: - Console.WriteLine("Invalid command.Try again."); - break; - } - } - } - void GetAllGymSessions() - { - Console.Clear(); - var gymSessions = _exerciseController.GetAllGymSessions(); - var tableData = new List>(); - - foreach (var gymSession in gymSessions) - { - tableData.Add(new List { gymSession.Id, gymSession.Name, gymSession.Sets, gymSession.Reps, gymSession.StartDate, gymSession.EndDate, gymSession.Duration, gymSession.Comments }); - } - - ConsoleTableBuilder - .From(tableData) - .WithColumn("Id", "Name", "Sets", "Reps", "Start Date", "End Date", "Duration", "Comments") - .ExportAndWriteLine(); - } - void InsertGymSession() - { - string? name = GetString("Enter a name: "); - - int sets = GetNumber("Enter number of sets(i.e 1, 3, 5): "); - - int reps = GetNumber("Enter number of reps(i.e 1, 3, 5): "); - - string startDate = GetDate("Enter a start date(format: dd/mm/yyyy HH:MM i.e 20/10/2023 14:54): "); - - string endDate = GetDate("Enter a end date(format: dd/mm/yyyy HH:MM i.e 20/10/2023 14:54): "); - - while (!Validate.IsValidDateRange(DateTime.Parse(startDate), DateTime.Parse(endDate))) - { - Console.WriteLine("End date can't be earlier than start date.Try again."); - endDate = GetDate("Enter a end date(format: dd/mm/yyyy HH:MM i.e 20/10/2023 14:54): "); - } - - string comments = GetString("Enter comments: "); - - AddGymSessionDto addGymSessionDto = new AddGymSessionDto - { - Name = name, - Sets = sets, - Reps = reps, - StartDate = DateTime.Parse(startDate), - EndDate = DateTime.Parse(endDate), - Comments = comments - }; - - GymSession gymSession = _exerciseController.AddGymSession(addGymSessionDto); - - if (gymSession == null) - { - Console.WriteLine("Failed to insert record."); - } - else - { - Console.WriteLine("The record has been added!"); - } - } - void DeleteGymSession() - { - GetAllGymSessions(); - var sessionId = GetNumber("Enter a session id: "); - - var deletedSession = _exerciseController.DeleteGymSession(sessionId); - - while (deletedSession == null) - { - Console.WriteLine("No record found.Try again."); - sessionId = GetNumber("Enter a session id: "); - deletedSession = _exerciseController.GetGymSession(sessionId); - } - - Console.WriteLine("Record deleted!"); - } - void UpdateGymSession() - { - GetAllGymSessions(); - - int sessionId = GetNumber("Enter a id: "); - - var session = _exerciseController.GetGymSession(sessionId); - - while (session == null) - { - Console.WriteLine("No records found.Try again."); - - sessionId = GetNumber("Enter a id: "); - session = _exerciseController.GetGymSession(sessionId); - } - - string? name = GetString("Enter a name: "); - - int sets = GetNumber("Enter number of sets(i.e 1, 3, 5): "); - - int reps = GetNumber("Enter number of reps(i.e 1, 3, 5): "); - - string startDate = GetDate("Enter a start date(format: dd/mm/yyyy HH:MM i.e 20/10/2023 14:54): "); - - string endDate = GetDate("Enter a end date(format: dd/mm/yyyy HH:MM i.e 20/10/2023 14:54): "); - - while (!Validate.IsValidDateRange(DateTime.Parse(startDate), DateTime.Parse(endDate))) - { - Console.WriteLine("End date can't be earlier than start date.Try again."); - endDate = GetDate("Enter a end date(format: dd/mm/yyyy HH:MM i.e 20/10/2023 14:54): "); - } - - string comments = GetString("Enter comments: "); - - UpdateGymSessionDto updatedGymSessionDto = new UpdateGymSessionDto - { - Id = sessionId, - Name = name, - Sets = sets, - Reps = reps, - StartDate = DateTime.Parse(startDate), - EndDate = DateTime.Parse(endDate), - Comments = comments - }; - - var result = _exerciseController.UpdateGymSession(sessionId, updatedGymSessionDto); - - if (result == null) - { - Console.WriteLine("Fail to update record."); - } - else - { - Console.WriteLine("Record has been updated!"); - } - } - string? GetDate(string message) - { - Console.Write(message); - string? date = Console.ReadLine()?.Trim(); - - while (!Validate.IsValidateDate(date)) - { - Console.WriteLine("Invalid date.Try again."); - Console.Write(message); - - date = Console.ReadLine(); - } - return date; - } - string? GetString(string message) - { - Console.Write(message); - string input = Console.ReadLine()?.Trim(); - - while (!Validate.IsValidString(input)) - { - Console.WriteLine("Invalid input.Try again."); - Console.Write(message); - input = Console.ReadLine()?.Trim(); - } - - return input; - } - int GetNumber(string message) - { - Console.Write(message); - string inputNumber = Console.ReadLine()?.Trim(); - - while (!Validate.IsValidNumber(inputNumber)) - { - Console.WriteLine("Invalid number.Try again."); - Console.Write(message); - inputNumber = Console.ReadLine()?.Trim(); - } - - int number = int.Parse(inputNumber); - - return number; - } - void CloseApp() - { - keepGoing = false; - } -} diff --git a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Utils/Validate.cs b/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Utils/Validate.cs deleted file mode 100644 index b0dcab48..00000000 --- a/ExerciseTracker.mariusgrHiof/GymExerciseTracker/Utils/Validate.cs +++ /dev/null @@ -1,46 +0,0 @@ -using GymExerciseTracker.Services; -using System.Globalization; - -namespace GymExerciseTracker.Utils; -public class Validate -{ - static private readonly IExerciseService _exerciseService; - - - public static bool IsValidNumber(string number) - { - return int.TryParse(number, out _); - } - - public static bool IsValidId(string inputId) - { - if (!IsValidNumber(inputId)) return false; - - - int id = int.Parse(inputId); - - var session = _exerciseService.GetGymSession(id); - - return session != null; - } - - public static bool IsValidString(string name) - { - return !string.IsNullOrWhiteSpace(name); - - } - - public static bool IsValidateDate(string date) - { - return DateTime.TryParseExact(date, "dd/MM/yyyy HH:mm", new CultureInfo("nb-NO"), DateTimeStyles.None, out _); - } - - public static bool IsValidDateRange(DateTime DateStart, DateTime DateEnd) - { - TimeSpan timeSpan = DateEnd - DateStart; - - return timeSpan.Ticks > 0; - - } -} - diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon.sln b/ExerciseTracker.samggannon/ExerciseTracker.samggannon.sln deleted file mode 100644 index 91929c84..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.9.34701.34 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.samggannon", "ExerciseTracker.samggannon\ExerciseTracker.samggannon.csproj", "{F15003E7-BEC8-40A3-B6C4-204F937B22A8}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F15003E7-BEC8-40A3-B6C4-204F937B22A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F15003E7-BEC8-40A3-B6C4-204F937B22A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F15003E7-BEC8-40A3-B6C4-204F937B22A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F15003E7-BEC8-40A3-B6C4-204F937B22A8}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {1C5B678D-8724-413A-8715-BDEF7F2DFE37} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/App.config b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/App.config deleted file mode 100644 index 74329b6d..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/App.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Controllers/ExerciseController.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Controllers/ExerciseController.cs deleted file mode 100644 index 61798b81..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Controllers/ExerciseController.cs +++ /dev/null @@ -1,44 +0,0 @@ -using ExerciseTracker.samggannon.Services; - -namespace ExerciseTracker.samggannon.Controllers; - -public class ExerciseController -{ - private readonly IExerciseService? _exerciseService; - - public ExerciseController() - { - _exerciseService = new ExerciseService(); - } - - public ExerciseController(IExerciseService exerciseService, bool isResistanceTraining) - { - _exerciseService = exerciseService; - _exerciseService.SetRepository(isResistanceTraining); - } - - public void InsertSession() - { - _exerciseService.InsertSession(); - } - - public void GetAllSessions() - { - _exerciseService.GetAllSessions(); - } - - public void EditSession() - { - _exerciseService.EditSession(); - } - - public void DeleteSessionById() - { - _exerciseService.DeleteSessionById(); - } - - internal void SetRepository(bool isResistanceTraining) - { - _exerciseService.SetRepository(isResistanceTraining); - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Models/Exercise.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Models/Exercise.cs deleted file mode 100644 index e79babce..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Models/Exercise.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace ExerciseTracker.samggannon.Data.Models -{ - public class Exercise - { - public int Id { get; set; } - public string? Type { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration { get; set; } - public string? Comments { get; set; } - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Models/ExerciseContext.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Models/ExerciseContext.cs deleted file mode 100644 index f3e049d9..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Models/ExerciseContext.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using System.Configuration; - -namespace ExerciseTracker.samggannon.Data.Models; - -internal class ExerciseContext : DbContext -{ - public DbSet ExerciseSet { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - if (!optionsBuilder.IsConfigured) - { - optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["DataConnection"].ConnectionString); - } - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Repositories/ExerciseRepository.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Repositories/ExerciseRepository.cs deleted file mode 100644 index 20321783..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,46 +0,0 @@ -using ExerciseTracker.samggannon.Data.Models; - -namespace ExerciseTracker.samggannon.Data.Repositories; - -public class ExerciseRepository : IExerciseRepository -{ - public void Add(Exercise entity) - { - using var _dbContext = new ExerciseContext(); - entity.Type = "Cardio"; - _dbContext.ExerciseSet.Add(entity); - _dbContext.SaveChanges(); - } - - public List GetAllSessions() - { - using var _dbContext = new ExerciseContext(); - return _dbContext.ExerciseSet - .Where(e => e.Type == "Cardio") - .ToList(); - } - - public Exercise GetSessionById(int sessionId) - { - using var _dbContext = new ExerciseContext(); - return _dbContext.ExerciseSet - .FirstOrDefault(e => e.Id == sessionId && e.Type == "Cardio"); - } - - - public void Update(Exercise entity) - { - using var _dbContext = new ExerciseContext(); - entity.Type = "Cardio"; - _dbContext.Update(entity); - _dbContext.SaveChanges(); - } - - public void Delete(Exercise entity) - { - using var _dbContext = new ExerciseContext(); - _dbContext.Remove(entity); - _dbContext.SaveChanges(); - - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Repositories/IExerciseRepository.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Repositories/IExerciseRepository.cs deleted file mode 100644 index be64a6f7..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,12 +0,0 @@ -using ExerciseTracker.samggannon.Data.Models; - -namespace ExerciseTracker.samggannon.Data.Repositories; - -public interface IExerciseRepository -{ - public void Add(Exercise entity); - public void Delete(Exercise entity); - public List GetAllSessions(); - public Exercise GetSessionById(int sessionId); - public void Update(Exercise entity); -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Repositories/ResistanceRespository.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Repositories/ResistanceRespository.cs deleted file mode 100644 index ffb7dde5..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Data/Repositories/ResistanceRespository.cs +++ /dev/null @@ -1,125 +0,0 @@ -using ExerciseTracker.samggannon.Data.Models; -using Microsoft.Data.SqlClient; -using System.Configuration; - -namespace ExerciseTracker.samggannon.Data.Repositories; - -public class ResistanceRespository : IExerciseRepository -{ - private readonly string _connectionString; - - public ResistanceRespository() - { - _connectionString = ConfigurationManager.ConnectionStrings["DataConnection"].ConnectionString; - } - - public void Add(Exercise entity) - { - using (var connection = new SqlConnection(_connectionString)) - { - connection.Open(); - var command = new SqlCommand( - "INSERT INTO ExerciseSet (Type, DateStart, DateEnd, Duration, Comments) " + - "VALUES ('Resistance Training', @DateStart, @DateEnd, @Duration, @Comments)", - connection); - - command.Parameters.AddWithValue("@DateStart", entity.DateStart); - command.Parameters.AddWithValue("@DateEnd", entity.DateEnd); - command.Parameters.AddWithValue("@Duration", entity.Duration); - command.Parameters.AddWithValue("@Comments", entity.Comments ?? (object)DBNull.Value); - - command.ExecuteNonQuery(); - } - } - - public List GetAllSessions() - { - var exercises = new List(); - - using (var connection = new SqlConnection(_connectionString)) - { - connection.Open(); - var command = new SqlCommand("SELECT * FROM ExerciseSet WHERE Type = 'Resistance Training'", connection); - - using (var reader = command.ExecuteReader()) - { - while (reader.Read()) - { - var exercise = new Exercise - { - Id = reader.GetInt32(0), - DateStart = reader.GetDateTime(1), - DateEnd = reader.GetDateTime(2), - Duration = reader.GetTimeSpan(3), - Comments = reader.IsDBNull(4) ? null : reader.GetString(4), - Type = reader.IsDBNull(5) ? null : reader.GetString(5), - }; - - exercises.Add(exercise); - } - } - } - - return exercises; - } - - public Exercise GetSessionById(int sessionId) - { - using (var connection = new SqlConnection(_connectionString)) - { - connection.Open(); - var command = new SqlCommand("SELECT * FROM ExerciseSet WHERE Type = 'Resistance Training' AND Id = @Id", connection); - command.Parameters.AddWithValue("@Id", sessionId); - - using (var reader = command.ExecuteReader()) - { - if (reader.Read()) - { - return new Exercise - { - Id = reader.GetInt32(0), - DateStart = reader.GetDateTime(1), - DateEnd = reader.GetDateTime(2), - Duration = reader.GetTimeSpan(3), - Comments = reader.GetString(4), - Type = reader.GetString(5), - }; - } - } - } - - return null; // Or throw an exception if not found - } - - public void Update(Exercise entity) - { - using (var connection = new SqlConnection(_connectionString)) - { - connection.Open(); - var command = new SqlCommand( - "UPDATE dbo.ExerciseTrackerDB SET Type = 'Resistance Training', DateStart = @DateStart, DateEnd = @DateEnd, Duration = @Duration, Comments = @Comments WHERE Id = @Id", - connection); - - command.Parameters.AddWithValue("@Id", entity.Id); - command.Parameters.AddWithValue("@DateStart", entity.DateStart); - command.Parameters.AddWithValue("@DateEnd", entity.DateEnd); - command.Parameters.AddWithValue("@Duration", entity.Duration); - command.Parameters.AddWithValue("@Comments", entity.Comments ?? (object)DBNull.Value); - - command.ExecuteNonQuery(); - } - } - - - public void Delete(Exercise entity) - { - using (var connection = new SqlConnection(_connectionString)) - { - connection.Open(); - var command = new SqlCommand("DELETE FROM dbo.ExerciseTracker WHERE Id = @Id", connection); - command.Parameters.AddWithValue("@Id", entity.Id); - - command.ExecuteNonQuery(); - } - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/ExerciseTracker.samggannon.csproj b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/ExerciseTracker.samggannon.csproj deleted file mode 100644 index 7684e942..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/ExerciseTracker.samggannon.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240514203028_InitCreate.Designer.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240514203028_InitCreate.Designer.cs deleted file mode 100644 index 49924e57..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240514203028_InitCreate.Designer.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -using System; -using ExerciseTracker.samggannon.Data.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.samggannon.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20240514203028_InitCreate")] - partial class InitCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.samggannon.Data.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("ExerciseSet"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240514203028_InitCreate.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240514203028_InitCreate.cs deleted file mode 100644 index 5f20bd63..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240514203028_InitCreate.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.samggannon.Migrations -{ - /// - public partial class InitCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "ExerciseSet", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ExerciseSet", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "ExerciseSet"); - } - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240516140140_TypeInclude.Designer.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240516140140_TypeInclude.Designer.cs deleted file mode 100644 index 01a4f335..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240516140140_TypeInclude.Designer.cs +++ /dev/null @@ -1,58 +0,0 @@ -// -using System; -using ExerciseTracker.samggannon.Data.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.samggannon.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20240516140140_TypeInclude")] - partial class TypeInclude - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.samggannon.Data.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("Type") - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("ExerciseSet"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240516140140_TypeInclude.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240516140140_TypeInclude.cs deleted file mode 100644 index 4f1ea31b..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/20240516140140_TypeInclude.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.samggannon.Migrations -{ - /// - public partial class TypeInclude : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "Type", - table: "ExerciseSet", - type: "nvarchar(max)", - nullable: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "Type", - table: "ExerciseSet"); - } - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/ExerciseContextModelSnapshot.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index 8de2f112..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -using System; -using ExerciseTracker.samggannon.Data.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.samggannon.Migrations -{ - [DbContext(typeof(ExerciseContext))] - partial class ExerciseContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.samggannon.Data.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("Type") - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("ExerciseSet"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Program.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Program.cs deleted file mode 100644 index 4fd57558..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Program.cs +++ /dev/null @@ -1,16 +0,0 @@ -using ExerciseTracker.samggannon.Controllers; -using ExerciseTracker.samggannon.Data.Repositories; -using ExerciseTracker.samggannon.Services; -using ExerciseTracker.samggannon.UserInterface; -using Microsoft.Extensions.DependencyInjection; - -var serviceProvider = new ServiceCollection() - .AddScoped() - .AddScoped() - .AddScoped() - .AddScoped() - .BuildServiceProvider(); - -var mainMenu = new MainMenu(serviceProvider); -mainMenu.ShowMenu(); - diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Services/ExerciseService.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Services/ExerciseService.cs deleted file mode 100644 index e6250170..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Services/ExerciseService.cs +++ /dev/null @@ -1,92 +0,0 @@ -using ExerciseTracker.samggannon.Data.Models; -using ExerciseTracker.samggannon.Data.Repositories; -using ExerciseTracker.samggannon.UserInterface; -using ExerciseTracker.samggannon.Validation; - -namespace ExerciseTracker.samggannon.Services; - -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository _cardioRepository; - private readonly IExerciseRepository _resistanceRepository; - private IExerciseRepository? _currentRepository; - - public ExerciseService() - { - _cardioRepository = new ExerciseRepository(); - _resistanceRepository = new ExerciseRepository(); - } - - public ExerciseService(ExerciseRepository exerciseRepository, ResistanceRespository resistanceRepository) - { - _cardioRepository = exerciseRepository; - _resistanceRepository = resistanceRepository; - } - - public void SetRepository(bool isResistanceTraining) - { - _currentRepository = isResistanceTraining ? (IExerciseRepository)_resistanceRepository : _cardioRepository; - } - - public void DeleteSessionById() - { - GetAllSessions(); - - int sessionIdToDelete = UserInput.GetIdInput(); - var exerciseSession = _currentRepository.GetSessionById(sessionIdToDelete); - - if (exerciseSession == null) - { - Console.WriteLine($"No session found with the id: {sessionIdToDelete}. Press [enter] to continue."); - Console.ReadLine(); - return; - } - } - - public void EditSession() - { - GetAllSessions(); - - int sessionId = UserInput.GetIdInput(); - var exerciseSession = _currentRepository.GetSessionById(sessionId); - - if (exerciseSession == null) - { - Console.WriteLine($"No session found with the id: {sessionId}. Press [enter] to continue."); - Console.ReadLine(); - return; - } - - var updatedSession = MainMenu.UpdateMenu(exerciseSession); - - bool editTimeWasValid = InputValidation.ValidateTime(updatedSession.DateStart, updatedSession.DateEnd); - - if(editTimeWasValid) - { - updatedSession.Id = sessionId; - _currentRepository.Update(updatedSession); - } - else - { - Console.WriteLine("Start time must be before end time. No changes were made. Press [enter] to continue."); - Console.ReadLine(); - } - } - - public void GetAllSessions() - { - // defaulted EF Core repo - List exercises = _cardioRepository.GetAllSessions(); - Visualization.ShowTable(exercises); - - Console.WriteLine("Press [enter] to continue"); - Console.ReadLine(); - } - - public void InsertSession() - { - Exercise exerciseSession = UserInput.GetSessionDetails(); - - _currentRepository.Add(exerciseSession); - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Services/IExerciseService.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Services/IExerciseService.cs deleted file mode 100644 index e42bb33b..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Services/IExerciseService.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.samggannon.Services; - -public interface IExerciseService -{ - public void InsertSession(); - public void EditSession(); - public void GetAllSessions(); - public void DeleteSessionById(); - public void SetRepository(bool isResistanceTraining); -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/Enums.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/Enums.cs deleted file mode 100644 index 15a9792d..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/Enums.cs +++ /dev/null @@ -1,40 +0,0 @@ -namespace ExerciseTracker.samggannon.UserInterface; - -internal class Enums -{ - public enum MenuOptions - { - AddSession, - ShowAllSessions, - ShowSessionById, - EditSessionById, - DeleteSessionById, - Back, - } - - public enum UpdateOptions - { - UpdateStartTime, - UpdateEndTime, - UpdateComments, - Back - } - - public enum ExerciseOptions - { - CardioSession, - ResistanceTraining, - DevelopersDisclaimer, - Quit - } - - public enum ResistanceOptions - { - AddWorkout, - ShowAllWorkouts, - ShowworkoutById, - EditWorkoutById, - DeleteWorkoutById, - Back, - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/MainMenu.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/MainMenu.cs deleted file mode 100644 index 82f5d31d..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/MainMenu.cs +++ /dev/null @@ -1,205 +0,0 @@ -using ExerciseTracker.samggannon.Controllers; -using ExerciseTracker.samggannon.Data.Models; -using ExerciseTracker.samggannon.Services; -using ExerciseTracker.samggannon.Validation; -using Microsoft.Extensions.DependencyInjection; -using Spectre.Console; -using static ExerciseTracker.samggannon.UserInterface.Enums; - -namespace ExerciseTracker.samggannon.UserInterface; - -public class MainMenu -{ - private ServiceProvider _serviceProvider; - private ExerciseController _exerciseController; - - public MainMenu(ServiceProvider serviceProvider) - { - _serviceProvider = serviceProvider; - _exerciseController = _serviceProvider.GetRequiredService(); - } - - internal void ShowMenu() - { - bool appIsRunning = true; - - while (appIsRunning) - { - Console.Clear(); - - var option = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What type of exercise would you like to track?") - .AddChoices( - ExerciseOptions.CardioSession, - ExerciseOptions.ResistanceTraining, - ExerciseOptions.DevelopersDisclaimer, - ExerciseOptions.Quit - )); - - switch (option) - { - case ExerciseOptions.CardioSession: - ShowCardioMenu(); - break; - case ExerciseOptions.ResistanceTraining: - ShowResistanceTrainingMenu(); - break; - case ExerciseOptions.DevelopersDisclaimer: - ConsoleMessages.DevelopersNote(); - break; - case ExerciseOptions.Quit: - appIsRunning = false; - Environment.Exit(0); - break; - default: - Console.WriteLine("An unexpected and unresolved error has occcured. Press [enter] to terminate the program."); - appIsRunning = false; - Environment.Exit(1); - break; - } - } - } - - private void ShowResistanceTrainingMenu() - { - _exerciseController.SetRepository(true); - - bool appIsRunning = true; - - while (appIsRunning) - { - Console.Clear(); - var option = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What would you like to do?") - .AddChoices( - ResistanceOptions.AddWorkout, - ResistanceOptions.ShowAllWorkouts, - ResistanceOptions.EditWorkoutById, - ResistanceOptions.DeleteWorkoutById, - ResistanceOptions.Back - )); - - switch (option) - { - case ResistanceOptions.AddWorkout: - _exerciseController.InsertSession(); - break; - case ResistanceOptions.ShowAllWorkouts: - _exerciseController.GetAllSessions(); - break; - case ResistanceOptions.EditWorkoutById: - _exerciseController.EditSession(); - break; - case ResistanceOptions.DeleteWorkoutById: - _exerciseController.DeleteSessionById(); - break; - case ResistanceOptions.Back: - appIsRunning = false; - ShowMenu(); - break; - default: - Console.WriteLine("An unexpected and unresolved error has occcured. Press [enter] to terminate the program."); - appIsRunning = false; - Environment.Exit(1); - break; - - } - } - } - - internal void ShowCardioMenu() - { - _exerciseController.SetRepository(false); - - bool appIsRunning = true; - - while (appIsRunning) - { - Console.Clear(); - var option = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What would you like to do?") - .AddChoices( - MenuOptions.AddSession, - MenuOptions.ShowAllSessions, - MenuOptions.EditSessionById, - MenuOptions.DeleteSessionById, - MenuOptions.Back - )); - - switch (option) - { - case MenuOptions.AddSession: - _exerciseController.InsertSession(); - break; - case MenuOptions.ShowAllSessions: - _exerciseController.GetAllSessions(); - break; - case MenuOptions.EditSessionById: - _exerciseController.EditSession(); - break; - case MenuOptions.DeleteSessionById: - _exerciseController.DeleteSessionById(); - break; - case MenuOptions.Back: - appIsRunning = false; - ShowMenu(); - break; - default: - Console.WriteLine("An unexpected and unresolved error has occcured. Press [enter] to terminate the program."); - appIsRunning = false; - Environment.Exit(1); - break; - - } - } - } - - internal static Exercise UpdateMenu(Exercise exerciseSession) - { - bool isUpdating = true; - - while (isUpdating) - { - Console.Clear(); - var option = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What would you like to update?") - .AddChoices( - UpdateOptions.UpdateStartTime, - UpdateOptions.UpdateEndTime, - UpdateOptions.UpdateComments, - UpdateOptions.Back - )); - - switch (option) - { - case UpdateOptions.UpdateStartTime: - exerciseSession.DateStart = UserInput.GetDateTime("start"); - InputValidation.VaidateEditTime(exerciseSession.DateStart, exerciseSession.DateEnd); - break; - case UpdateOptions.UpdateEndTime: - exerciseSession.DateEnd = UserInput.GetDateTime("end"); - InputValidation.VaidateEditTime(exerciseSession.DateStart, exerciseSession.DateEnd); - break; - case UpdateOptions.UpdateComments: - exerciseSession.Comments = UserInput.GetComments(); - break; - case UpdateOptions.Back: - isUpdating = false; - exerciseSession.Duration = UserInput.CalculateDuration(exerciseSession.DateStart, exerciseSession.DateEnd); - return exerciseSession; - default: - Console.WriteLine("An unexpeceted and unresolved error has occcured. Press [enter] to terminate the program."); - isUpdating = false; - Environment.Exit(1); - break; - - } - } - - return exerciseSession; - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/UserInput.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/UserInput.cs deleted file mode 100644 index c0e2207b..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/UserInput.cs +++ /dev/null @@ -1,107 +0,0 @@ -using ExerciseTracker.samggannon.Data.Models; -using ExerciseTracker.samggannon.Validation; - -namespace ExerciseTracker.samggannon.UserInterface; - -internal class UserInput -{ - internal static Exercise GetSessionDetails() - { - Exercise session = new Exercise(); - - while (true) - { - session.DateStart = GetDateTime("start"); - session.DateEnd = GetDateTime("end"); - - bool isValidTimeInput = InputValidation.ValidateTime(session.DateStart, session.DateEnd); - - if (isValidTimeInput) - { - break; - } - - Console.WriteLine("End time must be after start time. Please enter the details again."); - } - - session.Duration = CalculateDuration(session.DateStart, session.DateEnd); - session.Comments = GetComments(); - return session; - } - - public static string? GetComments() - { - Console.WriteLine("Enter any comments or notes you have about this workout"); - string? comments = Console.ReadLine(); - - if (comments == null) - { - return "no notes or comments"; - } - - comments = comments.Trim(); - - if (string.IsNullOrEmpty(comments)) - { - return "no notes or comments"; - } - - if (comments.Length > 500) - { - Console.WriteLine("Comments are too long. Please enter shorter comments (max 500 characters)."); - return GetComments(); - } - - return comments; - } - - public static TimeSpan CalculateDuration(DateTime dateStart, DateTime dateEnd) - { - return dateEnd - dateStart; - } - - public static DateTime GetDateTime(string v) - { - Console.WriteLine($"Please enter the {v} time for your workout (format: yyyy-MM-dd HH:mm:ss):"); - while (true) - { - if (DateTime.TryParseExact(Console.ReadLine(), "yyyy-MM-dd HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out DateTime result)) - { - return result; - } - else - { - Console.WriteLine("\n\nInvalid input. Please enter the date and time in the format\n " + - "yyyy-MM-dd HH:mm:ss\n " + - "Example 2024-05-14 13:15:00 - (1:15pm)\n " + - "Press Q to quit the application\n\n"); - } - - string? userQuit = Console.ReadLine(); - if (userQuit.Trim().ToUpper() == "Q") Environment.Exit(0); - } - } - - internal static int GetIdInput() - { - Console.WriteLine("Enter the Session Id of the workout you wish to modify"); - string sessionId = Console.ReadLine(); - int intSessionId; - - if (sessionId == null) { sessionId = "0"; } - - while (!Int32.TryParse(sessionId, out intSessionId) || intSessionId < 0) - { - if (sessionId == "0") - { - Console.WriteLine("Exiting..."); - return 0; - } - - Console.WriteLine("You must enter a number for the session id. Press zero [0] to exit."); - sessionId = Console.ReadLine(); - }; - - return intSessionId; - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/Visualization.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/Visualization.cs deleted file mode 100644 index da413c2d..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/UserInterface/Visualization.cs +++ /dev/null @@ -1,32 +0,0 @@ -using ExerciseTracker.samggannon.Data.Models; -using Spectre.Console; - -namespace ExerciseTracker.samggannon.UserInterface; - -internal class Visualization -{ - internal static void ShowTable(IEnumerable exercises) - { - var table = new Table(); - table.AddColumn("Id"); - table.AddColumn("Exercise Type"); - table.AddColumn("start time"); - table.AddColumn("end time"); - table.AddColumn("duration"); - table.AddColumn("Comments"); - - foreach (var exercise in exercises) - { - table.AddRow( - exercise.Id.ToString(), - exercise.Type, - exercise.DateStart.ToString(), - exercise.DateEnd.ToString(), - exercise.Duration.ToString(), - exercise.Comments - ); - } - - AnsiConsole.Write(table); - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Validation/ConsoleMessages.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Validation/ConsoleMessages.cs deleted file mode 100644 index 220fe4f5..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Validation/ConsoleMessages.cs +++ /dev/null @@ -1,37 +0,0 @@ -namespace ExerciseTracker.samggannon.Validation; - -internal class ConsoleMessages -{ - internal static void DevelopersNote() - { - Console.Clear(); - Console.WriteLine("============================================================"); - Console.WriteLine(" Developer's Note "); - Console.WriteLine("============================================================"); - Console.WriteLine(); - Console.WriteLine("Welcome to the Exercise Tracker Console Application!"); - Console.WriteLine(); - Console.WriteLine("DISCLAIMER:"); - Console.WriteLine("This console application is not intended to be a comprehensive or foolproof exercise tracker/logger."); - Console.WriteLine("It provides basic functionalities and serves as a lightweight application for tracking exercise sessions."); - Console.WriteLine(); - Console.WriteLine("Please note that the application is not robust in terms of error handling. Some inputs, such as exercise type,"); - Console.WriteLine("have been hardcoded for simplicity."); - Console.WriteLine(); - Console.WriteLine("Purpose:"); - Console.WriteLine("The primary focus of this project was to explore data layer technologies. In this application:"); - Console.WriteLine("1. Cardio sessions implement an Entity Framework (EF) Core repository."); - Console.WriteLine("2. Resistance training sessions implement ADO.NET technology."); - Console.WriteLine(); - Console.WriteLine("Potential Enhancements:"); - Console.WriteLine("This application could be extended with additional features, such as:"); - Console.WriteLine("- Generating reports that include the number of workouts and total time spent exercising."); - Console.WriteLine("- Logging specific details for different types of exercises (e.g., run sessions with miles logged, strength training with reps and sets)."); - Console.WriteLine("- Adding support for various types of exercises (e.g., push-ups, curls) with detailed tracking."); - Console.WriteLine(); - Console.WriteLine("Thank you for using the Exercise Tracker Console Application. Press [enter] to return to the main menu."); - Console.WriteLine(); - Console.WriteLine("============================================================"); - Console.ReadLine(); - } -} diff --git a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Validation/InputValidation.cs b/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Validation/InputValidation.cs deleted file mode 100644 index c73752ba..00000000 --- a/ExerciseTracker.samggannon/ExerciseTracker.samggannon/Validation/InputValidation.cs +++ /dev/null @@ -1,31 +0,0 @@ -namespace ExerciseTracker.samggannon.Validation; - -internal class InputValidation -{ - internal static void VaidateEditTime(DateTime dateStart, DateTime dateEnd) - { - bool isValidEditTime = ValidateTime(dateStart, dateEnd); - - if (isValidEditTime) - { - return; - } - else - { - Console.WriteLine("Start time must be before end time. Press [enter] to continue"); - Console.ReadLine(); - } - } - - internal static bool ValidateTime(DateTime StartTime, DateTime EndTime) - { - if (EndTime > StartTime) - { - return true; - } - else - { - return false; - } - } -} diff --git a/ExerciseTracker.tonyissa/ExerciseTracker.tonyissa.csproj b/ExerciseTracker.tonyissa/ExerciseTracker.tonyissa.csproj deleted file mode 100644 index 246a6e67..00000000 --- a/ExerciseTracker.tonyissa/ExerciseTracker.tonyissa.csproj +++ /dev/null @@ -1,30 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - - - PreserveNewest - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - diff --git a/ExerciseTracker.tonyissa/ExerciseTracker.tonyissa.sln b/ExerciseTracker.tonyissa/ExerciseTracker.tonyissa.sln deleted file mode 100644 index 75531ff4..00000000 --- a/ExerciseTracker.tonyissa/ExerciseTracker.tonyissa.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.11.35303.130 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.tonyissa", "ExerciseTracker.tonyissa.csproj", "{7AFEFC9A-721E-401F-A865-93739D026D1A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {7AFEFC9A-721E-401F-A865-93739D026D1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7AFEFC9A-721E-401F-A865-93739D026D1A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7AFEFC9A-721E-401F-A865-93739D026D1A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7AFEFC9A-721E-401F-A865-93739D026D1A}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {24746EF3-4D45-4491-B162-6D80DD269161} - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.tonyissa/Migrations/20240928170426_..Designer.cs b/ExerciseTracker.tonyissa/Migrations/20240928170426_..Designer.cs deleted file mode 100644 index f63cee1e..00000000 --- a/ExerciseTracker.tonyissa/Migrations/20240928170426_..Designer.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -using System; -using ExerciseTracker.tonyissa.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.tonyissa.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20240928170426_.")] - partial class _ - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.8") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.tonyissa.Models.ExerciseSession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("End") - .HasColumnType("datetime2"); - - b.Property("Start") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Sessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.tonyissa/Migrations/20240928170426_..cs b/ExerciseTracker.tonyissa/Migrations/20240928170426_..cs deleted file mode 100644 index 150b4bf7..00000000 --- a/ExerciseTracker.tonyissa/Migrations/20240928170426_..cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.tonyissa.Migrations -{ - /// - public partial class _ : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Sessions", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Start = table.Column(type: "datetime2", nullable: false), - End = table.Column(type: "datetime2", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: true), - Duration = table.Column(type: "time", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Sessions", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Sessions"); - } - } -} diff --git a/ExerciseTracker.tonyissa/Migrations/ExerciseContextModelSnapshot.cs b/ExerciseTracker.tonyissa/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index 5f0250f1..00000000 --- a/ExerciseTracker.tonyissa/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,52 +0,0 @@ -// -using System; -using ExerciseTracker.tonyissa.Models; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.tonyissa.Migrations -{ - [DbContext(typeof(ExerciseContext))] - partial class ExerciseContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.8") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.tonyissa.Models.ExerciseSession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("End") - .HasColumnType("datetime2"); - - b.Property("Start") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Sessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.tonyissa/Models/ExerciseContext.cs b/ExerciseTracker.tonyissa/Models/ExerciseContext.cs deleted file mode 100644 index 89d0b70e..00000000 --- a/ExerciseTracker.tonyissa/Models/ExerciseContext.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.tonyissa.Models; - -public class ExerciseContext(DbContextOptions options) : DbContext(options) -{ - public DbSet Sessions { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.tonyissa/Models/ExerciseSession.cs b/ExerciseTracker.tonyissa/Models/ExerciseSession.cs deleted file mode 100644 index 6878e6ec..00000000 --- a/ExerciseTracker.tonyissa/Models/ExerciseSession.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.tonyissa.Models; - -public class ExerciseSession -{ - public int Id { get; set; } - public DateTime Start { get; set; } - public DateTime End { get; set; } - public string? Comments { get; set; } - public TimeSpan Duration { get; set; } -} \ No newline at end of file diff --git a/ExerciseTracker.tonyissa/Program.cs b/ExerciseTracker.tonyissa/Program.cs deleted file mode 100644 index 8f0a6c99..00000000 --- a/ExerciseTracker.tonyissa/Program.cs +++ /dev/null @@ -1,39 +0,0 @@ -using ExerciseTracker.tonyissa.Models; -using ExerciseTracker.tonyissa.Repositories; -using ExerciseTracker.tonyissa.Services; -using ExerciseTracker.tonyissa.UI; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Spectre.Console; - -var builder = Host.CreateApplicationBuilder(args); - -builder.Services.AddDbContext(opt => { - var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); - opt.UseSqlServer(connectionString); -}); - -builder.Services.AddTransient, ExerciseRepository>(); -builder.Services.AddTransient(); -builder.Services.AddTransient(); - -var host = builder.Build(); - -var app = host.Services.GetRequiredService(); - -while (true) -{ - try - { - app.StartMainMenu(); - return; - } - catch (Exception ex) - { - AnsiConsole.WriteException(ex); - Console.WriteLine("\nPress any key to continue..."); - Console.ReadKey(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.tonyissa/Repositories/ExerciseRepository.cs b/ExerciseTracker.tonyissa/Repositories/ExerciseRepository.cs deleted file mode 100644 index 034a2d4f..00000000 --- a/ExerciseTracker.tonyissa/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,39 +0,0 @@ -using ExerciseTracker.tonyissa.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.tonyissa.Repositories; - -public class ExerciseRepository : IExerciseRepository where T : class, new() -{ - private readonly DbContext _context; - private readonly DbSet _dbSet; - - public ExerciseRepository(ExerciseContext context) - { - _context = context; - _dbSet = context.Set(); - } - - public IEnumerable GetAllSessions() - { - return _dbSet.ToList(); - } - - public void AddSession(T session) - { - _dbSet.Add(session); - _context.SaveChanges(); - } - - public void ModifySession(T session) - { - _dbSet.Update(session); - _context.SaveChanges(); - } - - public void DeleteSession(T session) - { - _dbSet.Remove(session); - _context.SaveChanges(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.tonyissa/Repositories/IExerciseRepository.cs b/ExerciseTracker.tonyissa/Repositories/IExerciseRepository.cs deleted file mode 100644 index 50468fff..00000000 --- a/ExerciseTracker.tonyissa/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ExerciseTracker.tonyissa.Repositories; - -public interface IExerciseRepository -{ - public IEnumerable GetAllSessions(); - public void AddSession(T session); - public void DeleteSession(T session); - public void ModifySession(T session); -} \ No newline at end of file diff --git a/ExerciseTracker.tonyissa/Services/ExerciseService.cs b/ExerciseTracker.tonyissa/Services/ExerciseService.cs deleted file mode 100644 index a29278cc..00000000 --- a/ExerciseTracker.tonyissa/Services/ExerciseService.cs +++ /dev/null @@ -1,35 +0,0 @@ -using ExerciseTracker.tonyissa.Models; -using ExerciseTracker.tonyissa.Repositories; - -namespace ExerciseTracker.tonyissa.Services; - -public class ExerciseService -{ - private readonly IExerciseRepository _repository; - - public ExerciseService(IExerciseRepository repository) - { - _repository = repository; - } - - public List GetExerciseLog() - { - var log = _repository.GetAllSessions(); - return log.ToList(); - } - - public void AddExerciseSession(ExerciseSession session) - { - _repository.AddSession(session); - } - - public void UpdateSession(ExerciseSession session) - { - _repository.ModifySession(session); - } - - public void RemoveSession(ExerciseSession session) - { - _repository.DeleteSession(session); - } -} \ No newline at end of file diff --git a/ExerciseTracker.tonyissa/UI/Input.cs b/ExerciseTracker.tonyissa/UI/Input.cs deleted file mode 100644 index c3dd7173..00000000 --- a/ExerciseTracker.tonyissa/UI/Input.cs +++ /dev/null @@ -1,76 +0,0 @@ -using ExerciseTracker.tonyissa.Models; -using Spectre.Console; - -namespace ExerciseTracker.tonyissa.UI; - -public static class UserInput -{ - public static string GetMenuSelection(string[] options) - { - var selection = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What would you like to do?") - .AddChoices(options) - ); - - return selection; - } - - public static ExerciseSession GetSessionFromId(List log) - { - var id = AnsiConsole.Ask("Enter the ID of the entry"); - var session = log.Find(s => s.Id == id); - - if (session == null) - { - AnsiConsole.MarkupLine("[red]Invalid selection[/]"); - return GetSessionFromId(log); - } - - return session; - } - - public static ExerciseSession GetNewSession(ExerciseSession? oldSession) - { - var (start, end) = GetDates(); - var comments = GetComments(); - - var session = oldSession ?? new ExerciseSession(); - - session.Start = start; - session.End = end; - session.Comments = comments; - session.Duration = end - start; - - return session; - } - - public static (DateTime, DateTime) GetDates() - { - AnsiConsole.WriteLine("Expected date & time format: mm/dd/yyyy hh:mm(am/pm)"); - var start = AnsiConsole.Ask("Enter start date & time:"); - var end = AnsiConsole.Ask("Enter end date & time:"); - - try - { - ValidateDates(start, end); - } - catch (ArgumentOutOfRangeException) - { - AnsiConsole.MarkupLine("[red]Invalid date entry. Start date must not come after end date.[/]"); - return GetDates(); - } - - return (start, end); - } - - public static string GetComments() - { - return AnsiConsole.Ask("Enter any comments:"); - } - - public static void ValidateDates(DateTime start, DateTime end) - { - ArgumentOutOfRangeException.ThrowIfGreaterThan(start, end); - } -} \ No newline at end of file diff --git a/ExerciseTracker.tonyissa/UI/MainMenu.cs b/ExerciseTracker.tonyissa/UI/MainMenu.cs deleted file mode 100644 index 31c4b65d..00000000 --- a/ExerciseTracker.tonyissa/UI/MainMenu.cs +++ /dev/null @@ -1,108 +0,0 @@ -using ExerciseTracker.tonyissa.Models; -using ExerciseTracker.tonyissa.Services; -using Spectre.Console; - -namespace ExerciseTracker.tonyissa.UI; - -public class MainMenuController -{ - private readonly ExerciseService _service; - - public MainMenuController(ExerciseService service) - { - _service = service; - } - - public void StartMainMenu() - { - while (true) - { - Console.Clear(); - var result = UserInput.GetMenuSelection(MenuOptions.MainMenu); - - switch (result) - { - case "Log a new exercise shift": - CreateNewSession(); - break; - case "View all exercise shifts": - ViewAll(); - break; - default: - return; - } - } - } - - public void StartLogMenu(List log) - { - var result = UserInput.GetMenuSelection(MenuOptions.LogMenu); - - switch (result) - { - case "Update": - UpdateSession(log); - break; - case "Delete": - DeleteSession(log); - break; - default: - return; - } - } - - public void ViewAll() - { - var log = _service.GetExerciseLog(); - - if (log.Count == 0) - { - AnsiConsole.WriteLine("No entries found. Press any key to continue..."); - Console.ReadKey(); - return; - } - - var table = new Table { Title = new TableTitle("Log") }; - table.AddColumns("ID", "Start", "End", "Comments", "Duration (hours)"); - - foreach (var item in log) - { - var id = item.Id.ToString(); - var start = item.Start.ToString("g"); - var end = item.End.ToString("g"); - var comments = item.Comments ?? ""; - var duration = item.Duration.ToString("g"); - - table.AddRow(id, start, end, comments, duration); - } - - AnsiConsole.Write(table); - StartLogMenu(log); - } - - public void CreateNewSession() - { - var session = UserInput.GetNewSession(null); - _service.AddExerciseSession(session); - AnsiConsole.WriteLine("\nSession added. Press any key to continue..."); - Console.ReadKey(); - } - - public void UpdateSession(List log) - { - var oldSession = UserInput.GetSessionFromId(log); - var newSession = UserInput.GetNewSession(oldSession); - - _service.UpdateSession(newSession); - } - - public void DeleteSession(List log) - { - var session = UserInput.GetSessionFromId(log); - var confirmation = AnsiConsole.Confirm($"Are you sure you want to delete this session?"); - - if (!confirmation) return; - - _service.RemoveSession(session); - } -} \ No newline at end of file diff --git a/ExerciseTracker.tonyissa/UI/MainMenuOptions.cs b/ExerciseTracker.tonyissa/UI/MainMenuOptions.cs deleted file mode 100644 index e10af6ca..00000000 --- a/ExerciseTracker.tonyissa/UI/MainMenuOptions.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace ExerciseTracker.tonyissa.UI; - -public static class MenuOptions -{ - public static readonly string[] MainMenu = [ - "Log a new exercise shift", - "View all exercise shifts", - "Quit" - ]; - - public static readonly string[] LogMenu = [ - "Update", - "Delete", - "Quit" - ]; -} \ No newline at end of file diff --git a/ExerciseTracker.tonyissa/appsettings.json b/ExerciseTracker.tonyissa/appsettings.json deleted file mode 100644 index 8a73ca3c..00000000 --- a/ExerciseTracker.tonyissa/appsettings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ConnectionStrings": { - "DefaultConnection": "Server=(localdb)\\TheCsharpAcademyProjects;Database=ExerciseTracker;" - } -} \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/.gitignore b/ExerciseTracker.wkktoria/.gitignore deleted file mode 100644 index 9b241ed9..00000000 --- a/ExerciseTracker.wkktoria/.gitignore +++ /dev/null @@ -1,478 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET -project.lock.json -project.fragment.lock.json -artifacts/ - -# Tye -.tye/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.tlog -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -.idea/ -*.sln.iml - -## -## Visual studio for Mac -## - - -# globs -Makefile.in -*.userprefs -*.usertasks -config.make -config.status -aclocal.m4 -install-sh -autom4te.cache/ -*.tar.gz -tarballs/ -test-results/ - -# Mac bundle stuff -*.dmg -*.app - -# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria.sln b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria.sln deleted file mode 100644 index 4f26c655..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria.sln +++ /dev/null @@ -1,16 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker.wkktoria", "ExerciseTracker.wkktoria\ExerciseTracker.wkktoria.csproj", "{28518C68-E779-4C2F-8E98-C55AEF70ECB1}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {28518C68-E779-4C2F-8E98-C55AEF70ECB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {28518C68-E779-4C2F-8E98-C55AEF70ECB1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {28518C68-E779-4C2F-8E98-C55AEF70ECB1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {28518C68-E779-4C2F-8E98-C55AEF70ECB1}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Controllers/ExerciseController.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Controllers/ExerciseController.cs deleted file mode 100644 index 6346639b..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Controllers/ExerciseController.cs +++ /dev/null @@ -1,74 +0,0 @@ -using ExerciseTracker.wkktoria.Data.Models; -using ExerciseTracker.wkktoria.Services; - -namespace ExerciseTracker.wkktoria.Controllers; - -public class ExerciseController : IExerciseController -{ - private readonly IExerciseService _exerciseService; - - public ExerciseController(IExerciseService exerciseService) - { - _exerciseService = exerciseService; - } - - public List GetAllExercises() - { - try - { - return _exerciseService.GetAllExercises(); - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - public Exercise? GetExercise(int id) - { - try - { - return _exerciseService.GetExercise(id); - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - public Exercise? AddExercise(Exercise exercise) - { - try - { - return _exerciseService.AddExercise(exercise); - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - public Exercise UpdateExercise(Exercise exercise) - { - try - { - return _exerciseService.UpdateExercise(exercise); - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - public void DeleteExercise(int id) - { - try - { - _exerciseService.DeleteExercise(id); - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Controllers/IExerciseController.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Controllers/IExerciseController.cs deleted file mode 100644 index 684a1cad..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Controllers/IExerciseController.cs +++ /dev/null @@ -1,16 +0,0 @@ -using ExerciseTracker.wkktoria.Data.Models; - -namespace ExerciseTracker.wkktoria.Controllers; - -public interface IExerciseController -{ - List GetAllExercises(); - - Exercise? GetExercise(int id); - - Exercise? AddExercise(Exercise exercise); - - Exercise UpdateExercise(Exercise exercise); - - void DeleteExercise(int id); -} \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/AppDbContext.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/AppDbContext.cs deleted file mode 100644 index 726fb7cd..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/AppDbContext.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTracker.wkktoria.Data.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.wkktoria.Data; - -public class AppDbContext : DbContext -{ - public AppDbContext(DbContextOptions options) : base(options) - { - } - - public DbSet Exercises { get; set; } = null!; -} \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/Models/Exercise.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/Models/Exercise.cs deleted file mode 100644 index ae96577a..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/Models/Exercise.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace ExerciseTracker.wkktoria.Data.Models; - -public class Exercise -{ - public int Id { get; set; } - - public DateTime StartDate { get; set; } - - public DateTime EndDate { get; set; } - - public TimeSpan Duration { get; set; } - - public string? Comment { get; set; } - - public override string ToString() - { - return $"Start Date: {StartDate:f} - End Date: {EndDate:f}"; - } -} \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/Repositories/ExerciseRepository.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/Repositories/ExerciseRepository.cs deleted file mode 100644 index d8b34038..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System.Configuration; -using Dapper; -using ExerciseTracker.wkktoria.Data.Models; -using Microsoft.Data.SqlClient; - -namespace ExerciseTracker.wkktoria.Data.Repositories; - -public class ExerciseRepository : IExerciseRepository -{ - private readonly AppDbContext _context; - - public ExerciseRepository(AppDbContext context) - { - _context = context; - } - - public List GetAllExercises() - { - var exercises = new List(); - - try - { - using var connection = - new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString); - var reader = connection.ExecuteReader("SELECT Id, StartDate, EndDate, Comment FROM Exercises"); - - while (reader.Read()) - exercises.Add(new Exercise - { - Id = reader.GetInt32(0), - StartDate = reader.GetDateTime(1), - EndDate = reader.GetDateTime(2), - Duration = reader.GetDateTime(2) - reader.GetDateTime(1), - Comment = reader.GetString(3) - }); - - return exercises; - } - catch (Exception e) - { - throw new Exception($"Couldn't retrieve entities: {e.Message}"); - } - } - - public Exercise? GetExercise(int id) - { - try - { - return _context.Exercises.Find(id); - } - catch (Exception e) - { - throw new Exception($"Couldn't retrieve entity: {e.Message}"); - } - } - - public Exercise AddExercise(Exercise exercise) - { - if (exercise == null) throw new ArgumentNullException(nameof(exercise)); - - try - { - _context.Add(exercise); - _context.SaveChanges(); - - return exercise; - } - catch (Exception e) - { - throw new Exception($"{nameof(exercise)} could not be saved: {e.Message}"); - } - } - - public Exercise UpdateExercise(Exercise exercise) - { - if (exercise == null) - throw new ArgumentNullException(nameof(exercise)); - - try - { - _context.Update(exercise); - _context.SaveChanges(); - - return exercise; - } - catch (Exception e) - { - throw new Exception($"{nameof(exercise)} could not be updated: {e.Message}"); - } - } - - public void DeleteExercise(int id) - { - try - { - var exercise = _context.Exercises.Find(id); - - if (exercise == null) throw new ArgumentNullException(nameof(exercise)); - - _context.Remove(exercise); - _context.SaveChanges(); - } - catch (Exception e) - { - throw new Exception($"Entity with id '{id}' could not be deleted: {e.Message}"); - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/Repositories/IExerciseRepository.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/Repositories/IExerciseRepository.cs deleted file mode 100644 index 8715c6be..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Data/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,16 +0,0 @@ -using ExerciseTracker.wkktoria.Data.Models; - -namespace ExerciseTracker.wkktoria.Data.Repositories; - -public interface IExerciseRepository -{ - List GetAllExercises(); - - Exercise? GetExercise(int id); - - Exercise AddExercise(Exercise exercise); - - Exercise UpdateExercise(Exercise exercise); - - void DeleteExercise(int id); -} \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria.csproj b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria.csproj deleted file mode 100644 index 22cb868c..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Migrations/20231031155002_Initial.Designer.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Migrations/20231031155002_Initial.Designer.cs deleted file mode 100644 index 3d4fc955..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Migrations/20231031155002_Initial.Designer.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -using System; -using ExerciseTracker.wkktoria.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.wkktoria.Migrations -{ - [DbContext(typeof(AppDbContext))] - [Migration("20231031155002_Initial")] - partial class Initial - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.13") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.wkktoria.Data.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comment") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Migrations/20231031155002_Initial.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Migrations/20231031155002_Initial.cs deleted file mode 100644 index 30c8149f..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Migrations/20231031155002_Initial.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.wkktoria.Migrations -{ - /// - public partial class Initial : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - StartDate = table.Column(type: "datetime2", nullable: false), - EndDate = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comment = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Migrations/AppDbContextModelSnapshot.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Migrations/AppDbContextModelSnapshot.cs deleted file mode 100644 index ea0586b4..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Migrations/AppDbContextModelSnapshot.cs +++ /dev/null @@ -1,52 +0,0 @@ -// -using System; -using ExerciseTracker.wkktoria.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.wkktoria.Migrations -{ - [DbContext(typeof(AppDbContext))] - partial class AppDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.13") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.wkktoria.Data.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comment") - .HasColumnType("nvarchar(max)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Program.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Program.cs deleted file mode 100644 index 8203461f..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Program.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Configuration; -using System.Globalization; -using ExerciseTracker.wkktoria; -using ExerciseTracker.wkktoria.Controllers; -using ExerciseTracker.wkktoria.Data; -using ExerciseTracker.wkktoria.Data.Repositories; -using ExerciseTracker.wkktoria.Services; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -var builder = Host.CreateDefaultBuilder(args) - .ConfigureServices((_, services) => - { - services.AddDbContext(options => - { - options.UseSqlServer(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString); - } - ); - - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - }); - -var host = builder.Build(); -var serviceProvider = host.Services; - -var exerciseService = serviceProvider.GetRequiredService(); -var exerciseController = new ExerciseController(exerciseService); - -var ci = new CultureInfo("en-US"); -Thread.CurrentThread.CurrentCulture = ci; -Thread.CurrentThread.CurrentUICulture = ci; - -var ui = new UserInput(exerciseController); - -ui.Run(); \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Services/ExerciseService.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Services/ExerciseService.cs deleted file mode 100644 index 2adc9544..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Services/ExerciseService.cs +++ /dev/null @@ -1,74 +0,0 @@ -using ExerciseTracker.wkktoria.Data.Models; -using ExerciseTracker.wkktoria.Data.Repositories; - -namespace ExerciseTracker.wkktoria.Services; - -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository _exerciseRepository; - - public ExerciseService(IExerciseRepository exerciseRepository) - { - _exerciseRepository = exerciseRepository; - } - - public List GetAllExercises() - { - try - { - return _exerciseRepository.GetAllExercises(); - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - public Exercise? GetExercise(int id) - { - try - { - return _exerciseRepository.GetExercise(id); - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - public Exercise AddExercise(Exercise exercise) - { - try - { - return _exerciseRepository.AddExercise(exercise); - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - public Exercise UpdateExercise(Exercise exercise) - { - try - { - return _exerciseRepository.UpdateExercise(exercise); - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - public void DeleteExercise(int id) - { - try - { - _exerciseRepository.DeleteExercise(id); - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } -} \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Services/IExerciseService.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Services/IExerciseService.cs deleted file mode 100644 index 313afa2d..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Services/IExerciseService.cs +++ /dev/null @@ -1,16 +0,0 @@ -using ExerciseTracker.wkktoria.Data.Models; - -namespace ExerciseTracker.wkktoria.Services; - -public interface IExerciseService -{ - List GetAllExercises(); - - Exercise? GetExercise(int id); - - Exercise? AddExercise(Exercise exercise); - - Exercise UpdateExercise(Exercise exercise); - - void DeleteExercise(int id); -} \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/UserInput.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/UserInput.cs deleted file mode 100644 index e157ac1f..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/UserInput.cs +++ /dev/null @@ -1,357 +0,0 @@ -using ExerciseTracker.wkktoria.Controllers; -using ExerciseTracker.wkktoria.Data.Models; -using Spectre.Console; - -namespace ExerciseTracker.wkktoria; - -public class UserInput -{ - private readonly string _dateFormat = Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern; - private readonly IExerciseController _exerciseController; - - private readonly string _timeFormat = - Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortTimePattern.Replace("tt", "").Trim(); - - public UserInput(IExerciseController exerciseController) - { - _exerciseController = exerciseController; - } - - public void Run() - { - var isAppRunning = true; - - while (isAppRunning) - { - Console.Clear(); - - var option = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("What would you like to do?") - .AddChoices("Add Exercise", "Edit Exercise", "Delete Exercise", "Show All Exercises", - "Show Exercise", "Quit") - ); - - switch (option) - { - case "Add Exercise": - AddExercise(); - PressAnyKeyToContinue(); - break; - case "Edit Exercise": - EditExercise(); - PressAnyKeyToContinue(); - break; - case "Delete Exercise": - DeleteExercise(); - PressAnyKeyToContinue(); - break; - case "Show All Exercises": - ShowAllExercises(); - PressAnyKeyToContinue(); - break; - case "Show Exercise": - ShowExercise(); - PressAnyKeyToContinue(); - break; - case "Quit": - isAppRunning = false; - break; - default: - Console.WriteLine("Invalid option."); - break; - } - } - } - - private void ShowExercise() - { - try - { - var exercises = _exerciseController.GetAllExercises(); - - Console.Clear(); - - if (exercises.Any()) - { - ShowExercisesTable(exercises); - - var id = AnsiConsole.Ask("Enter id of exercise to show:"); - var exercise = _exerciseController.GetExercise(id); - - Console.Clear(); - - while (exercise == null) - { - WriteError($"No exercise with id '{id}'."); - - ShowExercisesTable(exercises); - - id = AnsiConsole.Ask("Enter id of exercise to show:"); - exercise = _exerciseController.GetExercise(id); - } - - Console.Clear(); - - ShowExerciseDetails(exercise); - } - else - { - Console.WriteLine("No exercises found."); - } - } - catch (Exception e) - { - WriteError(e.Message); - } - } - - private static void ShowExerciseDetails(Exercise exercise) - { - var panel = new Panel($""" - Start Date: {exercise.StartDate:HH:mm, dd MMM yyyy} - End Date: {exercise.EndDate:HH:mm, dd MMM yyyy} - Duration: {exercise.Duration} - Comment: {exercise.Comment} - """) - { - Header = new PanelHeader($"Exercise#{exercise.Id}") - }; - - AnsiConsole.Write(panel); - } - - private void ShowAllExercises() - { - try - { - var exercises = _exerciseController.GetAllExercises(); - - Console.Clear(); - - if (exercises.Any()) - ShowExercisesTable(exercises); - else - Console.WriteLine("No exercises found."); - } - catch (Exception e) - { - WriteError(e.Message); - } - } - - private static void ShowExercisesTable(List exercises) - { - var table = new Table(); - table.Title("Exercises"); - - table.AddColumn("Id"); - table.AddColumn("Start Date"); - table.AddColumn("End Date"); - table.AddColumn("Duration"); - table.AddColumn("Comment"); - - foreach (var exercise in exercises) - table.AddRow( - exercise.Id.ToString(), - exercise.StartDate.ToString("HH:mm, dd MMM yyyy"), - exercise.EndDate.ToString("HH:mm, dd MMM yyyy"), - exercise.Duration.ToString(), - exercise.Comment ?? string.Empty - ); - - AnsiConsole.Write(table); - } - - private void DeleteExercise() - { - try - { - var exercises = _exerciseController.GetAllExercises(); - - Console.Clear(); - - if (exercises.Any()) - { - ShowExercisesTable(exercises); - - var id = AnsiConsole.Ask("Enter id of exercise to delete:"); - var exercise = _exerciseController.GetExercise(id); - - Console.Clear(); - - while (exercise == null) - { - WriteError($"No exercise with id '{id}'."); - - ShowExercisesTable(exercises); - - id = AnsiConsole.Ask("Enter id of exercise to delete:"); - exercise = _exerciseController.GetExercise(id); - } - - _exerciseController.DeleteExercise(id); - - Console.Clear(); - WriteSuccess("Exercise has been deleted."); - } - else - { - Console.WriteLine("No exercises found."); - } - } - catch (Exception e) - { - WriteError(e.Message); - } - } - - private void EditExercise() - { - try - { - var exercises = _exerciseController.GetAllExercises(); - - Console.Clear(); - - if (exercises.Any()) - { - ShowExercisesTable(exercises); - - var id = AnsiConsole.Ask("Enter id of exercise to edit:"); - var exercise = _exerciseController.GetExercise(id); - - Console.Clear(); - - while (exercise == null) - { - WriteError($"No exercise with id '{id}'."); - - ShowExercisesTable(exercises); - - id = AnsiConsole.Ask("Enter id of exercise to edit:"); - exercise = _exerciseController.GetExercise(id); - } - - Console.Clear(); - - DateTime fullStartDate; - DateTime fullEndDate; - TimeSpan duration; - - ShowExerciseDetails(exercise); - - do - { - var startDate = AnsiConsole.Ask($"Enter start date (format: {_dateFormat}):"); - var startTime = AnsiConsole.Ask($"Enter start time (format: {_timeFormat}):"); - fullStartDate = startDate.Add(startTime); - - var endDate = AnsiConsole.Ask($"Enter end date (format: {_dateFormat}):"); - var endTime = AnsiConsole.Ask($"Enter end time (format: {_timeFormat}):"); - fullEndDate = endDate.Add(endTime); - - duration = fullEndDate - fullStartDate; - - if (!Validation.IsValidDuration(duration)) WriteError("Duration cannot be longer than 24 hours."); - - if (!Validation.IsStartDateBeforeEndDate(fullStartDate, fullEndDate)) - WriteError("End date cannot be before start date."); - } while (!Validation.IsStartDateBeforeEndDate(fullStartDate, fullEndDate) || - !Validation.IsValidDuration(duration)); - - var comment = AnsiConsole.Prompt( - new TextPrompt("Enter comment (or press enter to skip adding comment):") - .AllowEmpty()); - - exercise.StartDate = fullStartDate; - exercise.EndDate = fullEndDate; - exercise.Duration = duration; - exercise.Comment = comment; - - _exerciseController.UpdateExercise(exercise); - - Console.Clear(); - WriteSuccess("Exercise has been updated."); - } - else - { - Console.WriteLine("No exercises found."); - } - } - catch (Exception e) - { - WriteError(e.Message); - } - } - - private void AddExercise() - { - DateTime fullStartDate; - DateTime fullEndDate; - TimeSpan duration; - - do - { - var startDate = AnsiConsole.Ask($"Enter start date (format: {_dateFormat}):"); - var startTime = AnsiConsole.Ask($"Enter start time (format: {_timeFormat}):"); - fullStartDate = startDate.Add(startTime); - - var endDate = AnsiConsole.Ask($"Enter end date (format: {_dateFormat}):"); - var endTime = AnsiConsole.Ask($"Enter end time (format: {_timeFormat}):"); - fullEndDate = endDate.Add(endTime); - - duration = fullEndDate - fullStartDate; - - if (!Validation.IsValidDuration(duration)) WriteError("Duration cannot be longer than 24 hours."); - - if (!Validation.IsStartDateBeforeEndDate(fullStartDate, fullEndDate)) - WriteError("End date cannot be before start date."); - } while (!Validation.IsStartDateBeforeEndDate(fullStartDate, fullEndDate) || - !Validation.IsValidDuration(duration)); - - var comment = AnsiConsole.Prompt( - new TextPrompt("Enter comment (or press enter to skip adding comment):") - .AllowEmpty()); - - var exercise = new Exercise - { - StartDate = fullStartDate, - EndDate = fullEndDate, - Duration = duration, - Comment = comment - }; - - try - { - _exerciseController.AddExercise(exercise); - - Console.Clear(); - WriteSuccess("Exercise has been added."); - } - catch (Exception e) - { - WriteError(e.Message); - } - } - - private static void WriteError(string message) - { - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine(message); - Console.ResetColor(); - } - - private static void WriteSuccess(string message) - { - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine(message); - Console.ResetColor(); - } - - private static void PressAnyKeyToContinue() - { - Console.WriteLine("Press any key to continue..."); - Console.ReadKey(); - } -} \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Validation.cs b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Validation.cs deleted file mode 100644 index a772ad5e..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/Validation.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace ExerciseTracker.wkktoria; - -public static class Validation -{ - public static bool IsStartDateBeforeEndDate(DateTime startDate, DateTime endDate) - { - return startDate < endDate; - } - - public static bool IsValidDuration(TimeSpan duration) - { - return duration.TotalHours < 24; - } -} \ No newline at end of file diff --git a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/app.config b/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/app.config deleted file mode 100644 index c5a032db..00000000 --- a/ExerciseTracker.wkktoria/ExerciseTracker.wkktoria/app.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics.sln b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics.sln deleted file mode 100644 index fde8ceaa..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.7.34003.232 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTrackerCarDioLogics", "ExerciseTrackerCarDioLogics\ExerciseTrackerCarDioLogics.csproj", "{0D270ED9-C82A-42A3-8795-22AC770B1876}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0D270ED9-C82A-42A3-8795-22AC770B1876}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0D270ED9-C82A-42A3-8795-22AC770B1876}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0D270ED9-C82A-42A3-8795-22AC770B1876}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0D270ED9-C82A-42A3-8795-22AC770B1876}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {41D1E44D-3959-41F8-80FC-522FEF731E69} - EndGlobalSection -EndGlobal diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/DataContextEF/SessionContext.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/DataContextEF/SessionContext.cs deleted file mode 100644 index 6829f818..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/DataContextEF/SessionContext.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using ExerciseTrackerCarDioLogics.Models; - -namespace ExerciseTrackerCarDioLogics.Data; - -public class SessionContext : DbContext -{ - public DbSet Sessions { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlServer("Server=(localdb)\\MSSQLLocalDB;Database=ExerciseTrackerDB;Trusted_Connection=True;"); - } -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics.csproj b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics.csproj deleted file mode 100644 index fea664ca..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Helpers/DependencyInjectorMethods.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Helpers/DependencyInjectorMethods.cs deleted file mode 100644 index b3572d83..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Helpers/DependencyInjectorMethods.cs +++ /dev/null @@ -1,36 +0,0 @@ -using ExerciseTrackerCarDioLogics.Data; -using ExerciseTrackerCarDioLogics.Repositories; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTrackerCarDioLogics.Helpers; - -public class DependencyInjectorMethods -{ - public SessionController EFImplementationService() - { - //test - Console.WriteLine("Entity framework is being used!"); - Console.ReadLine(); - - SessionContext SessionContext = new SessionContext(); - ISessionRepository eFSessionRepository = new EFSessionRepository(SessionContext); - SessionService SessionServiceEF = new SessionService(eFSessionRepository); - SessionController SessionControllerEF = new SessionController(SessionServiceEF); - - return SessionControllerEF; - } - - public SessionController RawSQLImplementationService() - { - //test - Console.WriteLine("Raw SQL is being used!"); - Console.ReadLine(); - - string connectionString = "Server=(localdb)\\MSSQLLocalDB;Database=ExerciseTrackerDB;Trusted_Connection=True;"; - ISessionRepository rawSQLSessionRepository = new RawSQLSessionRepository(connectionString); - SessionService SessionServiceRawSQL = new SessionService(rawSQLSessionRepository); - SessionController SessionControllerRawSQL = new SessionController(SessionServiceRawSQL); - - return SessionControllerRawSQL; - } -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Helpers/Enums.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Helpers/Enums.cs deleted file mode 100644 index 678b6276..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Helpers/Enums.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace ExerciseTrackerCarDioLogics.Helpers; - -static public class Enums -{ - public enum ExerciseType - { - Weigths, - Cardio, - Exit - } - - public enum MainMenuOptions - { - AddSession, - RemoveSession, - UpdateSession, - ViewSessions, - BackToStartMenu - } -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Migrations/20230819202358_Initial.Designer.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Migrations/20230819202358_Initial.Designer.cs deleted file mode 100644 index a07f7539..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Migrations/20230819202358_Initial.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using ExerciseTrackerCarDioLogics.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTrackerCarDioLogics.Migrations -{ - [DbContext(typeof(SessionContext))] - [Migration("20230819202358_Initial")] - partial class Initial - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.10") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTrackerCarDioLogics.Models.ExSession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comment") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("ExSessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Migrations/20230819202358_Initial.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Migrations/20230819202358_Initial.cs deleted file mode 100644 index c12b6d91..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Migrations/20230819202358_Initial.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTrackerCarDioLogics.Migrations -{ - /// - public partial class Initial : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Sessions", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comment = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Sessions", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Sessions"); - } - } -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Migrations/ExSessionContextModelSnapshot.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Migrations/ExSessionContextModelSnapshot.cs deleted file mode 100644 index 772251b3..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Migrations/ExSessionContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTrackerCarDioLogics.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTrackerCarDioLogics.Migrations -{ - [DbContext(typeof(SessionContext))] - partial class SessionContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.10") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTrackerCarDioLogics.Models.Session", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comment") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Sessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Program.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Program.cs deleted file mode 100644 index 6d82fcc4..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Program.cs +++ /dev/null @@ -1,5 +0,0 @@ -using ExerciseTrackerCarDioLogics; - -UserInterface userInterface = new UserInterface(); - -userInterface.StartMenu(); diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Repositories/EFSessionRepository.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Repositories/EFSessionRepository.cs deleted file mode 100644 index da326a1b..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Repositories/EFSessionRepository.cs +++ /dev/null @@ -1,54 +0,0 @@ -using ExerciseTrackerCarDioLogics.Data; -using ExerciseTrackerCarDioLogics.Models; - -namespace ExerciseTrackerCarDioLogics.Repositories; - -//implementation of the ExSession interface into Entity Framework -public class EFSessionRepository : ISessionRepository -{ - private readonly SessionContext _context; - - //constructor - public EFSessionRepository(SessionContext context) - { - _context = context; - } - - public void CreateDatabase() - { - _context.Database.EnsureCreated(); - } - - public Session GetSessionById(int id) - { - return _context.Sessions.Find(id); - } - - public List GetAllSessions() - { - return _context.Sessions.ToList(); - } - - public void AddSession(Session session) - { - _context.Sessions.Add(session); - _context.SaveChanges(); - } - - public void RemoveSession(int id) - { - var session = _context.Sessions.Find(id); - - if (session != null) - { - _context.Sessions.Remove(session); - _context.SaveChanges(); - } - } - - public void UpdateSession(Session session) - { - _context.Sessions.Update(session); - _context.SaveChanges(); - } -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Repositories/ISessionRepository.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Repositories/ISessionRepository.cs deleted file mode 100644 index 7f8611fe..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Repositories/ISessionRepository.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTrackerCarDioLogics.Models; - -namespace ExerciseTrackerCarDioLogics.Repositories; - -public interface ISessionRepository -{ - Session GetSessionById(int id); - List GetAllSessions(); - void AddSession(Session session); - void RemoveSession(int id); - void UpdateSession(Session session); - void CreateDatabase(); -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Repositories/RawSQLSessionRepository.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Repositories/RawSQLSessionRepository.cs deleted file mode 100644 index 07bb9f24..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Repositories/RawSQLSessionRepository.cs +++ /dev/null @@ -1,140 +0,0 @@ -using ExerciseTrackerCarDioLogics.Models; -using Microsoft.Data.SqlClient; - -namespace ExerciseTrackerCarDioLogics.Repositories; - -public class RawSQLSessionRepository : ISessionRepository -{ - //implementation of the ExSession interface into RawSQL - private readonly string _connectionString; - - public RawSQLSessionRepository(string connectionString) - { - _connectionString = connectionString; - } - - public void CreateDatabase() - { - //Could not implement SQL to create database. Got error denying me access. - } - - public Session GetSessionById(int id) - { - using ( var connection = new SqlConnection(_connectionString)) - { - connection.Open(); - string query = "SELECT Id, DateStart, DateEnd, Duration, Comment FROM ExSessions WHERE Id = @Id"; //what is name where?? - - using (var command = new SqlCommand(query, connection)) - { - command.Parameters.AddWithValue("@Id", id); - - using( var reader = command.ExecuteReader()) - { - if(reader.Read()) - { - return new Session - { - Id = Convert.ToInt32(reader["Id"]), - DateStart = Convert.ToDateTime(reader["DateStart"]), - DateEnd = Convert.ToDateTime(reader["DateEnd"]), - Duration = TimeSpan.Parse(reader["Duration"].ToString()), - Comment = reader["Comment"].ToString() - }; - } - } - - connection.Close(); - } - } - - return null; // - } - - public void AddSession(Session session) - { - using (var connection = new SqlConnection(_connectionString)) - { - connection.Open(); - - string query = "INSERT INTO ExSessions (DateStart, DateEnd, Duration, Comment) VALUES (@DateStart, @DateEnd, @Duration, @Comment)"; - - using (var command = new SqlCommand(query, connection)) - { - command.Parameters.AddWithValue("@DateStart", session.DateStart); - command.Parameters.AddWithValue("@DateEnd", session.DateEnd); - command.Parameters.AddWithValue("@Duration", session.Duration.ToString()); - command.Parameters.AddWithValue("@Comment", session.Comment); - command.ExecuteNonQuery(); - } - } - } - - public void RemoveSession(int id) - { - using (var connection = new SqlConnection(_connectionString)) - { - connection.Open(); - - string query = "DELETE FROM ExSessions WHERE Id = @Id"; - - using (var command = new SqlCommand(query, connection)) - { - command.Parameters.AddWithValue("@Id", id); - command.ExecuteNonQuery(); - } - } - } - - public void UpdateSession(Session session) - { - using (var connection = new SqlConnection(_connectionString)) - { - connection.Open(); - - string query = "UPDATE ExSessions SET DateStart = @DateStart, DateEnd = @DateEnd, Duration = @Duration, Comment = @Comment WHERE Id = @Id"; - - using (var command = new SqlCommand(query, connection)) - { - command.Parameters.AddWithValue("@Id", session.Id); - command.Parameters.AddWithValue("@DateStart", session.DateStart); - command.Parameters.AddWithValue("@DateEnd", session.DateEnd); - command.Parameters.AddWithValue("@Duration", session.Duration.ToString()); - command.Parameters.AddWithValue("@Comment", session.Comment); - command.ExecuteNonQuery(); - } - } - } - - public List GetAllSessions() - { - List sessions = new List(); - - using (var connection = new SqlConnection(_connectionString)) - { - connection.Open(); - - string query = "SELECT Id, DateStart, DateEnd, Duration, Comment FROM ExSessions"; - using (var command = new SqlCommand(query, connection)) - { - using (var reader = command.ExecuteReader()) - { - while (reader.Read()) - { - Session session = new Session - { - Id = Convert.ToInt32(reader["Id"]), - DateStart = Convert.ToDateTime(reader["DateStart"]), - DateEnd = Convert.ToDateTime(reader["DateEnd"]), - Duration = TimeSpan.Parse(reader["Duration"].ToString()), - Comment = reader["Comment"].ToString() - }; - sessions.Add(session); - } - } - } - } - - return sessions; - } -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/SessionController.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/SessionController.cs deleted file mode 100644 index 72b3c38a..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/SessionController.cs +++ /dev/null @@ -1,57 +0,0 @@ -using ExerciseTrackerCarDioLogics.Models; - -namespace ExerciseTrackerCarDioLogics; - -public class SessionController -{ - private readonly SessionService _SessionService; - - public SessionController(SessionService SessionService) - { - _SessionService = SessionService; - } - - public void CreateDatabase() - { - _SessionService.CreateDatabase(); - } - - public void AddSession(DateTime dateStart, DateTime dateEnd, TimeSpan duration, string comment) - { - Session newSession = new Session - { - DateStart = dateStart, - DateEnd = dateEnd, - Duration = duration, - Comment = comment - }; - - _SessionService.AddSession(newSession); - } - - public Session GetSessionById(int id) - { - return _SessionService.GetSessionById(id); - } - - public List GetAllSessions() - { - return _SessionService.GetAllSessions(); - } - public void UpdateSession(int id, DateTime dateStart, DateTime dateEnd, TimeSpan duration, string comment, Session session) - { - - session.Id = id; - session.DateStart = dateStart; - session.DateEnd = dateEnd; - session.Duration = duration; - session.Comment = comment; - - _SessionService.UpdateSession(session); - } - - public void RemoveSession(int id) - { - _SessionService.RemoveSession(id); - } -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/SessionService.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/SessionService.cs deleted file mode 100644 index 4cc87e53..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/SessionService.cs +++ /dev/null @@ -1,44 +0,0 @@ -using ExerciseTrackerCarDioLogics.Models; -using ExerciseTrackerCarDioLogics.Repositories; - -namespace ExerciseTrackerCarDioLogics; - -public class SessionService -{ - private readonly ISessionRepository _SessionRepo; - - public SessionService(ISessionRepository SessionRepo) - { - _SessionRepo = SessionRepo; - } - - public void CreateDatabase() - { - _SessionRepo.CreateDatabase(); - } - - public Session GetSessionById(int id) - { - return _SessionRepo.GetSessionById(id); - } - - public List GetAllSessions() - { - return _SessionRepo.GetAllSessions(); - } - - public void AddSession(Session session) - { - _SessionRepo.AddSession(session); - } - - public void RemoveSession(int id) - { - _SessionRepo.RemoveSession(id); - } - - public void UpdateSession(Session session) - { - _SessionRepo.UpdateSession(session); - } -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/UserInterface.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/UserInterface.cs deleted file mode 100644 index 170ad15b..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/UserInterface.cs +++ /dev/null @@ -1,184 +0,0 @@ -using ExerciseTrackerCarDioLogics.Helpers; -using ExerciseTrackerCarDioLogics.Models; -using Spectre.Console; -using static ExerciseTrackerCarDioLogics.Helpers.Enums; - -namespace ExerciseTrackerCarDioLogics; - -public class UserInterface -{ - DependencyInjectorMethods dependencyInjectorMethods = new DependencyInjectorMethods(); - SessionController controller; - DateTime dateStart, dateEnd; - TimeSpan duration; - string comment; - - public void StartMenu() //Depending on what the user chooses it will "inject" either the EF or RawSQL. - { - bool isAppRunning = true; - dependencyInjectorMethods.EFImplementationService().CreateDatabase(); - - do - { - Console.Clear(); - - var choice = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("Select an exercise type") - .AddChoices(ExerciseType.Weigths, ExerciseType.Cardio, ExerciseType.Exit)); - - switch (choice) - { - case ExerciseType.Weigths: - controller = dependencyInjectorMethods.EFImplementationService(); - MainMenu(); - break; - case ExerciseType.Cardio: - controller = dependencyInjectorMethods.RawSQLImplementationService(); - MainMenu(); - break; - case ExerciseType.Exit: - isAppRunning = false; - break; - } - } while (isAppRunning == true); - } - - public void MainMenu() - { - int id; - bool isMainMenuRunning = true; - - do - { - Console.Clear(); - - var choice = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("Select an exercise type") - .AddChoices(MainMenuOptions.AddSession, MainMenuOptions.RemoveSession, - MainMenuOptions.UpdateSession, MainMenuOptions.ViewSessions, MainMenuOptions.BackToStartMenu)); - - switch (choice) - { - case MainMenuOptions.AddSession: - GetUserInput(out dateStart, out dateEnd, out duration, out comment); - controller.AddSession(dateStart, dateEnd, duration, comment); - break; - case MainMenuOptions.RemoveSession: - ShowListSessions(); - Console.WriteLine("Removing Session..."); - id = GetSessionID(); - - if (id != -1) - { - controller.RemoveSession(id); - } - break; - case MainMenuOptions.UpdateSession: - ShowListSessions(); - Console.WriteLine("Updating Session..."); - id = GetSessionID(); - - if(id != -1) - { - Session session = controller.GetSessionById(id); - GetUserInput(out dateStart, out dateEnd, out duration, out comment); - controller.UpdateSession(id, dateStart, dateEnd, duration, comment, session); - } - break; - case MainMenuOptions.ViewSessions: - ShowListSessions(); - break; - case MainMenuOptions.BackToStartMenu: - isMainMenuRunning = false; - break; - } - } while (isMainMenuRunning == true); - } - - public void ShowListSessions() - { - List sessions = controller.GetAllSessions(); - - var table = new Table(); - table.AddColumn("ID"); - table.AddColumn("Start Date"); - table.AddColumn("End Date"); - table.AddColumn("Duration"); - table.AddColumn("Comment"); - - foreach (var session in sessions) - { - table.AddRow( - session.Id.ToString(), - session.DateStart.ToString("yyyy-MM-dd HH:mm"), - session.DateEnd.ToString("yyyy-MM-dd HH:mm"), - session.Duration.ToString(), - session.Comment); - } - - AnsiConsole.Render(table); - - Console.WriteLine("Press any key to continue"); - Console.ReadLine(); - } - - public int GetSessionID() - { - List sessions = controller.GetAllSessions(); - - var sessionOptions = new List(); - - foreach (var session in sessions) - { - sessionOptions.Add(session.Id); - } - - int sessionSelection; - if (sessionOptions.Count > 0) - { - sessionSelection = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("Choose a session:") - .AddChoices(sessionOptions)); - } - else - { - sessionSelection = -1; - Console.WriteLine("No sessions exist yet!"); - Console.ReadLine(); - } - - return sessionSelection; - } - - public void GetUserInput(out DateTime dateStart, out DateTime dateEnd, out TimeSpan duration, out string comment) - { - bool isDateValid; - - do - { - Console.WriteLine("Start Date:"); - string input = AnsiConsole.Prompt(new TextPrompt("Enter date and time(yyyy/MM/dd HH:mm):")); - dateStart = Validator.GetValidDate(input, out isDateValid); - } while (isDateValid != true); - - do - { - Console.WriteLine("End Date:"); - string input = AnsiConsole.Prompt(new TextPrompt("Enter date and time (yyyy/MM/dd HH:mm):")); - dateEnd = Validator.GetValidDate(input, out isDateValid); - - if(dateEnd < dateStart) - { - Console.WriteLine("The end date should be later than the start date!"); - Console.ReadLine() ; - } - } while (isDateValid != true || dateEnd < dateStart); - - duration = dateEnd - dateStart; - - comment = AnsiConsole.Ask("Write any comment:"); - } -} diff --git a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Validator.cs b/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Validator.cs deleted file mode 100644 index 32fae7c3..00000000 --- a/ExerciseTrackerCarDioLogics/ExerciseTrackerCarDioLogics/Validator.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace ExerciseTrackerCarDioLogics; - -static public class Validator -{ - static public DateTime GetValidDate(string input, out bool isDateValid) - { - if (DateTime.TryParseExact(input, "yyyy/MM/dd HH:mm", null, System.Globalization.DateTimeStyles.None, out DateTime validDate)) - { - isDateValid = true; - } - else - { - isDateValid = false; - Console.WriteLine("Invalid time format! Valid format: yyyy/MM/dd HH:mm"); - Console.ReadLine(); - } - return validDate; - } -} diff --git a/Furiax.ExerciseTracker/ExerciseTracker/ExerciseController.cs b/Furiax.ExerciseTracker/ExerciseTracker/ExerciseController.cs deleted file mode 100644 index 563d73ee..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/ExerciseController.cs +++ /dev/null @@ -1,108 +0,0 @@ -using ExerciseTracker.Models; -using Spectre.Console; - -namespace ExerciseTracker -{ - public class ExerciseController - { - private readonly ExerciseService _exerciseService; - public ExerciseController(ExerciseService exerciseService) - { - _exerciseService = exerciseService; - } - public static void PrintExercisesTable(List exercises) - { - var table = new Table(); - table.AddColumn("Id"); - table.AddColumn("Type"); - table.AddColumn("Start time"); - table.AddColumn("End time"); - table.AddColumn("Duration"); - table.AddColumn("Comment"); - - foreach (var exercise in exercises) - { - table.AddRow(exercise.ExerciseId.ToString(), exercise.ExerciseType, - exercise.DateStart.ToString(), exercise.DateEnd.ToString(), - exercise.Duration.ToString(), exercise.Comments); - } - AnsiConsole.Write(table); - - Console.WriteLine("Press any key to continue"); - Console.ReadKey(); - } - public static void PrintExercise(ExerciseModel exercise) - { - var panel = new Panel($@"Exercise: {exercise.ExerciseType} -Start time: {exercise.DateStart} -End time: {exercise.DateEnd} -Duration: {exercise.Duration} -Comment: {exercise.Comments}"); - panel.Header = new PanelHeader("Exercise info:"); - panel.Padding = new Padding(2, 2, 2, 2); - - AnsiConsole.Write(panel); - Console.WriteLine("Press any key to continue."); - Console.ReadKey(); - Console.Clear(); - } - internal static int GetIdOption(List exercises) - { - int id = UserInput.GetIdOfExercise(exercises); - return id; - } - internal static ExerciseModel GetUpdateInfo(ExerciseModel exercise) - { - var updatedExercise = UserInput.GetUpdatedInfo(exercise); - return updatedExercise; - } - public void MainMenu() - { - bool isAppAlive = true; - while (isAppAlive) - { - Console.Clear(); - var option = AnsiConsole.Prompt(new SelectionPrompt() - .Title("What would you like to do?") - .AddChoices( - Menu.AddExercise, - Menu.ViewAllExercises, - Menu.ViewExercise, - Menu.UpdateExercise, - Menu.DeleteExercise, - Menu.Quit - )); - switch (option) - { - case Menu.AddExercise: - _exerciseService.AddExercise(); - break; - case Menu.ViewAllExercises: - _exerciseService.GetAll(); - break; - case Menu.ViewExercise: - _exerciseService.GetExerciseById(); - break; - case Menu.UpdateExercise: - _exerciseService.UpdateExercise(); - break; - case Menu.DeleteExercise: - _exerciseService.DeleteExercise(); - break; - case Menu.Quit: - isAppAlive = false; - break; - } - } - } - enum Menu - { - AddExercise, - ViewAllExercises, - ViewExercise, - UpdateExercise, - DeleteExercise, - Quit - } - } -} diff --git a/Furiax.ExerciseTracker/ExerciseTracker/ExerciseService.cs b/Furiax.ExerciseTracker/ExerciseTracker/ExerciseService.cs deleted file mode 100644 index 68670e3d..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/ExerciseService.cs +++ /dev/null @@ -1,80 +0,0 @@ -using ExerciseTracker.Repositories; - -namespace ExerciseTracker -{ - public class ExerciseService - { - private readonly IExerciseRepository _exerciseRepository; - public ExerciseService(IExerciseRepository exerciseRepository) - { - _exerciseRepository = exerciseRepository; - } - public void AddExercise() - { - var exercise = UserInput.GetExerciseInfo(); - _exerciseRepository.Add(exercise); - } - - internal void DeleteExercise() - { - var exercises = _exerciseRepository.GetAll().ToList(); - if(exercises.Count() == 0) - { - Console.WriteLine("The database is empty"); - Console.ReadKey(); - } - else - { - int id = ExerciseController.GetIdOption(exercises); - _exerciseRepository.Delete(id); - } - } - - internal void GetAll() - { - var exercises = _exerciseRepository.GetAll().ToList(); - if (exercises.Count == 0) - { - Console.WriteLine("The database is empty"); - Console.ReadKey(); - } - else - { - ExerciseController.PrintExercisesTable(exercises); - } - } - - internal void GetExerciseById() - { - var exercises = _exerciseRepository.GetAll().ToList(); - if (exercises.Count == 0) - { - Console.WriteLine("The database is empty"); - Console.ReadKey(); - } - else - { - int id = ExerciseController.GetIdOption(exercises); - var exercise = _exerciseRepository.GetExerciseById(id); - ExerciseController.PrintExercise(exercise); - } - } - - internal void UpdateExercise() - { - var exercises = _exerciseRepository.GetAll().ToList(); - if (exercises.Count == 0) - { - Console.WriteLine("The database is empty"); - Console.ReadKey(); - } - else - { - int id = ExerciseController.GetIdOption(exercises); - var exercise = _exerciseRepository.GetExerciseById(id); - var updatedExercise = ExerciseController.GetUpdateInfo(exercise); - _exerciseRepository.Update(updatedExercise); - } - } - } -} diff --git a/Furiax.ExerciseTracker/ExerciseTracker/ExerciseTracker.csproj b/Furiax.ExerciseTracker/ExerciseTracker/ExerciseTracker.csproj deleted file mode 100644 index aa3211df..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/ExerciseTracker.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - diff --git a/Furiax.ExerciseTracker/ExerciseTracker/ExerciseTrackerContext.cs b/Furiax.ExerciseTracker/ExerciseTracker/ExerciseTrackerContext.cs deleted file mode 100644 index e0175d59..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/ExerciseTrackerContext.cs +++ /dev/null @@ -1,15 +0,0 @@ -using ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker -{ - public class ExerciseTrackerContext : DbContext - { - public ExerciseTrackerContext(DbContextOptionsoptions) - : base(options) - { - } - public DbSet Exercises { get; set; } - - } -} diff --git a/Furiax.ExerciseTracker/ExerciseTracker/Migrations/20230804204702_Initialize.Designer.cs b/Furiax.ExerciseTracker/ExerciseTracker/Migrations/20230804204702_Initialize.Designer.cs deleted file mode 100644 index c3b8aa59..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/Migrations/20230804204702_Initialize.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using ExerciseTracker; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - [Migration("20230804204702_Initialize")] - partial class Initialize - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.9") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Models.ExerciseModel", b => - { - b.Property("ExerciseId") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ExerciseId")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("ExerciseType") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ExerciseId"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Furiax.ExerciseTracker/ExerciseTracker/Migrations/20230804204702_Initialize.cs b/Furiax.ExerciseTracker/ExerciseTracker/Migrations/20230804204702_Initialize.cs deleted file mode 100644 index c6568e2e..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/Migrations/20230804204702_Initialize.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - /// - public partial class Initialize : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - ExerciseId = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - ExerciseType = table.Column(type: "nvarchar(max)", nullable: false), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.ExerciseId); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/Furiax.ExerciseTracker/ExerciseTracker/Migrations/ExerciseTrackerContextModelSnapshot.cs b/Furiax.ExerciseTracker/ExerciseTracker/Migrations/ExerciseTrackerContextModelSnapshot.cs deleted file mode 100644 index f0d0c8aa..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/Migrations/ExerciseTrackerContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using ExerciseTracker; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseTrackerContext))] - partial class ExerciseTrackerContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.9") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ExerciseTracker.Models.ExerciseModel", b => - { - b.Property("ExerciseId") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ExerciseId")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("ExerciseType") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ExerciseId"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Furiax.ExerciseTracker/ExerciseTracker/Models/ExerciseModel.cs b/Furiax.ExerciseTracker/ExerciseTracker/Models/ExerciseModel.cs deleted file mode 100644 index 9a3dfbe7..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/Models/ExerciseModel.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace ExerciseTracker.Models -{ - public class ExerciseModel - { - [Key] - public int ExerciseId { get; set; } - public string ExerciseType { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration => DateEnd - DateStart; - public string? Comments { get; set; } - } -} diff --git a/Furiax.ExerciseTracker/ExerciseTracker/Program.cs b/Furiax.ExerciseTracker/ExerciseTracker/Program.cs deleted file mode 100644 index d68867d7..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/Program.cs +++ /dev/null @@ -1,25 +0,0 @@ -using ExerciseTracker; -using ExerciseTracker.Repositories; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - - -var host = new HostBuilder() - .ConfigureServices((hostContext, services) => - { - services.AddDbContext(options => - options.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Database=ExerciseTracker")); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - }) - .Build(); - -using (var scope = host.Services.CreateScope()) -{ - var services = scope.ServiceProvider; - var context = services.GetRequiredService(); - var exerciseController = services.GetRequiredService(); - exerciseController.MainMenu(); -} \ No newline at end of file diff --git a/Furiax.ExerciseTracker/ExerciseTracker/Repositories/ExerciseRepository.cs b/Furiax.ExerciseTracker/ExerciseTracker/Repositories/ExerciseRepository.cs deleted file mode 100644 index 0a2122e5..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,45 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Repositories -{ - public class ExerciseRepository : IExerciseRepository - { - private readonly ExerciseTrackerContext _context; - public ExerciseRepository(ExerciseTrackerContext context) - { - _context = context; - } - - public void Add(ExerciseModel exercise) - { - _context.Add(exercise); - _context.SaveChanges(); - } - - public void Delete(int id) - { - var exerciseInDb = _context.Exercises.Find(id); - if (exerciseInDb != null) - { - _context.Remove(exerciseInDb); - _context.SaveChanges(); - } - } - - public IEnumerable GetAll() - { - return _context.Set().ToList(); - } - - public ExerciseModel GetExerciseById(int id) - { - return _context.Find(id); - } - - public void Update(ExerciseModel exercise) - { - _context.Update(exercise); - _context.SaveChanges(); - } - } -} diff --git a/Furiax.ExerciseTracker/ExerciseTracker/Repositories/IExerciseRepository.cs b/Furiax.ExerciseTracker/ExerciseTracker/Repositories/IExerciseRepository.cs deleted file mode 100644 index b50652ef..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Repositories -{ - public interface IExerciseRepository - { - public IEnumerable GetAll(); - public void Add(ExerciseModel exercise); - public void Update(ExerciseModel exercise); - public void Delete(int id); - public ExerciseModel GetExerciseById(int id); - } -} diff --git a/Furiax.ExerciseTracker/ExerciseTracker/UserInput.cs b/Furiax.ExerciseTracker/ExerciseTracker/UserInput.cs deleted file mode 100644 index a7f3f536..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/UserInput.cs +++ /dev/null @@ -1,73 +0,0 @@ -using ExerciseTracker.Models; -using Spectre.Console; - -namespace ExerciseTracker -{ - public class UserInput - { - public static ExerciseModel GetExerciseInfo() - { - var exercise = new ExerciseModel(); - string type = AnsiConsole.Ask("What exercise did you do ? ").Trim(); - - DateTime start; - do - { - start = AnsiConsole.Ask("When did the exercise start ? format(yyyy-mm-dd hh:mm): "); - } while (!Validation.IsDateNotInFuture(start)); - - DateTime end; - do - { - end = AnsiConsole.Ask("When did the exercise end ? format (yyyy-mm-dd hh:mm): "); - } while (!Validation.IsEndDateGreaterThanStartDate(start,end)); - - string comment = AnsiConsole.Prompt(new TextPrompt("Add a comment about the exercise (optional): ") - .AllowEmpty()); - - exercise.ExerciseType = type; - exercise.DateStart = start; - exercise.DateEnd = end; - exercise.Comments = comment; - - return exercise; - } - - internal static int GetIdOfExercise(List exercises) - { - var exerciseArray = exercises.Select(x => $"{x.ExerciseId} - {x.ExerciseType}").ToArray(); - var option = AnsiConsole.Prompt(new SelectionPrompt() - .Title("Select the desired exercise:") - .AddChoices(exerciseArray)); - var exerciseId = option.Split(" - ")[0]; - int id = exercises.Single(x => x.ExerciseId.ToString() == exerciseId).ExerciseId; - return id; - } - - internal static ExerciseModel GetUpdatedInfo(ExerciseModel exercise) - { - exercise.ExerciseType = AnsiConsole.Confirm($"Do you want to update the exercise name ({exercise.ExerciseType}) ?") ? - AnsiConsole.Ask("Enter a new name: ") - : exercise.ExerciseType; - do { - do - { - exercise.DateStart = AnsiConsole.Confirm($"Do you want to edit the start time ({exercise.DateStart}) ?") ? - AnsiConsole.Ask("Enter the new start time: ") - : exercise.DateStart; - } while (!Validation.IsDateNotInFuture(exercise.DateStart)); - - do - { - exercise.DateEnd = AnsiConsole.Confirm($"Do you want to edit the end time ({exercise.DateEnd})?") ? - AnsiConsole.Ask("Enter the new end time: ") - : exercise.DateEnd; - } while (!Validation.IsDateNotInFuture(exercise.DateEnd)); - } while (!Validation.IsEndDateGreaterThanStartDate(exercise.DateStart, exercise.DateEnd)); - exercise.Comments = AnsiConsole.Confirm($"Do you want to add or change the comment ({exercise.Comments}) ?") ? - AnsiConsole.Prompt(new TextPrompt("Enter comment: ").AllowEmpty()) - : exercise.Comments; - return exercise; - } - } -} diff --git a/Furiax.ExerciseTracker/ExerciseTracker/Validation.cs b/Furiax.ExerciseTracker/ExerciseTracker/Validation.cs deleted file mode 100644 index 0872cf69..00000000 --- a/Furiax.ExerciseTracker/ExerciseTracker/Validation.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace ExerciseTracker -{ - internal class Validation - { - internal static bool IsDateNotInFuture(DateTime date) - { - if (date < DateTime.Now) - return true; - else - { - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("Date can't be in the future"); - Console.ForegroundColor = ConsoleColor.White; - return false; - } - } - internal static bool IsEndDateGreaterThanStartDate(DateTime startDate, DateTime endDate) - { - if (startDate < endDate && endDate < DateTime.Now) - return true; - else if (startDate > endDate) - { - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("The end time must be greater then the start time"); - Console.ForegroundColor = ConsoleColor.White; - return false; - } - else - { - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("Date can't be in the future"); - Console.ForegroundColor = ConsoleColor.White; - return false; - } - - } - } -} diff --git a/Furiax.ExerciseTracker/Furiax.ExerciseTracker.sln b/Furiax.ExerciseTracker/Furiax.ExerciseTracker.sln deleted file mode 100644 index 9c4370ce..00000000 --- a/Furiax.ExerciseTracker/Furiax.ExerciseTracker.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.6.33712.159 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker", "ExerciseTracker\ExerciseTracker.csproj", "{FC1E7D92-2B1A-4B92-8C4A-5A04F56937B7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {FC1E7D92-2B1A-4B92-8C4A-5A04F56937B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FC1E7D92-2B1A-4B92-8C4A-5A04F56937B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FC1E7D92-2B1A-4B92-8C4A-5A04F56937B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FC1E7D92-2B1A-4B92-8C4A-5A04F56937B7}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {CD48064C-2A70-45FD-AFC6-9BD59C86B09D} - EndGlobalSection -EndGlobal diff --git a/Furiax.ExerciseTracker/ReadMe.md b/Furiax.ExerciseTracker/ReadMe.md deleted file mode 100644 index 47dd5d40..00000000 --- a/Furiax.ExerciseTracker/ReadMe.md +++ /dev/null @@ -1,26 +0,0 @@ -

ExerciseTracker

- -This application is a part of the www.thecsharpacademy.com roadmap.
-Goal of the website is to become a (better) C# and .Net developper.
-
-

About the project:

-In this project we learned about the Repository Pattern and how to apply it.
-We needed to create a simple application that keeps track of exercises.
-
-

Requirements:

--The model should exists out of the following fields: Id INT, DateStart DateTime, DateEnd DateTime, Duration TimeSpan, Comments string.
--The project needs atleast the folliwing pages: UserInput, ExerciseController, ExerciseService (where business logic will be handled) and ExerciseRepository.
--Use EF or raw SQL, I chose to use EF.
--Use Sqlite or SqlServer, I chose to use SQLServer.
--Extra challenges: create a new branch and use either Dapper or ADO instead of Entity Framework, I chose Dapper. -
-

Lessons learned:

-- First time using repositories
-- Learned to use Dapper for the extra challenge.
-- The extra challenged showed how easy it is to change your code when using the Repository Pattern.
-
-

Resources used:

-- The documentation at the assignment page and the discord channel of www.thecsharpacademy.com
-- Microsoft docs
-- Various google and youtube searches about Repository Patterns
-- Used ChatGPT to assist me with some things to get a better understanding.
diff --git a/Gautatyr.ExerciseTracker/.gitattributes b/Gautatyr.ExerciseTracker/.gitattributes deleted file mode 100644 index 1ff0c423..00000000 --- a/Gautatyr.ExerciseTracker/.gitattributes +++ /dev/null @@ -1,63 +0,0 @@ -############################################################################### -# Set default behavior to automatically normalize line endings. -############################################################################### -* text=auto - -############################################################################### -# Set default behavior for command prompt diff. -# -# This is need for earlier builds of msysgit that does not have it on by -# default for csharp files. -# Note: This is only used by command line -############################################################################### -#*.cs diff=csharp - -############################################################################### -# Set the merge driver for project and solution files -# -# Merging from the command prompt will add diff markers to the files if there -# are conflicts (Merging from VS is not affected by the settings below, in VS -# the diff markers are never inserted). Diff markers may cause the following -# file extensions to fail to load in VS. An alternative would be to treat -# these files as binary and thus will always conflict and require user -# intervention with every merge. To do so, just uncomment the entries below -############################################################################### -#*.sln merge=binary -#*.csproj merge=binary -#*.vbproj merge=binary -#*.vcxproj merge=binary -#*.vcproj merge=binary -#*.dbproj merge=binary -#*.fsproj merge=binary -#*.lsproj merge=binary -#*.wixproj merge=binary -#*.modelproj merge=binary -#*.sqlproj merge=binary -#*.wwaproj merge=binary - -############################################################################### -# behavior for image files -# -# image files are treated as binary by default. -############################################################################### -#*.jpg binary -#*.png binary -#*.gif binary - -############################################################################### -# diff behavior for common document formats -# -# Convert binary document formats to text before diffing them. This feature -# is only available from the command line. Turn it on by uncommenting the -# entries below. -############################################################################### -#*.doc diff=astextplain -#*.DOC diff=astextplain -#*.docx diff=astextplain -#*.DOCX diff=astextplain -#*.dot diff=astextplain -#*.DOT diff=astextplain -#*.pdf diff=astextplain -#*.PDF diff=astextplain -#*.rtf diff=astextplain -#*.RTF diff=astextplain diff --git a/Gautatyr.ExerciseTracker/.gitignore b/Gautatyr.ExerciseTracker/.gitignore deleted file mode 100644 index 9491a2fd..00000000 --- a/Gautatyr.ExerciseTracker/.gitignore +++ /dev/null @@ -1,363 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Oo]ut/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker.sln b/Gautatyr.ExerciseTracker/ExerciseTracker.sln deleted file mode 100644 index 0c74b647..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.5.33516.290 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker", "ExerciseTracker\ExerciseTracker.csproj", "{D2CAFD17-E149-42EA-8F4A-0A6BE6940E19}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D2CAFD17-E149-42EA-8F4A-0A6BE6940E19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D2CAFD17-E149-42EA-8F4A-0A6BE6940E19}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D2CAFD17-E149-42EA-8F4A-0A6BE6940E19}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D2CAFD17-E149-42EA-8F4A-0A6BE6940E19}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {D93EFCA8-0CC2-4DF5-936B-D1EBE21D56C8} - EndGlobalSection -EndGlobal diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/Controllers/IRunController.cs b/Gautatyr.ExerciseTracker/ExerciseTracker/Controllers/IRunController.cs deleted file mode 100644 index 6d358bc0..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/Controllers/IRunController.cs +++ /dev/null @@ -1,16 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Controllers; - -public interface IRunController -{ - Task> GetAllRunsAsync(); - - Task GetRunByIdAsync(int id); - - Task CreateRunAsync(Run run); - - Task UpdateRunAsync(Run run); - - Task DeleteRunAsync(Run run); -} \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/Controllers/RunController.cs b/Gautatyr.ExerciseTracker/ExerciseTracker/Controllers/RunController.cs deleted file mode 100644 index 8c36d3cb..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/Controllers/RunController.cs +++ /dev/null @@ -1,39 +0,0 @@ -using ExerciseTracker.Models; -using ExerciseTracker.Repositories; - -namespace ExerciseTracker.Controllers; - -public class RunController : IRunController -{ - private readonly IRunRepository _runRepository; - - public RunController(IRunRepository runRepository) - { - _runRepository = runRepository; - } - - public async Task GetRunByIdAsync(int id) - { - return await _runRepository.GetRunByIdAsync(id); - } - - public async Task CreateRunAsync(Run run) - { - return await _runRepository.AddRunAsync(run); - } - - public async Task> GetAllRunsAsync() - { - return await _runRepository.GetAllRunsAsync(); - } - - public async Task UpdateRunAsync(Run run) - { - return await _runRepository.UpdateRunAsync(run); - } - - public async Task DeleteRunAsync(Run run) - { - return await _runRepository.DeleteRunAsync(run); - } -} \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/DataValidation.cs b/Gautatyr.ExerciseTracker/ExerciseTracker/DataValidation.cs deleted file mode 100644 index f79f156f..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/DataValidation.cs +++ /dev/null @@ -1,58 +0,0 @@ -using ExerciseTracker.Controllers; - -namespace ExerciseTracker; - -public static class DataValidation -{ - public static DateTime GetDateTimeInput() - { - var input = Console.ReadLine(); - - while (!DateTime.TryParse(input, out _)) - { - Console.WriteLine("\nError: Invalid input, try again\n"); - input = Console.ReadLine(); - } - - return DateTime.Parse(input); - } - - public static double GetNumberInput() - { - var input = Console.ReadLine(); - - while (!double.TryParse(input, out _)) - { - Console.WriteLine("\nError: Invalid input, try again\n"); - input = Console.ReadLine(); - } - - return double.Parse(input); - } - - public static int GetIntInput() - { - var input = Console.ReadLine(); - - while (!int.TryParse(input, out _)) - { - Console.WriteLine("\nError: Invalid input, try again\n"); - input = Console.ReadLine(); - } - - return int.Parse(input); - } - - public static int GetRunIdInput(IRunController controller) - { - var id = GetIntInput(); - - while (controller.GetRunByIdAsync(id).Result == null) - { - Console.WriteLine("\nError: Invalid input, try again\n"); - id = GetIntInput(); - } - - return id; - } -} \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/ExerciseTracker.csproj b/Gautatyr.ExerciseTracker/ExerciseTracker/ExerciseTracker.csproj deleted file mode 100644 index 8988bd2e..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/ExerciseTracker.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - - - diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/Models/ExerciseTrackerContext.cs b/Gautatyr.ExerciseTracker/ExerciseTracker/Models/ExerciseTrackerContext.cs deleted file mode 100644 index f09d309e..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/Models/ExerciseTrackerContext.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.Models; - -public class ExerciseTrackerContext : DbContext -{ - public ExerciseTrackerContext() - { - } - - public DbSet Run { get; set; } = null!; - - protected override void OnConfiguring(DbContextOptionsBuilder options) - => options.UseInMemoryDatabase("ExerciseTracker.db"); -} \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/Models/Run.cs b/Gautatyr.ExerciseTracker/ExerciseTracker/Models/Run.cs deleted file mode 100644 index 01502a36..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/Models/Run.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace ExerciseTracker.Models; - -public class Run -{ - public int Id { get; set; } - public DateTime Start { get; set; } - public DateTime End { get; set; } - public TimeSpan Duration { get; set; } - public string? Distance { get; set; } - public string? Comment { get; set; } - - public void SetDuration() - { - Duration = End - Start; - } -} \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/Program.cs b/Gautatyr.ExerciseTracker/ExerciseTracker/Program.cs deleted file mode 100644 index 9951baaf..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/Program.cs +++ /dev/null @@ -1,25 +0,0 @@ -using ExerciseTracker; -using ExerciseTracker.Controllers; -using ExerciseTracker.Models; -using ExerciseTracker.Repositories; - -ExerciseTrackerContext context = new ExerciseTrackerContext(); -RunRepository runRepository = new RunRepository(context); -RunController runController = new(runRepository); - -//For testing purposes -Run newRun = new() -{ - Start = DateTime.Now, - End = DateTime.Now, - Distance = "15", - Comment = "This is a test" -}; - -newRun.SetDuration(); - -await runController.CreateRunAsync(newRun); - -UserInput userInput = new(runController); - -await userInput.MainMenuAsync(); \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/IRepository.cs b/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/IRepository.cs deleted file mode 100644 index 25ef7447..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/IRepository.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.Repositories; - -public interface IRepository where TEntity : class, new() -{ - IQueryable GetAll(); - - Task AddAsync(TEntity entity); - - Task UpdateAsync(TEntity entity); -} \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/IRunRepository.cs b/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/IRunRepository.cs deleted file mode 100644 index b149d1c4..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/IRunRepository.cs +++ /dev/null @@ -1,16 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Repositories; - -public interface IRunRepository : IRepository -{ - Task GetRunByIdAsync(int id); - - Task> GetAllRunsAsync(); - - Task UpdateRunAsync(Run run); - - Task DeleteRunAsync(Run run); - - Task AddRunAsync(Run run); -} \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/Repository.cs b/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/Repository.cs deleted file mode 100644 index 0d1dd495..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/Repository.cs +++ /dev/null @@ -1,85 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Repositories; - -public class Repository : IRepository where TEntity : class, new() -{ - protected readonly ExerciseTrackerContext ExerciseTrackerContext; - - public Repository(ExerciseTrackerContext exerciseTrackerContext) - { - ExerciseTrackerContext = exerciseTrackerContext; - } - - public IQueryable GetAll() - { - try - { - return ExerciseTrackerContext.Set(); - } - catch (Exception ex) - { - throw new Exception($"\nCouldn't retrieve entities: {ex.Message}"); - } - } - - public async Task AddAsync(TEntity entity) - { - if (entity == null) - { - throw new ArgumentNullException($"{nameof(AddAsync)} entity must not be null"); - } - - try - { - await ExerciseTrackerContext.AddAsync(entity); - await ExerciseTrackerContext.SaveChangesAsync(); - - return entity; - } - catch (Exception ex) - { - throw new Exception($"{nameof(entity)} could not be saved: {ex.Message}"); - } - } - - public async Task UpdateAsync(TEntity entity) - { - if (entity == null) - { - throw new ArgumentNullException($"{nameof(UpdateAsync)} entity must not be null"); - } - - try - { - ExerciseTrackerContext.Update(entity); - await ExerciseTrackerContext.SaveChangesAsync(); - - return entity; - } - catch (Exception ex) - { - throw new Exception($"{nameof(entity)} could not be updated: {ex.Message}"); - } - } - - public async Task DeleteAsync(TEntity entity) - { - if (entity == null) - { - throw new ArgumentNullException($"{nameof(DeleteAsync)} entity must not be null"); - } - - try - { - ExerciseTrackerContext.Remove(entity); - await ExerciseTrackerContext.SaveChangesAsync(); - - return entity; - } - catch (Exception ex) - { - throw new Exception($"{nameof(entity)} could not be updated: {ex.Message}"); - } - } -} \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/RunRepository.cs b/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/RunRepository.cs deleted file mode 100644 index 52a4482e..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/Repositories/RunRepository.cs +++ /dev/null @@ -1,39 +0,0 @@ -using ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.Repositories; - -public class RunRepository : Repository, IRunRepository -{ - private readonly ExerciseTrackerContext _context; - - public RunRepository(ExerciseTrackerContext exerciseTrackerContext) : base(exerciseTrackerContext) - { - _context = exerciseTrackerContext; - } - - public async Task GetRunByIdAsync(int id) - { - return await _context.Run.FindAsync(id); - } - - public async Task> GetAllRunsAsync() - { - return await _context.Run.ToListAsync(); - } - - public async Task UpdateRunAsync(Run run) - { - return await UpdateAsync(run); - } - - public async Task DeleteRunAsync(Run run) - { - return await DeleteAsync(run); - } - - public async Task AddRunAsync(Run run) - { - return await AddAsync(run); - } -} \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/ExerciseTracker/UserInput.cs b/Gautatyr.ExerciseTracker/ExerciseTracker/UserInput.cs deleted file mode 100644 index 3696a78b..00000000 --- a/Gautatyr.ExerciseTracker/ExerciseTracker/UserInput.cs +++ /dev/null @@ -1,145 +0,0 @@ -using ConsoleTableExt; -using ExerciseTracker.Controllers; -using ExerciseTracker.Models; -using static ExerciseTracker.DataValidation; - -namespace ExerciseTracker; - -public class UserInput -{ - private readonly IRunController _controller; - private string error = string.Empty; - - public UserInput(IRunController runController) - { - _controller = runController; - } - - public async Task MainMenuAsync() - { - var input = string.Empty; - - do - { - Console.Clear(); - - DisplayRunTable(_controller.GetAllRunsAsync().Result); - - Console.WriteLine($"\n1 - Add Run\n"); - Console.WriteLine($"\n2 - Update Run\n"); - Console.WriteLine($"\n3 - Delete Run\n"); - Console.WriteLine($"\n0 - Close Application\n"); - - if (error != string.Empty) Console.Write(error); - - input = Console.ReadLine(); - - switch (input) - { - case "1": - await AddRun(); - break; - - case "2": - await UpdateRun(); - break; - - case "3": - Console.WriteLine("\nType the id of the run you want to Delete\n"); - var id = GetRunIdInput(_controller); - await _controller.DeleteRunAsync(_controller.GetRunByIdAsync(id).Result); - break; - - case "0": - Environment.Exit(0); - break; - - default: - error = "\nWrong Input: Type a number between 0 to 3"; - break; - } - } while (input != "0"); - } - - private async Task AddRun() - { - Run newRun = new(); - await _controller.CreateRunAsync(SetupRun(newRun)); - } - - private async Task UpdateRun() - { - Console.Clear(); - - DisplayRunTable(_controller.GetAllRunsAsync().Result); - - Console.WriteLine("Type the id of the run you wish to Update"); - - var id = GetRunIdInput(_controller); - - var run = _controller.GetRunByIdAsync(id).Result; - - SetupRun(run); - - await _controller.UpdateRunAsync(run); - } - - private static Run SetupRun(Run run) - { - Console.Clear(); - - Console.WriteLine("\nPlease input the run's starting date and time (dd/mm/yy HH:mm)\n"); - var start = GetDateTimeInput(); - Console.WriteLine("\nPlease input the run's ending date and time (dd/mm/yy HH:mm)\n"); - var end = GetDateTimeInput(); - while (end < start) - { - Console.WriteLine("\nThe end date canno't be before the start date, enter another end date\n"); - end = GetDateTimeInput(); - } - Console.WriteLine("\nPlease input the run's distance in km\n"); - var distance = GetNumberInput(); - Console.WriteLine("\nType in any comment you have on the run, or leave empty\n"); - var comment = Console.ReadLine(); - - run.Start = start; - run.End = end; - run.Distance = $"{distance}km"; - run.Comment = comment; - run.SetDuration(); - - return run; - } - - private static void DisplayRunTable(List list) - { - ConsoleTableBuilder - .From(list) - .WithTitle("EXERCISE TRACKER", ConsoleColor.Yellow, ConsoleColor.DarkGray) - .WithColumn("ID", "Starting Time", "Ending Time", "Run Duration", "Distance", "Comment") - .WithCharMapDefinition(new Dictionary { - {CharMapPositions.BottomLeft, '=' }, - {CharMapPositions.BottomCenter, '=' }, - {CharMapPositions.BottomRight, '=' }, - {CharMapPositions.BorderTop, '=' }, - {CharMapPositions.BorderBottom, '=' }, - {CharMapPositions.BorderLeft, '|' }, - {CharMapPositions.BorderRight, '|' }, - {CharMapPositions.DividerY, '|' }, - }) - .WithHeaderCharMapDefinition(new Dictionary { - {HeaderCharMapPositions.TopLeft, '=' }, - {HeaderCharMapPositions.TopCenter, '=' }, - {HeaderCharMapPositions.TopRight, '=' }, - {HeaderCharMapPositions.BottomLeft, '|' }, - {HeaderCharMapPositions.BottomCenter, '-' }, - {HeaderCharMapPositions.BottomRight, '|' }, - {HeaderCharMapPositions.Divider, '|' }, - {HeaderCharMapPositions.BorderTop, '=' }, - {HeaderCharMapPositions.BorderBottom, '-' }, - {HeaderCharMapPositions.BorderLeft, '|' }, - {HeaderCharMapPositions.BorderRight, '|' }, - }) - .ExportAndWriteLine(); - } -} \ No newline at end of file diff --git a/Gautatyr.ExerciseTracker/README.md b/Gautatyr.ExerciseTracker/README.md deleted file mode 100644 index 75fac8ed..00000000 --- a/Gautatyr.ExerciseTracker/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# ExerciseTracker -Console application allowing the user to save running sessions, to create an history of runs. -This project was made to experiment with the repository pattern. - -# Features -## In memory database -The goal of this project being to experiment with the repository pattern, I decided to go for an -in memory database to be able to focus on understanding the pattern. - -## Console Based UI -- Clean table representation made possible thanks to [ConsoleTableExt](https://github.com/minhhungit/ConsoleTableExt). - -# Resources -- Microsoft documentation -- [ConsoleTableExt](https://github.com/minhhungit/ConsoleTableExt) -- [The C# Academy](https://www.thecsharpacademy.com/) for general guidance -- StackOverflow -- [Repository Pattern in .NET Core](https://www.programmingwithwolfgang.com/repository-pattern-net-core/) by Wolfgang Ofner diff --git a/Kmakai.ExcerciseTracker/Controllers/ExerciseController.cs b/Kmakai.ExcerciseTracker/Controllers/ExerciseController.cs deleted file mode 100644 index f3992ea2..00000000 --- a/Kmakai.ExcerciseTracker/Controllers/ExerciseController.cs +++ /dev/null @@ -1,99 +0,0 @@ -using Kmakai.ExerciseTracker.Models; -using Kmakai.ExerciseTracker.Services; -using Spectre.Console; - -namespace Kmakai.ExerciseTracker.Controllers; - -public class ExerciseController : IExerciseController -{ - private readonly IExerciseService ExerciseService; - - public ExerciseController(IExerciseService exerciseService) - { - ExerciseService = exerciseService; - } - - public void GetExercises() - { - var exercises = ExerciseService.GetAllAsync().Result.ToList(); - - Display.DisplayTable(exercises); - Console.WriteLine("Press any key to continue"); - Console.ReadKey(); - - } - - public void AddExercise() - { - Exercise exercise = new(); - - Console.WriteLine("Enter the date and time you started"); - var Start = UserInput.GetDateAndTime(); - - Console.WriteLine("Enter the date and time you finished"); - var End = UserInput.GetDateAndTime(); - - var comment = UserInput.GetComment(); - - - exercise.DateStart = Start; - exercise.DateEnd = End; - exercise.Comments = comment; - - ExerciseService.AddAsync(exercise).Wait(); - - Console.WriteLine("Exercise added successfully"); - GetExercises(); - - } - - public void UpdateExercise() - { - var exercises = ExerciseService.GetAllAsync().Result.ToList(); - Display.DisplayTable(exercises); - - Console.WriteLine("Enter the id of the exercise you want to update"); - var id = UserInput.GetId(exercises); - - var exercise = exercises.FirstOrDefault(x => x.Id == id); - - if (exercise == null) { Console.WriteLine("Exercise not found"); return; } - - exercise.DateStart = AnsiConsole.Confirm("Would you like to update startTime? ") ? UserInput.GetDateAndTime() : exercise.DateStart; - exercise.DateEnd = AnsiConsole.Confirm("Would you like to update endTime? ") ? UserInput.GetDateAndTime() : exercise.DateEnd; - exercise.Comments = AnsiConsole.Confirm("Would you like to update comments? ") ? UserInput.GetComment() : exercise.Comments; - - var updatedExercise = ExerciseService.UpdateAsync(exercise).Result; - - Console.Clear(); - - Console.WriteLine("Exercise updated successfully"); - Display.DisplayExercise(updatedExercise); - - Console.WriteLine("Press any key to continue"); - Console.ReadKey(); - - } - - public void DeleteExercise() - { - var exercises = ExerciseService.GetAllAsync().Result.ToList(); - Display.DisplayTable(exercises); - - Console.WriteLine("Enter the id of the exercise you want to delete"); - var id = UserInput.GetId(exercises); - - var exercise = exercises.FirstOrDefault(x => x.Id == id); - - if (exercise == null) { Console.WriteLine("Exercise not found"); return; } - - ExerciseService.DeleteAsync(exercise.Id).Wait(); - - Console.Clear(); - - Console.WriteLine("Exercise deleted successfully"); - GetExercises(); - - } -} - \ No newline at end of file diff --git a/Kmakai.ExcerciseTracker/Controllers/IExerciseController.cs b/Kmakai.ExcerciseTracker/Controllers/IExerciseController.cs deleted file mode 100644 index a49031cb..00000000 --- a/Kmakai.ExcerciseTracker/Controllers/IExerciseController.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Kmakai.ExerciseTracker.Controllers -{ - public interface IExerciseController - { - void AddExercise(); - void DeleteExercise(); - void GetExercises(); - void UpdateExercise(); - } -} \ No newline at end of file diff --git a/Kmakai.ExcerciseTracker/DataAccess/ExerciseContext.cs b/Kmakai.ExcerciseTracker/DataAccess/ExerciseContext.cs deleted file mode 100644 index 9e0236a0..00000000 --- a/Kmakai.ExcerciseTracker/DataAccess/ExerciseContext.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Kmakai.ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; - - -namespace Kmakai.ExerciseTracker.DataAccess; - -public class ExerciseContext: DbContext -{ - public ExerciseContext(DbContextOptions options) - : base(options) - { - } - - public DbSet Exercises { get; set; } = null!; - -} diff --git a/Kmakai.ExcerciseTracker/Display.cs b/Kmakai.ExcerciseTracker/Display.cs deleted file mode 100644 index 6367c91e..00000000 --- a/Kmakai.ExcerciseTracker/Display.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Kmakai.ExerciseTracker.Models; -using Spectre.Console; - -namespace Kmakai.ExerciseTracker; - -public class Display -{ - public static void DisplayTable(List list) - { - var table = new Table(); - - table.AddColumn("Id"); - table.AddColumn("Start"); - table.AddColumn("End"); - table.AddColumn("Duration"); - table.AddColumn("Comments"); - - foreach (var item in list) - { - table.AddRow(item.Id.ToString(), item.DateStart.ToString(), item.DateEnd.ToString(), item.Duration.ToString("hh':'mm"), item.Comments!); - } - - AnsiConsole.Write(table); - } - - public static void DisplayExercise(Exercise exercise) - { - var table = new Table(); - - table.AddColumn("Id"); - table.AddColumn("Start"); - table.AddColumn("End"); - table.AddColumn("Duration"); - table.AddColumn("Comments"); - - table.AddRow(exercise.Id.ToString(), exercise.DateStart.ToString(), exercise.DateEnd.ToString(), exercise.Duration.ToString("hh':'mm"), exercise.Comments!); - - AnsiConsole.Write(table); - - } -} diff --git a/Kmakai.ExcerciseTracker/Kmakai.ExerciseTracker.csproj b/Kmakai.ExcerciseTracker/Kmakai.ExerciseTracker.csproj deleted file mode 100644 index aa3211df..00000000 --- a/Kmakai.ExcerciseTracker/Kmakai.ExerciseTracker.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - diff --git a/Kmakai.ExcerciseTracker/Models/Exercise.cs b/Kmakai.ExcerciseTracker/Models/Exercise.cs deleted file mode 100644 index ea0bafe2..00000000 --- a/Kmakai.ExcerciseTracker/Models/Exercise.cs +++ /dev/null @@ -1,18 +0,0 @@ - - -using System.ComponentModel.DataAnnotations; - -namespace Kmakai.ExerciseTracker.Models; - -public class Exercise -{ - [Key] - public int Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration - { - get { return DateEnd - DateStart; } - } - public string? Comments { get; set; } -} diff --git a/Kmakai.ExcerciseTracker/Program.cs b/Kmakai.ExcerciseTracker/Program.cs deleted file mode 100644 index 3ba66fa2..00000000 --- a/Kmakai.ExcerciseTracker/Program.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.Extensions.Hosting; -using Kmakai.ExerciseTracker.DataAccess; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.EntityFrameworkCore; -using Kmakai.ExerciseTracker.Controllers; -using Kmakai.ExerciseTracker.Repositories; -using Kmakai.ExerciseTracker.Services; -using Microsoft.Extensions.Logging; -using Kmakai.ExerciseTracker; - -var connectionString = "Server=.;Database=ExerciseTracker;TrustServerCertificate=true;Trusted_Connection=True"; -IHost host = Host.CreateDefaultBuilder() - .ConfigureServices((services) => - { - services.AddDbContext(options => options.UseSqlServer(connectionString)); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - }).ConfigureLogging(logging => - { - logging.AddFilter("Microsoft.EntityFrameworkCore.Database.Command", LogLevel.Warning); - }).UseConsoleLifetime() - .Build(); - -var services = host.Services; - -var tracker = services.GetRequiredService(); -tracker.Run(); \ No newline at end of file diff --git a/Kmakai.ExcerciseTracker/Repositories/ExerciseRepository.cs b/Kmakai.ExcerciseTracker/Repositories/ExerciseRepository.cs deleted file mode 100644 index a6b30960..00000000 --- a/Kmakai.ExcerciseTracker/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,82 +0,0 @@ - - -using Kmakai.ExerciseTracker.DataAccess; -using Kmakai.ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; - -namespace Kmakai.ExerciseTracker.Repositories; - -public class ExerciseRepository:IRepository, IExerciseRepository -{ - - private readonly ExerciseContext Context; - - public ExerciseRepository(ExerciseContext context) - { - Context = context; - } - - public async Task GetAsync(int id) - { - return await Context.Exercises.FindAsync(id) ?? new Exercise(); - } - - public async Task> GetAllAsync() - { - return await Context.Exercises.ToListAsync(); - } - - public async Task AddAsync(Exercise entity) - { - Context.Exercises.Add(entity); - await Context.SaveChangesAsync(); - return entity; - } - - public async Task UpdateAsync(Exercise entity) - { - Context.Exercises.Update(entity); - await Context.SaveChangesAsync(); - return entity; - } - - public async Task DeleteAsync(int id) - { - var entity = await Context.Exercises.FindAsync(id); - Context.Exercises.Remove(entity!); - await Context.SaveChangesAsync(); - return entity!; - } - - public Exercise Get(int id) - { - return Context.Exercises.Find(id) ?? new Exercise(); - } - - public IEnumerable GetAll() - { - return Context.Exercises.ToList(); - } - - public Exercise Add(Exercise entity) - { - Context.Exercises.Add(entity); - Context.SaveChanges(); - return entity; - } - - public Exercise Update(Exercise entity) - { - Context.Exercises.Update(entity); - Context.SaveChanges(); - return entity; - } - - public Exercise Delete(int id) - { - var entity = Context.Exercises.Find(id); - Context.Exercises.Remove(entity!); - Context.SaveChanges(); - return entity!; - } -} diff --git a/Kmakai.ExcerciseTracker/Repositories/IExerciseRepository.cs b/Kmakai.ExcerciseTracker/Repositories/IExerciseRepository.cs deleted file mode 100644 index d6386911..00000000 --- a/Kmakai.ExcerciseTracker/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Kmakai.ExerciseTracker.Models; - -namespace Kmakai.ExerciseTracker.Repositories; - -public interface IExerciseRepository: IRepository -{ - Exercise Get(int id); - - IEnumerable GetAll(); - - Exercise Add(Exercise entity); - - Exercise Update(Exercise entity); - - Exercise Delete(int id); -} diff --git a/Kmakai.ExcerciseTracker/Repositories/IRepository.cs b/Kmakai.ExcerciseTracker/Repositories/IRepository.cs deleted file mode 100644 index a8d96039..00000000 --- a/Kmakai.ExcerciseTracker/Repositories/IRepository.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Kmakai.ExerciseTracker.Repositories; - -public interface IRepository where T : class -{ - public Task GetAsync(int id); - public Task> GetAllAsync(); - public Task AddAsync(T entity); - public Task UpdateAsync(T entity); - public Task DeleteAsync(int id); -} diff --git a/Kmakai.ExcerciseTracker/Services/ExerciseService.cs b/Kmakai.ExcerciseTracker/Services/ExerciseService.cs deleted file mode 100644 index c654ec37..00000000 --- a/Kmakai.ExcerciseTracker/Services/ExerciseService.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Kmakai.ExerciseTracker.Models; -using Kmakai.ExerciseTracker.Repositories; - -namespace Kmakai.ExerciseTracker.Services; - -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository ExerciseRepository; - - public ExerciseService(IExerciseRepository exerciseRepository) - { - ExerciseRepository = exerciseRepository; - } - - public async Task GetAsync(int id) - { - return await ExerciseRepository.GetAsync(id); - } - - public async Task> GetAllAsync() - { - return await ExerciseRepository.GetAllAsync(); - } - - public async Task AddAsync(Exercise entity) - { - return await ExerciseRepository.AddAsync(entity); - } - - public async Task UpdateAsync(Exercise entity) - { - return await ExerciseRepository.UpdateAsync(entity); - - } - - public async Task DeleteAsync(int id) - { - return await ExerciseRepository.DeleteAsync(id); - } - -} diff --git a/Kmakai.ExcerciseTracker/Services/IExerciseService.cs b/Kmakai.ExcerciseTracker/Services/IExerciseService.cs deleted file mode 100644 index 01d4219c..00000000 --- a/Kmakai.ExcerciseTracker/Services/IExerciseService.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Kmakai.ExerciseTracker.Models; - -namespace Kmakai.ExerciseTracker.Services; - -public interface IExerciseService -{ - Task AddAsync(Exercise entity); - Task DeleteAsync(int id); - Task> GetAllAsync(); - Task GetAsync(int id); - Task UpdateAsync(Exercise entity); -} \ No newline at end of file diff --git a/Kmakai.ExcerciseTracker/Tracker.cs b/Kmakai.ExcerciseTracker/Tracker.cs deleted file mode 100644 index 73c3bfdf..00000000 --- a/Kmakai.ExcerciseTracker/Tracker.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Kmakai.ExerciseTracker.Controllers; -using Spectre.Console; - -namespace Kmakai.ExerciseTracker; - -public class Tracker -{ - private readonly IExerciseController ExerciseController; - - public Tracker(IExerciseController exerciseController) - { - ExerciseController = exerciseController; - } - - public void Run() - { - while (true) - { - AnsiConsole.Clear(); - var choice = UserInput.GetChoice(); - - switch (choice) - { - case 1: - ExerciseController.AddExercise(); - break; - case 2: - ExerciseController.UpdateExercise(); - break; - case 3: - ExerciseController.DeleteExercise(); - break; - case 4: - ExerciseController.GetExercises(); - break; - case 0: - Environment.Exit(0); - break; - default: - break; - } - - } - } -} diff --git a/Kmakai.ExcerciseTracker/UserInput.cs b/Kmakai.ExcerciseTracker/UserInput.cs deleted file mode 100644 index c43e3be8..00000000 --- a/Kmakai.ExcerciseTracker/UserInput.cs +++ /dev/null @@ -1,86 +0,0 @@ -using Kmakai.ExerciseTracker.Models; -using Spectre.Console; - -namespace Kmakai.ExerciseTracker; - -public class UserInput -{ - public static DateTime GetDateAndTime() - { - DateTime date; - - while (true) - { - var input = AnsiConsole.Ask("Enter the date and time in format mm/dd/yyyy hh:mm => "); - - if (DateTime.TryParse(input, out date) && input.Trim().Split(" ").Length >= 2) - { - return date; - } - else - { - AnsiConsole.MarkupLine("[red]Invalid date and time format. Please try again.[/]"); - } - } - - } - - public static string? GetComment() - { - var input = AnsiConsole.Ask("Enter any comments (optional) => ", "n/a"); - - if (string.IsNullOrWhiteSpace(input)) - { - return null; - } - else - { - return input; - } - } - - public static int GetId(List exercises) - { - while (true) - { - var input = AnsiConsole.Ask("Enter the id of the exercise you want to update => "); - - if (int.TryParse(input, out int id) && exercises.Any(x => x.Id == id)) - { - return id; - } - else - { - AnsiConsole.MarkupLine("[red]Invalid id. Please try again.[/]"); - } - } - - } - - internal static int GetChoice() - { - var choice = AnsiConsole.Prompt( - new SelectionPrompt() - .Title("Select an option") - .PageSize(10) - .AddChoices(new[] - { - "1. Add an exercise" , - "2. Update an exercise", - "3. Delete an exercise", - "4. View all exercises", - "0. Exit" - })); - - return choice switch - { - "1. Add an exercise" => 1, - "2. Update an exercise" => 2, - "3. Delete an exercise" => 3, - "4. View all exercises" => 4, - "0. Exit" => 0, - - }; - } -} - diff --git a/README.md b/README.md index 64a41825..36882d35 100644 --- a/README.md +++ b/README.md @@ -1 +1,25 @@ -re submit +# Exercise Tracker Application + +## Features +* This is an application where we record exercise data. + +* The model for the exercise class has the following properties: {Id INT, DateStart DateTime, DateEnd DateTime, Duration TimeSpan, Description string} + +* Entity Framework is used for data-persistence. + +* The application has the following classes: UserInput, ExerciseController, ExerciseService (where business logic is handled) and ExerciseRepository. + +* Microsoft SQLServer as the database. + +* The controller of the application is made lean by using dependency injection to access the Exercise Service. The Exercise Service also uses DI to access the Exercise Repository. + + +## To run create a .env file in the root directory of the Database project(ExerciseTracker.ASV.Db) and add the following properties +* CONNECTION_STRING=Connection string to your database + +To create database locally run the below command in your NuGet Package Manager Console: +* dotnet ef migrations add InitialCreate +* dotnet ef database update + +Now start the Web API(ExerciseTracker.ASV.DB) project and the console app(ExerciseTracker.ASV) separately. + diff --git a/edvaudin.ExerciseTracker/Context/ExerciseContext.cs b/edvaudin.ExerciseTracker/Context/ExerciseContext.cs deleted file mode 100644 index c001a714..00000000 --- a/edvaudin.ExerciseTracker/Context/ExerciseContext.cs +++ /dev/null @@ -1,11 +0,0 @@ -using edvaudin.ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; - -namespace edvaudin.ExerciseTracker.Context; - -public class ExerciseContext : DbContext -{ - public DbSet Exercises { get; set; } - - public ExerciseContext(DbContextOptions options) : base(options) { } -} diff --git a/edvaudin.ExerciseTracker/Controllers/ExerciseController.cs b/edvaudin.ExerciseTracker/Controllers/ExerciseController.cs deleted file mode 100644 index 6fd3c826..00000000 --- a/edvaudin.ExerciseTracker/Controllers/ExerciseController.cs +++ /dev/null @@ -1,96 +0,0 @@ -using edvaudin.ExerciseTracker.Input; -using edvaudin.ExerciseTracker.Services; -using edvaudin.ExerciseTracker.Visulisation; - -namespace edvaudin.ExerciseTracker.Controllers; - -internal class ExerciseController : IExerciseController -{ - private static bool endApp; - private readonly IExerciseService exerciseService; - private readonly IUserInput userInput; - public ExerciseController(IUserInput userInput, IExerciseService exerciseService) - { - this.userInput = userInput; - this.exerciseService = exerciseService; - } - - public void Run() - { - if (exerciseService == null) - { - throw new ArgumentNullException(); - } - while (!endApp) - { - Viewer.DisplayOptionsMenu(); - string input = userInput.GetOption(); - ProcessOptions(input); - } - Exit(); - } - - private void ProcessOptions(string input) - { - switch (input) - { - case "v": - exerciseService.ViewExercises(); - break; - case "a": - AddExercise(); - break; - case "d": - DeleteExercise(); - break; - case "u": - UpdateExercise(); - break; - case "0": - Exit(); - break; - default: - throw new NotImplementedException(); - } - } - - private static void Exit() - { - Environment.Exit(0); - } - - private void DeleteExercise() - { - exerciseService.ViewExercises(); - Console.WriteLine("Which exercise would you like to delete?"); - int id = userInput.GetId(); - if (id == -1) { return; } - exerciseService.DeleteExercise(id); - } - - private void UpdateExercise() - { - exerciseService.ViewExercises(); - Console.WriteLine("Which exercise would you like to update?"); - int id = userInput.GetId(); - if (id == -1) { return; } - GetNewExerciseData(out DateTime start, out DateTime end, out string? comments); - exerciseService.UpdateExercise(id, start, end, comments); - } - - private void AddExercise() - { - GetNewExerciseData(out DateTime start, out DateTime end, out string? comments); - exerciseService.AddExercise(start, end, comments); - } - - private void GetNewExerciseData(out DateTime start, out DateTime end, out string? comments) - { - Console.WriteLine("When did you start this exercise? Use the format: dd/MM/yyyy HH:mm:ss."); - start = userInput.GetStartTime(); - Console.WriteLine("When did you finish this exercise? Use the format: dd/MM/yyyy HH:mm:ss."); - end = userInput.GetEndTime(start); - Console.WriteLine("Do you have any comments about this exercise? If not, just press enter."); - comments = Console.ReadLine(); - } -} diff --git a/edvaudin.ExerciseTracker/Controllers/IExerciseController.cs b/edvaudin.ExerciseTracker/Controllers/IExerciseController.cs deleted file mode 100644 index e88a7a9c..00000000 --- a/edvaudin.ExerciseTracker/Controllers/IExerciseController.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace edvaudin.ExerciseTracker.Controllers; - -internal interface IExerciseController -{ - void Run(); -} \ No newline at end of file diff --git a/edvaudin.ExerciseTracker/Input/IUserInput.cs b/edvaudin.ExerciseTracker/Input/IUserInput.cs deleted file mode 100644 index 25c65ca8..00000000 --- a/edvaudin.ExerciseTracker/Input/IUserInput.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace edvaudin.ExerciseTracker.Input; - -internal interface IUserInput -{ - DateTime GetEndTime(DateTime startTime); - int GetId(); - string GetOption(); - DateTime GetStartTime(); -} \ No newline at end of file diff --git a/edvaudin.ExerciseTracker/Input/UserInput.cs b/edvaudin.ExerciseTracker/Input/UserInput.cs deleted file mode 100644 index 12443892..00000000 --- a/edvaudin.ExerciseTracker/Input/UserInput.cs +++ /dev/null @@ -1,67 +0,0 @@ -using edvaudin.ExerciseTracker.Repositories; - -namespace edvaudin.ExerciseTracker.Input; - -internal class UserInput : IUserInput -{ - private readonly IExerciseRepository exerciseRepository; - public UserInput(IExerciseRepository exerciseRepository) - { - this.exerciseRepository = exerciseRepository; - } - public DateTime GetStartTime() - { - string input = Console.ReadLine(); - - while (!Validator.IsValidDateInput(input)) - { - Console.WriteLine("\nInvalid date and time. Use the format: dd/MM/yyyy HH:mm:ss."); - input = Console.ReadLine(); - } - return Validator.ConvertToDate(input); - } - - public DateTime GetEndTime(DateTime startTime) - { - string input = Console.ReadLine(); - - while (!Validator.IsValidDateInput(input)) - { - Console.WriteLine("\nInvalid date and time. Use the format: dd/MM/yyyy HH:mm:ss."); - input = Console.ReadLine(); - } - if (!Validator.IsDateAfterStartTime(input, startTime)) - { - Console.WriteLine("\nYou cannot have finished coding before you started! Enter a different end time."); - GetEndTime(startTime); - } - return Validator.ConvertToDate(input); - } - - public string GetOption() - { - string input = Console.ReadLine(); - while (!Validator.IsValidOption(input)) - { - Console.Write("\nThis is not a valid input. Please enter one of the above options: "); - input = Console.ReadLine(); - } - return input; - } - public int GetId() - { - bool validIdEntered = false; - while (!validIdEntered) - { - if (int.TryParse(Console.ReadLine(), out int result)) - { - if (exerciseRepository.TryGetExerciseById(result, out _) || result == -1) - { - return result; - } - } - Console.Write("\nThis is not a valid id, please enter a number or to return to main menu type '-1': "); - } - return -1; - } -} diff --git a/edvaudin.ExerciseTracker/Input/Validator.cs b/edvaudin.ExerciseTracker/Input/Validator.cs deleted file mode 100644 index e5716d94..00000000 --- a/edvaudin.ExerciseTracker/Input/Validator.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Globalization; - -namespace edvaudin.ExerciseTracker.Input; - -internal static class Validator -{ - public static bool IsValidOption(string input) - { - string[] validOptions = { "v", "a", "d", "u", "0" }; - foreach (string validOption in validOptions) - { - if (input == validOption) - { - return true; - } - } - return false; - } - public static bool IsValidDateInput(string input) - { - return DateTime.TryParseExact(input, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out _); - } - - public static bool IsDateAfterStartTime(string input, DateTime startTime) - { - return DateTime.ParseExact(input, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None) > startTime; - } - - public static DateTime ConvertToDate(string time) - { - return DateTime.ParseExact(time, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None); - } -} diff --git a/edvaudin.ExerciseTracker/Migrations/20230205112925_InitialCreate.Designer.cs b/edvaudin.ExerciseTracker/Migrations/20230205112925_InitialCreate.Designer.cs deleted file mode 100644 index edcfe31f..00000000 --- a/edvaudin.ExerciseTracker/Migrations/20230205112925_InitialCreate.Designer.cs +++ /dev/null @@ -1,54 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using edvaudin.ExerciseTracker.Context; - -#nullable disable - -namespace edvaudin.ExerciseTracker.Migrations; - -[DbContext(typeof(ExerciseContext))] -[Migration("20230205112925_InitialCreate")] -partial class InitialCreate -{ - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.2") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("edvaudin.ExerciseTracker.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasColumnType("nvarchar(max)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } -} diff --git a/edvaudin.ExerciseTracker/Migrations/20230205112925_InitialCreate.cs b/edvaudin.ExerciseTracker/Migrations/20230205112925_InitialCreate.cs deleted file mode 100644 index 93bcd121..00000000 --- a/edvaudin.ExerciseTracker/Migrations/20230205112925_InitialCreate.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace edvaudin.ExerciseTracker.Migrations; - -/// -public partial class InitialCreate : Migration -{ - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - DateStart = table.Column(type: "datetime2", nullable: false), - DateEnd = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } -} diff --git a/edvaudin.ExerciseTracker/Migrations/20230205113641_RefineModel.Designer.cs b/edvaudin.ExerciseTracker/Migrations/20230205113641_RefineModel.Designer.cs deleted file mode 100644 index 9851ddfb..00000000 --- a/edvaudin.ExerciseTracker/Migrations/20230205113641_RefineModel.Designer.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using edvaudin.ExerciseTracker.Context; - -#nullable disable - -namespace edvaudin.ExerciseTracker.Migrations; - -[DbContext(typeof(ExerciseContext))] -[Migration("20230205113641_RefineModel")] -partial class RefineModel -{ - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.2") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("edvaudin.ExerciseTracker.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } -} diff --git a/edvaudin.ExerciseTracker/Migrations/20230205113641_RefineModel.cs b/edvaudin.ExerciseTracker/Migrations/20230205113641_RefineModel.cs deleted file mode 100644 index e8b4f442..00000000 --- a/edvaudin.ExerciseTracker/Migrations/20230205113641_RefineModel.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace edvaudin.ExerciseTracker.Migrations; - -/// -public partial class RefineModel : Migration -{ - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "Comments", - table: "Exercises", - type: "nvarchar(255)", - maxLength: 255, - nullable: true, - oldClrType: typeof(string), - oldType: "nvarchar(max)", - oldNullable: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "Comments", - table: "Exercises", - type: "nvarchar(max)", - nullable: true, - oldClrType: typeof(string), - oldType: "nvarchar(255)", - oldMaxLength: 255, - oldNullable: true); - } -} diff --git a/edvaudin.ExerciseTracker/Migrations/ExerciseContextModelSnapshot.cs b/edvaudin.ExerciseTracker/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index edb3ea1b..00000000 --- a/edvaudin.ExerciseTracker/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,52 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using edvaudin.ExerciseTracker.Context; - -#nullable disable - -namespace edvaudin.ExerciseTracker.Migrations; - -[DbContext(typeof(ExerciseContext))] -partial class ExerciseContextModelSnapshot : ModelSnapshot -{ - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.2") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("edvaudin.ExerciseTracker.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("DateEnd") - .HasColumnType("datetime2"); - - b.Property("DateStart") - .HasColumnType("datetime2"); - - b.Property("Duration") - .HasColumnType("time"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } -} diff --git a/edvaudin.ExerciseTracker/Models/Exercise.cs b/edvaudin.ExerciseTracker/Models/Exercise.cs deleted file mode 100644 index c0d42494..00000000 --- a/edvaudin.ExerciseTracker/Models/Exercise.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; - -namespace edvaudin.ExerciseTracker.Models; - -public class Exercise -{ - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - public DateTime DateStart { get; set; } - public DateTime DateEnd { get; set; } - public TimeSpan Duration { get; set; } - [MaxLength(255)] - public string? Comments { get; set; } -} diff --git a/edvaudin.ExerciseTracker/Program.cs b/edvaudin.ExerciseTracker/Program.cs deleted file mode 100644 index 8cdcd4d0..00000000 --- a/edvaudin.ExerciseTracker/Program.cs +++ /dev/null @@ -1,44 +0,0 @@ -using edvaudin.ExerciseTracker.Context; -using edvaudin.ExerciseTracker.Controllers; -using edvaudin.ExerciseTracker.Input; -using edvaudin.ExerciseTracker.Repositories; -using edvaudin.ExerciseTracker.Services; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace edvaudin.ExerciseTracker; - -internal static class Program -{ - private static readonly IConfiguration configuration; - static Program() - { - configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build(); - } - static void Main(string[] args) - { - using IHost host = CreateHostBuilder(args).Build(); - - var serviceProvider = host.Services; - var exerciseController = serviceProvider.GetService(); - exerciseController!.Run(); - } - - static IHostBuilder CreateHostBuilder(string[] args) - { - return Host.CreateDefaultBuilder(args).ConfigureServices((_, services) => - { - services - .AddDbContext(options => - { - options.UseSqlServer(configuration.GetConnectionString("DefaultConnection")); - }) - .AddScoped() - .AddScoped() - .AddScoped() - .AddScoped(); - }); - } -} \ No newline at end of file diff --git a/edvaudin.ExerciseTracker/Repositories/ExerciseRepository.cs b/edvaudin.ExerciseTracker/Repositories/ExerciseRepository.cs deleted file mode 100644 index 3653a1ad..00000000 --- a/edvaudin.ExerciseTracker/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,55 +0,0 @@ -using edvaudin.ExerciseTracker.Context; -using edvaudin.ExerciseTracker.Models; - -namespace edvaudin.ExerciseTracker.Repositories; - -internal class ExerciseRepository : IExerciseRepository -{ - private readonly ExerciseContext exerciseContext; - public ExerciseRepository(ExerciseContext exerciseContext) - { - this.exerciseContext = exerciseContext; - } - - public void AddExercise(Exercise exercise) - { - exerciseContext.Add(exercise); - exerciseContext.SaveChanges(); - } - - public void DeleteExercise(Exercise exercise) - { - exerciseContext.Remove(exercise); - exerciseContext.SaveChanges(); - } - - public bool TryGetExerciseById(int id, out Exercise? exercise) - { - exercise = null; - Exercise? _ = exerciseContext.Exercises.Find(id); - if (_ == null) - { - return false; - } - else - { - exercise = _; - return true; - } - } - - public IEnumerable GetExercises() - { - return exerciseContext.Exercises; - } - - public void UpdateExercise(Exercise exerciseToUpdate, Exercise updatedExercise) - { - exerciseToUpdate.DateStart = updatedExercise.DateStart; - exerciseToUpdate.DateEnd = updatedExercise.DateEnd; - exerciseToUpdate.Duration = updatedExercise.Duration; - exerciseToUpdate.Comments = updatedExercise.Comments; - exerciseContext.Exercises.Entry(exerciseToUpdate).State = Microsoft.EntityFrameworkCore.EntityState.Modified; - exerciseContext.SaveChanges(); - } -} diff --git a/edvaudin.ExerciseTracker/Repositories/IExerciseRepository.cs b/edvaudin.ExerciseTracker/Repositories/IExerciseRepository.cs deleted file mode 100644 index 4e035d07..00000000 --- a/edvaudin.ExerciseTracker/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,12 +0,0 @@ -using edvaudin.ExerciseTracker.Models; - -namespace edvaudin.ExerciseTracker.Repositories; - -internal interface IExerciseRepository -{ - public IEnumerable GetExercises(); - public bool TryGetExerciseById(int id, out Exercise? exercise); - public void AddExercise(Exercise exercise); - public void UpdateExercise(Exercise exerciseToUpdate, Exercise exercise); - public void DeleteExercise(Exercise exercise); -} \ No newline at end of file diff --git a/edvaudin.ExerciseTracker/Services/ExerciseService.cs b/edvaudin.ExerciseTracker/Services/ExerciseService.cs deleted file mode 100644 index a7a1ffb0..00000000 --- a/edvaudin.ExerciseTracker/Services/ExerciseService.cs +++ /dev/null @@ -1,73 +0,0 @@ -using edvaudin.ExerciseTracker.Models; -using edvaudin.ExerciseTracker.Repositories; -using edvaudin.ExerciseTracker.Visulisation; - -namespace edvaudin.ExerciseTracker.Services; - -internal class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository exerciseRepository; - - public ExerciseService(IExerciseRepository exerciseRepository) - { - this.exerciseRepository = exerciseRepository; - } - - public void ViewExercises() - { - List exercises = exerciseRepository.GetExercises().ToList(); - Viewer.DisplayExerciseTable(exercises); - } - - public void AddExercise(DateTime start, DateTime end, string? comments) - { - Exercise exercise = new() - { - DateStart = start, - DateEnd = end, - Duration = end - start, - Comments = comments - }; - exerciseRepository.AddExercise(exercise); - Console.WriteLine("New exercise added."); - } - - public void DeleteExercise(int id) - { - if (!exerciseRepository.TryGetExerciseById(id, out Exercise? exerciseToDelete)) - { - Console.WriteLine("We could not find the exercise you were looking to delete."); - return; - } - if (exerciseToDelete == null) - { - Console.WriteLine("Something went wrong retrieving this exercise."); - return; - } - exerciseRepository.DeleteExercise(exerciseToDelete); - Console.WriteLine("Successfully deleted exercise."); - } - - public void UpdateExercise(int id, DateTime start, DateTime end, string comments) - { - if (!exerciseRepository.TryGetExerciseById(id, out Exercise? exerciseToUpdate)) - { - Console.WriteLine("We could not find the exercise you were looking to update."); - return; - } - if (exerciseToUpdate == null) - { - Console.WriteLine("Something went wrong retrieving this exercise."); - return; - } - Exercise updatedExercise = new() - { - DateStart = start, - DateEnd = end, - Duration = end - start, - Comments = comments - }; - exerciseRepository.UpdateExercise(exerciseToUpdate, updatedExercise); - Console.WriteLine("Successfully updated exercise."); - } -} diff --git a/edvaudin.ExerciseTracker/Services/IExerciseService.cs b/edvaudin.ExerciseTracker/Services/IExerciseService.cs deleted file mode 100644 index e8fcda23..00000000 --- a/edvaudin.ExerciseTracker/Services/IExerciseService.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace edvaudin.ExerciseTracker.Services; - -internal interface IExerciseService -{ - void AddExercise(DateTime start, DateTime end, string? comments); - void DeleteExercise(int id); - void UpdateExercise(int id, DateTime start, DateTime end, string? comments); - void ViewExercises(); -} \ No newline at end of file diff --git a/edvaudin.ExerciseTracker/Visualisation/Viewer.cs b/edvaudin.ExerciseTracker/Visualisation/Viewer.cs deleted file mode 100644 index db92ed9b..00000000 --- a/edvaudin.ExerciseTracker/Visualisation/Viewer.cs +++ /dev/null @@ -1,26 +0,0 @@ -using edvaudin.ExerciseTracker.Models; - -namespace edvaudin.ExerciseTracker.Visulisation; - -internal static class Viewer -{ - internal static void DisplayExerciseTable(List exercises) - { - foreach (Exercise exercise in exercises) - { - Console.WriteLine($"[#{exercise.Id}] Duration: {exercise.Duration} ({exercise.DateStart} - {exercise.DateEnd}) [Comments: {exercise.Comments}]\n"); - } - } - - internal static void DisplayOptionsMenu() - { - Console.WriteLine("+----- Exercise Tracker -----+"); - Console.WriteLine("\nChoose an action from the following list:"); - Console.WriteLine("\tv - View exercises"); - Console.WriteLine("\ta - Add new exercise"); - Console.WriteLine("\td - Delete an exercise"); - Console.WriteLine("\tu - Update an exercise"); - Console.WriteLine("\t0 - Quit this application"); - Console.Write("Your option? "); - } -} \ No newline at end of file diff --git a/edvaudin.ExerciseTracker/appsettings.json b/edvaudin.ExerciseTracker/appsettings.json deleted file mode 100644 index f7359450..00000000 --- a/edvaudin.ExerciseTracker/appsettings.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ConnectionStrings": { - "DefaultConnection": "Data Source=(LocalDb)\\MSSQLLocalDB;Initial Catalog=exercisedb;Integrated Security=True;" - }, - "Logging": { - "LogLevel": { - "Default": "Warning", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} \ No newline at end of file diff --git a/edvaudin.ExerciseTracker/edvaudin.ExerciseTracker.csproj b/edvaudin.ExerciseTracker/edvaudin.ExerciseTracker.csproj deleted file mode 100644 index cd1cb740..00000000 --- a/edvaudin.ExerciseTracker/edvaudin.ExerciseTracker.csproj +++ /dev/null @@ -1,27 +0,0 @@ - - - - Exe - net6.0 - enable - enable - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - Always - - - - diff --git a/edvaudin.ExerciseTracker/edvaudin.ExerciseTracker.sln b/edvaudin.ExerciseTracker/edvaudin.ExerciseTracker.sln deleted file mode 100644 index 598095ac..00000000 --- a/edvaudin.ExerciseTracker/edvaudin.ExerciseTracker.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.4.33213.308 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "edvaudin.ExerciseTracker", "edvaudin.ExerciseTracker.csproj", "{380C5A14-5E6E-4FAF-B9CC-F6C92D3EDF9A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {380C5A14-5E6E-4FAF-B9CC-F6C92D3EDF9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {380C5A14-5E6E-4FAF-B9CC-F6C92D3EDF9A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {380C5A14-5E6E-4FAF-B9CC-F6C92D3EDF9A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {380C5A14-5E6E-4FAF-B9CC-F6C92D3EDF9A}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B6637C5D-F661-4738-A9DE-36EA0EC238E1} - EndGlobalSection -EndGlobal diff --git a/kimfom01.Console.ExerciseTracker/.gitignore b/kimfom01.Console.ExerciseTracker/.gitignore deleted file mode 100644 index 17f86336..00000000 --- a/kimfom01.Console.ExerciseTracker/.gitignore +++ /dev/null @@ -1,485 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET -project.lock.json -project.fragment.lock.json -artifacts/ - -# Tye -.tye/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.tlog -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml - -## -## Visual studio for Mac -## - - -# globs -Makefile.in -*.userprefs -*.usertasks -config.make -config.status -aclocal.m4 -install-sh -autom4te.cache/ -*.tar.gz -tarballs/ -test-results/ - -# Mac bundle stuff -*.dmg -*.app - -# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - - -# Rider Files -*.iml -.idea/ - -# SQLite db -*.db \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker.sln b/kimfom01.Console.ExerciseTracker/ExerciseTracker.sln deleted file mode 100644 index e41fabf9..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker.sln +++ /dev/null @@ -1,16 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExerciseTracker", "ExerciseTracker\ExerciseTracker.csproj", "{85EDA033-725D-44F8-B102-3207672FDB89}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {85EDA033-725D-44F8-B102-3207672FDB89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {85EDA033-725D-44F8-B102-3207672FDB89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {85EDA033-725D-44F8-B102-3207672FDB89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {85EDA033-725D-44F8-B102-3207672FDB89}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Controller/ExerciseController.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Controller/ExerciseController.cs deleted file mode 100644 index d237c3bc..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Controller/ExerciseController.cs +++ /dev/null @@ -1,64 +0,0 @@ -using ExerciseTracker.Services; -using ExerciseTracker.UserInput; - -namespace ExerciseTracker.Controller; - -public class ExerciseController : IExerciseController -{ - private readonly IInput _input; - private readonly IExerciseService _exerciseService; - - public ExerciseController(IInput input, IExerciseService exerciseService) - { - _input = input; - _exerciseService = exerciseService; - } - - private void DisplayStartMenu() - { - Console.Clear(); - Console.WriteLine("1 to Start A New Exercise"); - Console.WriteLine("2 to Retrieve All Recorded Exercises"); - Console.WriteLine("3 to Retrieve A Recorded Exercise"); - Console.WriteLine("4 to End An Existing Exercise"); - Console.WriteLine("5 to Delete An Existing Exercise"); - Console.WriteLine("0 to Exit The Application"); - Console.WriteLine("\nYour choice?"); - } - - public void Run() - { - DisplayStartMenu(); - var choice = _input.GetChoice(); - - while(choice != "0") - { - switch (choice) - { - case "1": - _exerciseService.RecordNewExercise(); - break; - case "2": - _exerciseService.GetAllExercises(); - break; - case "3": - _exerciseService.GetExerciseById(); - break; - case "4": - _exerciseService.UpdateExistingExercise(); - break; - case "5": - _exerciseService.DeleteExercise(); - break; - default: - Console.WriteLine("Invalid choice!"); - Console.Write("Hit Enter to continue..."); - Console.ReadLine(); - break; - } - - DisplayStartMenu(); - choice = _input.GetChoice(); - } - } -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Controller/IExerciseController.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Controller/IExerciseController.cs deleted file mode 100644 index 624f10f7..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Controller/IExerciseController.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace ExerciseTracker.Controller -{ - public interface IExerciseController - { - public void Run(); - } -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Data/ExerciseContext.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Data/ExerciseContext.cs deleted file mode 100644 index c9064994..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Data/ExerciseContext.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTracker.Models; -using Microsoft.EntityFrameworkCore; - -namespace ExerciseTracker.Data; - -public class ExerciseContext : DbContext -{ - public DbSet Exercises { get; set; } - - public ExerciseContext(DbContextOptions options) : base(options) - { - } -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Dtos/ExerciseViewDto.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Dtos/ExerciseViewDto.cs deleted file mode 100644 index 8b249255..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Dtos/ExerciseViewDto.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.Dtos; - -public class ExerciseViewDto -{ - public int Id { get; set; } - public DateTime StartDate { get; set; } - public DateTime? EndDate { get; set; } - public string? Duration { get; set; } - public string? Comments { get; set; } -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/ExerciseTracker.csproj b/kimfom01.Console.ExerciseTracker/ExerciseTracker/ExerciseTracker.csproj deleted file mode 100644 index ebbb0fed..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/ExerciseTracker.csproj +++ /dev/null @@ -1,30 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - Always - - - - diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Migrations/20230119164456_InitialCreate.Designer.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Migrations/20230119164456_InitialCreate.Designer.cs deleted file mode 100644 index 350409fa..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Migrations/20230119164456_InitialCreate.Designer.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -using System; -using ExerciseTracker.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20230119164456_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "7.0.2"); - - modelBuilder.Entity("ExerciseTracker.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Comments") - .HasColumnType("TEXT"); - - b.Property("Duration") - .HasColumnType("TEXT"); - - b.Property("EndDate") - .HasColumnType("TEXT"); - - b.Property("StartDate") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Migrations/20230119164456_InitialCreate.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Migrations/20230119164456_InitialCreate.cs deleted file mode 100644 index 75c74b01..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Migrations/20230119164456_InitialCreate.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "INTEGER", nullable: false) - .Annotation("Sqlite:Autoincrement", true), - StartDate = table.Column(type: "TEXT", nullable: false), - EndDate = table.Column(type: "TEXT", nullable: true), - Duration = table.Column(type: "TEXT", nullable: true), - Comments = table.Column(type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Migrations/ExerciseContextModelSnapshot.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index 837b2136..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -using System; -using ExerciseTracker.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ExerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseContext))] - partial class ExerciseContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "7.0.2"); - - modelBuilder.Entity("ExerciseTracker.Models.Exercise", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Comments") - .HasColumnType("TEXT"); - - b.Property("Duration") - .HasColumnType("TEXT"); - - b.Property("EndDate") - .HasColumnType("TEXT"); - - b.Property("StartDate") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Models/Exercise.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Models/Exercise.cs deleted file mode 100644 index 0a5cc11b..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Models/Exercise.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.Models; - -public class Exercise -{ - public int Id { get; set; } - public DateTime StartDate { get; set; } - public DateTime? EndDate { get; set; } - public TimeSpan? Duration { get; set; } - public string? Comments { get; set; } -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Program.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Program.cs deleted file mode 100644 index 1676eccb..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Program.cs +++ /dev/null @@ -1,31 +0,0 @@ -using ExerciseTracker.Controller; -using ExerciseTracker.Data; -using ExerciseTracker.Repositories; -using ExerciseTracker.Services; -using ExerciseTracker.UserInput; -using ExerciseTracker.Validations; -using ExerciseTracker.Visualization; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -using IHost host = Host.CreateDefaultBuilder(args) - .ConfigureServices(services => - { - services.AddDbContext(options => - { - options.UseSqlite("Data Source=ExerciseTracker.db"); - }); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - }) - .Build(); - -var serviceProvider = host.Services; -var exerciseController = serviceProvider.GetService(); - -exerciseController!.Run(); \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/ExerciseRepository.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/ExerciseRepository.cs deleted file mode 100644 index f4c69da2..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/ExerciseRepository.cs +++ /dev/null @@ -1,31 +0,0 @@ -using ExerciseTracker.Data; -using ExerciseTracker.Models; - -namespace ExerciseTracker.Repositories; - -public class ExerciseRepository : Repository, IExerciseRepository -{ - public ExerciseRepository(ExerciseContext exerciseContext) : base(exerciseContext) - { - } - - public override bool UpdateExercise(int id, Exercise exercise) - { - var oldExercise = GetExerciseById(id); - - if(oldExercise is null) - { - Console.Clear(); - Console.WriteLine("This exercise does not exist!"); - Console.Write("Press Enter to continue..."); - Console.ReadLine(); - return false; - } - - var duration = exercise.EndDate - oldExercise.StartDate; - - exercise.Duration = duration; - - return base.UpdateExercise(id, exercise); - } -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/IExerciseRepository.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/IExerciseRepository.cs deleted file mode 100644 index 642b81c5..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/IExerciseRepository.cs +++ /dev/null @@ -1,5 +0,0 @@ -namespace ExerciseTracker.Repositories; - -public interface IExerciseRepository : IRepository -{ -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/IRepository.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/IRepository.cs deleted file mode 100644 index 0cd11a4c..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/IRepository.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ExerciseTracker.Models; - -namespace ExerciseTracker.Repositories; - -public interface IRepository -{ - public IEnumerable GetExercises(); - public Exercise? GetExerciseById(int id); - public void AddExercise(Exercise exercise); - public bool UpdateExercise(int id, Exercise exercise); - public bool DeleteExercise(int id); - public int SaveChanges(); -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/Repository.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/Repository.cs deleted file mode 100644 index 1db51b81..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Repositories/Repository.cs +++ /dev/null @@ -1,62 +0,0 @@ -using ExerciseTracker.Data; -using ExerciseTracker.Models; - -namespace ExerciseTracker.Repositories; - -public abstract class Repository : IRepository -{ - private readonly ExerciseContext _exerciseContext; - - public Repository(ExerciseContext exerciseContext) - { - _exerciseContext = exerciseContext; - } - - public virtual IEnumerable GetExercises() - { - return _exerciseContext.Exercises; - } - - public virtual Exercise? GetExerciseById(int id) - { - return _exerciseContext.Exercises.Find(id); - } - - public virtual void AddExercise(Exercise exercise) - { - _exerciseContext.Add(exercise); - } - - public virtual bool UpdateExercise(int id, Exercise exercise) - { - var exerciseToBeUpdated = GetExerciseById(id); - - exerciseToBeUpdated!.EndDate = exercise.EndDate; - exerciseToBeUpdated.Duration = exercise.Duration; - exerciseToBeUpdated.Comments = exercise.Comments; - - return true; - } - - public virtual bool DeleteExercise(int id) - { - var exerciseToBeDeleted = GetExerciseById(id); - - if (exerciseToBeDeleted is null) - { - Console.Clear(); - Console.WriteLine("Entry does not exist!"); - Console.Write("Press Enter to continue..."); - Console.ReadLine(); - return false; - } - - _exerciseContext.Remove(exerciseToBeDeleted); - return true; - } - - public virtual int SaveChanges() - { - return _exerciseContext.SaveChanges(); - } -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Services/ExerciseService.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Services/ExerciseService.cs deleted file mode 100644 index 8fa8c9ca..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Services/ExerciseService.cs +++ /dev/null @@ -1,131 +0,0 @@ -using ExerciseTracker.Dtos; -using ExerciseTracker.Models; -using ExerciseTracker.Repositories; -using ExerciseTracker.UserInput; -using ExerciseTracker.Visualization; - -namespace ExerciseTracker.Services; - -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository _exerciseRepository; - private readonly IInput _input; - private readonly ITableVisualization _tableVisualization; - - public ExerciseService(IExerciseRepository exerciseRepository, IInput input, ITableVisualization tableVisualization) - { - _exerciseRepository = exerciseRepository; - _input = input; - _tableVisualization = tableVisualization; - } - - public void GetAllExercises() - { - List exercises = _exerciseRepository.GetExercises().ToList(); - - var exercisesDtos = MapExerciseToDto(exercises); - - _tableVisualization.DisplayTable(exercisesDtos); - - Console.Write("Press Enter to continue"); - Console.ReadLine(); - } - - private static List MapExerciseToDto(List exercises) - { - List exercisesDtos = new(); - foreach (var exercise in exercises) - { - var hours = exercise.Duration?.Hours + (exercise.Duration?.Days * 24); - var minutes = exercise.Duration?.Minutes; - - var duration = $"{hours} hrs, {minutes} mins"; - - var temp = new ExerciseViewDto - { - Id = exercise.Id, - StartDate = exercise.StartDate, - EndDate = exercise.EndDate, - Duration = duration, - Comments = exercise.Comments - }; - - exercisesDtos.Add(temp); - } - - return exercisesDtos; - } - - public void GetExerciseById() - { - var id = _input.GetId(); - - var exercise = _exerciseRepository.GetExerciseById(id); - - if (exercise is null) - { - Console.Clear(); - Console.WriteLine("This exercise does not exist!"); - Console.Write("Press Enter to continue..."); - Console.ReadLine(); - return; - } - - var exercisesDtos = MapExerciseToDto(new List { exercise }); - - _tableVisualization.DisplayTable(exercisesDtos); - - Console.Write("Press Enter to continue"); - Console.ReadLine(); - } - - public void RecordNewExercise() - { - var startDate = DateTime.Now; - var exercise = new Exercise { StartDate = startDate }; - - _exerciseRepository.AddExercise(exercise); - _exerciseRepository.SaveChanges(); - Console.Clear(); - - Console.WriteLine("New exercise recorded"); - - Console.Write("Press Enter to continue"); - Console.ReadLine(); - } - - public void UpdateExistingExercise() - { - var id = _input.GetId(); - var endDate = DateTime.Now; - var comments = _input.GetComments(); - - var exercise = new Exercise { EndDate = endDate, Comments = comments }; - - var success = _exerciseRepository.UpdateExercise(id, exercise); - var saveCount = _exerciseRepository.SaveChanges(); - Console.Clear(); - - if (success && saveCount > 0) - { - Console.WriteLine("Exercise updated"); - Console.Write("Press Enter to continue"); - Console.ReadLine(); - } - } - - public void DeleteExercise() - { - var id = _input.GetId(); - var success = _exerciseRepository.DeleteExercise(id); - var deleteCount = _exerciseRepository.SaveChanges(); - Console.Clear(); - - if (success && deleteCount > 0) - { - Console.WriteLine("Exercise deleted"); - Console.Write("Press Enter to continue"); - Console.ReadLine(); - } - } -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Services/IExerciseService.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Services/IExerciseService.cs deleted file mode 100644 index cab33984..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Services/IExerciseService.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.Services; - -public interface IExerciseService -{ - public void RecordNewExercise(); - public void UpdateExistingExercise(); - public void GetAllExercises(); - public void GetExerciseById(); - public void DeleteExercise(); -} diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/UserInput/IInput.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/UserInput/IInput.cs deleted file mode 100644 index 6bdc3f02..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/UserInput/IInput.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ExerciseTracker.UserInput; - -public interface IInput -{ - public string GetChoice(); - - public int GetId(); - - public string GetComments(); -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/UserInput/Input.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/UserInput/Input.cs deleted file mode 100644 index bac23f0d..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/UserInput/Input.cs +++ /dev/null @@ -1,56 +0,0 @@ -using ExerciseTracker.Validations; - -namespace ExerciseTracker.UserInput; - -public class Input : IInput -{ - private readonly IInputValidation _inputValidation; - - public Input(IInputValidation inputValidation) - { - _inputValidation = inputValidation; - } - - public string GetChoice() - { - Console.Write("Enter your choice: "); - var choice = Console.ReadLine(); - while (!_inputValidation.ValidateInput(choice)) - { - Console.WriteLine("Error! Invalid input."); - Console.Write("Enter your choice: "); - choice = Console.ReadLine(); - } - - return choice!; - } - - public int GetId() - { - Console.Write("Enter the id: "); - int id; - var input = Console.ReadLine(); - while (!_inputValidation.ValidateIdInput(input, out id)) - { - Console.WriteLine("Error! Invalid input."); - Console.Write("Enter the id: "); - input = Console.ReadLine(); - } - - return id; - } - - public string GetComments() - { - Console.Write("Enter your comments: "); - var comments = Console.ReadLine(); - while (!_inputValidation.ValidateInput(comments)) - { - Console.WriteLine("Error! Invalid input."); - Console.Write("Enter your comments: "); - comments = Console.ReadLine(); - } - - return comments!; - } -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Validations/IInputValidation.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Validations/IInputValidation.cs deleted file mode 100644 index 34c85ae8..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Validations/IInputValidation.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace ExerciseTracker.Validations; - -public interface IInputValidation -{ - public bool ValidateInput(string? input); - - public bool ValidateIdInput(string? input, out int id); -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Validations/InputValidation.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Validations/InputValidation.cs deleted file mode 100644 index 7b191106..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Validations/InputValidation.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace ExerciseTracker.Validations; - -public class InputValidation : IInputValidation -{ - public bool ValidateInput(string? input) - { - return !string.IsNullOrWhiteSpace(input); - } - - public bool ValidateIdInput(string? input, out int id) - { - id = -1; - return !string.IsNullOrWhiteSpace(input) && int.TryParse(input, out id); - } -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Visualization/ITableVisualization.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Visualization/ITableVisualization.cs deleted file mode 100644 index 38a6cb9a..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Visualization/ITableVisualization.cs +++ /dev/null @@ -1,8 +0,0 @@ -using ExerciseTracker.Dtos; - -namespace ExerciseTracker.Visualization; - -public interface ITableVisualization -{ - public void DisplayTable(List exercises); -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Visualization/TableVisualization.cs b/kimfom01.Console.ExerciseTracker/ExerciseTracker/Visualization/TableVisualization.cs deleted file mode 100644 index c0617b68..00000000 --- a/kimfom01.Console.ExerciseTracker/ExerciseTracker/Visualization/TableVisualization.cs +++ /dev/null @@ -1,15 +0,0 @@ -using ConsoleTableExt; -using ExerciseTracker.Dtos; - -namespace ExerciseTracker.Visualization; - -public class TableVisualization : ITableVisualization -{ - public void DisplayTable(List exercises) - { - Console.Clear(); - ConsoleTableBuilder - .From(exercises) - .ExportAndWriteLine(); - } -} \ No newline at end of file diff --git a/kimfom01.Console.ExerciseTracker/LICENSE b/kimfom01.Console.ExerciseTracker/LICENSE deleted file mode 100644 index 0058a51b..00000000 --- a/kimfom01.Console.ExerciseTracker/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2023 Kim Fom - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/kimfom01.Console.ExerciseTracker/README.md b/kimfom01.Console.ExerciseTracker/README.md deleted file mode 100644 index a94a6e99..00000000 --- a/kimfom01.Console.ExerciseTracker/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# ExerciseTracker - -Console based CRUD application to record exercise data. Developed using C# and SQLite, Entity Framework Core and Dependency Injection. - -## Given Requirements -- [x] This is an application where you should record exercise data. -- [x] You should choose one type of exercise only. We want to keep the app simple so you focus on the subject you're learning and not on the business complexities. -- [x] You can choose raw SQL or Entity Framework for your data-persistence. -- [x] he model for your exercise class should have at least the following properties: {Id INT, DateStart DateTime, DateEnd DateTime, Duration TimeSpan, Comments string} -- [x] Your application should have the following classes: UserInput, ExerciseController, ExerciseService (where business logic will be handled) and ExerciseRepository. -- [x] You can choose between SQLite or SQLServer. -- [x] You need to use dependency injection to access the repository from the controller. - -## Things I learnt -* Entity Framework -* SOLID -* Dependency Injection - -## Resources -* [ConsoleTableExt](https://github.com/minhhungit/ConsoleTableExt) -* [Repository Pattern Docs](https://docs.microsoft.com/en-us/ef/core/get-started/overview/first-app?tabs=netcore-cli) -* [Repository Pattern Tutorial](https://www.thecsharpacademy.com/project/18#:~:text=Repository%20Pattern%20Tutorial) diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker.sln b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker.sln deleted file mode 100644 index be47113c..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.6.33717.318 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sadklouds.ExcerciseTracker", "sadklouds.ExcerciseTracker\sadklouds.ExcerciseTracker.csproj", "{74048DA5-9BEF-4DE6-BAE5-B79902A4BB5C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {74048DA5-9BEF-4DE6-BAE5-B79902A4BB5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74048DA5-9BEF-4DE6-BAE5-B79902A4BB5C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74048DA5-9BEF-4DE6-BAE5-B79902A4BB5C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74048DA5-9BEF-4DE6-BAE5-B79902A4BB5C}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {A9F48EAC-0152-42B7-A5E8-BF22090ABA9A} - EndGlobalSection -EndGlobal diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Controllers/ExerciseController.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Controllers/ExerciseController.cs deleted file mode 100644 index bc5fac55..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Controllers/ExerciseController.cs +++ /dev/null @@ -1,41 +0,0 @@ -using sadklouds.ExcerciseTracker.Services; -using sadklouds.ExcerciseTracker.Visualisation; - -namespace sadklouds.ExcerciseTracker.Controllers; - -public class ExerciseController : IExerciseController -{ - private readonly IExerciseService _exerciseService; - public ExerciseController(IExerciseService _exerciseService) - { - this._exerciseService = _exerciseService; - } - - public void Run() - { - while (true) - { - ExerciseMenu.Menu(); - string option = Console.ReadLine(); - switch(option.ToLower()) - { - case "v": - _exerciseService.GetAllExercises(); - break; - - case "a": - _exerciseService.AddExercise(); - break; - case "i": - _exerciseService.GetExercise(); - break; - case "d": - _exerciseService.DeleteExercise(); - break; - case "u": - _exerciseService.UpdateExercise(); - break; - } - } - } -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Controllers/IExerciseController.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Controllers/IExerciseController.cs deleted file mode 100644 index c60bdf90..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Controllers/IExerciseController.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace sadklouds.ExcerciseTracker.Controllers -{ - public interface IExerciseController - { - public void Run(); - } -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DBContext/ExerciseContext.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DBContext/ExerciseContext.cs deleted file mode 100644 index 2a3f6951..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DBContext/ExerciseContext.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using sadklouds.ExcerciseTracker.Models; - -namespace sadklouds.ExcerciseTracker.DBContext; - -public class ExerciseContext : DbContext -{ - public ExerciseContext(DbContextOptions options) : base(options) { } - - public DbSet Exercises { get; set; } - -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DataInput/IUserInput.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DataInput/IUserInput.cs deleted file mode 100644 index 013ae3f7..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DataInput/IUserInput.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace sadklouds.ExcerciseTracker.DataInput; -public interface IUserInput -{ - public int GetIdInput(); - public DateTime GetStartDate(); - public DateTime GetEndDate(DateTime startDate); - public string GetComment(); -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DataInput/UserInput.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DataInput/UserInput.cs deleted file mode 100644 index 00982c3c..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DataInput/UserInput.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Globalization; - -namespace sadklouds.ExcerciseTracker.DataInput; -public class UserInput : IUserInput -{ - public int GetIdInput() - { - int id; - Console.Write("Enter Exercise id: "); - string? textId = Console.ReadLine(); - while (Validator.IsValid(textId) == false) - { - Console.WriteLine("Invalid id given"); - GetIdInput(); - } - int.TryParse(textId, out id); - return id; - } - - public string GetComment() - { - Console.WriteLine("Please enter comment for exercise or leave blank: "); - string comment = Console.ReadLine(); - while (Validator.ValidCommentLength(comment) == false) - { - Console.WriteLine("Comment must be under 255 characters"); - comment = Console.ReadLine(); - } - return comment; - } - - public DateTime GetStartDate() - { - Console.Write("Please enter exercise start date & time (dd/MM/yyyy HH:mm): "); - string textDate = Console.ReadLine(); - DateTime startDate; - while (Validator.IsValidDateFormat(textDate) == false) - { - Console.Write("Invalid start date format given, Correct formatting is dd/MM/yyyy HH:mm: "); - textDate = Console.ReadLine(); - } - DateTime.TryParseExact(textDate, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out startDate); - return startDate; - - } - - public DateTime GetEndDate(DateTime startDate) - { - Console.Write("Please enter exercise end date & time (dd/MM/yyyy HH:mm): "); - string textDate = Console.ReadLine(); - DateTime endDate; - while (Validator.IsValidDateFormat(textDate) == false) - { - Console.Write("Invalid end date format given. Correct formatting is dd/MM/yyyy HH:mm"); - textDate = Console.ReadLine(); - } - DateTime.TryParseExact(textDate, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out endDate); - while (Validator.IsValidEndDate(textDate, startDate) == false) - { - Console.WriteLine("Exercise cannot end before it has started, Correct formatting is dd/MM/yyyy HH:mm."); - GetEndDate(startDate); - } - return endDate; - } -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DataInput/Validator.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DataInput/Validator.cs deleted file mode 100644 index 86cfce60..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/DataInput/Validator.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Globalization; - -namespace sadklouds.ExcerciseTracker.DataInput; - -public class Validator -{ - public static bool IsValid(string id) - { - if (string.IsNullOrEmpty(id)) - return false; - - foreach (char c in id) - { - if (!char.IsDigit(c)) - return false; - } - return true; - } - public static bool ValidCommentLength(string comment) => comment.Length <= 255; - - public static bool IsValidDateFormat(string date) => DateTime.TryParseExact(date, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result); - - public static bool IsValidEndDate(string endDate, DateTime startTime) => DateTime.ParseExact(endDate, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None) > startTime; -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Migrations/20230527131419_InitialDBCreate.Designer.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Migrations/20230527131419_InitialDBCreate.Designer.cs deleted file mode 100644 index 6e033839..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Migrations/20230527131419_InitialDBCreate.Designer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using sadklouds.ExcerciseTracker.DBContext; - -#nullable disable - -namespace sadklouds.ExcerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseContext))] - [Migration("20230527131419_InitialDBCreate")] - partial class InitialDBCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.5") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("sadklouds.ExcerciseTracker.Models.ExerciseModel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Migrations/20230527131419_InitialDBCreate.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Migrations/20230527131419_InitialDBCreate.cs deleted file mode 100644 index f928e01f..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Migrations/20230527131419_InitialDBCreate.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace sadklouds.ExcerciseTracker.Migrations -{ - /// - public partial class InitialDBCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Exercises", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - StartDate = table.Column(type: "datetime2", nullable: false), - EndDate = table.Column(type: "datetime2", nullable: false), - Duration = table.Column(type: "time", nullable: false), - Comments = table.Column(type: "nvarchar(255)", maxLength: 255, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Exercises", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Exercises"); - } - } -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Migrations/ExerciseContextModelSnapshot.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Migrations/ExerciseContextModelSnapshot.cs deleted file mode 100644 index a6321682..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Migrations/ExerciseContextModelSnapshot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using sadklouds.ExcerciseTracker.DBContext; - -#nullable disable - -namespace sadklouds.ExcerciseTracker.Migrations -{ - [DbContext(typeof(ExerciseContext))] - partial class ExerciseContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.5") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("sadklouds.ExcerciseTracker.Models.ExerciseModel", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Comments") - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("Duration") - .HasColumnType("time"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("Exercises"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Models/ExerciseModel.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Models/ExerciseModel.cs deleted file mode 100644 index 400850d7..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Models/ExerciseModel.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace sadklouds.ExcerciseTracker.Models; -public class ExerciseModel -{ - public int Id { get; set; } - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - public TimeSpan Duration { get; set; } - [MaxLength(255)] - public string? Comments { get; set; } -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Program.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Program.cs deleted file mode 100644 index db8f3a88..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Program.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using sadklouds.ExcerciseTracker.Controllers; -using sadklouds.ExcerciseTracker.DataInput; -using sadklouds.ExcerciseTracker.DBContext; -using sadklouds.ExcerciseTracker.Repositries; -using sadklouds.ExcerciseTracker.Services; - -IConfiguration config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build(); -IHost _host = Host.CreateDefaultBuilder().ConfigureServices( - services => - { - services.AddDbContext(options => - { - options.UseSqlServer(config.GetConnectionString("Default")); - }); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - }).Build(); - -var exerciseController = _host.Services.GetService(); -exerciseController!.Run(); - diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Repositries/ExerciseRepository.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Repositries/ExerciseRepository.cs deleted file mode 100644 index 0b2f4d28..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Repositries/ExerciseRepository.cs +++ /dev/null @@ -1,48 +0,0 @@ -using sadklouds.ExcerciseTracker.DBContext; -using sadklouds.ExcerciseTracker.Models; - -namespace sadklouds.ExcerciseTracker.Repositries; - -public class ExerciseRepository : IExerciseRepository -{ - - private readonly ExerciseContext _context; - - public ExerciseRepository(ExerciseContext _context) - { - this._context = _context; - } - - public void Add(ExerciseModel entity) - { - _context.Add(entity); - _context.SaveChanges(); - } - - public IEnumerable GetAll() - { - return _context.Set().ToList(); - } - - public ExerciseModel GetById(int id) - { - return _context.Find(id); - } - - public void Delete(ExerciseModel exercise) - { - _context.Remove(exercise); - _context.SaveChanges(); - } - - public void Update(ExerciseModel updatedEntity, ExerciseModel curentEntity) - { - curentEntity.StartDate = updatedEntity.StartDate; - curentEntity.EndDate = updatedEntity.EndDate; - curentEntity.Duration = updatedEntity.Duration; - curentEntity.Comments = updatedEntity.Comments; - - _context.Update(curentEntity); - _context.SaveChanges(); - } -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Repositries/IExerciseRepository.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Repositries/IExerciseRepository.cs deleted file mode 100644 index 138cfc47..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Repositries/IExerciseRepository.cs +++ /dev/null @@ -1,11 +0,0 @@ -using sadklouds.ExcerciseTracker.Models; - -namespace sadklouds.ExcerciseTracker.Repositries; -public interface IExerciseRepository -{ - public void Add(ExerciseModel entity); - public void Update(ExerciseModel updatedEntity, ExerciseModel curentEntity); - public ExerciseModel GetById(int id); - public IEnumerable GetAll(); - public void Delete(ExerciseModel exercise); -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Services/ExerciseService.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Services/ExerciseService.cs deleted file mode 100644 index 6a1f0541..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Services/ExerciseService.cs +++ /dev/null @@ -1,97 +0,0 @@ -using sadklouds.ExcerciseTracker.DataInput; -using sadklouds.ExcerciseTracker.Models; -using sadklouds.ExcerciseTracker.Repositries; - -namespace sadklouds.ExcerciseTracker.Services; -public class ExerciseService : IExerciseService -{ - private readonly IExerciseRepository _exerciseRepository; - private readonly IUserInput _userInput; - - public ExerciseService(IExerciseRepository _exerciseRepository, IUserInput _userInput) - { - this._exerciseRepository = _exerciseRepository; - this._userInput = _userInput; - } - - public void AddExercise() - { - DateTime startDate = _userInput.GetStartDate(); - DateTime endDate = _userInput.GetEndDate(startDate); - TimeSpan duration = endDate - startDate; - string comment = _userInput.GetComment(); - ExerciseModel excercise = new ExerciseModel() - { - StartDate = startDate, - EndDate = endDate, - Duration = duration, - Comments = comment - }; - _exerciseRepository.Add(excercise); - } - - public void DeleteExercise() - { - GetAllExercises(); - int id = _userInput.GetIdInput(); - var exercise = _exerciseRepository.GetById(id); - if (exercise == null) - Console.WriteLine($"Excercise with Id:{id} was not found!"); - else - { - _exerciseRepository.Delete(exercise); - Console.WriteLine($"Exercise Id:{id} was deleted"); - } - } - - public void GetAllExercises() - { - List exercises = _exerciseRepository.GetAll().ToList(); - if (exercises == null) - Console.WriteLine("No excercises where found"); - else - { - Console.WriteLine("----------------------------------------------------------------------------------------"); - foreach (var exercise in exercises) - { - Console.WriteLine($"Id:{exercise.Id}, Start:{exercise.StartDate}, End:{exercise.EndDate}, Duration:{exercise.Duration}"); - Console.WriteLine($"Comment:{exercise.Comments}"); - Console.WriteLine("----------------------------------------------------------------------------------------\n"); - } - } - } - - public void GetExercise() - { - int id = _userInput.GetIdInput(); - var exercise = _exerciseRepository.GetById(id); - if (exercise == null) - Console.WriteLine($"Excercise with Id: {id} was not found!"); - else - Console.WriteLine($"\nId:{exercise.Id}, Start:{exercise.StartDate}, End:{exercise.EndDate}, Duration:{exercise.Duration}\n"); - } - - public void UpdateExercise() - { - GetAllExercises(); - int id = _userInput.GetIdInput(); - var currentExercise = _exerciseRepository.GetById(id); - if (currentExercise == null) - { - Console.WriteLine("Excercise could not be found"); - return; - } - DateTime startDate = _userInput.GetStartDate(); - DateTime endDate = _userInput.GetEndDate(startDate); - TimeSpan duration = endDate - startDate; - string comment = _userInput.GetComment(); - ExerciseModel updatedModel = new ExerciseModel() - { - StartDate = startDate, - EndDate = endDate, - Duration = duration, - Comments = comment - }; - _exerciseRepository.Update(updatedModel, currentExercise); - } -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Services/IExerciseService.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Services/IExerciseService.cs deleted file mode 100644 index b524cc7c..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Services/IExerciseService.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace sadklouds.ExcerciseTracker.Services; -public interface IExerciseService -{ - public void GetAllExercises(); - public void DeleteExercise(); - public void UpdateExercise(); - public void AddExercise(); - public void GetExercise(); -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Visualisation/ExerciseMenu.cs b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Visualisation/ExerciseMenu.cs deleted file mode 100644 index fd53bcf0..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/Visualisation/ExerciseMenu.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace sadklouds.ExcerciseTracker.Visualisation; -public static class ExerciseMenu -{ - public static void Menu() - { - Console.WriteLine("-------------Exercise Tracker------------"); - Console.WriteLine("V) View All Exercises"); - Console.WriteLine("A) Add Exercise"); - Console.WriteLine("I) Insepct single Exercise"); - Console.WriteLine("D) Delete Exercise"); - Console.WriteLine("U) Update Exercise"); - Console.WriteLine("0) Exit application"); - Console.WriteLine("-----------------------------------------"); - Console.Write("Please select and option: "); - } -} diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/appsettings.json b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/appsettings.json deleted file mode 100644 index 81b4c3d3..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/appsettings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ConnectionStrings": { - "Default": "Server=(localdb)\\MSSQLLocalDB;Database=ExerciseTrackerDB;Trusted_Connection=True;" - } -} \ No newline at end of file diff --git a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker.csproj b/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker.csproj deleted file mode 100644 index cbf46636..00000000 --- a/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker/sadklouds.ExcerciseTracker.csproj +++ /dev/null @@ -1,27 +0,0 @@ - - - - Exe - net7.0 - enable - enable - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - PreserveNewest - - - -