public BrashActionResult <T> Update(T model) { BrashActionResult <T> result = new BrashActionResult <T>() { Model = model , Message = "init" , Status = BrashActionStatus.INFORMATION }; int rows = PerformUpdate(model); if (rows == 1) { result.Model = PerformFetch(model).FirstOrDefault(); result.UpdateStatus(BrashActionStatus.SUCCESS, "Record updated."); } else if (rows > 1) { result.Model = PerformFetch(model).FirstOrDefault(); result.UpdateStatus(BrashActionStatus.ERROR, "More than 1 record updated."); } else { result.UpdateStatus(BrashActionStatus.ERROR, "Record update failed."); } return(result); }
public BrashActionResult <T> Delete(T model) { BrashActionResult <T> result = new BrashActionResult <T>() { Model = model , Message = "init" , Status = BrashActionStatus.INFORMATION }; int rows = PerformDelete(model); if (rows == 1) { result.UpdateStatus(BrashActionStatus.SUCCESS, "Record removed."); } else if (rows > 1) { result.UpdateStatus(BrashActionStatus.ERROR, "More than 1 record removed."); } else { result.UpdateStatus(BrashActionStatus.ERROR, "Record remove failed."); } return(result); }
public BrashActionResult <T> Create(T model) { SetGuid(Guid.NewGuid().ToString(), model); BrashActionResult <T> result = new BrashActionResult <T>() { Model = model , Message = "init" , Status = BrashActionStatus.INFORMATION }; var id = PerformInsert(model); if (id > 0) { SetId(id, model); var fetchResult = Fetch(model); if (fetchResult.Status == BrashActionStatus.SUCCESS) { result.Model = fetchResult.Model; result.UpdateStatus(BrashActionStatus.SUCCESS, $"Record created. ({GetId(result.Model)})"); } else { result.UpdateStatus(BrashActionStatus.ERROR, "Record creation failed."); } } else { result.UpdateStatus(BrashActionStatus.ERROR, "Record creation failed. (fetch failure)"); } return(result); }
public BrashActionResult <T> Fetch(T model) { BrashActionResult <T> result = new BrashActionResult <T>() { Model = model , Message = "init" , Status = BrashActionStatus.INFORMATION }; IEnumerable <T> models = PerformFetch(model); if (models.Count() == 1) { result.UpdateStatus(BrashActionStatus.SUCCESS, "Record updated."); result.Model = models.FirstOrDefault(); } else if (models.Count() > 1) { result.UpdateStatus(BrashActionStatus.ERROR, "More than 1 record found."); result.Model = models.FirstOrDefault(); } else if (models.Count() == 0) { result.UpdateStatus(BrashActionStatus.ERROR, "Record not found."); } return(result); }
public void RepoCreateModel() { MethodBase methodBase = MethodBase.GetCurrentMethod(); string dbName = $"{methodBase.ReflectedType.Name}_{methodBase.Name}"; string path = "/shop/randomsilo/brash/BrashTest/sql/"; string databaseFile = $"{path}/{dbName}.sqlite"; System.IO.File.Delete(databaseFile); string logFile = $"{path}/{dbName}.log"; ILogger logger = GetLogger(logFile); var person = new BrashTest.Mock.Model.Person() { LastName = "Smith" , FirstName = "Jane" , MiddleName = "Francis" }; Assert.NotNull(person); IDatabaseContext databaseContext = new DatabaseContext( $"Data Source={databaseFile}" , $"{dbName}" , "MockSchema" , $"{path}/Person.sql" ); Assert.NotNull(databaseContext); var personRepoSql = new PersonRepositorySql(); Assert.NotNull(personRepoSql); IManageDatabase databaseManager = new DatabaseManager(databaseContext); Assert.NotNull(databaseManager); databaseManager.CreateDatabase(); var personRepo = new PersonRepository(databaseManager, personRepoSql, logger); Assert.NotNull(personRepo); BrashActionResult <BrashTest.Mock.Model.Person> result = null; result = personRepo.Create(person); Assert.True(result.Status == BrashActionStatus.SUCCESS); Assert.True(result.Model.PersonId > 0); person.LastName = "Parker"; result = personRepo.Update(person); Assert.True(result.Status == BrashActionStatus.SUCCESS); Assert.Equal("Parker", result.Model.LastName); result = personRepo.Delete(person); Assert.True(result.Status == BrashActionStatus.SUCCESS); }
public BrashActionResult <T> Update(T model) { BrashActionResult <T> result = new BrashActionResult <T>() { Model = model , Message = "init" , Status = BrashActionStatus.INFORMATION }; var record = PerformFetch(model).FirstOrDefault(); Logger.Verbose($"Post Fetch to determine if we can insert new recrd from this version"); Logger.Verbose($"ID: {GetId(record)}, GUID: {GetGuid(record)}, Version: {GetVersion(record)}, IsCurrent: {GetIsCurrent(record)}"); if (record == null) { result.UpdateStatus(BrashActionStatus.ERROR, "Record not found. Unable to make new version."); return(result); } if (record != null && GetIsCurrent(record) == false) { result.UpdateStatus(BrashActionStatus.ERROR, "Record version is not current."); return(result); } decimal?currentVersion = GetVersion(model); int rows = PerformUpdate(model); if (rows >= 1) // versioned records, multiple rows may be modified when setting IsCurrent to 0. { // reset other id fields to force retreival of new record SetId(0, model); SetVersion(GetVersion(model) + 1, model); result.Model = PerformFetch(model).FirstOrDefault(); if (result.Model != null) { result.UpdateStatus(BrashActionStatus.SUCCESS, "Record updated."); } else { result.UpdateStatus(BrashActionStatus.ERROR, "Record update failed. Unable to find new record version."); } } else { result.UpdateStatus(BrashActionStatus.ERROR, "Record update failed."); } return(result); }
public void CreateUpdateDeleteFetch() { // file system var path = "/shop/randomsilo/modern-web/backends/TodoList"; var project = "TodoList"; var outputPath = $"{path}/{project}.Infrastructure.Test/TestOutput/"; var databaseFile = GetDatabase(outputPath, MethodBase.GetCurrentMethod()); // logger ILogger logger = GetLogger($"{outputPath}/{MethodBase.GetCurrentMethod()}.log"); // database setup // - context IDatabaseContext databaseContext = new DatabaseContext( $"Data Source={databaseFile}" , "TestDb" , "TestSchema" , $"{path}/sql/sqlite/ALL.sql" ); Assert.NotNull(databaseContext); // - manager IManageDatabase databaseManager = new DatabaseManager(databaseContext); Assert.NotNull(databaseManager); // - create tables databaseManager.CreateDatabase(); // - repository var todoNotesRepository = new TodoNotesRepository(databaseManager, new TodoNotesRepositorySql(), logger); Assert.NotNull(todoNotesRepository); // - service var todoNotesService = new TodoNotesService(todoNotesRepository, logger); Assert.NotNull(todoNotesService); // faker BrashActionResult <TodoNotes> serviceResult = null; var todoNotesFaker = new TodoNotesFaker(databaseManager, logger); Assert.NotNull(todoNotesFaker); // create var todoNotesCreateModel = todoNotesFaker.GetOne(); serviceResult = todoNotesService.Create(todoNotesCreateModel); Assert.True(serviceResult.Status == BrashActionStatus.SUCCESS, serviceResult.Message); Assert.True(serviceResult.Model.TodoNotesId > 0); // use model with id todoNotesCreateModel = serviceResult.Model; // update var todoNotesUpdateModel = todoNotesFaker.GetOne(); todoNotesUpdateModel.TodoNotesId = todoNotesCreateModel.TodoNotesId; serviceResult = todoNotesService.Update(todoNotesUpdateModel); Assert.True(serviceResult.Status == BrashActionStatus.SUCCESS, serviceResult.Message); // delete serviceResult = todoNotesService.Delete(todoNotesCreateModel); Assert.True(serviceResult.Status == BrashActionStatus.SUCCESS, serviceResult.Message); // fetch // - make fakes var fakes = todoNotesFaker.GetMany(10); // - add fakes to database List <int?> ids = new List <int?>(); foreach (var f in fakes) { serviceResult = todoNotesService.Create(f); Assert.True(serviceResult.Status == BrashActionStatus.SUCCESS, serviceResult.Message); Assert.True(serviceResult.Model.TodoNotesId >= 0); ids.Add(serviceResult.Model.TodoNotesId); } // - get fakes from database foreach (var id in ids) { var model = new TodoNotes() { TodoNotesId = id }; serviceResult = todoNotesService.Fetch(model); Assert.True(serviceResult.Status == BrashActionStatus.SUCCESS, serviceResult.Message); Assert.True(serviceResult.Model.TodoNotesId >= 0); } }
public void CreateUpdateDeleteFetch() { // file system var path = "/shop/randomsilo/modern-web/backends/GoalTracker"; var project = "GoalTracker"; var outputPath = $"{path}/{project}.Infrastructure.Test/TestOutput/"; var databaseFile = GetDatabase(outputPath, MethodBase.GetCurrentMethod()); // logger ILogger logger = GetLogger($"{outputPath}/{MethodBase.GetCurrentMethod().ReflectedType.Name}_{MethodBase.GetCurrentMethod().Name}.log"); // database setup // - context IDatabaseContext databaseContext = new DatabaseContext( $"Data Source={databaseFile}" , "TestDb" , "TestSchema" , $"{path}/sql/sqlite/ALL.sql" ); Assert.NotNull(databaseContext); // - manager IManageDatabase databaseManager = new DatabaseManager(databaseContext); Assert.NotNull(databaseManager); // - create tables databaseManager.CreateDatabase(); // - repository var goalStateRepository = new GoalStateRepository(databaseManager, new GoalStateRepositorySql(), logger); Assert.NotNull(goalStateRepository); // faker BrashActionResult <GoalState> result = null; var goalStateFaker = new GoalStateFaker(databaseManager, logger); Assert.NotNull(goalStateFaker); // create var goalStateCreateModel = goalStateFaker.GetOne(); result = goalStateRepository.Create(goalStateCreateModel); Assert.True(result.Status == BrashActionStatus.SUCCESS, result.Message); Assert.True(result.Model.GoalStateId > 0); // use model with id goalStateCreateModel = result.Model; // update var goalStateUpdateModel = goalStateFaker.GetOne(); goalStateUpdateModel.GoalStateId = goalStateCreateModel.GoalStateId; result = goalStateRepository.Update(goalStateUpdateModel); Assert.True(result.Status == BrashActionStatus.SUCCESS, result.Message); // delete result = goalStateRepository.Delete(goalStateCreateModel); Assert.True(result.Status == BrashActionStatus.SUCCESS, result.Message); // fetch // - make fakes var fakes = goalStateFaker.GetMany(10); // - add fakes to database List <int?> ids = new List <int?>(); foreach (var f in fakes) { result = goalStateRepository.Create(f); Assert.True(result.Status == BrashActionStatus.SUCCESS, result.Message); Assert.True(result.Model.GoalStateId >= 0); ids.Add(result.Model.GoalStateId); } // - get fakes from database foreach (var id in ids) { var model = new GoalState() { GoalStateId = id }; result = goalStateRepository.Fetch(model); Assert.True(result.Status == BrashActionStatus.SUCCESS, result.Message); Assert.True(result.Model.GoalStateId >= 0); } }
public BrashActionResult <AccountAccess> Authenticate(AccountSignin model) { BrashActionResult <AccountAccess> authResult = new BrashActionResult <AccountAccess>(); authResult.Status = BrashActionStatus.UNKNOWN; authResult.Message = ""; authResult.Model = new AccountAccess(); var userName = model.UserName.RemoveSpecialCharacters(); Logger.Information($"Authenticate -> USER: {model.UserName}, USER_STRIPPED: {userName}, PASS: {model.Password}"); var findAccountQuery = _lGAccountService.FindWhere($"WHERE UserName = '******'"); if (findAccountQuery.Status == BrashQueryStatus.SUCCESS && findAccountQuery.Models.Count == 1) { var foundAccount = findAccountQuery.Models[0]; // confirm password if (Hashing.ValidatePassword(model.Password, foundAccount.Password)) { Logger.Information($"Authenticate -> USER: {model.UserName} SUCCESS!"); // set account foundAccount.Password = null; authResult.Status = BrashActionStatus.SUCCESS; authResult.Message = "Authentication successful."; authResult.Model.Account = foundAccount; // set role name var fetchRoleResult = _lGRoleService.Fetch(new LGRole() { LGRoleId = foundAccount.RoleIdRef }); if (fetchRoleResult.Status == BrashActionStatus.SUCCESS) { authResult.Model.Role = fetchRoleResult.Model.ChoiceName; } else { Logger.Error(fetchRoleResult.CaughtException, $"Failed getting the role. Why? Check this: {fetchRoleResult.Message}"); authResult.Model.Role = "Unknown"; } // transform priviledges into dictionary (string/list of strings) authResult.Model.Privileges = new Dictionary <string, List <string> >(); var getPrivledgesResult = _lGPrivilegeService.FindWhere($"WHERE LGAccountId = {foundAccount.LGAccountId}"); if (getPrivledgesResult.Status == BrashQueryStatus.SUCCESS) { var allFeatures = _lGFeatureService.FindWhere("WHERE 1 = 1").Models; var allAbilities = _lGAbilityService.FindWhere("WHERE 1 = 1").Models; foreach (var priviledge in getPrivledgesResult.Models) { // get feature var feature = allFeatures.Where(f => f.LGFeatureId == priviledge.FeatureIdRef).FirstOrDefault(); List <string> featureAbilityList = new List <string>(); if (authResult.Model.Privileges.Keys.Contains(feature.ChoiceName)) { featureAbilityList = authResult.Model.Privileges[feature.ChoiceName]; } else { authResult.Model.Privileges.Add(feature.ChoiceName, featureAbilityList); } // get action var ability = allAbilities.Where(a => a.LGAbilityId == priviledge.AbilityIdRef).FirstOrDefault(); // set values in response featureAbilityList.Add(ability.ChoiceName); } } else { Logger.Error(getPrivledgesResult.CaughtException, $"Failed getting user privledges. Why? Check this: {getPrivledgesResult.Message}"); authResult.Model.Privileges.Add("ERROR", new List <string>() { "GETTING_PRIVLEDGES" }); } // create token LGToken token = new LGToken() { LGAccountId = authResult.Model.Account.LGAccountId, Token = $"{Guid.NewGuid().ToString()}-{Guid.NewGuid().ToString()}-{Guid.NewGuid().ToString()}", Created = DateTime.Now, Expires = DateTime.Now.AddHours(1), LastUsed = DateTime.Now }; var createTokenResult = _lGTokenService.Create(token); if (createTokenResult.Status != BrashActionStatus.SUCCESS) { authResult.Status = BrashActionStatus.ERROR; authResult.Message = "Authentication service error (101). Contact technical support."; } // set token authResult.Model.Token = token; } else { authResult.Status = BrashActionStatus.NOT_FOUND; authResult.Message = "Inccorect password."; } } else if (findAccountQuery.Status == BrashQueryStatus.NO_RECORDS) { authResult.Status = BrashActionStatus.NOT_FOUND; authResult.Message = "Account not found."; } else { authResult.Status = BrashActionStatus.ERROR; authResult.Message = "Authentication service error (100). Contact technical support."; } return(authResult); }
public void RepoFindModel() { MethodBase methodBase = MethodBase.GetCurrentMethod(); string dbName = $"{methodBase.ReflectedType.Name}_{methodBase.Name}"; string path = "/shop/randomsilo/brash/BrashTest/sql/"; string databaseFile = $"{path}/{dbName}.sqlite"; System.IO.File.Delete(databaseFile); string logFile = $"{path}/{dbName}.log"; ILogger logger = GetLogger(logFile); var person = new BrashTest.Mock.Model.Person() { LastName = "Smith" , FirstName = "Jane" , MiddleName = "Francis" }; Assert.NotNull(person); IDatabaseContext databaseContext = new DatabaseContext( $"Data Source={databaseFile}" , $"{dbName}" , "MockSchema" , $"{path}/Person.sql" ); Assert.NotNull(databaseContext); var personRepoSql = new PersonRepositorySql(); Assert.NotNull(personRepoSql); IManageDatabase databaseManager = new DatabaseManager(databaseContext); Assert.NotNull(databaseManager); databaseManager.CreateDatabase(); var personRepo = new PersonRepository(databaseManager, personRepoSql, logger); Assert.NotNull(personRepo); BrashActionResult <BrashTest.Mock.Model.Person> result = null; List <Mock.Model.Person> people = new List <Mock.Model.Person>(); people.Add(new Mock.Model.Person() { PersonId = null , LastName = "Smith" , MiddleName = "Matt" , FirstName = "David" }); people.Add(new Mock.Model.Person() { PersonId = null , LastName = "Quincy" , MiddleName = "Kyle" , FirstName = "Rick" }); people.Add(new Mock.Model.Person() { PersonId = null , LastName = "Givens" , MiddleName = "Matt" , FirstName = "Robert" }); List <int?> personIds = new List <int?>(); foreach (var p in people) { result = personRepo.Create(p); Assert.True(result.Status == BrashActionStatus.SUCCESS); Assert.True(result.Model.PersonId >= 0); personIds.Add(result.Model.PersonId); } BrashQueryResult <Mock.Model.Person> findResult = null; findResult = personRepo.FindWhere("WHERE MiddleName = 'Matt'"); Assert.True(findResult.Status == BrashQueryStatus.SUCCESS); Assert.True(findResult.Models.Count() == 2); findResult = personRepo.FindWhere("WHERE MiddleName = 'Jamie'"); Assert.True(findResult.Status == BrashQueryStatus.NO_RECORDS); Assert.True(findResult.Models.Count() == 0); }
public void RepoFetchModel() { MethodBase methodBase = MethodBase.GetCurrentMethod(); string dbName = $"{methodBase.ReflectedType.Name}_{methodBase.Name}"; string path = "/shop/randomsilo/brash/BrashTest/sql/"; string databaseFile = $"{path}/{dbName}.sqlite"; System.IO.File.Delete(databaseFile); string logFile = $"{path}/{dbName}.log"; ILogger logger = GetLogger(logFile); var person = new BrashTest.Mock.Model.Person() { LastName = "Smith" , FirstName = "Jane" , MiddleName = "Francis" }; Assert.NotNull(person); IDatabaseContext databaseContext = new DatabaseContext( $"Data Source={databaseFile}" , $"{dbName}" , "MockSchema" , $"{path}/Person.sql" ); Assert.NotNull(databaseContext); var personRepoSql = new PersonRepositorySql(); Assert.NotNull(personRepoSql); IManageDatabase databaseManager = new DatabaseManager(databaseContext); Assert.NotNull(databaseManager); databaseManager.CreateDatabase(); var personRepo = new PersonRepository(databaseManager, personRepoSql, logger); Assert.NotNull(personRepo); BrashActionResult <BrashTest.Mock.Model.Person> result = null; // setup bogus var random = new Random(); int randomNumber = random.Next(); Randomizer.Seed = new Random(randomNumber); var personFaker = new Faker <BrashTest.Mock.Model.Person>() .StrictMode(false) .Rules((f, m) => { m.PersonId = f.IndexFaker; m.LastName = f.Name.LastName(0); // 0 - Male, 1 - Female m.FirstName = f.Name.FirstName(0); // 0 - Male, 1 - Female m.MiddleName = f.Name.FirstName(0); // 0 - Male, 1 - Female }) .FinishWith((f, m) => Console.WriteLine($"personFaker created. Id={m.PersonId}, FirstName={m.FirstName}, LastName={m.LastName}")); var people = personFaker.Generate(10); List <int?> personIds = new List <int?>(); foreach (var p in people) { result = personRepo.Create(p); Assert.True(result.Status == BrashActionStatus.SUCCESS); Assert.True(result.Model.PersonId >= 0); personIds.Add(result.Model.PersonId); } foreach (var id in personIds) { var model = new BrashTest.Mock.Model.Person() { PersonId = id }; result = personRepo.Fetch(model); Assert.True(result.Status == BrashActionStatus.SUCCESS); Assert.True(result.Model.PersonId >= 0); } }