Beispiel #1
0
        public async void Initialize()
        {
            _unitOfWork.ApplicationDataContext.Database.EnsureCreated();

            // Look for any users.
            if (_unitOfWork.ApplicationDataContext.AppUsers.Any())
            {
                return;   // DB has been seeded
            }

            var userDict  = new Dictionary <int, AppUser>();
            var dayDict   = new Dictionary <int, DayPunch>();
            var weekDict  = new Dictionary <int, WeekPunch>();
            var monthDict = new Dictionary <int, MonthPunch>();
            var yearDict  = new Dictionary <int, YearPunch>();
            var stateDict = new Dictionary <StatusAdminDtoStatus, PunchState>();

            await _appUserManager.CreateRole(JwtClaims.ApiAccess);

            await _appUserManager.CreateRole(JwtClaims.ApiAccessPower);

            await _appUserManager.CreateRole(JwtClaims.ApiAccessAdmin);

            // Create PunchStates
            foreach (var val in Enum.GetValues(typeof(StatusAdminDtoStatus)))
            {
                string name       = Enum.GetName(typeof(StatusAdminDtoStatus), val);
                var    punchState = new PunchState {
                    State = name
                };
                stateDict.Add((StatusAdminDtoStatus)val, punchState);
                _unitOfWork.PunchStates.Add(punchState);
            }

            // create some users
            var users = new[]
            {
                new Controllers.RegisterDto {
                    Firstname = "Hans", Name = "Tschan", Email = "*****@*****.**", Username = "******"
                },
                new Controllers.RegisterDto {
                    Firstname = "Hanspeter", Name = "Gysin", Email = "*****@*****.**", Username = "******"
                },
                new Controllers.RegisterDto {
                    Firstname = "Matthias", Name = "Höhner", Email = "*****@*****.**", Username = "******"
                },
                new Controllers.RegisterDto {
                    Firstname = "Alexander", Name = "Hilty", Email = "*****@*****.**", Username = "******"
                },
                new Controllers.RegisterDto {
                    Firstname = "Angelo", Name = "Spatharis", Email = "*****@*****.**", Username = "******"
                },
            };

            for (var i = 0; i < users.Length; i++)
            {
                var userIdentity = _mapper.Map <AppUser>(users[i]);
                await _appUserManager.CreateUser(userIdentity, "axil311", new List <string> {
                    JwtClaims.ApiAccess
                });

                userDict.Add(i, userIdentity);
            }

            var powerUser = new Controllers.RegisterDto {
                Firstname = "Power", Name = "Timepuncher", Email = "*****@*****.**"
            };
            var powerUserIdentity = _mapper.Map <AppUser>(powerUser);
            await _appUserManager.CreateUser(powerUserIdentity, "axil311", new List <string> {
                JwtClaims.ApiAccess, JwtClaims.ApiAccessPower
            });

            var adminUser = new Controllers.RegisterDto {
                Firstname = "Admin", Name = "Timepuncher", Email = "*****@*****.**"
            };
            var adminUserIdentity = _mapper.Map <AppUser>(adminUser);
            await _appUserManager.CreateUser(adminUserIdentity, "axil311", new List <string> {
                JwtClaims.ApiAccessAdmin
            });

            // create the punch dimensions
            for (var i = 1; i < 32; i++)
            {
                var d = new DayPunch {
                    Day = i
                };
                dayDict.Add(i, d);
                _unitOfWork.DayPunches.Add(d);
            }
            for (var i = 1; i < 54; i++)
            {
                var w = new WeekPunch {
                    Week = i
                };
                weekDict.Add(i, w);
                _unitOfWork.WeekPunches.Add(w);
            }
            for (var i = 1; i < 13; i++)
            {
                var m = new MonthPunch {
                    Month = i
                };
                monthDict.Add(i, m);
                _unitOfWork.MonthPunches.Add(m);
            }
            for (var i = START_YEAR; i < 2035; i++)
            {
                var y = new YearPunch {
                    Year = i
                };
                yearDict.Add(i, y);
                _unitOfWork.YearPunches.Add(y);
            }

            // create some punches for every user
            for (var date = new DateTime(START_YEAR, 1, 1); date <= DateTime.Now - TimeSpan.FromDays(1); date += TimeSpan.FromDays(1))
            {
                if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
                {
                    continue;
                }

                var dateTimePrev = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);
                for (var p = 1; p < 6; p++) // day punches
                {
                    if (p > 4)              // todo: excess punches
                    {
                        continue;
                    }

                    foreach (var u in userDict)
                    {
                        var timeInfo = GetPunchTime(dateTimePrev, date.Year, date.Month, date.Day, p);
                        var punch    = new Punch
                        {
                            Created    = DateTime.Now,
                            Updated    = DateTime.MinValue,
                            PunchTime  = timeInfo.dt,
                            TimeDec    = timeInfo.dtDec,
                            Direction  = timeInfo.direction,
                            DayPunch   = dayDict[timeInfo.dt.Day],
                            WeekPunch  = weekDict[_timeService.GetWeekNumber(timeInfo.dt)],
                            MonthPunch = monthDict[timeInfo.dt.Month],
                            YearPunch  = yearDict[timeInfo.dt.Year],
                            User       = u.Value
                        };
                        dateTimePrev = timeInfo.dt;
                        _unitOfWork.Punches.Add(punch);
                    }
                }
            }
            _unitOfWork.Complete();
        }