Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added Dania.CodingTracker/Assets/1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Dania.CodingTracker/Assets/2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Dania.CodingTracker/Assets/3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 23 additions & 0 deletions Dania.CodingTracker/CodingTracker/CodingTracker.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">

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

<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.72" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.3" />
<PackageReference Include="Spectre.Console" Version="0.54.0" />
</ItemGroup>

<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>
3 changes: 3 additions & 0 deletions Dania.CodingTracker/CodingTracker/CodingTracker.slnx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<Solution>
<Project Path="CodingTracker.csproj" />
</Solution>
105 changes: 105 additions & 0 deletions Dania.CodingTracker/CodingTracker/DatabaseManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
using CodingTracker.Models;
using Dapper;
using Microsoft.Data.Sqlite;
using Microsoft.Extensions.Configuration;

namespace CodingTracker
{
internal class DatabaseManager
{
//Appsetting.json config connection
public string GetConnectionString()
{
IConfiguration config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
string connectionString = config.GetConnectionString("DefaultConnection");

return connectionString;

}

internal void CreateTable()
{
using (var connection = new SqliteConnection(GetConnectionString()))
{
var sql = @"CREATE TABLE IF NOT EXISTS coding_tracker(
Id INTEGER PRIMARY KEY AUTOINCREMENT,
StartTime TEXT,
EndTime TEXT,
Duration TEXT)";

connection.Execute(sql); //Dapper execute
}
}

// Return rows affected checks if the execute succeeds or not
internal int Post(CodingSession session)
{
using (var connection = new SqliteConnection(GetConnectionString()))
{
var sql = "INSERT INTO coding_tracker (StartTime, EndTime, Duration) VALUES (@StartTime, @EndTime, @Duration)";

var rowsAffected = connection.Execute(sql,session); //Dapper Execute
return rowsAffected;
}
}

internal List<CodingSession> Get()
{
using (var connection = new SqliteConnection(GetConnectionString()))
{
var sql = "SELECT * FROM coding_tracker";

var sessions = connection.Query<CodingSession>(sql);

return sessions.ToList();
}
}


internal void Delete(int id)
{
using (var connection = new SqliteConnection(GetConnectionString()))
{
var sql = "DELETE FROM coding_tracker WHERE Id = @Id";

connection.Execute(sql, new {Id = id });
}
}

internal void Update(CodingSession session)
{
using (var connection = new SqliteConnection(GetConnectionString()))
{
var sql = @"UPDATE coding_tracker
SET StartTime = @StartTime,
EndTime = @EndTime,
Duration = @Duration
WHERE Id = @Id";

connection.Execute(sql, session);
}
}

internal bool CheckIdExists(int id)
{
using (var connection = new SqliteConnection(GetConnectionString()))
{
var sql = "SELECT COUNT(*) FROM coding_tracker WHERE Id = @Id";

int count = connection.ExecuteScalar<int>(sql, new { Id = id});

return count > 0;
}
}

internal CodingSession GetSessionByID(int id)
{
using (var connection = new SqliteConnection(GetConnectionString()))
{
var sql = "SELECT * FROM coding_tracker where Id = @Id";
return connection.QuerySingle<CodingSession>(sql, new { Id = id });
}

}
}
}
14 changes: 14 additions & 0 deletions Dania.CodingTracker/CodingTracker/Enums.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace CodingTracker
{
internal class Enums
{
internal enum MenuOptions
{
ViewSessions,
InsertSessions,
UpdateSessions,
DeleteSessions,
CloseApp
}
}
}
50 changes: 50 additions & 0 deletions Dania.CodingTracker/CodingTracker/Helpers.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using Spectre.Console;
using System.Globalization;

namespace CodingTracker
{
internal class Helpers
{
CultureInfo enUS = new CultureInfo("en-US");

internal string CheckDateTime()
{
string date = "";
bool isValid = false;

do
{
date = AnsiConsole.Ask<string>("Format is [green]dd-MM-yy HH:mm[/] or type t for today's date and time: ");
date = date.Trim().ToLower();

if (date == "t")
date = DateTime.Now.ToString("dd-MM-yy HH:mm");

if (date != "0")
isValid = DateTime.TryParseExact(date, "dd-MM-yy HH:mm", enUS, DateTimeStyles.None, out _);
else
isValid = true;

if (!isValid)
{
AnsiConsole.Markup("[red]Please input the right date format![/]\n");
Console.ReadLine();
}

} while (!isValid);

return date;
}

internal TimeSpan GetDuration(string startDateTime, string endDateTime)
{
DateTime start = DateTime.ParseExact(startDateTime, "dd-MM-yy HH:mm", null);
DateTime end = DateTime.ParseExact(endDateTime, "dd-MM-yy HH:mm", null);

TimeSpan duration = end - start;

return duration;
}

}
}
10 changes: 10 additions & 0 deletions Dania.CodingTracker/CodingTracker/Models/CodingSession.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace CodingTracker.Models
{
internal class CodingSession
{
public int Id { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
public string Duration { get; set; }
}
}
14 changes: 14 additions & 0 deletions Dania.CodingTracker/CodingTracker/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace CodingTracker
{
internal class Program
{
static void Main(string[] args)
{
DatabaseManager databaseManager = new DatabaseManager();
UserInterface userInterface = new UserInterface();

databaseManager.CreateTable();
userInterface.MainMenu();
}
}
}
Loading