コード例 #1
0
        public async Task <IActionResult> UploadFile([FromRoute] Guid id, [FromForm] CreateTrackRequest createTrackRequest)
        {
            var identity = HttpContext.User.Identity as ClaimsIdentity;

            var userIdFromToken = identity.Claims.FirstOrDefault(x => x.Type == "id");

            var claimValue = userIdFromToken.Value;

            if (claimValue != id.ToString())
            {
                return(this.StatusCode(403));
            }

            if (createTrackRequest.Track == null || createTrackRequest.Track.Length == 0)
            {
                return(Content("file not selected"));
            }

            var result = await this.trackService.UploadTrack(id, createTrackRequest.Track, createTrackRequest);

            if (result.Errors.Any())
            {
                return(this.BadRequest(result));
            }

            return(this.Ok(result));
        }
コード例 #2
0
ファイル: TrackService.cs プロジェクト: Frederik91/Partify
        public async Task <TrackDto> Create(CreateTrackRequest request)
        {
            var command = new CreateTrackCommand {
                Id = Guid.NewGuid(), Request = request
            };
            await _commandExecutor.ExecuteAsync(command);

            return(await Get(command.Id));
        }
コード例 #3
0
        public IActionResult CreateTrack([FromBody] CreateTrackRequest request)
        {
            var createdTrack = _trackService.CreateTrack(
                User.GetUserId(),
                request.Name,
                request.CreatedAt,
                _mapper.Map <IEnumerable <CustomizationType> >(request.AllowedCustomizations));

            var response = _mapper.Map <TrackModel>(createdTrack);

            return(Ok(response));
        }
コード例 #4
0
        public async Task <CreateTracksResponse> UploadTrack(Guid customerId, IFormFile track, CreateTrackRequest creteTrackRequest)
        {
            var baseTrackPath = $@"TurnItUp\Tracks";

            var trackLocationBase = "Tracks";

            var identityUser = await this.userManager.FindByIdAsync(customerId.ToString());

            if (identityUser == null)
            {
                return(new CreateTracksResponse
                {
                    Errors = new List <Infrastructure.CrossCutting.Helpers.Error>
                    {
                        new Infrastructure.CrossCutting.Helpers.Error("Invalid track request", "Customer id provided does not belong to any customer")
                    }
                });
            }

            var customer = this.context.Customers
                           .Include(x => x.Tracks)
                           .FirstOrDefault(x => x.IdentityId == identityUser.Id);

            if (customer == null)
            {
                return(new CreateTracksResponse
                {
                    Errors = new List <Infrastructure.CrossCutting.Helpers.Error>
                    {
                        new Infrastructure.CrossCutting.Helpers.Error("Invalid track request", "Customer id provided does not belong to any customer")
                    }
                });
            }

            if (customer.Tracks == null)
            {
                customer.Tracks = new List <Domain.Model.Tracks.Track>();
            }

            Directory.CreateDirectory($@"C:\{baseTrackPath}\{customer.IdentityId}");

            var path = Path.Combine(
                $@"C:\{baseTrackPath}\{customer.IdentityId}\",
                track.FileName);

            using (var stream = new FileStream(path, FileMode.Create))
            {
                await track.CopyToAsync(stream);
            }

            TagLib.File fileInfo = TagLib.File.Create(path, TagLib.ReadStyle.Average);
            var         duration = (int)fileInfo.Properties.Duration.TotalSeconds;

            float mb = track.Length / 1024 / 1024;

            if (mb > 50)
            {
                return(new CreateTracksResponse
                {
                    Errors = new List <Infrastructure.CrossCutting.Helpers.Error>
                    {
                        new Infrastructure.CrossCutting.Helpers.Error("Invalid track request", "File to upload cannot exceed 50 mb")
                    }
                });
            }

            var trackToCreate = new Domain.Model.Tracks.Track
            {
                FileName           = track.FileName.Split('.')[0],
                Extension          = track.FileName.Split('.')[1],
                DurationInSeconds  = duration,
                TrackAudioLocation = $@"{trackLocationBase}/{customer.IdentityId}/{track.FileName}",
                ArtistName         = creteTrackRequest.ArtistName,
                TrackName          = creteTrackRequest.TrackName
            };

            customer.Tracks.Add(trackToCreate);

            this.context.Customers.Update(customer);

            await this.context.SaveChangesAsync();

            return(new CreateTracksResponse
            {
                TrackId = trackToCreate.Id,
                TrackAudioLocation = $@"{trackLocationBase}/{customer.IdentityId}/{track.FileName}",
                Errors = new List <Infrastructure.CrossCutting.Helpers.Error>()
            });
        }
コード例 #5
0
        public async Task <ActionResult <Track> > Create([FromForm] CreateTrackRequest request)
        {
            var file = TagLib.File.Create(new FormFileAbstraction(request.Song));

            var entity = new Track
            {
                Title      = request.Title ?? file.Tag.Title,
                Performers = request.Performers ?? string.Join(", ", file.Tag.Performers),
                Album      = request.Album ?? file.Tag.Album,
                Year       = request.Year ?? (file.Tag.Year == 0 ? null : file.Tag.Year),
                Duration   = (long)file.Properties.Duration.TotalMilliseconds,
                IsPublic   = request.IsPublic,
                UploaderId = UserId
            };

            if (request.PlaylistId != null)
            {
                var playlist =
                    await _dbContext.Playlist.FirstOrDefaultAsync(
                        x => x.Id == request.PlaylistId && x.OwnerId == UserId);

                if (playlist == null)
                {
                    return(StatusCode(StatusCodes.Status403Forbidden, "No permission on this playlist"));
                }

                entity.PlaylistTracks = new List <PlaylistTrack>
                {
                    new PlaylistTrack
                    {
                        PlaylistId = request.PlaylistId.Value,
                        TrackId    = entity.Id
                    }
                };
            }

            if (request.IsFavorite)
            {
                entity.FavoriteTracks = new List <FavoriteTrack>
                {
                    new FavoriteTrack
                    {
                        TrackId = entity.Id,
                        UserId  = UserId.Value
                    }
                };
                entity.IsFavorite = true;
            }

            if (request.Cover != null)
            {
                entity.CoverUrl = await _storageService.UploadFile(
                    "covers",
                    request.Cover.FileName,
                    request.Cover,
                    false);
            }
            else if (file.Tag.Pictures != null && file.Tag.Pictures.Any())
            {
                entity.CoverUrl = await _storageService.UploadFile(
                    "covers",
                    file.Tag.Pictures[0].Filename ?? $"{Path.GetFileNameWithoutExtension(request.Song.FileName)}.{file.Tag.Pictures[0].MimeType.Split("/")[1]}",
                    file.Tag.Pictures[0].Data.Data,
                    false);
            }

            //var fileName = $"{entity.Title} - {entity.Performers}{Path.GetExtension(request.File.FileName)}";
            entity.Url = await _storageService.UploadFile(
                "tracks",
                request.Song.FileName,
                request.Song,
                false);


            entity = _dbContext.Track.Add(entity).Entity;

            _dbContext.SaveChanges();

            return(CreatedAtAction(nameof(Create), entity));
        }