Implemented "Add" command and finished Db stuff.
This commit is contained in:
		@@ -0,0 +1,63 @@
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
using TBDel.Models;
 | 
			
		||||
using TBDel.Services;
 | 
			
		||||
 | 
			
		||||
namespace TBDel.Commands;
 | 
			
		||||
 | 
			
		||||
public class AddCommand
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public static async Task<Boolean> AddEntry(string[] args)
 | 
			
		||||
    {
 | 
			
		||||
        // TODO: Add unique Id support
 | 
			
		||||
        // TODO: Add duplicate path check
 | 
			
		||||
        // TODO: Add support for multiple paths
 | 
			
		||||
 | 
			
		||||
        if (args.Length > 1)
 | 
			
		||||
        {
 | 
			
		||||
            string workingDirectory = Directory.GetCurrentDirectory();
 | 
			
		||||
            string absolutePath = Path.Combine(workingDirectory, args[1]);
 | 
			
		||||
            if (File.Exists(absolutePath))
 | 
			
		||||
            {
 | 
			
		||||
                Console.WriteLine($"Adding: {absolutePath}");
 | 
			
		||||
                var entry = new FileEntry { Path = absolutePath, DateAdded = DateTime.Now };
 | 
			
		||||
                var dbService = new DbService();
 | 
			
		||||
                if (await dbService.AddFileEntryAsync(entry))
 | 
			
		||||
                {
 | 
			
		||||
                    Console.ForegroundColor = ConsoleColor.Green;
 | 
			
		||||
                    Console.WriteLine("File added successfully.");
 | 
			
		||||
                    Console.ResetColor();
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    Console.ForegroundColor = ConsoleColor.Red;
 | 
			
		||||
                    Console.WriteLine("Failed to add file.");
 | 
			
		||||
                    Console.ResetColor();
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (Directory.Exists(absolutePath))
 | 
			
		||||
            {
 | 
			
		||||
                Console.WriteLine($"Adding: {absolutePath}");
 | 
			
		||||
                var entry = new FolderEntry() { Path = absolutePath, DateAdded = DateTime.Now };
 | 
			
		||||
                var dbService = new DbService();
 | 
			
		||||
                if (await dbService.AddFolderEntryAsync(entry))
 | 
			
		||||
                {
 | 
			
		||||
                    Console.ForegroundColor = ConsoleColor.Green;
 | 
			
		||||
                    Console.WriteLine("Directory added successfully.");
 | 
			
		||||
                    Console.ResetColor();
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    Console.ForegroundColor = ConsoleColor.Red;
 | 
			
		||||
                    Console.WriteLine("Failed to add directory.");
 | 
			
		||||
                    Console.ResetColor();
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										28
									
								
								Commands/HelpCommand.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Commands/HelpCommand.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
 | 
			
		||||
namespace TBDel.Commands;
 | 
			
		||||
 | 
			
		||||
public static class HelpCommand
 | 
			
		||||
{
 | 
			
		||||
    // Show the help message
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Shows the help message.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    /// <param name="showOnWrongCommand">If true, displays an error message indicating that an invalid command was entered.</param>
 | 
			
		||||
    public static void Show(
 | 
			
		||||
        Boolean showOnWrongCommand = false)
 | 
			
		||||
    {
 | 
			
		||||
        if (showOnWrongCommand)
 | 
			
		||||
        {
 | 
			
		||||
            Console.ForegroundColor = ConsoleColor.Red;
 | 
			
		||||
            Console.Error.WriteLine("Invalid command. Use 'tbdel help' for help.");
 | 
			
		||||
            Console.ResetColor();
 | 
			
		||||
        }
 | 
			
		||||
        Console.WriteLine("Usage: tbdel <command> [arguments]");
 | 
			
		||||
        Console.WriteLine("Available commands:");
 | 
			
		||||
        Console.WriteLine("  add <path to file or folder>       Add a file or folder to the list");
 | 
			
		||||
        Console.WriteLine("  delete <path to file or folder OR file ID>         Deletes a file or folder from the list");
 | 
			
		||||
        Console.WriteLine("  deleteall        Deletes all items in the list");
 | 
			
		||||
        Console.WriteLine("  list             Lists all items in the list");
 | 
			
		||||
        Console.WriteLine("  help             Shows this help message");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
using TBDel.Models;
 | 
			
		||||
 | 
			
		||||
namespace TBDel.Interface;
 | 
			
		||||
 | 
			
		||||
public interface IDbService
 | 
			
		||||
{
 | 
			
		||||
    Task<Boolean> AddFileEntryAsync(FileEntry entry);
 | 
			
		||||
    Task<Boolean> AddFolderEntryAsync(FolderEntry entry);
 | 
			
		||||
    Task<List<FileEntry>> GetFileEntriesAsync();
 | 
			
		||||
    Task<List<FolderEntry>> GetFolderEntriesAsync();
 | 
			
		||||
    Task<Boolean> RemoveFileEntryAsync(string path);
 | 
			
		||||
    Task<Boolean> RemoveFolderEntryAsync(string path);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
namespace TBDel.Models;
 | 
			
		||||
 | 
			
		||||
// The DB entry - A list of files and folders
 | 
			
		||||
public class DbEntry
 | 
			
		||||
{
 | 
			
		||||
    public List<FileEntry> Files { get; set; } = new();
 | 
			
		||||
    public List<FolderEntry> Folders { get; set; } = new();
 | 
			
		||||
}
 | 
			
		||||
@@ -2,7 +2,9 @@ namespace TBDel.Models;
 | 
			
		||||
 | 
			
		||||
public class FileEntry
 | 
			
		||||
{
 | 
			
		||||
    // File path
 | 
			
		||||
    // Unique 5 digit number for each entry
 | 
			
		||||
    uint Id { get; set; }
 | 
			
		||||
    // Absolute path
 | 
			
		||||
    public string Path { get; set; } = string.Empty;
 | 
			
		||||
    // Date added
 | 
			
		||||
    public DateTime DateAdded { get; set; }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								Program.cs
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								Program.cs
									
									
									
									
									
								
							@@ -1,3 +1,43 @@
 | 
			
		||||
using TBDel.Interface;
 | 
			
		||||
using TBDel.Services;
 | 
			
		||||
using TBDel.Commands;
 | 
			
		||||
 | 
			
		||||
namespace TBDel
 | 
			
		||||
{
 | 
			
		||||
    internal class Program
 | 
			
		||||
    {
 | 
			
		||||
        // TODO: Add a command to show the Db path
 | 
			
		||||
        static async Task Main(string[] args)
 | 
			
		||||
        {
 | 
			
		||||
            // Show the help message if no arguments are provided
 | 
			
		||||
            if (args.Length == 0)
 | 
			
		||||
            {
 | 
			
		||||
                HelpCommand.Show();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            string command = args[0].ToLower();
 | 
			
		||||
 | 
			
		||||
            switch (command)
 | 
			
		||||
            {
 | 
			
		||||
                case "add":
 | 
			
		||||
                    await AddCommand.AddEntry(args);
 | 
			
		||||
                    break;
 | 
			
		||||
                case "delete":
 | 
			
		||||
                    
 | 
			
		||||
                    break;
 | 
			
		||||
                case "deleteall":
 | 
			
		||||
                    
 | 
			
		||||
                    break;
 | 
			
		||||
                case "list":
 | 
			
		||||
                    
 | 
			
		||||
                    break;
 | 
			
		||||
                case "help":
 | 
			
		||||
                    HelpCommand.Show();
 | 
			
		||||
                    break;
 | 
			
		||||
                default:
 | 
			
		||||
                    HelpCommand.Show(true);
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,64 +1,64 @@
 | 
			
		||||
using JsonFlatFileDataStore;
 | 
			
		||||
using TBDel.Interface;
 | 
			
		||||
using TBDel.Models;
 | 
			
		||||
 | 
			
		||||
namespace TBDel.Services;
 | 
			
		||||
 | 
			
		||||
public class DbService : IDbService
 | 
			
		||||
public class DbService 
 | 
			
		||||
{
 | 
			
		||||
    private readonly DataStore _store;
 | 
			
		||||
    /*private readonly IDataCollection<FileEntry> _fileCollection;
 | 
			
		||||
    private readonly IDataCollection<FolderEntry> _folderCollection;*/
 | 
			
		||||
    private readonly IDocumentCollection<FileEntry> _fileCollection;
 | 
			
		||||
    private readonly IDocumentCollection<FolderEntry> _folderCollection;
 | 
			
		||||
 | 
			
		||||
    public DbService(string filePath) // Constructor takes the file path
 | 
			
		||||
    public DbService() 
 | 
			
		||||
    {
 | 
			
		||||
        /*_store = new DataStore(filePath);
 | 
			
		||||
        string dbPath =
 | 
			
		||||
            Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "TBDel_Db.json");
 | 
			
		||||
        var _store = new DataStore(dbPath,minifyJson:true);
 | 
			
		||||
        _fileCollection = _store.GetCollection<FileEntry>();
 | 
			
		||||
        _folderCollection = _store.GetCollection<FolderEntry>();*/
 | 
			
		||||
        _folderCollection = _store.GetCollection<FolderEntry>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public async Task<Boolean> AddFileEntryAsync(FileEntry entry)
 | 
			
		||||
    {
 | 
			
		||||
        //await _fileCollection.InsertOneAsync(entry);
 | 
			
		||||
        return false; 
 | 
			
		||||
        return await _fileCollection.InsertOneAsync(entry);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task<Boolean> AddFolderEntryAsync(FolderEntry entry)
 | 
			
		||||
    {
 | 
			
		||||
        //await _folderCollection.InsertOneAsync(entry);
 | 
			
		||||
        return false;
 | 
			
		||||
        return await _folderCollection.InsertOneAsync(entry);
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task<List<FileEntry>> GetFileEntriesAsync()
 | 
			
		||||
    {
 | 
			
		||||
        //return _fileCollection.AsQueryable().ToList();
 | 
			
		||||
        return new List<FileEntry>();
 | 
			
		||||
        return _fileCollection.AsQueryable().ToList();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task<List<FolderEntry>> GetFolderEntriesAsync()
 | 
			
		||||
    {
 | 
			
		||||
        //return _folderCollection.AsQueryable().ToList();
 | 
			
		||||
        return new List<FolderEntry>();
 | 
			
		||||
        return _folderCollection.AsQueryable().ToList();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public async Task<Boolean> RemoveFileEntryAsync(string path)
 | 
			
		||||
    public  async Task<Boolean> RemoveFileEntryAsync(string path)
 | 
			
		||||
    {
 | 
			
		||||
        //var entryToRemove = _fileCollection.AsQueryable().FirstOrDefault(e => e.Path == path);
 | 
			
		||||
        /*if (entryToRemove != null)
 | 
			
		||||
        var entryToRemove = _fileCollection.AsQueryable().FirstOrDefault(e => e.Path == path);
 | 
			
		||||
        if (entryToRemove != null)
 | 
			
		||||
        {
 | 
			
		||||
            await _fileCollection.DeleteOneAsync(e => e.Path == path); // or entryToRemove.Path
 | 
			
		||||
        }*/
 | 
			
		||||
            return await _fileCollection.DeleteOneAsync(e => e.Path == path); // or entryToRemove.Path
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task<Boolean> RemoveFolderEntryAsync(string path)
 | 
			
		||||
    {
 | 
			
		||||
        //var entryToRemove = _folderCollection.AsQueryable().FirstOrDefault(e => e.Path == path);
 | 
			
		||||
        /*if (entryToRemove != null)
 | 
			
		||||
        var entryToRemove = _folderCollection.AsQueryable().FirstOrDefault(e => e.Path == path);
 | 
			
		||||
        if (entryToRemove != null)
 | 
			
		||||
        {
 | 
			
		||||
            await _folderCollection.DeleteOneAsync(e => e.Path == path); // or entryToRemove.Path
 | 
			
		||||
        }*/
 | 
			
		||||
            return await _folderCollection.DeleteOneAsync(e => e.Path == path); // or entryToRemove.Path
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -9,6 +9,7 @@
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <PackageReference Include="JsonFlatFileDataStore" Version="2.4.2" />
 | 
			
		||||
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="9.0.1" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
</Project>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user