diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.Archive/ArchiveManager.cs b/Source Code/TeamHobby.HobbyProjectGenerator.Archive/ArchiveManager.cs index 051ec59..874db08 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.Archive/ArchiveManager.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator.Archive/ArchiveManager.cs @@ -1,5 +1,5 @@  -using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; namespace TeamHobby.HobbyProjectGenerator.Archive { diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.Archive/TeamHobby.HobbyProjectGenerator.Archive.csproj b/Source Code/TeamHobby.HobbyProjectGenerator.Archive/TeamHobby.HobbyProjectGenerator.Archive.csproj index 65fcde5..f938aec 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.Archive/TeamHobby.HobbyProjectGenerator.Archive.csproj +++ b/Source Code/TeamHobby.HobbyProjectGenerator.Archive/TeamHobby.HobbyProjectGenerator.Archive.csproj @@ -19,7 +19,7 @@ - + diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Contracts/IDataSource.cs b/Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/Contracts/IDataSource.cs similarity index 90% rename from Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Contracts/IDataSource.cs rename to Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/Contracts/IDataSource.cs index 29dae3e..493bc55 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Contracts/IDataSource.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/Contracts/IDataSource.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace TeamHobby.HobbyProjectGenerator.DataAccess +namespace TeamHobby.HobbyProjectGenerator.DataAccessLayer { public interface IDataSource { diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Implementations/SqlDAO.cs b/Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/Implementations/SqlDAO.cs similarity index 99% rename from Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Implementations/SqlDAO.cs rename to Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/Implementations/SqlDAO.cs index 487838e..d01951c 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Implementations/SqlDAO.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/Implementations/SqlDAO.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; using System.IO.Compression; using System.Data.Odbc; -namespace TeamHobby.HobbyProjectGenerator.DataAccess +namespace TeamHobby.HobbyProjectGenerator.DataAccessLayer { public class SqlDAO : IDataSource { diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Implementations/UiPrint.cs b/Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/Implementations/UiPrint.cs similarity index 96% rename from Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Implementations/UiPrint.cs rename to Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/Implementations/UiPrint.cs index d9f19aa..fade0ad 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/Implementations/UiPrint.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/Implementations/UiPrint.cs @@ -1,6 +1,6 @@ // Print Statements used throughout the program. -namespace TeamHobby.HobbyProjectGenerator.DataAccess +namespace TeamHobby.HobbyProjectGenerator.DataAccessLayer { public class UiPrint { diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/RDSFactory.cs b/Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/RDSFactory.cs similarity index 87% rename from Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/RDSFactory.cs rename to Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/RDSFactory.cs index 6eb1899..bfc9fbd 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/RDSFactory.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/RDSFactory.cs @@ -3,9 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; -namespace TeamHobby.HobbyProjectGenerator.DataAccess +namespace TeamHobby.HobbyProjectGenerator.DataAccessLayer { public class RDSFactory { diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/TeamHobby.HobbyProjectGenerator.DataAccess.csproj b/Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/TeamHobby.HobbyProjectGenerator.DataAccessLayer.csproj similarity index 100% rename from Source Code/TeamHobby.HobbyProjectGenerator.DataAccess/TeamHobby.HobbyProjectGenerator.DataAccess.csproj rename to Source Code/TeamHobby.HobbyProjectGenerator.DataAccessLayer/TeamHobby.HobbyProjectGenerator.DataAccessLayer.csproj diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.Logging/LoggingManager.cs b/Source Code/TeamHobby.HobbyProjectGenerator.Logging/LoggingManager.cs index b7148a9..2f45c93 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.Logging/LoggingManager.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator.Logging/LoggingManager.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; using TeamHobby.HobbyProjectGenerator.Logging.Contracts; using TeamHobby.HobbyProjectGenerator.Logging.Implementations; diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.Logging/TeamHobby.HobbyProjectGenerator.Logging.csproj b/Source Code/TeamHobby.HobbyProjectGenerator.Logging/TeamHobby.HobbyProjectGenerator.Logging.csproj index c9596e5..94d4556 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.Logging/TeamHobby.HobbyProjectGenerator.Logging.csproj +++ b/Source Code/TeamHobby.HobbyProjectGenerator.Logging/TeamHobby.HobbyProjectGenerator.Logging.csproj @@ -9,7 +9,7 @@ - + diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/AccountService.cs b/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/AccountService.cs index 8267161..7802386 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/AccountService.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/AccountService.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.Odbc; -using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; namespace TeamHobby.HobbyProjectGenerator.UserManagement { diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/SystemAccountManager.cs b/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/SystemAccountManager.cs index 8ab2f73..ba4cedd 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/SystemAccountManager.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/SystemAccountManager.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using System.Data.Odbc; using TeamHobby.HobbyProjectGenerator.UserManagement; -using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; namespace TeamHobby.HobbyProjectGenerator.UserManagement { diff --git a/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/TeamHobby.HobbyProjectGenerator.UserManagement.csproj b/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/TeamHobby.HobbyProjectGenerator.UserManagement.csproj index a84e07e..01ced29 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/TeamHobby.HobbyProjectGenerator.UserManagement.csproj +++ b/Source Code/TeamHobby.HobbyProjectGenerator.UserManagement/TeamHobby.HobbyProjectGenerator.UserManagement.csproj @@ -8,7 +8,7 @@ - + diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Archiving/Contracts/IRelationArchivable.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Archiving/Contracts/IRelationArchivable.cs new file mode 100644 index 0000000..96cabb9 --- /dev/null +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Archiving/Contracts/IRelationArchivable.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TeamHobby.HobbyProjectGenerator.Archive +{ + public interface IRelationArchivable + { + bool CreateArchived(string fileName); + } +} diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Archiving/Implementations/ArchiveManager.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Archiving/Implementations/ArchiveManager.cs new file mode 100644 index 0000000..874db08 --- /dev/null +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/Archiving/Implementations/ArchiveManager.cs @@ -0,0 +1,170 @@ + +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; + +namespace TeamHobby.HobbyProjectGenerator.Archive +{ + public class ArchiveManager + { + private IDataSource _conn; + + // Constructor to take in the connection. + public ArchiveManager(IDataSource dataSource) { + _conn = dataSource; + } + + //public IDataSource GetConnection() + //{ + // return _conn; + //} + + // Create the folder where the compress file will be stored + public bool CreateArchiveFolder(){ + //string curPath = Directory.GetCurrentDirectory(); + string curPath = @"C:\"; + string folderName = "\\HobbyArchive"; + + // Find the root drive of the program + string drive = Path.GetPathRoot(path: curPath); + // Check if Drive exists or not + try { + if (!Directory.Exists(drive)) + { + Console.WriteLine("Drive {0} not found", drive); + return false; + } + + string archiveFolder = curPath + folderName; + //Console.WriteLine("Creating a new folder at: {0}", archiveFolder); + if (!Directory.Exists(archiveFolder)) + { + Console.WriteLine("Creating a new folder at: {0}", archiveFolder); + Directory.CreateDirectory(archiveFolder); + //return true; + } + } + catch (Exception ex){ + // If the creating a folder failed, return false + return false; + } + return true; + } + + + // Return the name of the new output file with Path + public string CreateOutFileName() { + try { + // Creating a file name: + string path = @"C:\HobbyArchive"; + //string path = Directory.GetCurrentDirectory() + "\\HobbyArchive"; + Console.WriteLine("The current directory is {0}", path); + string date = DateTime.Now.ToString("M_d_yyyy"); + string fileName = date + "_archive.csv"; + string filePath = System.IO.Path.Combine(path, fileName); + + Console.WriteLine("Date: {0}", date); + Console.WriteLine("Filepath: {0}", filePath); + return filePath; + } + catch + { + Console.WriteLine("ArchiveCon: Creating a file name failed. "); + return ""; + } + } + + // put everything toget here + public bool Controller(){ + + SqlDAO sqlDS = null; + if (_conn.GetType() == typeof(SqlDAO)) + { + sqlDS = (SqlDAO)_conn; + } + + // Check to make sure that Sql Data source connection is not null + if (sqlDS == null){ + return false; + } + // TODO: Remember to add try catch block here to make sure it is completed. + + //Creating the folder Archive + Console.WriteLine("Creating a new folder ..."); + CreateArchiveFolder(); + Console.WriteLine("Creating a new folder completed ..."); + Console.WriteLine("----------------"); + Console.WriteLine(""); + + // Creating a file name: + //string filePath = @"C:\HobbyArchive"; + //Console.WriteLine("Creating file name ... "); + //string curPath = archive.CreateOutFileName(); + Console.WriteLine("Creating Output file name ..."); + string outPath = CreateOutFileName(); + Console.WriteLine("Output file name created ..."); + Console.WriteLine("----------------"); + Console.WriteLine(""); + + //string pathForward = @"C:\Users\Chunchunmaru\Documents\csulbFall2021\HobbyProject\Source Code\main\bin\Debug\net6.0\HobbyArchive"; + //string pathTemp = "C:/Temp/oldlogs10.txt"; + //string pathTempBack = @"C:\Temp\oldlogs10.txt"; + + // Try catch block to delete abort the compressing process + try{ + //Output SQL to a text file + Console.WriteLine("Copying to a text file ..."); + sqlDS.CopyToFile(outPath); + Console.WriteLine("Copying completed ..."); + Console.WriteLine("----------------"); + Console.WriteLine(""); + + // Compress the file + Console.WriteLine("Copressing the text file ..."); + sqlDS.CompressFile(outPath); + Console.WriteLine("Copression completed ..."); + Console.WriteLine("----------------"); + Console.WriteLine(""); + + //Remove output file + Console.WriteLine("Removing the text file ..."); + sqlDS.RemoveOutputFile(outPath); + Console.WriteLine("Text File removal completed ..."); + Console.WriteLine("----------------"); + Console.WriteLine(""); + + // Remove entries fromt the database + Console.WriteLine("Removing the text file ..."); + sqlDS.RemoveEntries(); + Console.WriteLine("Entries removal completed ..."); + Console.WriteLine("----------------"); + Console.WriteLine(""); + + // Return true if compressing sequence is successful + return true; + } + catch (Exception e){ + // Abort the compressing sequence and clean up uneccesary files. + Console.WriteLine("Archiving Sequenced failed. Cleaning up resources."); + + // Delete the text output file if any of the process failed + if (File.Exists(outPath)){ + File.Delete(outPath); + } + + // Delete the compressed file if Removing entries and removing text file output failed + string compFile = outPath + ".gz"; + if (File.Exists(compFile)){ + File.Delete(compFile); + } + + return false; + + } + + // Testing date time patters + //string date = DateTime.Now.ToString("d"); + //Console.WriteLine(date); + //Console.WriteLine(DateTime.Now.ToString("M_d_yyyy_H:mm:ss")); + } + + } +} \ No newline at end of file diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/TeamHobby.HobbyProjectGenerator.ServiceLayer.csproj b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/TeamHobby.HobbyProjectGenerator.ServiceLayer.csproj new file mode 100644 index 0000000..16a6b6b --- /dev/null +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/TeamHobby.HobbyProjectGenerator.ServiceLayer.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + enable + enable + + + + + + + + + + + diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/UserManagement/Implementations/AccountService.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/UserManagement/Implementations/AccountService.cs new file mode 100644 index 0000000..7802386 --- /dev/null +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/UserManagement/Implementations/AccountService.cs @@ -0,0 +1,301 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Data.Odbc; +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; + +namespace TeamHobby.HobbyProjectGenerator.UserManagement +{ + public class AccountService + { + public bool CreateUserRecord(UserAccount newUser, string CreatedBy, IDataSource dbSource) + { + try + { + // Insert into users table + if (newUser.email == null || newUser.email == "NULL") + { + string sqlUser = $"INSERT INTO users (UserName, Password, Role, IsActive," + + $"CreatedBy, CreatedDate, Email) VALUES ('{newUser.username}', " + + $"'{newUser.password}','{newUser.role}', 1," + + $"'{CreatedBy}', NOW(),{newUser.email});"; + + bool insertNewUser = dbSource.WriteData(sqlUser); + return insertNewUser; + } + else + { + string sqlUser = $"INSERT INTO users (UserName, Password, Role, IsActive," + + $"CreatedBy, CreatedDate, Email) VALUES ('{newUser.username}', " + + $"'{newUser.password}','{newUser.role}', 1," + + $"'{CreatedBy}', NOW(),'{newUser.email}');"; + + bool insertNewUser = dbSource.WriteData(sqlUser); + return insertNewUser; + } + } + catch (Exception ex) + { + return false; + } + } + public bool EditUserRecord(UserAccount editUser, string CreatedBy, IDataSource dbSource) + { + try + { + // Insert into users table + if (editUser.email == null || editUser.email == "NULL") + { + string sqlUser = $"UPDATE users t SET t.Password = '{editUser.password}', " + + $"t.Role = '{editUser.role}',t.Email = '{editUser.email}' " + + $"WHERE t.UserName = {editUser.username};"; + + bool updateNewUser = dbSource.UpdateData(sqlUser); + return updateNewUser; + } + else + { + string sqlUser = $"UPDATE users t SET t.Password = '{editUser.password}', " + + $"t.Role = '{editUser.role}',t.Email = '{editUser.email}' " + + $"WHERE t.UserName = '{editUser.username}';"; + + bool updateNewUser = dbSource.UpdateData(sqlUser); + return updateNewUser; + } + } + catch (Exception ex) + { + return false; + } + } + public bool DeleteUserRecord(UserAccount deleteUser, string CreatedBy, IDataSource dbSource) + { + try + { + // Insert into users table + string sqlUser = $"DELETE from users WHERE UserName = '{deleteUser.username}' " + + $"and Password = '{deleteUser.password}';"; + + bool deleteNewUser = dbSource.DeleteData(sqlUser); + return deleteNewUser; + + } + catch (Exception ex) + { + return false; + } + } + public bool DisableUser(UserAccount disableUser, string CreatedBy, IDataSource dbSource) + { + try + { + // Insert into users table + string sqlUser = $"UPDATE users u SET u.IsActive = 0 WHERE u.UserName = '{disableUser.username}'" + + $"and u.Role = '{disableUser.role}';"; + + bool disableNewUser = dbSource.UpdateData(sqlUser); + return disableNewUser; + + } + catch (Exception ex) + { + return false; + } + } + public bool EnableUser(UserAccount enableUser, string CreatedBy, IDataSource dbSource) + { + try + { + // Insert into users table + string sqlUser = $"UPDATE users u SET u.IsActive = 1 WHERE u.UserName = '{enableUser.username}'" + + $"and u.Role = '{enableUser.role}';"; + + bool disableNewUser = dbSource.UpdateData(sqlUser); + return disableNewUser; + + } + catch (Exception ex) + { + return false; + } + } + public bool BulkOperation(string signedUser, string path, IDataSource dbSource) + { + try + { + // Get the current directory. + //string path = Directory.GetCurrentDirectory(); + // Open file reader stream + using StreamReader fileRead = new(path); // path + + "\\BulkOps\\Bulk.txt" + // Show location of the file being written + //Console.WriteLine(path); + + // List choices of operations + List ops = new List {"Create Account", "Edit Account", + "Delete Account", "Disable Account", "Enable Account"}; + + // List to hold file operation and credentials + List fileList = new List(); + string operation = ""; + string UN = ""; + string PWD = ""; + string Role = ""; + string Email = ""; + + // 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)) + { + // Add operation into temp + //Console.WriteLine("Found operation"); + //Console.WriteLine(value); + operation = value; + } + else + { + string checkCredential = line.Split(':')[0].Trim(); + //Console.WriteLine("Found credential"); + switch (checkCredential) + { + case "Username": + UN = value; + break; + case "Password": + PWD = value; + break; + case "Role": + Role = value; + break; + case "Email": + Email = value; + break; + default: + break; + } + } + } + else if(line != null) + { + switch (operation) + { + case "Create Account": + //Console.WriteLine(operation); + if (!String.IsNullOrEmpty(UN)) + { + // Create UserAccount object + UserAccount user = new UserAccount(UN, PWD, Email, DateTime.UtcNow); + // Create Account service object + AccountService serviceTest = new AccountService(); + serviceTest.CreateUserRecord(user, signedUser, dbSource); + } + break; + case "Edit Account": + //Console.WriteLine(operation); + //Console.WriteLine(operation); + if (String.IsNullOrEmpty(UN)) + { + // Create UserAccount object + UserAccount user = new UserAccount(UN, PWD, Email, DateTime.UtcNow); + // Create Account service object + AccountService serviceTest = new AccountService(); + serviceTest.CreateUserRecord(user, signedUser, dbSource); + } + break; + case "Delete Account": + //Console.WriteLine(operation); + //Console.WriteLine(operation); + if (String.IsNullOrEmpty(UN)) + { + // Create UserAccount object + UserAccount user = new UserAccount(UN, PWD, Email, DateTime.UtcNow); + // Create Account service object + AccountService serviceTest = new AccountService(); + serviceTest.CreateUserRecord(user, signedUser, dbSource); + } + break; + case "Disable Account": + //Console.WriteLine(operation); + //Console.WriteLine(operation); + if (String.IsNullOrEmpty(Role) && UN != null) + { + // Create UserAccount object + UserAccount user = new UserAccount(UN, PWD, Email, DateTime.UtcNow); + // Create Account service object + AccountService serviceTest = new AccountService(); + serviceTest.CreateUserRecord(user, signedUser, dbSource); + } + else if (String.IsNullOrEmpty(Email) && UN != null) + { + // Create UserAccount object + UserAccount user = new UserAccount(UN, PWD, Role); + // Create Account service object + AccountService serviceTest = new AccountService(); + serviceTest.CreateUserRecord(user, signedUser, dbSource); + } + else if (String.IsNullOrEmpty(Role) && String.IsNullOrEmpty(Email) && UN != null) + { + // Create UserAccount object + UserAccount user = new UserAccount(UN, PWD, DateTime.UtcNow); + // Create Account service object + AccountService serviceTest = new AccountService(); + serviceTest.CreateUserRecord(user, signedUser, dbSource); + } + break; + case "Enable Account": + //Console.WriteLine(operation); + //Console.WriteLine(operation); + if (String.IsNullOrEmpty(Role) && UN != null) + { + // Create UserAccount object + UserAccount user = new UserAccount(UN, PWD, Email, DateTime.UtcNow); + // Create Account service object + AccountService serviceTest = new AccountService(); + serviceTest.CreateUserRecord(user, signedUser, dbSource); + } + else if (String.IsNullOrEmpty(Email) && UN != null) + { + // Create UserAccount object + UserAccount user = new UserAccount(UN, PWD, Role); + // Create Account service object + AccountService serviceTest = new AccountService(); + serviceTest.CreateUserRecord(user, signedUser, dbSource); + } + else if (String.IsNullOrEmpty(Role) && String.IsNullOrEmpty(Email) && UN != null) + { + // Create UserAccount object + UserAccount user = new UserAccount(UN, PWD, DateTime.UtcNow); + // Create Account service object + AccountService serviceTest = new AccountService(); + serviceTest.CreateUserRecord(user, signedUser, dbSource); + } + break; + default: + break; + } + } + } + fileRead.Close(); + return true; + } + catch (Exception e) + { + Console.WriteLine("Error reading file"); + Console.WriteLine(e.Message); + return false; + } + } + } +} diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/UserManagement/Implementations/SystemAccountManager.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/UserManagement/Implementations/SystemAccountManager.cs new file mode 100644 index 0000000..ba4cedd --- /dev/null +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/UserManagement/Implementations/SystemAccountManager.cs @@ -0,0 +1,367 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Data.Odbc; +using TeamHobby.HobbyProjectGenerator.UserManagement; +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; + +namespace TeamHobby.HobbyProjectGenerator.UserManagement +{ + public class SystemAccountManager + { + public string IsInputValid(string checkUN, string checkPWD) + { + // Create bool variables to check if username and password are valid + bool validUN = checkUN.All(un=>Char.IsLetterOrDigit(un) || un=='@' + || un == '.' || un == ',' || un == '!'); + + bool validPwd = checkPWD.All(Char.IsLetterOrDigit); + + + // Check if any are empty + if (checkUN == null || checkPWD == null) + { + return "Invalid input\n"; + } + // Check if username is within the restricted length + else if (checkUN.Length > 15 || checkUN.Length <= 0 + || validUN is false) + { + return "Invalid Username\n"; + } + // Check if password is within the restricted length + else if (checkPWD.Length > 18 || checkPWD.Length <= 0 + || validPwd is false) + { + return "Invalid Password\n"; + } + // Check if username and password are valid + else if (checkUN.Length <= 15 && checkUN.Length > 0 + && validUN is true && checkPWD.Length <= 18 + && checkPWD.Length > 0 && validPwd is true) + { + return "Username and password is valid.\n"; + } + // Check if username and password and email are valid + else if (checkUN.Length <= 15 && checkUN.Length > 0 + && validUN is true && checkPWD.Length <= 18 + && checkPWD.Length > 0 && validPwd is true) + { + return "Username and password is valid.\n"; + } + // For testing to make sure username is valid + else if (checkUN.Length <= 15 && checkUN.Length > 0 + && validUN is true) + { + return "Valid Username\n"; + } + // For testing to make sure password is valid + else if (checkPWD.Length <= 18 && checkPWD.Length > 0 + && validPwd is true) + { + return "Valid Password\n"; + } + else + { + return "Invalid input\n"; + } + } + public string IsInputValid(string checkUN, string checkPWD, string email, string role) + { + // Create bool variables to check if username and password and email are valid + bool validUN = checkUN.All(un => Char.IsLetterOrDigit(un) || un == '@' + || un == '.' || un == ',' || un == '!'); + + bool validPwd = checkPWD.All(Char.IsLetterOrDigit); + + bool validEmail = email.All(email => Char.IsLetterOrDigit(email) && email == '@' + && email == '.'); + + bool validRole = role.All(role => Char.IsLetter(role)); + + // Check if any are empty + if (checkUN == null || checkPWD == null || email == null) + { + return "Invalid input\n"; + } + // Check if username is within the restricted length + else if (checkUN.Length > 15 || checkUN.Length <= 0 + || validUN is false) + { + return "Invalid Username\n"; + } + // Check if password is within the restricted length + else if (checkPWD.Length > 18 || checkPWD.Length <= 0 + || validPwd is false) + { + return "Invalid Password\n"; + } + // Check if email is within the restricted length + else if (email.Length > 18 || email.Length <= 0 + || validEmail is false) + { + return "Invalid Email.\n"; + } + // Check if username and password are valid + else if (checkUN.Length <= 15 && checkUN.Length > 0 + && validUN is true && checkPWD.Length <= 18 + && checkPWD.Length > 0 && validPwd is true) + { + return "Username and password is valid.\n"; + } + // Check if username and password and email are valid + else if (checkUN.Length <= 15 && checkUN.Length > 0 + && validUN is true && checkPWD.Length <= 18 + && checkPWD.Length > 0 && validPwd is true + && email.Length > 18 && email.Length <= 0 + && validEmail is true) + { + return "Username and password is valid.\n"; + } + // For testing to make sure username is valid + else if (checkUN.Length <= 15 && checkUN.Length > 0 + && validUN is true) + { + return "Valid Username\n"; + } + // For testing to make sure password is valid + else if (checkPWD.Length <= 18 && checkPWD.Length > 0 + && validPwd is true) + { + return "Valid Password\n"; + } + // For testing to make sure email is valid + else if (email.Length > 18 && email.Length <= 0 + && validEmail is true) + { + return "Valid Password\n"; + } + else + { + return "Invalid input\n"; + } + } + // Check with database if user is an admin + public bool isAdmin(UserAccount user, IDataSource dbSource) + { + // string checkAdmin = $"Select * from users where username = {user.username} and password = {user.password};"; + string checkAdmin = $"select r.Role from roles r, users u where " + + $"UserName = '{user.username}' and Password = '{user.password}' and r.Role = u.Role;"; + Object confirmAdmin = dbSource.ReadData(checkAdmin); + //Console.WriteLine("type of Reesult:" + confirmAdmin.GetType()); + OdbcDataReader reader = null; + + if (confirmAdmin.GetType() == typeof(OdbcDataReader)) + { + reader = (OdbcDataReader)confirmAdmin; + } + + // Create String to hold sql output + string checkSql = ""; + + // Read Sql query results + while (reader.Read()) + { + checkSql = reader.GetString(0); + } + + SqlDAO sqlDS = (SqlDAO)dbSource; + Console.WriteLine(""); + + // Closing the connection + sqlDS.GetConnection().Close(); + + if (checkSql == "Admin") + { + Console.WriteLine("-- Logged in successfully."); + return true; + } + else + { + return false; + } + } + public string CreateUserRecord(UserAccount user, IDataSource dbSource) + { + // Check Login inputs + IsInputValid(user.username, user.password); + + bool Admin = isAdmin(user, dbSource); + + // Give access if the user is and Admin + if (Admin is false) + { + return "Access Denied: Unauthorized\n"; + } + else + { + // db.users layout (UserName, Password, RoleID, IsActive, CreatedBy, CreatedDate) + // db.roles layout (RoleID(AutoGen), Role, CreatedBy, CreatedDate) + // Create UiPrint Object + UiPrint ui = new UiPrint(); + // Create Account Service object + AccountService accountService = new AccountService(); + // Create credentials object for new inptus + GetCredentials newCredentials = new GetCredentials(); + // Create bool object for menu loop + bool menuLoop = true; + // Create loop for menu + while (menuLoop is true) { + // Print User Management menu + ui.UserManagementMenu(user.username); + // Get user choice + int menuChoice = Convert.ToInt32(Console.ReadLine()); + // Complete the appropriate action + switch (menuChoice) + { + // Exit menu + case 0: + return "Back to Login"; + // Create account + case 1: + // Get all credentials and create newUser + UserAccount newUser = new UserAccount(newCredentials.GetUserName(), + newCredentials.ConfirmPassword(), newCredentials.GetEmail(), + newCredentials.GetRole(), DateTime.UtcNow); + bool accountValid = accountService.CreateUserRecord(newUser, user.username, dbSource); + if (accountValid is true) + { + Console.WriteLine("\nAccount created Successfully"); + break; + } + else + { + return "Database Timed out"; + } + // Edit account + case 2: + // State what account is being edited + string userName = newCredentials.GetUserName(); + + // Notify the user of what can be edited + Console.WriteLine($"\n****The following information will be used to update {userName}"); + + // Get updated parameters + UserAccount newEditUser = new UserAccount(userName, + newCredentials.GetPassword(), newCredentials.GetEmail(), + newCredentials.GetRole(), DateTime.UtcNow); + bool editValid = accountService.EditUserRecord(newEditUser, user.username, dbSource); + if (editValid is true) + { + Console.WriteLine("\nAccount updated Successfully"); + break; + } + else + { + return "Database Timed out"; + } + break; + // Delete account + case 3: + UserAccount newDeleteUser = new UserAccount(newCredentials.GetUserName(), + newCredentials.GetPassword(), DateTime.UtcNow); + bool deleteValid = accountService.DeleteUserRecord(newDeleteUser, user.username , dbSource); + if (deleteValid is true) + { + Console.WriteLine("\nAccount deleted Successfully"); + break; + } + else + { + return "User does not exist"; + } + break; + // Disable account + case 4: + UserAccount newDisableUser = new UserAccount(newCredentials.GetUserName(), + newCredentials.GetRole()); + bool disableValid = accountService.DisableUser(newDisableUser, user.username , dbSource); + if (disableValid is true) + { + Console.WriteLine("\nAccount disabled Successfully"); + break; + } + else + { + return "User does not exist"; + } + break; + // Enable account + case 5: + UserAccount newEnableUser = new UserAccount(newCredentials.GetUserName(), + newCredentials.GetRole()); + bool enableValid = accountService.EnableUser(newEnableUser, user.username , dbSource); + if (enableValid is true) + { + Console.WriteLine("\nAccount enabled Successfully"); + break; + } + else + { + return "User does not exist"; + } + break; + // 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}\\{Console.ReadLine()}"; + //Console.WriteLine(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 + Console.WriteLine("Running bulk operation..."); + bool bulkReq = bulkOP.BulkOperation(user.username, filename, dbSource); + if (bulkReq is true) + { + Console.WriteLine("\nBulk operation complete"); + break; + } + else + { + return "Bulk operation failed"; + } + } + } + break; + // View logs + case 7: + break; + // View archive + case 8: + Console.WriteLine("C:/HobbyArchive"); + break; + default: + Console.WriteLine("Invalid input.\nPlease enter a valid option.\n"); + break; + } + } + return "Back to Login"; + } + } + } +} diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/UserManagement/Implementations/UserAccount.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/UserManagement/Implementations/UserAccount.cs new file mode 100644 index 0000000..e048653 --- /dev/null +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.ServiceLayer/UserManagement/Implementations/UserAccount.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TeamHobby.HobbyProjectGenerator.UserManagement +{ // Class for getting user credentials + public class GetCredentials + { + public string? GetUserName() + { + Console.WriteLine("Please enter a username:"); + string? userName = Console.ReadLine(); + return userName; + } + public string? GetPassword() + { + Console.WriteLine("Please enter a password:"); + string? userPassword = Console.ReadLine(); + return userPassword; + } + public string ConfirmPassword() + { + while (true) + { + Console.WriteLine("Please enter a password:"); + string? userPassword = Console.ReadLine(); + // Confirm Password + Console.WriteLine("Please re-enter the password:"); + string checkPsswd = Console.ReadLine(); + // Check if passwords match + if (userPassword == checkPsswd) + { + return userPassword; + } + else + { + Console.WriteLine("Passwords do not match.\n"); + } + } + } + public string GetEmail() + { + Console.WriteLine("Please enter an email:"); + return Console.ReadLine(); + } + public string GetRole() + { + while (true) + { + // List of possible roles + List roles = new List {"Admin", "regular" }; + // Get role + Console.WriteLine("Please enter the role of the user:(Admin or regular)"); + string? userRole = Console.ReadLine(); + // Check if passwords match + if (roles.Contains(userRole)) + { + return userRole; + } + else + { + Console.WriteLine("Not an available role.\n"); + } + } + + + return Console.ReadLine(); + } + } + public class UserAccount + { + // Admin Credentials + private string _userName; + private string _password; + private DateTime _Time; + // New User Credentials + private string _Email; + private string _Role; + + public UserAccount(string un, string pwd, DateTime TimeStamp) + { + _userName = un; + _password = pwd; + _Role = "regular"; + _Email = "NULL"; + _Time = TimeStamp; + } + public UserAccount(string un, string pwd, string role) + { + if (String.IsNullOrEmpty(role)) + { + _Role = "regular"; + } + else { _Role = role; } + _userName = un; + _password = pwd; + _Email = "NULL"; + _Time = DateTime.UtcNow; + } + public UserAccount(string un, string role) + { + _userName = un; + _Role = role; + _Email = "NULL"; + _Time = DateTime.UtcNow; + } + public UserAccount(string un, string pwd, string Email, DateTime TimeStamp) + { + if (String.IsNullOrEmpty(Email)) + { + _Email = "NULL"; + } + else { _Email = Email; } + _userName = un; + _password = pwd; + _Role = "regular"; + _Time = TimeStamp; + } + public UserAccount(string newUN, string newPWD, string Email, string role, DateTime newTime) + { + if (String.IsNullOrEmpty(role)) + { + _Role = "regular"; + } + else { _Role = role; } + if (String.IsNullOrEmpty(Email)) + { + _Email = "NULL"; + } + else { _Email = Email; } + _userName = newUN; + _password = newPWD; + _Time = newTime; + } + public UserAccount() + { + _Role = "regular"; + _Email = "NULL"; + _Time = DateTime.Now; + } + + public string username { get { return _userName; } } + public string password { get { return _password; } } + public string email { get { return _Email; } } + public string role { get { return _Role; } } + public DateTime Time { get { return _Time; } } + } +} diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/ArchivingXUnitTest.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/ArchivingXUnitTest.cs index 186f3c4..e127066 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/ArchivingXUnitTest.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/ArchivingXUnitTest.cs @@ -4,7 +4,7 @@ using System.Diagnostics; using System.IO; using System.Threading; using TeamHobby.HobbyProjectGenerator.Archive; -using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; using Xunit; using Xunit.Abstractions; diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/TeamHobby.HobbyProjectGenerator.Tests.csproj b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/TeamHobby.HobbyProjectGenerator.Tests.csproj index 55d4a91..7dcdb98 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/TeamHobby.HobbyProjectGenerator.Tests.csproj +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/TeamHobby.HobbyProjectGenerator.Tests.csproj @@ -23,7 +23,6 @@ - diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/UseerManagementTests.cs b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/UseerManagementTests.cs index ec24f55..57d66da 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/UseerManagementTests.cs +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.Tests/UseerManagementTests.cs @@ -3,7 +3,7 @@ using Xunit; using Xunit.Abstractions; using System.Threading; using TeamHobby.HobbyProjectGenerator.UserManagement; -using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; using System.IO; namespace TeamHobby.UserManagement.xTests diff --git a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.sln b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.sln index a1de830..df956fe 100644 --- a/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.sln +++ b/Source Code/TeamHobby.HobbyProjectGenerator/TeamHobby.HobbyProjectGenerator.sln @@ -7,8 +7,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGener EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.Archive", "..\TeamHobby.HobbyProjectGenerator.Archive\TeamHobby.HobbyProjectGenerator.Archive.csproj", "{B88ED0D9-72E2-4245-BD8F-856FF42E500C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.DataAccess", "..\TeamHobby.HobbyProjectGenerator.DataAccess\TeamHobby.HobbyProjectGenerator.DataAccess.csproj", "{AA48A66C-FA36-4AF9-A782-CEC22838EB8F}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.UserManagement", "..\TeamHobby.HobbyProjectGenerator.UserManagement\TeamHobby.HobbyProjectGenerator.UserManagement.csproj", "{2E7193B8-86B6-48DA-9671-CD84615A5F5D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D29D9225-3748-4067-AF07-E677A525EF39}" @@ -18,7 +16,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.Logging", "..\TeamHobby.HobbyProjectGenerator.Logging\TeamHobby.HobbyProjectGenerator.Logging.csproj", "{CA539CBE-A043-4ED8-9E1F-3E949F0A482D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TeamHobby.HobbyProjectGenerator.Tests", "TeamHobby.HobbyProjectGenerator.Tests\TeamHobby.HobbyProjectGenerator.Tests.csproj", "{2E9DC0A0-D9A1-40A5-9684-ECC8EDCD8DAD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.Tests", "TeamHobby.HobbyProjectGenerator.Tests\TeamHobby.HobbyProjectGenerator.Tests.csproj", "{2E9DC0A0-D9A1-40A5-9684-ECC8EDCD8DAD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.ServiceLayer", "TeamHobby.HobbyProjectGenerator.ServiceLayer\TeamHobby.HobbyProjectGenerator.ServiceLayer.csproj", "{EF90CC6C-0C44-4E39-AAB6-96F9F34F0784}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeamHobby.HobbyProjectGenerator.DataAccessLayer", "..\TeamHobby.HobbyProjectGenerator.DataAccessLayer\TeamHobby.HobbyProjectGenerator.DataAccessLayer.csproj", "{6DBAC411-AC0E-4129-AE57-C8D1DA1DF9B2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -44,14 +46,6 @@ Global {B88ED0D9-72E2-4245-BD8F-856FF42E500C}.Release|Any CPU.Build.0 = Release|Any CPU {B88ED0D9-72E2-4245-BD8F-856FF42E500C}.Release|x86.ActiveCfg = Release|x86 {B88ED0D9-72E2-4245-BD8F-856FF42E500C}.Release|x86.Build.0 = Release|x86 - {AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Debug|x86.ActiveCfg = Debug|Any CPU - {AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Debug|x86.Build.0 = Debug|Any CPU - {AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Release|Any CPU.Build.0 = Release|Any CPU - {AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Release|x86.ActiveCfg = Release|Any CPU - {AA48A66C-FA36-4AF9-A782-CEC22838EB8F}.Release|x86.Build.0 = Release|Any CPU {2E7193B8-86B6-48DA-9671-CD84615A5F5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2E7193B8-86B6-48DA-9671-CD84615A5F5D}.Debug|Any CPU.Build.0 = Debug|Any CPU {2E7193B8-86B6-48DA-9671-CD84615A5F5D}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -76,6 +70,22 @@ Global {2E9DC0A0-D9A1-40A5-9684-ECC8EDCD8DAD}.Release|Any CPU.Build.0 = Release|Any CPU {2E9DC0A0-D9A1-40A5-9684-ECC8EDCD8DAD}.Release|x86.ActiveCfg = Release|Any CPU {2E9DC0A0-D9A1-40A5-9684-ECC8EDCD8DAD}.Release|x86.Build.0 = Release|Any CPU + {EF90CC6C-0C44-4E39-AAB6-96F9F34F0784}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF90CC6C-0C44-4E39-AAB6-96F9F34F0784}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF90CC6C-0C44-4E39-AAB6-96F9F34F0784}.Debug|x86.ActiveCfg = Debug|Any CPU + {EF90CC6C-0C44-4E39-AAB6-96F9F34F0784}.Debug|x86.Build.0 = Debug|Any CPU + {EF90CC6C-0C44-4E39-AAB6-96F9F34F0784}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF90CC6C-0C44-4E39-AAB6-96F9F34F0784}.Release|Any CPU.Build.0 = Release|Any CPU + {EF90CC6C-0C44-4E39-AAB6-96F9F34F0784}.Release|x86.ActiveCfg = Release|Any CPU + {EF90CC6C-0C44-4E39-AAB6-96F9F34F0784}.Release|x86.Build.0 = Release|Any CPU + {6DBAC411-AC0E-4129-AE57-C8D1DA1DF9B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6DBAC411-AC0E-4129-AE57-C8D1DA1DF9B2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6DBAC411-AC0E-4129-AE57-C8D1DA1DF9B2}.Debug|x86.ActiveCfg = Debug|Any CPU + {6DBAC411-AC0E-4129-AE57-C8D1DA1DF9B2}.Debug|x86.Build.0 = Debug|Any CPU + {6DBAC411-AC0E-4129-AE57-C8D1DA1DF9B2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6DBAC411-AC0E-4129-AE57-C8D1DA1DF9B2}.Release|Any CPU.Build.0 = Release|Any CPU + {6DBAC411-AC0E-4129-AE57-C8D1DA1DF9B2}.Release|x86.ActiveCfg = Release|Any CPU + {6DBAC411-AC0E-4129-AE57-C8D1DA1DF9B2}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Source Code/main/Controller.cs b/Source Code/main/Controller.cs index b366f99..c1ca0d6 100644 --- a/Source Code/main/Controller.cs +++ b/Source Code/main/Controller.cs @@ -1,7 +1,7 @@ using System; using System.Data.Odbc; using TeamHobby.HobbyProjectGenerator.Archive; -using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; using TeamHobby.HobbyProjectGenerator.UserManagement; namespace TeamHobby.HobbyProjectGenerator.Main diff --git a/Source Code/main/GenerateOpFile.cs b/Source Code/main/GenerateOpFile.cs index 22fc33e..ec55c4b 100644 --- a/Source Code/main/GenerateOpFile.cs +++ b/Source Code/main/GenerateOpFile.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using TeamHobby.HobbyProjectGenerator.DataAccess; +using TeamHobby.HobbyProjectGenerator.DataAccessLayer; using TeamHobby.HobbyProjectGenerator.UserManagement; namespace main diff --git a/Source Code/main/TeamHobby.HobbyProjectGenerator.Main.csproj b/Source Code/main/TeamHobby.HobbyProjectGenerator.Main.csproj index 37d691c..2842651 100644 --- a/Source Code/main/TeamHobby.HobbyProjectGenerator.Main.csproj +++ b/Source Code/main/TeamHobby.HobbyProjectGenerator.Main.csproj @@ -15,7 +15,7 @@ - +