From 6799cda83ca99ade1571b37635fae7364bfb1cc5 Mon Sep 17 00:00:00 2001
From: Hyungmin Oh <113154067+hyungminoh2@users.noreply.github.com>
Date: Tue, 17 Feb 2026 23:54:53 -0500
Subject: [PATCH] Added my finished Coding Tracker
---
CodingTracker/CodingTracker.csproj | 25 +
CodingTracker/Controllers/CodingController.cs | 63 +
CodingTracker/Data/Database.cs | 68 +
CodingTracker/Enums.cs | 10 +
CodingTracker/Models/CodingSession.cs | 21 +
CodingTracker/Program.cs | 10 +
CodingTracker/UserInput.cs | 41 +
CodingTracker/Validation.cs | 0
CodingTracker/appsettings.json | 5 +
CodingTracker/bin/Debug/net10.0/CodingTracker | Bin 0 -> 124712 bytes
.../bin/Debug/net10.0/CodingTracker.deps.json | 419 ++++++
.../bin/Debug/net10.0/CodingTracker.dll | Bin 0 -> 12288 bytes
.../bin/Debug/net10.0/CodingTracker.pdb | Bin 0 -> 14996 bytes
.../net10.0/CodingTracker.runtimeconfig.json | 12 +
CodingTracker/bin/Debug/net10.0/Dapper.dll | Bin 0 -> 245760 bytes
.../Debug/net10.0/Microsoft.Data.Sqlite.dll | Bin 0 -> 177696 bytes
....Extensions.Configuration.Abstractions.dll | Bin 0 -> 28936 bytes
...xtensions.Configuration.FileExtensions.dll | Bin 0 -> 28976 bytes
...icrosoft.Extensions.Configuration.Json.dll | Bin 0 -> 28472 bytes
.../Microsoft.Extensions.Configuration.dll | Bin 0 -> 45320 bytes
....Extensions.FileProviders.Abstractions.dll | Bin 0 -> 23864 bytes
...soft.Extensions.FileProviders.Physical.dll | Bin 0 -> 45832 bytes
...icrosoft.Extensions.FileSystemGlobbing.dll | Bin 0 -> 48432 bytes
.../Microsoft.Extensions.Primitives.dll | Bin 0 -> 45320 bytes
.../net10.0/SQLitePCLRaw.batteries_v2.dll | Bin 0 -> 5120 bytes
.../bin/Debug/net10.0/SQLitePCLRaw.core.dll | Bin 0 -> 51200 bytes
.../SQLitePCLRaw.provider.e_sqlite3.dll | Bin 0 -> 36864 bytes
.../bin/Debug/net10.0/Spectre.Console.dll | Bin 0 -> 809472 bytes
.../bin/Debug/net10.0/appsettings.json | 5 +
.../nativeassets/net9.0/e_sqlite3.a | Bin 0 -> 1202596 bytes
.../runtimes/linux-arm/native/libe_sqlite3.so | Bin 0 -> 893360 bytes
.../linux-arm64/native/libe_sqlite3.so | Bin 0 -> 1374696 bytes
.../linux-armel/native/libe_sqlite3.so | Bin 0 -> 1257916 bytes
.../linux-mips64/native/libe_sqlite3.so | Bin 0 -> 1594136 bytes
.../linux-musl-arm/native/libe_sqlite3.so | Bin 0 -> 1219860 bytes
.../linux-musl-arm64/native/libe_sqlite3.so | Bin 0 -> 1335840 bytes
.../linux-musl-riscv64/native/libe_sqlite3.so | Bin 0 -> 941944 bytes
.../linux-musl-s390x/native/libe_sqlite3.so | Bin 0 -> 1554416 bytes
.../linux-musl-x64/native/libe_sqlite3.so | Bin 0 -> 1323128 bytes
.../linux-ppc64le/native/libe_sqlite3.so | Bin 0 -> 1722360 bytes
.../linux-riscv64/native/libe_sqlite3.so | Bin 0 -> 955392 bytes
.../linux-s390x/native/libe_sqlite3.so | Bin 0 -> 1504352 bytes
.../runtimes/linux-x64/native/libe_sqlite3.so | Bin 0 -> 1348440 bytes
.../runtimes/linux-x86/native/libe_sqlite3.so | Bin 0 -> 1416232 bytes
.../native/libe_sqlite3.dylib | Bin 0 -> 1569856 bytes
.../maccatalyst-x64/native/libe_sqlite3.dylib | Bin 0 -> 1624336 bytes
.../osx-arm64/native/libe_sqlite3.dylib | Bin 0 -> 1554624 bytes
.../osx-x64/native/libe_sqlite3.dylib | Bin 0 -> 1591680 bytes
.../runtimes/win-arm/native/e_sqlite3.dll | Bin 0 -> 1282560 bytes
.../runtimes/win-arm64/native/e_sqlite3.dll | Bin 0 -> 1592320 bytes
.../runtimes/win-x64/native/e_sqlite3.dll | Bin 0 -> 1795072 bytes
.../runtimes/win-x86/native/e_sqlite3.dll | Bin 0 -> 1453568 bytes
CodingTracker/codingtracker.db | Bin 0 -> 12288 bytes
.../CodingTracker.csproj.nuget.dgspec.json | 367 ++++++
.../obj/CodingTracker.csproj.nuget.g.props | 15 +
.../obj/CodingTracker.csproj.nuget.g.targets | 6 +
.../Debug/net10.0/CodingTr.3232F510.Up2Date | 0
.../net10.0/CodingTracker.AssemblyInfo.cs | 22 +
.../CodingTracker.AssemblyInfoInputs.cache | 1 +
....GeneratedMSBuildEditorConfig.editorconfig | 17 +
.../net10.0/CodingTracker.GlobalUsings.g.cs | 8 +
.../Debug/net10.0/CodingTracker.assets.cache | Bin 0 -> 15992 bytes
...dingTracker.csproj.AssemblyReference.cache | Bin 0 -> 6839 bytes
...dingTracker.csproj.CoreCompileInputs.cache | 1 +
.../CodingTracker.csproj.FileListAbsolute.txt | 55 +
.../obj/Debug/net10.0/CodingTracker.dll | Bin 0 -> 12288 bytes
.../CodingTracker.genruntimeconfig.cache | 1 +
.../obj/Debug/net10.0/CodingTracker.pdb | Bin 0 -> 14996 bytes
.../net10.0/CodingTracker.sourcelink.json | 1 +
CodingTracker/obj/Debug/net10.0/apphost | Bin 0 -> 124712 bytes
.../obj/Debug/net10.0/ref/CodingTracker.dll | Bin 0 -> 6656 bytes
.../Debug/net10.0/refint/CodingTracker.dll | Bin 0 -> 6656 bytes
CodingTracker/obj/project.assets.json | 1132 +++++++++++++++++
CodingTracker/obj/project.nuget.cache | 25 +
74 files changed, 2330 insertions(+)
create mode 100644 CodingTracker/CodingTracker.csproj
create mode 100644 CodingTracker/Controllers/CodingController.cs
create mode 100644 CodingTracker/Data/Database.cs
create mode 100644 CodingTracker/Enums.cs
create mode 100644 CodingTracker/Models/CodingSession.cs
create mode 100644 CodingTracker/Program.cs
create mode 100644 CodingTracker/UserInput.cs
create mode 100644 CodingTracker/Validation.cs
create mode 100644 CodingTracker/appsettings.json
create mode 100644 CodingTracker/bin/Debug/net10.0/CodingTracker
create mode 100644 CodingTracker/bin/Debug/net10.0/CodingTracker.deps.json
create mode 100644 CodingTracker/bin/Debug/net10.0/CodingTracker.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/CodingTracker.pdb
create mode 100644 CodingTracker/bin/Debug/net10.0/CodingTracker.runtimeconfig.json
create mode 100644 CodingTracker/bin/Debug/net10.0/Dapper.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/Microsoft.Data.Sqlite.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/Microsoft.Extensions.Configuration.FileExtensions.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/Microsoft.Extensions.Configuration.Json.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/Microsoft.Extensions.Configuration.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/Microsoft.Extensions.FileProviders.Abstractions.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/Microsoft.Extensions.FileProviders.Physical.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/Microsoft.Extensions.FileSystemGlobbing.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/Microsoft.Extensions.Primitives.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/SQLitePCLRaw.batteries_v2.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/SQLitePCLRaw.core.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/SQLitePCLRaw.provider.e_sqlite3.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/Spectre.Console.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/appsettings.json
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/browser-wasm/nativeassets/net9.0/e_sqlite3.a
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-arm/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-arm64/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-armel/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-mips64/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-musl-arm/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-musl-arm64/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-musl-riscv64/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-musl-s390x/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-musl-x64/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-ppc64le/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-riscv64/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-s390x/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-x64/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/linux-x86/native/libe_sqlite3.so
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/maccatalyst-arm64/native/libe_sqlite3.dylib
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/maccatalyst-x64/native/libe_sqlite3.dylib
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/osx-arm64/native/libe_sqlite3.dylib
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/osx-x64/native/libe_sqlite3.dylib
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/win-arm/native/e_sqlite3.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/win-arm64/native/e_sqlite3.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/win-x64/native/e_sqlite3.dll
create mode 100644 CodingTracker/bin/Debug/net10.0/runtimes/win-x86/native/e_sqlite3.dll
create mode 100644 CodingTracker/codingtracker.db
create mode 100644 CodingTracker/obj/CodingTracker.csproj.nuget.dgspec.json
create mode 100644 CodingTracker/obj/CodingTracker.csproj.nuget.g.props
create mode 100644 CodingTracker/obj/CodingTracker.csproj.nuget.g.targets
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTr.3232F510.Up2Date
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.AssemblyInfo.cs
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.AssemblyInfoInputs.cache
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.GeneratedMSBuildEditorConfig.editorconfig
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.GlobalUsings.g.cs
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.assets.cache
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.csproj.AssemblyReference.cache
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.csproj.CoreCompileInputs.cache
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.csproj.FileListAbsolute.txt
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.dll
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.genruntimeconfig.cache
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.pdb
create mode 100644 CodingTracker/obj/Debug/net10.0/CodingTracker.sourcelink.json
create mode 100644 CodingTracker/obj/Debug/net10.0/apphost
create mode 100644 CodingTracker/obj/Debug/net10.0/ref/CodingTracker.dll
create mode 100644 CodingTracker/obj/Debug/net10.0/refint/CodingTracker.dll
create mode 100644 CodingTracker/obj/project.assets.json
create mode 100644 CodingTracker/obj/project.nuget.cache
diff --git a/CodingTracker/CodingTracker.csproj b/CodingTracker/CodingTracker.csproj
new file mode 100644
index 000000000..8b539d099
--- /dev/null
+++ b/CodingTracker/CodingTracker.csproj
@@ -0,0 +1,25 @@
+
+
+
+ Exe
+ net10.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
diff --git a/CodingTracker/Controllers/CodingController.cs b/CodingTracker/Controllers/CodingController.cs
new file mode 100644
index 000000000..1e66e202f
--- /dev/null
+++ b/CodingTracker/Controllers/CodingController.cs
@@ -0,0 +1,63 @@
+using Spectre.Console;
+using CodingTracker.Models;
+using CodingTracker.Data;
+
+namespace CodingTracker.Controllers;
+
+internal class CodingController
+{
+ private readonly Database _database = new Database();
+
+ public void ViewSessions()
+ {
+ var table = new Table();
+ table.Border(TableBorder.Rounded);
+ table.AddColumn("[yellow]ID[/]");
+ table.AddColumn("[yellow]StartTime[/]");
+ table.AddColumn("[yellow]EndTime[/]");
+ table.AddColumn("[yellow]Duration[/]");
+ table.AddColumn("[yellow]Description[/]");
+
+ var sessions = _database.GetAll();
+ foreach (var session in sessions)
+ {
+ table.AddRow(
+ session.Id.ToString(),
+ session.StartTime.ToString("g"),
+ session.EndTime.ToString("g"),
+ $"{(session.EndTime - session.StartTime).TotalMinutes} mins",
+ session.Description ?? ""
+ );
+ }
+
+ AnsiConsole.Write(table);
+ AnsiConsole.MarkupLine("Press Any Key to Continue.");
+ Console.ReadKey();
+ }
+ public void AddSession()
+ {
+ var startTime = AnsiConsole.Ask("Enter the [green]start time[/] of the coding session (e.g., 2024-01-01 14:00):");
+ var endTime = AnsiConsole.Ask("Enter the [green]end time[/] of the coding session (e.g., 2024-01-01 16:00):");
+ var description = AnsiConsole.Ask("Enter a [green]description[/] for the coding session (optional):");
+
+ var newSession = new CodingSession
+ {
+ StartTime = startTime,
+ EndTime = endTime,
+ Description = description
+ };
+
+ _database.Insert(newSession);
+ AnsiConsole.MarkupLine("[green]Coding session added successfully![/]");
+ AnsiConsole.MarkupLine("Press Any Key to Continue.");
+ Console.ReadKey();
+ }
+ public void DeleteSession()
+ {
+ var id = AnsiConsole.Ask("Enter the [green]ID[/] of the session to delete:");
+ _database.Delete(id);
+ AnsiConsole.MarkupLine("[green]Session deleted successfully![/]");
+ AnsiConsole.MarkupLine("Press Any Key to Continue.");
+ Console.ReadKey();
+ }
+}
\ No newline at end of file
diff --git a/CodingTracker/Data/Database.cs b/CodingTracker/Data/Database.cs
new file mode 100644
index 000000000..f186b79c9
--- /dev/null
+++ b/CodingTracker/Data/Database.cs
@@ -0,0 +1,68 @@
+using Microsoft.Data.Sqlite;
+using Microsoft.Extensions.Configuration;
+using Dapper;
+using CodingTracker.Models;
+
+namespace CodingTracker.Data;
+
+internal class Database
+{
+ private readonly string _connectionString;
+
+ public Database()
+ {
+ var config = new ConfigurationBuilder()
+ .AddJsonFile("appsettings.json")
+ .Build();
+
+ _connectionString = config.GetConnectionString("Default");
+ }
+
+ public SqliteConnection GetConnection()
+ {
+ return new SqliteConnection(_connectionString);
+ }
+
+ public void Initialize()
+ {
+ using var connection = GetConnection();
+
+ string sql = @"
+ CREATE TABLE IF NOT EXISTS CodingSessions (
+ Id INTEGER PRIMARY KEY AUTOINCREMENT,
+ StartTime TEXT NOT NULL,
+ EndTime TEXT NOT NULL,
+ Description TEXT
+ );";
+
+ connection.Execute(sql);
+ }
+
+
+ public List GetAll()
+ {
+ using var connection = GetConnection();
+
+ string sql = "SELECT * FROM CodingSessions";
+
+ return connection.Query(sql).ToList();
+ }
+
+ public void Insert(CodingSession session)
+ {
+ using var connection = GetConnection();
+
+ string sql = @"
+INSERT INTO CodingSessions (StartTime, EndTime, Description)
+VALUES (@StartTime, @EndTime, @Description)";
+
+ connection.Execute(sql, session);
+ }
+ public void Delete(int id)
+ {
+ using var connection = GetConnection();
+ string sql = "DELETE FROM CodingSessions WHERE Id = @Id";
+ connection.Execute(sql, new { Id = id });
+ }
+
+}
diff --git a/CodingTracker/Enums.cs b/CodingTracker/Enums.cs
new file mode 100644
index 000000000..759ebfeda
--- /dev/null
+++ b/CodingTracker/Enums.cs
@@ -0,0 +1,10 @@
+namespace CodingTracker
+{
+ internal enum MenuAction
+ {
+ ViewSession,
+ AddSession,
+ DeleteSession,
+ Exit
+ }
+}
diff --git a/CodingTracker/Models/CodingSession.cs b/CodingTracker/Models/CodingSession.cs
new file mode 100644
index 000000000..4dbd0a514
--- /dev/null
+++ b/CodingTracker/Models/CodingSession.cs
@@ -0,0 +1,21 @@
+namespace CodingTracker.Models;
+
+internal class CodingSession
+{
+ public int Id { get; set; }
+ public DateTime StartTime { get; set; }
+ public DateTime EndTime { get; set; }
+ public string Description { get; set; }
+
+ public TimeSpan Duration => EndTime - StartTime;
+
+ public CodingSession() { }
+
+ public CodingSession(int id, DateTime startTime, DateTime endTime, string description)
+ {
+ Id = id;
+ StartTime = startTime;
+ EndTime = endTime;
+ Description = description;
+ }
+}
diff --git a/CodingTracker/Program.cs b/CodingTracker/Program.cs
new file mode 100644
index 000000000..821fa24c7
--- /dev/null
+++ b/CodingTracker/Program.cs
@@ -0,0 +1,10 @@
+using CodingTracker;
+using CodingTracker.Data;
+
+// Initialize the database (creates the table if it doesn't exist)
+var db = new Database();
+db.Initialize();
+
+// Start the user interface
+UserInterface ui = new();
+ui.MainMenu();
diff --git a/CodingTracker/UserInput.cs b/CodingTracker/UserInput.cs
new file mode 100644
index 000000000..6eee03825
--- /dev/null
+++ b/CodingTracker/UserInput.cs
@@ -0,0 +1,41 @@
+using Spectre.Console;
+using CodingTracker.Controllers;
+using CodingTracker;
+
+namespace CodingTracker;
+
+internal class UserInterface
+{
+ private readonly CodingController _controller = new CodingController();
+
+ public void MainMenu()
+ {
+ bool closeApp = false;
+ while (closeApp == false)
+ {
+ Console.Clear();
+
+ var actionChoice = AnsiConsole.Prompt(
+ new SelectionPrompt()
+ .Title("What do you want to do next?")
+ .AddChoices(Enum.GetValues()));
+
+ switch (actionChoice)
+ {
+ case MenuAction.ViewSession:
+ _controller.ViewSessions();
+ break;
+ case MenuAction.AddSession:
+ _controller.AddSession();
+ break;
+ case MenuAction.DeleteSession:
+ _controller.DeleteSession();
+ break;
+ case MenuAction.Exit:
+ closeApp = true;
+ break;
+
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/CodingTracker/Validation.cs b/CodingTracker/Validation.cs
new file mode 100644
index 000000000..e69de29bb
diff --git a/CodingTracker/appsettings.json b/CodingTracker/appsettings.json
new file mode 100644
index 000000000..d371efe34
--- /dev/null
+++ b/CodingTracker/appsettings.json
@@ -0,0 +1,5 @@
+{
+ "ConnectionStrings": {
+ "Default": "Data Source=codingtracker.db"
+ }
+}
diff --git a/CodingTracker/bin/Debug/net10.0/CodingTracker b/CodingTracker/bin/Debug/net10.0/CodingTracker
new file mode 100644
index 0000000000000000000000000000000000000000..97c1dcf0c2c03e097ac67d552648f29741943cf0
GIT binary patch
literal 124712
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