Beispiel #1
0
        private async Task <int> GetOrCreateStartPointAsync(
            string hikeStartPointName,
            int hikeStartPointAltitude,
            double hikeStartPointLatitude,
            double hikeStartPointLongitude)
        {
            var startPoint = this.hikeStartPointRepository
                             .AllAsNoTracking()
                             .FirstOrDefault(x => x.Name == hikeStartPointName);

            if (startPoint == null)
            {
                startPoint = new HikeStartPoint()
                {
                    Name      = hikeStartPointName,
                    Altitude  = hikeStartPointAltitude,
                    Latitude  = hikeStartPointLatitude,
                    Longitute = hikeStartPointLongitude,
                };

                await this.hikeStartPointRepository.AddAsync(startPoint);

                await this.hikeStartPointRepository.SaveChangesAsync();
            }

            return(startPoint.Id);
        }
Beispiel #2
0
        public async Task CreateAsync(CreateHikeInputModel input, string userId, string imagePath)
        {
            var startPoint = this.hikeStartPointsRepository.All()
                             .FirstOrDefault(x => x.Name == input.HikeStartPoint.Name);

            if (startPoint == null)
            {
                startPoint = new HikeStartPoint
                {
                    Name      = input.HikeStartPoint.Name,
                    Altitude  = input.HikeStartPoint.Altitude,
                    Latitude  = input.HikeStartPoint.Longitute,
                    Longitute = input.HikeStartPoint.Longitute,
                };

                await this.hikeStartPointsRepository.AddAsync(startPoint);

                await this.hikeStartPointsRepository.SaveChangesAsync();
            }

            var endPoint = this.hikeEndPointsRepository.All()
                           .FirstOrDefault(x => x.Name == input.HikeEndPoint.Name);

            if (endPoint == null)
            {
                endPoint = new HikeEndPoint
                {
                    Name      = input.HikeEndPoint.Name,
                    Altitude  = input.HikeEndPoint.Altitude,
                    Latitude  = input.HikeEndPoint.Latitude,
                    Longitute = input.HikeEndPoint.Longitute,
                };

                await this.hikeEndPointsRepository.AddAsync(endPoint);

                await this.hikeEndPointsRepository.SaveChangesAsync();
            }

            var hike = new Hike
            {
                Name             = input.Name,
                Length           = input.Length,
                Duration         = TimeSpan.FromMinutes(input.Duration),
                Description      = input.Description,
                Marking          = input.Marking,
                Difficulty       = input.Difficulty,
                CategoryId       = input.CategoryId,
                RegionId         = input.RegionId,
                MountainId       = input.RegionId,
                HikeStartPointId = startPoint.Id,
                HikeEndPointId   = endPoint.Id,
                Denivelation     = startPoint.Altitude - endPoint.Altitude,
                UserId           = userId,
            };

            Directory.CreateDirectory($"{imagePath}/hikes/");
            foreach (var image in input.HikeImages)
            {
                var extension = Path.GetExtension(image.FileName).TrimStart('.');

                if (!this.allowedExtensions.Any(x => extension.EndsWith(x)))
                {
                    throw new Exception($"Invalid image extension {extension}");
                }

                var dbImage = new HikeImage
                {
                    UserId    = userId,
                    Extension = extension,
                };
                var    physicalPath = $"{imagePath}/hikes/{dbImage.Id}.{extension}";
                string localImgUrl  = physicalPath.Split("wwwroot")[1];
                dbImage.RemoteImageUrl = localImgUrl;
                hike.HikeImages.Add(dbImage);
                using Stream fileStream = new FileStream(physicalPath, FileMode.Create);
                await image.CopyToAsync(fileStream);
            }

            await this.hikesRepository.AddAsync(hike);

            await this.hikesRepository.SaveChangesAsync();
        }