Implemented unique Id for each entry - Implemented delete single entry command

This commit is contained in:
2025-02-04 13:56:40 +03:30
parent 83347587e4
commit 9b1d6aebe7
6 changed files with 194 additions and 175 deletions

View File

@@ -1,14 +1,12 @@
using TBDel.Models; using TBDel.Models;
using TBDel.Services; using TBDel.Services;
namespace TBDel.Commands; namespace TBDel.Commands
{
public class AddCommand public class AddCommand
{ {
public static async Task AddEntry(string[] args)
public static async Task<Boolean> AddEntry(string[] args)
{ {
// TODO: Add unique Id support
// TODO: Add duplicate path check // TODO: Add duplicate path check
// TODO: Add support for multiple paths // TODO: Add support for multiple paths
@@ -16,47 +14,68 @@ public class AddCommand
{ {
string workingDirectory = Directory.GetCurrentDirectory(); string workingDirectory = Directory.GetCurrentDirectory();
string absolutePath = Path.Combine(workingDirectory, args[1]); string absolutePath = Path.Combine(workingDirectory, args[1]);
var dbService = new DbService();
if (File.Exists(absolutePath)) if (File.Exists(absolutePath))
{ {
Console.WriteLine($"Adding: {absolutePath}"); Console.WriteLine($"Adding: {absolutePath}");
var entry = new FileEntry { Path = absolutePath, DateAdded = DateTime.Now }; var entry = new FileEntry { Id = GenerateUniqueId(dbService), Path = absolutePath, DateAdded = DateTime.Now };
var dbService = new DbService();
if (await dbService.AddFileEntryAsync(entry)) if (await dbService.AddFileEntryAsync(entry))
{ {
Console.ForegroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("File added successfully."); Console.WriteLine("File added successfully.");
Console.ResetColor(); Console.ResetColor();
return true; return;
} }
else else
{ {
Console.ForegroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Failed to add file."); Console.WriteLine("Failed to add file.");
Console.ResetColor(); Console.ResetColor();
return false; return;
} }
} }
else if (Directory.Exists(absolutePath)) else if (Directory.Exists(absolutePath))
{ {
Console.WriteLine($"Adding: {absolutePath}"); Console.WriteLine($"Adding: {absolutePath}");
var entry = new FolderEntry() { Path = absolutePath, DateAdded = DateTime.Now }; var entry = new FolderEntry() { Id = GenerateUniqueId(dbService), Path = absolutePath, DateAdded = DateTime.Now };
var dbService = new DbService();
if (await dbService.AddFolderEntryAsync(entry)) if (await dbService.AddFolderEntryAsync(entry))
{ {
Console.ForegroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Directory added successfully."); Console.WriteLine("Directory added successfully.");
Console.ResetColor(); Console.ResetColor();
return true; return;
} }
else else
{ {
Console.ForegroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Failed to add directory."); Console.WriteLine("Failed to add directory.");
Console.ResetColor(); Console.ResetColor();
return false; return;
} }
} }
} }
return false; }
private static uint GenerateUniqueId(DbService dbService)
{
// Hopefully not running away from me one day
Random random = new Random();
uint newId;
do
{
newId = (uint)random.Next(10000, 99999);
} while (IdExists(newId, dbService));
return newId;
}
private static bool IdExists(uint id, DbService dbService)
{
// Not async? Not a problem (yet(?))
var fileEntries = dbService.GetFileEntriesAsync().Result;
var folderEntries = dbService.GetFolderEntriesAsync().Result;
return fileEntries.Any(e => e.Id == id) || folderEntries.Any(e => e.Id == id);
}
} }
} }

View File

@@ -1,8 +1,8 @@
using TBDel.Services; using TBDel.Services;
namespace TBDel.Commands; namespace TBDel.Commands
{
public class DeleteCAllCommand public class DeleteAllCommand
{ {
public static async Task DeleteAll() public static async Task DeleteAll()
{ {
@@ -17,7 +17,7 @@ public class DeleteCAllCommand
} }
Console.ForegroundColor = ConsoleColor.Yellow; Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"Are you sure you want to permanently delete {allFiles.Count} file(s) and {allFolders.Count} folder(s)? (y/N)"); Console.Write($"Are you sure you want to permanently delete {allFiles.Count} file(s) and {allFolders.Count} folder(s)? (y/N)");
Console.ResetColor(); Console.ResetColor();
var input = Console.ReadLine(); var input = Console.ReadLine();
if (input != "y") if (input != "y")
@@ -28,28 +28,22 @@ public class DeleteCAllCommand
return; return;
} }
var toBeDeletedFiles = new List<string>();
var toBeDeletedFolders = new List<string>();
foreach (var file in allFiles) foreach (var file in allFiles)
{ {
toBeDeletedFiles.Add(file.Path); Console.WriteLine($"Deleting file: {file.Path}");
File.Delete(file.Path);
await dbService.RemoveFileEntryAsync(file.Id);
} }
foreach (var folder in allFolders) foreach (var folder in allFolders)
{ {
toBeDeletedFolders.Add(folder.Path); Console.WriteLine($"Deleting directory: {folder.Path}");
Directory.Delete(folder.Path, true);
await dbService.RemoveFolderEntryAsync(folder.Id);
} }
foreach (var file in toBeDeletedFiles) Console.ForegroundColor = ConsoleColor.Green;
{ Console.WriteLine("All files and folders deleted successfully.");
Console.WriteLine($"Deleting file: {file}"); Console.ResetColor();
File.Delete(file);
await dbService.RemoveFileEntryAsync(file);
}
foreach (var folder in toBeDeletedFolders)
{
Console.WriteLine($"Deleting directory: {folder}");
Directory.Delete(folder, true);
await dbService.RemoveFolderEntryAsync(folder);
} }
} }
} }

View File

@@ -1,35 +1,38 @@
using TBDel.Models; using TBDel.Models;
using TBDel.Services; using TBDel.Services;
namespace TBDel.Commands; namespace TBDel.Commands
{
public class DeleteCommand public class DeleteCommand
{ {
// Will be done by unique file Id
public static async Task DeleteEntry(string[] args) public static async Task DeleteEntry(string[] args)
{ {
var dbService = new DbService(); var dbService = new DbService();
if (args.Length > 1) if (args.Length > 1 && uint.TryParse(args[1], out uint id))
{ {
if (File.Exists(args[1])) Console.WriteLine($"Deleting entry with ID: {id}");
{ bool fileDeleted = await dbService.RemoveFileEntryAsync(id);
Console.WriteLine($"Deleteing file: {args[1]}"); bool folderDeleted = await dbService.RemoveFolderEntryAsync(id);
if (await dbService.RemoveFileEntryAsync(args[1]))
if (fileDeleted || folderDeleted)
{ {
Console.ForegroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("File deleted successfully"); Console.WriteLine("Entry deleted successfully.");
Console.ResetColor(); Console.ResetColor();
} }
else else
{ {
Console.ForegroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("something went wrong"); Console.WriteLine("Something went wrong. Entry not found.");
Console.ResetColor();
}
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Invalid or missing ID argument.");
Console.ResetColor(); Console.ResetColor();
} }
} }
} }
}
} }

View File

@@ -1,8 +1,8 @@
using TBDel.Models; using TBDel.Models;
using TBDel.Services; using TBDel.Services;
namespace TBDel.Commands; namespace TBDel.Commands
{
public class ListCommand public class ListCommand
{ {
public static async Task List(string[] args) public static async Task List(string[] args)
@@ -31,7 +31,6 @@ public class ListCommand
{ {
await ListFolders(); await ListFolders();
} }
} }
private static async Task ListFiles() private static async Task ListFiles()
@@ -47,13 +46,14 @@ public class ListCommand
Console.ForegroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Found {0} file(s):\n", filesList.Count); Console.WriteLine("Found {0} file(s):\n", filesList.Count);
Console.WriteLine("{0,-100} {1,10}\n", "Path", "Date added"); Console.WriteLine("{0,-10} {1,-90} {2,10}\n", "ID", "Path", "Date added");
Console.ResetColor(); Console.ResetColor();
foreach (var file in filesList) foreach (var file in filesList)
{ {
Console.WriteLine("{0,-100} {1,10}", file.Path, file.DateAdded); Console.WriteLine("{0,-10} {1,-90} {2,10}", file.Id, file.Path, file.DateAdded);
} }
} }
private static async Task ListFolders() private static async Task ListFolders()
{ {
var dbService = new DbService(); var dbService = new DbService();
@@ -67,11 +67,12 @@ public class ListCommand
Console.ForegroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Found {0} folder(s):\n", foldersList.Count); Console.WriteLine("Found {0} folder(s):\n", foldersList.Count);
Console.WriteLine("{0,-100} {1,10}\n", "Path", "Date added"); Console.WriteLine("{0,-10} {1,-90} {2,10}\n", "ID", "Path", "Date added");
Console.ResetColor(); Console.ResetColor();
foreach (var folder in foldersList) foreach (var folder in foldersList)
{ {
Console.WriteLine("{0,-100} {1,10}", folder.Path, folder.DateAdded); Console.WriteLine("{0,-10} {1,-90} {2,10}", folder.Id, folder.Path, folder.DateAdded);
}
} }
} }
} }

View File

@@ -26,7 +26,7 @@ namespace TBDel
await DeleteCommand.DeleteEntry(args); await DeleteCommand.DeleteEntry(args);
break; break;
case "deleteall": case "deleteall":
await DeleteCAllCommand.DeleteAll(); await DeleteAllCommand.DeleteAll();
break; break;
case "list": case "list":
await ListCommand.List(args); await ListCommand.List(args);

View File

@@ -66,9 +66,9 @@ namespace TBDel.Services
return await Task.FromResult(_folderCollection.ToList()); return await Task.FromResult(_folderCollection.ToList());
} }
public async Task<bool> RemoveFileEntryAsync(string path) public async Task<bool> RemoveFileEntryAsync(uint id)
{ {
var entryToRemove = _fileCollection.FirstOrDefault(e => e.Path == path); var entryToRemove = _fileCollection.FirstOrDefault(e => e.Id == id);
if (entryToRemove != null) if (entryToRemove != null)
{ {
_fileCollection.Remove(entryToRemove); _fileCollection.Remove(entryToRemove);
@@ -78,9 +78,9 @@ namespace TBDel.Services
return await Task.FromResult(false); return await Task.FromResult(false);
} }
public async Task<bool> RemoveFolderEntryAsync(string path) public async Task<bool> RemoveFolderEntryAsync(uint id)
{ {
var entryToRemove = _folderCollection.FirstOrDefault(e => e.Path == path); var entryToRemove = _folderCollection.FirstOrDefault(e => e.Id == id);
if (entryToRemove != null) if (entryToRemove != null)
{ {
_folderCollection.Remove(entryToRemove); _folderCollection.Remove(entryToRemove);
@@ -89,6 +89,8 @@ namespace TBDel.Services
} }
return await Task.FromResult(false); return await Task.FromResult(false);
} }
} }
public class DatabaseContent public class DatabaseContent