Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
            }
        }
Beispiel #8
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);
            }
        }
Beispiel #9
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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
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);
            }
        }