コード例 #1
0
        public async Task <IEnumerable <UserDailyTrackingValue> > Handle(UpdateUserDailyTrackingValues request, CancellationToken cancellationToken)
        {
            var results = new List <UserDailyTrackingValue>();

            using var transaction = _dbContext.Database.BeginTransaction();

            foreach (var value in request.Values)
            {
                var data = await _dbContext.UserDailyTrackingValues
                           .AsNoTracking()
                           .Where(u => u.Day.Equals(request.Day))
                           .Where(u => u.UserId.Equals(request.UserId))
                           .Where(u => u.UserTrackingValueId.Equals(value.UserTrackingValueId))
                           .Where(u => u.Occurrence.Equals(value.Occurance))
                           .SingleOrDefaultAsync(cancellationToken);

                if (data == null)
                {
                    var result = _dbContext.UserDailyTrackingValues
                                 .Add(new UserDailyTrackingValue
                    {
                        Day    = request.Day,
                        UserId = request.UserId,
                        UserTrackingValueId = value.UserTrackingValueId,
                        Occurrence          = value.Occurance,
                        Value = value.Value,
                        When  = value.When,
                    });

                    await _dbContext.SaveChangesAsync(cancellationToken);

                    results.Add(result.Entity);
                }
                else
                {
                    var result = _dbContext.UserDailyTrackingValues
                                 .Update(data with
                    {
                        Value = value.Value,
                        When  = value.When,
                    });

                    await _dbContext.SaveChangesAsync(cancellationToken);

                    results.Add(result.Entity);
                }
            }
            await transaction.CommitAsync(cancellationToken);

            return(results);
        }
コード例 #2
0
        public async Task <UserTracking> Handle(AddUserTracking request, CancellationToken cancellationToken)
        {
            var order = await _dbContext.UserTrackings
                        .Where(t => t.UserId.Equals(request.UserId))
                        .OrderByDescending(t => t.Order)
                        .Select(t => t.Order)
                        .FirstOrDefaultAsync(cancellationToken);

            var result = _dbContext.UserTrackings
                         .Add(new UserTracking
            {
                UserId      = request.UserId,
                Title       = request.Title,
                Description = request.Description,
                Disabled    = false,
                Occurrences = request.Occurrences,
                Order       = order + 1,
                UseTime     = request.UseTime,
                Values      = request.Values.ToList(),
            });

            await _dbContext.SaveChangesAsync(cancellationToken);

            return(await _mediator.Send(new GetUserTracking(request.UserId, result.Entity.UserTrackingId)));
        }
コード例 #3
0
        public async Task <bool> Handle(UpdateUserTrackingValue request, CancellationToken cancellationToken)
        {
            var data = await _dbContext.UserTrackingValues
                       .AsNoTracking()
                       .Where(p => p.UserTrackingValueId == request.UserTrackingValueId)
                       .Where(p => p.Tracking.UserId == request.UserId)
                       .FirstOrDefaultAsync(cancellationToken);


            if (data == null)
            {
                throw new ArgumentException($"User Tracking Value Id ({request.UserTrackingValueId}) for User Id ({request.UserId}) not found.");
            }

            _dbContext.Update(data with {
                Name        = request.Name,
                Description = request.Description,
                Order       = request.Order,
                Type        = request.Type,
                Disabled    = request.Disabled,
                Metadata    = request.Metadata.ToArray(),
            });

            return(await _dbContext.SaveChangesAsync(cancellationToken) == 1);
        }
コード例 #4
0
        public async Task <Unit> Handle(UpdateDay request, CancellationToken cancellationToken)
        {
            var data = await _dbContext.UserDays
                       .Where(userDay => userDay.UserId == request.UserId && userDay.Day == request.Day.Date)
                       .AsNoTracking()
                       .FirstOrDefaultAsync(cancellationToken);

            if (data == null)
            {
                _dbContext.UserDays
                .Add(new UserDay
                {
                    Day    = request.Day.Date,
                    UserId = request.UserId,
                    Water  = request.UserDay.Water,
                    Weight = request.UserDay.Weight,
                    Notes  = (request.UserDay.Notes == null || request.UserDay.Notes.Trim().Length == 0) ? null : request.UserDay.Notes.Trim(),
                });
            }
            else
            {
                _dbContext.UserDays.Update(data with
                {
                    Water  = request.UserDay.Water,
                    Weight = request.UserDay.Weight,
                    Notes  = request.UserDay.Notes == null || request.UserDay.Notes.Trim().Length == 0 ? null : request.UserDay.Notes.Trim(),
                });
            }

            await _dbContext.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }
コード例 #5
0
        public async Task <Fueling> Handle(AddFueling request, CancellationToken cancellationToken)
        {
            var data = _dbContext.Fuelings
                       .Add(new Fueling
            {
                Name = request.Name
            });

            await _dbContext.SaveChangesAsync(cancellationToken);

            return(data.Entity);
        }
コード例 #6
0
        public async Task <int> Handle(Plans.ChangeUserPlan request, CancellationToken cancellationToken)
        {
            ctx.UserPlans.Add(new UserPlan
            {
                UserId = request.UserId,
                PlanId = request.PlanId,
                Start  = DateTime.Now,
            });

            await ctx.SaveChangesAsync(cancellationToken);

            return(request.PlanId);
        }
コード例 #7
0
        public async Task <int> Handle(AddPlan request, CancellationToken cancellationToken)
        {
            var result = _dbContext.Plans
                         .Add(new Plan
            {
                Name         = request.Name,
                MealCount    = request.MealCount,
                FuelingCount = request.FuelingCount,
            });

            await _dbContext.SaveChangesAsync(cancellationToken);

            return(result.Entity.PlanId);
        }
コード例 #8
0
        public async Task <Victory> Handle(AddVictory request, CancellationToken cancellationToken)
        {
            var data = ctx.Add(new Victory
            {
                UserId = request.UserId,
                Name   = request.Name,
                When   = request.When,
                Type   = request.Type,
            });

            await ctx.SaveChangesAsync(cancellationToken);

            return(data.Entity);
        }
コード例 #9
0
        public async Task <bool> Handle(DeleteFueling request, CancellationToken cancellationToken)
        {
            var data = await _dbContext.Fuelings
                       .AsNoTracking()
                       .SingleOrDefaultAsync(fueling => fueling.FuelingId == request.FuelingId, cancellationToken);

            if (data == null)
            {
                throw new ArgumentException($"Fueling Id ({request.FuelingId}) not found.");
            }

            _dbContext.Fuelings.Remove(data);

            return(await _dbContext.SaveChangesAsync(cancellationToken) == 1);
        }
コード例 #10
0
        public async Task <bool> Handle(AddUserDailyTracking request, CancellationToken cancellationToken)
        {
            var result = _dbContext.UserDailyTrackingValues
                         .Add(new UserDailyTrackingValue
            {
                Day    = request.Day,
                UserId = request.UserId,
                UserTrackingValueId = request.UserTrackingValueId,
                Occurrence          = request.Occurance,
                Value = request.Value,
                When  = request.When,
            });

            return(await _dbContext.SaveChangesAsync(cancellationToken) == 1);
        }
コード例 #11
0
        public async Task <User> Handle(CreateNewUser request, CancellationToken cancellationToken)
        {
            var result = _dbContext
                         .Users
                         .Add(new User
            {
                UserId       = request.UserId,
                FirstName    = request.FirstName,
                LastName     = request.LastName,
                EmailAddress = request.EmailAddress,
                Created      = DateTime.Now
            });

            await _dbContext.SaveChangesAsync(cancellationToken);

            return(result.Entity);
        }
コード例 #12
0
        public async Task <bool> Handle(DeleteUserTrackingValue request, CancellationToken cancellationToken)
        {
            var data = await _dbContext.UserTrackingValues
                       .AsNoTracking()
                       .Where(p => p.UserTrackingValueId == request.UserTrackingValueId)
                       .Where(p => p.Tracking.UserId == request.UserId)
                       .FirstOrDefaultAsync(cancellationToken);

            if (data == null)
            {
                throw new ArgumentException($"User Tracking Value Id ({request.UserTrackingValueId}) for User Id ({request.UserId}) not found.");
            }

            _dbContext.Remove(data);

            return(await _dbContext.SaveChangesAsync(cancellationToken) == 1);
        }
コード例 #13
0
        public async Task <bool> Handle(DeleteVictory request, CancellationToken cancellationToken)
        {
            var data = await ctx.Victories
                       .AsNoTracking()
                       .FirstOrDefaultAsync(v => v.VictoryId == request.VictoryId, cancellationToken);

            if (data == null)
            {
                return(false);
            }

            ctx.Victories.Remove(data);

            await ctx.SaveChangesAsync(cancellationToken);

            return(true);
        }
コード例 #14
0
        public async Task <int> Handle(AddUserTrackingValue request, CancellationToken cancellationToken)
        {
            var data = _dbContext.UserTrackingValues
                       .Add(new UserTrackingValue
            {
                UserTrackingId = request.UserTrackingId,
                Name           = request.Name,
                Description    = request.Description,
                Order          = request.Order,
                Type           = request.Type,
                Disabled       = request.Disabled,
                Metadata       = request.Metadata.ToArray(),
            });

            await _dbContext.SaveChangesAsync(cancellationToken);

            return(data.Entity.UserTrackingValueId);
        }
コード例 #15
0
        public async Task <string> Handle(AddNewUser request, CancellationToken cancellationToken)
        {
            var userPlans = new UserPlan[] { new UserPlan {
                                                 PlanId = request.PlanId, Start = DateTime.Now
                                             } };

            var result = _dbContext.Users.Add(new User
            {
                UserId       = request.UserId,
                FirstName    = request.FirstName,
                LastName     = request.LastName,
                EmailAddress = request.EmailAddress,
                Created      = DateTime.Now,
                UserPlans    = userPlans,
            });

            await _dbContext.SaveChangesAsync(cancellationToken);

            return(result.Entity.UserId);
        }
コード例 #16
0
        public async Task <bool> Handle(UpdateVictory request, CancellationToken cancellationToken)
        {
            var data = await ctx.Victories
                       .AsNoTracking()
                       .FirstOrDefaultAsync(v => v.VictoryId == request.VictoryId, cancellationToken);

            if (data == null)
            {
                return(false);
            }

            ctx.Victories.Update(data with
            {
                Name = request.Name,
                When = request.When,
            });

            await ctx.SaveChangesAsync(cancellationToken);

            return(true);
        }
コード例 #17
0
        public async Task <Plan> Handle(UpdatePlan request, CancellationToken cancellationToken)
        {
            var data = await _dbContext.Plans
                       .AsNoTracking()
                       .SingleOrDefaultAsync(plan => plan.PlanId == request.PlanId);

            if (data == null)
            {
                throw new ArgumentException($"Plan Id ({request.PlanId}) not found.");
            }

            _dbContext.Plans.Update(data with
            {
                Name         = request.Name,
                FuelingCount = request.FuelingCount,
                MealCount    = request.MealCount,
            });

            await _dbContext.SaveChangesAsync(cancellationToken);

            return(data);
        }
コード例 #18
0
        public async Task <bool> Handle(DeleteUserTracking request, CancellationToken cancellationToken)
        {
            var data = await _dbContext.UserTrackings
                       .AsNoTracking()
                       .Include(u => u.Values)
                       .Where(u => u.UserTrackingId.Equals(request.UserTrackingId))
                       .Where(u => u.UserId.Equals(request.UserId))
                       .SingleOrDefaultAsync(cancellationToken);

            if (data == null)
            {
                throw new ArgumentException($"User Tracking Id ({request.UserTrackingId}) for User Id ({request.UserId}) not found.");
            }

            var values = data.Values.ToList();

            var userValues = await _dbContext.UserDailyTrackingValues
                             .AsNoTracking()
                             .Where(v => v.TrackingValue.UserTrackingId.Equals(request.UserTrackingId))
                             .ToListAsync();

            using var transaction = _dbContext.Database.BeginTransaction();

            _dbContext.UserDailyTrackingValues
            .RemoveRange(userValues);

            _dbContext.UserTrackingValues
            .RemoveRange(values);

            _dbContext.UserTrackings
            .Remove(data);

            var result = await _dbContext.SaveChangesAsync(cancellationToken) > 0;

            await transaction.CommitAsync(cancellationToken);

            return(result);
        }
コード例 #19
0
        public async Task <bool> Handle(UpdateUser request, CancellationToken cancellationToken)
        {
            var user = _dbContext.Users
                       .AsNoTracking()
                       .FirstOrDefault(user => user.UserId.Equals(request.userId));

            if (user != null)
            {
                _dbContext.Users
                .Update(user with
                {
                    FirstName   = request.FirstName,
                    LastName    = request.LastName,
                    WaterSize   = request.WaterSize,
                    WaterTarget = request.WaterTarget,
                    Autosave    = request.Autosave,
                });

                return(await _dbContext.SaveChangesAsync(cancellationToken) == 1);
            }

            return(false);
        }
コード例 #20
0
        public async Task <UserTracking> Handle(UpdateUserTracking request, CancellationToken cancellationToken)
        {
            var data = await _dbContext.UserTrackings
                       .AsNoTracking()
                       .Where(u => u.UserTrackingId.Equals(request.UserTrackingId))
                       .Where(u => u.UserId.Equals(request.UserId))
                       .SingleOrDefaultAsync(cancellationToken);

            if (data == null)
            {
                throw new ArgumentException($"UserTrackingId ({request.UserTrackingId}) not found.");
            }

            using var transaction = _dbContext.Database.BeginTransaction();

            _dbContext.UserTrackings
            .Update(data with
            {
                Title       = request.Title,
                Description = request.Description,
                Occurrences = request.Occurrences,
                Disabled    = request.Disabled,
                UseTime     = request.UseTime,
            });

            await _dbContext.SaveChangesAsync(cancellationToken);

            _dbContext.UserTrackingValues
            .AddRange(request.Values
                      .Where(userTrackingValue => userTrackingValue.UserTrackingValueId == 0)
                      .Select(userTrackingValue => new UserTrackingValue
            {
                UserTrackingId = data.UserTrackingId,
                Name           = userTrackingValue.Name,
                Description    = userTrackingValue.Description,
                Disabled       = userTrackingValue.Disabled,
                Order          = userTrackingValue.Order,
                Type           = userTrackingValue.Type,
                Metadata       = userTrackingValue.Metadata,
            })
                      );

            var values = await _dbContext.UserTrackingValues
                         .AsNoTracking()
                         .Where(u => u.Tracking.UserTrackingId.Equals(request.UserTrackingId))
                         .Where(u => u.Tracking.UserId.Equals(request.UserId))
                         .ToListAsync(cancellationToken);

            foreach (var userTrackingValue in request.Values.Where(v => v.UserTrackingValueId != 0))
            {
                var value = await _dbContext.UserTrackingValues
                            .AsNoTracking()
                            .Where(p => p.UserTrackingValueId == userTrackingValue.UserTrackingValueId)
                            .Where(p => p.Tracking.UserId == request.UserId)
                            .FirstOrDefaultAsync(cancellationToken);

                _dbContext.Update(value with
                {
                    Name        = userTrackingValue.Name,
                    Description = userTrackingValue.Description,
                    Order       = userTrackingValue.Order,
                    Type        = userTrackingValue.Type,
                    Disabled    = userTrackingValue.Disabled,
                });

                var metadata = await _dbContext.UserTrackingValueMetadata
                               .AsNoTracking()
                               .Where(p => p.UserTrackingValueId == userTrackingValue.UserTrackingValueId)
                               .ToListAsync(cancellationToken);

                _dbContext.UserTrackingValueMetadata
                .RemoveRange(metadata);

                _dbContext.UserTrackingValueMetadata
                .AddRange(userTrackingValue.Metadata
                          .Select(m => new UserTrackingValueMetadata
                {
                    Key   = m.Key,
                    Value = m.Value,
                    UserTrackingValueId = userTrackingValue.UserTrackingValueId
                }));
            }

            var removeTrackingValueIds = request.Values.Where(value => value.UserTrackingValueId != 0).Select(value => value.UserTrackingValueId);
            var removeTrackingValues   = _dbContext.UserTrackingValues
                                         .Where(userTrackingValue => userTrackingValue.Tracking.UserId == request.UserId)
                                         .Where(userTrackingValue => userTrackingValue.UserTrackingId == request.UserTrackingId)
                                         .Where(userTrackingValue => !removeTrackingValueIds.Contains(userTrackingValue.UserTrackingValueId))
                                         .AsEnumerable();

            _dbContext.UserTrackingValues
            .RemoveRange(removeTrackingValues);

            await _dbContext.SaveChangesAsync(cancellationToken);

            await transaction.CommitAsync(cancellationToken);

            return(data);
        }