diff --git a/Source Code/FileExtract.cs b/Source Code/FileExtract.cs new file mode 100644 index 0000000..0f214ae --- /dev/null +++ b/Source Code/FileExtract.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.UserManagement; + +namespace main +{ + internal class FileExtract + { + public static void Main(string[] args) + { + string[] lines = { "First line", "Second line", "Third line" }; + using StreamWriter file = new ("BulkRequest.txt"); + + var serviceTest = new AccountService(); + string dbType = "sql"; + RDSFactory dbFactory = new RDSFactory(); + + + // Testing Data Access Layer + string dbInfo = "DRIVER={MariaDB ODBC 3.1 Driver};" + + "TCPIP=1;" + + "SERVER=localhost;" + + "DATABASE=hobby;" + + "UID=root;" + + "PASSWORD=hobby;" + + "OPTION=3"; + IDataSource datasource = dbFactory.getDataSource(dbType, dbInfo); + + // Create a file + for (int i = 0; i < 10000; i++) + { + var TestAcc = new UserAccount("newUser" + $"{i}", "4567", $"email{i}@a.com", "regular", DateTime.Now); + file.Write(serviceTest.CreateUserRecord(TestAcc, "Rifat", datasource)); + } + } + } +} diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Implementations/UiPrint.cs b/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Implementations/UiPrint.cs index 6d06cb8..d9f19aa 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Implementations/UiPrint.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Implementations/UiPrint.cs @@ -6,6 +6,9 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess { public void UserManagementMenu(string username) { + // File must be within the main folder path + // Get the current directory. + string path = Directory.GetCurrentDirectory(); // Menu for all UserManagement options int menu = 0; Console.WriteLine("-------------------------------------\n"); @@ -23,6 +26,8 @@ namespace TeamHobby.HobbyProjectGenerator.DataAccess menu += 1; Console.WriteLine(menu + ") Enable an account.\n"); menu += 1; + Console.WriteLine(menu + $") Bulk operation from file within the directory.\n{path}\\BulkOps\n"); + menu += 1; Console.WriteLine(menu + ") View log path.\n"); menu += 1; Console.WriteLine(menu + ") View archive path.\n"); diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/AccountService.cs b/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/AccountService.cs index cf332f7..6f4a942 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/AccountService.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/AccountService.cs @@ -98,5 +98,13 @@ namespace TeamHobby.HobbyProjectGenerator.UserManagement return false; } } + public bool BulkOperation() + { + // List choices of operations + List ops = new List {"Create Account", "Edit Account", + "Delete Account", "Disable Account", "Enable Account"}; + + return true; + } } } diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/SystemAccountManager.cs b/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/SystemAccountManager.cs index 49b0e48..2743dd9 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/SystemAccountManager.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/SystemAccountManager.cs @@ -11,6 +11,13 @@ namespace TeamHobby.HobbyProjectGenerator.UserManagement { public class SystemAccountManager { + public bool BulkOperation() + { + // List choices of operations + List ops = new List {"Create Account", "Edit Account", + "Delete Account", "Disable Account", "Enable Account"}; + return true; + } public string IsInputValid(string checkUN, string checkPWD) { // Create bool variables to check if username and password are valid @@ -304,11 +311,51 @@ namespace TeamHobby.HobbyProjectGenerator.UserManagement return "User does not exist"; } break; - // View logs + // Bulk operation through file case 6: + AccountService bulkOP = new AccountService(); + // Get path to defualt bin location + string path = Directory.GetCurrentDirectory(); + while (true) + { + // Get name of file and update path to correct folder + Console.WriteLine("Please input the name of the file:(Example.txt)"); + string filename = $"{path}\\BulkOps\\{Console.ReadLine()}"; + + // Read file + FileInfo fileInfo = new FileInfo(filename); + + // Get filesize + long fileSize = filename.Length; + long fileSizeGB = fileSize / (1024 * 1024); + //Console.WriteLine($"File size is {fileSize}kb"); + + // Check if input is empty + if (filename == null) + { + Console.WriteLine("Invalid file name.\n"); + } + // Check if file is over 2GB + else if (fileSizeGB > 2) + { + Console.WriteLine($"File size is {fileSizeGB}GB\n"); + Console.WriteLine("File is too large, please enter a smaller file.\n"); + } + else + { + // Begin bulk operation + bulkOP.BulkOperation(); + + + break; + } + } + break; + // View logs + case 7: break; // View archive - case 7: + case 8: break; default: Console.WriteLine("Invalid input.\nPlease enter a valid option.\n"); diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.UserManagement.xTests/UnitTest1.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.UserManagement.xTests/UnitTest1.cs index 60baa67..f983481 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.UserManagement.xTests/UnitTest1.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.UserManagement.xTests/UnitTest1.cs @@ -31,7 +31,7 @@ namespace TeamHobby.UserManagement.xTests "SERVER=localhost;" + "DATABASE=hobby;" + "UID=root;" + - "PASSWORD=hobby;" + + "PASSWORD=Teamhobby;" + "OPTION=3"; IDataSource datasource = dbFactory.getDataSource(dbType, dbInfo); @@ -72,7 +72,7 @@ namespace TeamHobby.UserManagement.xTests "SERVER=localhost;" + "DATABASE=hobby;" + "UID=root;" + - "PASSWORD=hobby;" + + "PASSWORD=Teamhobby;" + "OPTION=3"; IDataSource datasource = dbFactory.getDataSource(dbType, dbInfo); @@ -81,7 +81,7 @@ namespace TeamHobby.UserManagement.xTests for (int i = 0; i < 10000; i++) { var TestAcc = new UserAccount("newUser" + $"{i}", "4567", $"email{i}@a.com", "regular", sTime); - serviceTest.CreateUserRecord(TestAcc, "Rifat", datasource); + serviceTest.DeleteUserRecord(TestAcc, "Rifat", datasource); } DateTime eTime = DateTime.Now; diff --git a/Source Code/main/Controller.cs b/Source Code/main/Controller.cs index 1d74a58..5aec1be 100644 --- a/Source Code/main/Controller.cs +++ b/Source Code/main/Controller.cs @@ -1,4 +1,4 @@ -using System; +/*using System; using System.Data.Odbc; using TeamHobby.HobbyProjectGenerator.Archive; using TeamHobby.HobbyProjectGenerator.DataAccess; @@ -147,3 +147,4 @@ namespace TeamHobby.HobbyProjectGenerator.Main +*/ \ No newline at end of file diff --git a/Source Code/main/ExtractBulkOp.cs b/Source Code/main/ExtractBulkOp.cs new file mode 100644 index 0000000..c3e18fa --- /dev/null +++ b/Source Code/main/ExtractBulkOp.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Data.Odbc; +using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.UserManagement; + +namespace main +{ + public class ExtractBulkOp + { + //public void ExtractBulkOP() + public static void Main(string[] args) + { + try + { + // Get the current directory. + string path = Directory.GetCurrentDirectory(); + // Open file reader stream + using StreamReader fileRead = new(path + "\\BulkOps\\Bulk.txt"); // path + "\\BulkOps\\{input}" + // Show location of the file being written + Console.WriteLine(path + "\\BulkOps\\Bulk.txt"); + + // List choices of operations + List ops = new List {"Create Account", "Edit Account", + "Delete Account", "Disable Account", "Enable Account"}; + + // Create Account service object + AccountService serviceTest = new AccountService(); + + // List to hold file operation and credentials + List fileList = new List(); + // Loop through file rows + while (!fileRead.EndOfStream) + { + // Create variable to hold current line + string line = fileRead.ReadLine(); + // Check if line is not empty and contains the separator + if (line != null && line.Contains(":")) + { + // Assign value to hold current line parameter + string value = line.Split(':')[1].Trim(); + + // Check what operation is being called + if(ops.Contains(value)) + { + // Declare empty list each time operation is found + string[] temp = new string[] { }; + // Loop until empty line is found + while (true) + { + string currLine = fileRead.ReadLine(); + // Check if line is not empty + if(currLine != null && currLine.Contains(":")) + { + currLine = currLine.Split(':')[1].Trim(); + if (ops.Contains(currLine)) + { + break; + } + else + { + temp.Append(currLine); + } + } + } + fileList.Add(temp); + } + } + } + Console.WriteLine(fileList[2]); +/* for (int i = 0; i < fileList.Count; i++) + { + for(int j = 0; j < fileList[i].Length; j++) + { + Console.WriteLine(fileList[i][j]); + } + }*/ + fileRead.Close(); + } + catch (Exception e) + { + Console.WriteLine("Error reading file"); + Console.WriteLine(e.Message); + } + } + } +} diff --git a/Source Code/main/GenerateOpFile.cs b/Source Code/main/GenerateOpFile.cs new file mode 100644 index 0000000..22fc33e --- /dev/null +++ b/Source Code/main/GenerateOpFile.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.UserManagement; + +namespace main +{ + public class GenerateOpFile + { + public void GenerateOPFile() + //public static void Main(string[] args) + { + try + { + // Get the current directory. + string path = Directory.GetCurrentDirectory(); + // Open file stream + using StreamWriter file = new(path + "\\BulkOps\\Bulk.txt", append: true); + // Show location of the file being written + Console.WriteLine(path + "\\BulkOps\\Bulk.txt"); + + // List choices of operations + List ops = new List {"Create Account", "Edit Account", + "Delete Account", "Disable Account", "Enable Account"}; + // Create Account service object + AccountService serviceTest = new AccountService(); + + // Find database and connect to it + string dbType = "sql"; + RDSFactory dbFactory = new RDSFactory(); + + // Testing Data Access Layer + string dbInfo = "DRIVER={MariaDB ODBC 3.1 Driver};" + + "TCPIP=1;" + + "SERVER=localhost;" + + "DATABASE=hobby;" + + "UID=root;" + + "PASSWORD=Teamhobby;" + + "OPTION=3"; + IDataSource datasource = dbFactory.getDataSource(dbType, dbInfo); + + // Create a file + // Initialize value for random operation + Random random = new Random(); + int index = 0; + for (int i = 0; i < 10000; i++) + { + // Choose random operation + index = random.Next(ops.Count); + // Create next dummy data + UserAccount testAcc = new UserAccount("newUser" + $"{i}", "4567", $"email{i}@aol.com", "regular", DateTime.Now); + // Write to file + // Write Operation: for now it is only create accounts to avoid errors + file.WriteLine($"Operation: {ops[0]}"); + // Write credentials in the format of: (UserName, Password, Role, IsActive, CreatedBy, CreatedDate, Email) + file.WriteLine($"Username: {testAcc.username}\nPassword: {testAcc.password}\nRole: {testAcc.role}\nEmail: {testAcc.email}\n"); + } + file.Close(); + } + catch (Exception e) + { + Console.WriteLine("Error reading file"); + Console.WriteLine(e.Message); + } + } + } +}