private void AddChallenge(ChallengeDetailsDto dto)
        {
            var entity = mapper.Map <Challenge>(dto);

            entity.CreationDate           = DateTimeOffset.Now;
            entity.EditionDate            = DateTimeOffset.Now;
            entity.Club                   = db.Clubs.Find(dto.ClubId);
            entity.Author                 = db.Athletes.Find(dto.AuthorId);
            entity.ChallengeActivityTypes = new List <ChallengeActivityType>();
            foreach (var activityTypeId in dto.ActivityTypesIds)
            {
                entity.ChallengeActivityTypes.Add(new ChallengeActivityType {
                    ChallengeId = entity.Id, ActivityTypeId = activityTypeId
                });
            }
            db.Challenges.Add(entity);
        }
        public async Task AddOrEditChallenge(ChallengeDetailsDto dto)
        {
            if (dto.Id != default)
            {
                this.EditChallenge(dto);
            }
            else
            {
                this.AddChallenge(dto);
            }

            await db.SaveChangesAsync();

            if (dto.Id != default)
            {
                await this.UpdateChallengeRank(dto.Id);
            }
        }
        private void EditChallenge(ChallengeDetailsDto dto)
        {
            var entity = db.Challenges.Find(dto.Id);

            mapper.Map(dto, entity);
            entity.EditionDate = DateTimeOffset.Now;
            entity.Club        = db.Clubs.Find(dto.ClubId);
            entity.Author      = db.Athletes.Find(dto.AuthorId);
            if (entity.ChallengeActivityTypes.Any())
            {
                entity.ChallengeActivityTypes.Clear();
            }
            foreach (var activityTypeId in dto.ActivityTypesIds)
            {
                entity.ChallengeActivityTypes.Add(new ChallengeActivityType {
                    ChallengeId = entity.Id, ActivityTypeId = activityTypeId
                });
            }
        }