Exemplo n.º 1
0
        protected override void Seed(DatabaseContext databaseContext)
        {
            //var random = new Random();
            var cryptoProvider  = new CryptoProvider();
            var systemGroupList = new List <GroupModel>();

            #region adminModel creation

            string adminSalt = cryptoProvider.GetNewSalt();

            var adminModel = new UserModel
            {
                Email        = "*****@*****.**",
                FirstName    = ";)",
                LastName     = ";)",
                Department   = ";)",
                Albums       = new Collection <AlbumModel>(),
                AuthInfos    = new Collection <AuthInfoModel>(),
                Groups       = new Collection <GroupModel>(),
                IsActivated  = true,
                IsAdmin      = true,
                Salt         = adminSalt,
                UserPassword = cryptoProvider.CreateHashForPassword("qwerty", adminSalt)
            };

            #endregion

            #region userModels creating

            var userModelsList = new List <UserModel>();

            #region Artem Zagorodnuk

            string userSalt = cryptoProvider.GetNewSalt();
            var    user     = new UserModel
            {
                Email        = "*****@*****.**",
                FirstName    = "Artem",
                LastName     = "Zagorodnuk",
                Department   = ".Net",
                Albums       = new Collection <AlbumModel>(),
                AuthInfos    = new Collection <AuthInfoModel>(),
                Groups       = new Collection <GroupModel>(),
                IsActivated  = true,
                IsAdmin      = false,
                Salt         = userSalt,
                UserPassword = cryptoProvider.CreateHashForPassword("qwerty", userSalt)
            };
            userModelsList.Add(user);

            #endregion

            #region Anton Golovin

            userSalt = cryptoProvider.GetNewSalt();
            user     = new UserModel
            {
                Email        = "*****@*****.**",
                FirstName    = "Anton",
                LastName     = "Golovin",
                Department   = "Academy",
                Albums       = new Collection <AlbumModel>(),
                AuthInfos    = new Collection <AuthInfoModel>(),
                Groups       = new Collection <GroupModel>(),
                IsActivated  = true,
                IsAdmin      = false,
                Salt         = userSalt,
                UserPassword = cryptoProvider.CreateHashForPassword("qwerty", userSalt)
            };
            userModelsList.Add(user);

            #endregion

            #region Andrey Spivakov

            userSalt = cryptoProvider.GetNewSalt();
            user     = new UserModel
            {
                Email        = "*****@*****.**",
                FirstName    = "Andrey",
                LastName     = "Spivakov",
                Department   = "Academy",
                Albums       = new Collection <AlbumModel>(),
                AuthInfos    = new Collection <AuthInfoModel>(),
                Groups       = new Collection <GroupModel>(),
                IsActivated  = true,
                IsAdmin      = false,
                Salt         = userSalt,
                UserPassword = cryptoProvider.CreateHashForPassword("qwerty", userSalt)
            };
            userModelsList.Add(user);

            #endregion

            #region Александр Носов

            userSalt = cryptoProvider.GetNewSalt();
            user     = new UserModel
            {
                Email        = "*****@*****.**",
                FirstName    = "Александр",
                LastName     = "Носов",
                Department   = "Academy",
                Albums       = new Collection <AlbumModel>(),
                AuthInfos    = new Collection <AuthInfoModel>(),
                Groups       = new Collection <GroupModel>(),
                IsActivated  = true,
                IsAdmin      = false,
                Salt         = userSalt,
                UserPassword = cryptoProvider.CreateHashForPassword("qwerty", userSalt)
            };
            userModelsList.Add(user);

            #endregion

            #region Mikhail Bratukha

            userSalt = cryptoProvider.GetNewSalt();
            user     = new UserModel
            {
                Email        = "*****@*****.**",
                FirstName    = "Mikhail",
                LastName     = "Bratukha",
                Department   = "Academy",
                Albums       = new Collection <AlbumModel>(),
                AuthInfos    = new Collection <AuthInfoModel>(),
                Groups       = new Collection <GroupModel>(),
                IsActivated  = true,
                IsAdmin      = false,
                Salt         = userSalt,
                UserPassword = cryptoProvider.CreateHashForPassword("qwerty", userSalt)
            };
            userModelsList.Add(user);

            #endregion

            #region Oleg Beloy

            userSalt = cryptoProvider.GetNewSalt();
            user     = new UserModel
            {
                Email        = "*****@*****.**",
                FirstName    = "Oleg",
                LastName     = "Beloy",
                Department   = "Academy",
                Albums       = new Collection <AlbumModel>(),
                AuthInfos    = new Collection <AuthInfoModel>(),
                Groups       = new Collection <GroupModel>(),
                IsActivated  = true,
                IsAdmin      = false,
                Salt         = userSalt,
                UserPassword = cryptoProvider.CreateHashForPassword("qwerty", userSalt)
            };
            userModelsList.Add(user);

            #endregion

            #region Alexander Towstonog

            userSalt = cryptoProvider.GetNewSalt();
            user     = new UserModel
            {
                Email        = "*****@*****.**",
                FirstName    = "Alexander",
                LastName     = "Towstonog",
                Department   = "Academy",
                Albums       = new Collection <AlbumModel>(),
                AuthInfos    = new Collection <AuthInfoModel>(),
                Groups       = new Collection <GroupModel>(),
                IsActivated  = true,
                IsAdmin      = false,
                Salt         = userSalt,
                UserPassword = cryptoProvider.CreateHashForPassword("qwerty", userSalt)
            };
            userModelsList.Add(user);

            #endregion

            #endregion

            #region BlockedUsers
            var groupModel = new GroupModel()
            {
                GroupName   = "BlockedUsers",
                Description = "System group. Not for use",
                OwnerId     = -1,
                Users       = new Collection <UserModel>()
            };
            systemGroupList.Add(groupModel);
            #endregion


            var unitOfWorkFactory = new UnitOfWorkFactory();
            using (IUnitOfWork unitOfWork = unitOfWorkFactory.GetUnitOfWork())
            {
                // Admin account creating
                unitOfWork.Users.Add(adminModel);
                unitOfWork.SaveChanges();


                // Users' acoount creating
                foreach (UserModel userModel in userModelsList)
                {
                    unitOfWork.Users.Add(userModel);
                }
                unitOfWork.SaveChanges();


                // Temporary album adding to each user (ever admin)
                List <UserModel> allUsersList = unitOfWork.Users.All().ToList();
                foreach (UserModel userModel in allUsersList)
                {
                    userModel.Albums.Add(new AlbumModel
                    {
                        Name            = "Temporary",
                        Description     = "System album not for use",
                        IsDeleted       = false,
                        Permissions     = (int)AlbumModel.PermissionsMask.PublicAlbum,
                        OwnerId         = userModel.Id,
                        Photos          = new Collection <PhotoModel>(),
                        Tags            = new Collection <AlbumTagModel>(),
                        AvailableGroups = new Collection <AvailableGroupModel>()
                    });
                    unitOfWork.Users.Update(userModel);
                }
                unitOfWork.SaveChanges();

                // Adding all system groups (Owner for all groups is Admin)
                var adminID = unitOfWork.Users.Find(a => a.Email == "*****@*****.**").Id;
                foreach (var systemGroup in systemGroupList)
                {
                    systemGroup.OwnerId = adminID;
                    unitOfWork.Groups.Add(systemGroup);
                }
                unitOfWork.SaveChanges();


                #region adding test groups

                var group = new GroupModel
                {
                    GroupName   = "Test group",
                    OwnerId     = unitOfWork.Users.Find(a => a.Email == "*****@*****.**").Id,
                    Description = "Test group"
                };

                unitOfWork.Groups.Add(group);

                unitOfWork.SaveChanges();

                #endregion

                #region adding album to user with lastname Towstonog

                UserModel maaak = unitOfWork.Users.Find(x => x.LastName == "Towstonog");
                maaak.Albums.Add(new AlbumModel
                {
                    Name            = "First album",
                    Description     = "Default album by DBinit",
                    IsDeleted       = false,
                    Permissions     = (int)AlbumModel.PermissionsMask.PublicAlbum,
                    OwnerId         = maaak.Id,
                    Tags            = new Collection <AlbumTagModel>(),
                    AvailableGroups = new Collection <AvailableGroupModel>(),
                    Photos          = new Collection <PhotoModel>()
                });
                unitOfWork.Users.Update(maaak);
                unitOfWork.SaveChanges();

                #endregion

                #region adding photos and group to album with name "First album"

                AlbumModel albumModel = unitOfWork.Albums.Find(album => album.Name == "First album");

                var avialableGroup = new AvailableGroupModel
                {
                    AlbumId        = albumModel.Id,
                    GroupId        = 1,
                    CanAddComments = true,
                    CanAddPhotos   = true,
                    CanSeeComments = true,
                    CanSeeLikes    = true,
                    CanSeePhotos   = true
                };

                albumModel.AvailableGroups.Add(avialableGroup);

                GeneratePhotos(albumModel, unitOfWork);

                #endregion

                #region adding album to user with lastname Golovin

                var golovinUser = unitOfWork.Users.Find(x => x.LastName == "Golovin");

                var tags = new Collection <AlbumTagModel>
                {
                    new AlbumTagModel
                    {
                        TagName = "tag"
                    },
                    new AlbumTagModel
                    {
                        TagName = "tag1"
                    },
                    new AlbumTagModel
                    {
                        TagName = "looooooooooooooooooong tag"
                    }
                };

                var albumForGolovin = new AlbumModel
                {
                    Name            = "Anton album",
                    Description     = "Default album by DBinit",
                    IsDeleted       = false,
                    Permissions     = (int)AlbumModel.PermissionsMask.PublicAlbum,
                    OwnerId         = golovinUser.Id,
                    Tags            = tags,
                    AvailableGroups = new Collection <AvailableGroupModel>(),
                    Photos          = new Collection <PhotoModel>()
                };

                var currentGroup = unitOfWork.Groups.Find(x => x.OwnerId == 1);

                golovinUser.Groups.Add(currentGroup);
                golovinUser.Albums.Add(albumForGolovin);

                unitOfWork.SaveChanges();

                #endregion

                #region adding photos and group to album with name "Anton album"

                albumModel = unitOfWork.Albums.Find(album => album.Name == "Anton album");

                avialableGroup = new AvailableGroupModel
                {
                    AlbumId        = albumModel.Id,
                    GroupId        = 1,
                    CanAddComments = true,
                    CanAddPhotos   = true,
                    CanSeeComments = true,
                    CanSeeLikes    = true,
                    CanSeePhotos   = true
                };

                albumForGolovin.AvailableGroups.Add(avialableGroup);


                GeneratePhotos(albumModel, unitOfWork);

                #endregion
            }

            base.Seed(databaseContext);
        }