| @@ -0,0 +1,18 @@ | |||
| using ProtoBuf; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| namespace GrpcShared.DTO.Track.SingleTrack | |||
| { | |||
| [ProtoContract] | |||
| public class SingleTrackRequest | |||
| { | |||
| [ProtoMember(1)] | |||
| public string Id { get; set; } | |||
| [ProtoMember(2)] | |||
| public string Token { get; set; } | |||
| } | |||
| } | |||
| @@ -0,0 +1,67 @@ | |||
| using ProtoBuf; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| namespace GrpcShared.DTO.Track.SingleTrack | |||
| { | |||
| [ProtoContract] | |||
| public class SingleTrackResponse | |||
| { | |||
| [ProtoMember(1)] | |||
| public double Danceability { get; set; } | |||
| [ProtoMember(2)] | |||
| public double Energy { get; set; } | |||
| [ProtoMember(3)] | |||
| public long Key { get; set; } | |||
| [ProtoMember(4)] | |||
| public double Loudness { get; set; } | |||
| [ProtoMember(5)] | |||
| public long Mode { get; set; } | |||
| [ProtoMember(6)] | |||
| public double Speechiness { get; set; } | |||
| [ProtoMember(7)] | |||
| public double Acousticness { get; set; } | |||
| [ProtoMember(8)] | |||
| public long Instrumentalness { get; set; } | |||
| [ProtoMember(9)] | |||
| public double Liveness { get; set; } | |||
| [ProtoMember(10)] | |||
| public double Valence { get; set; } | |||
| [ProtoMember(11)] | |||
| public double Tempo { get; set; } | |||
| [ProtoMember(12)] | |||
| public string Type { get; set; } | |||
| [ProtoMember(13)] | |||
| public string Id { get; set; } | |||
| [ProtoMember(14)] | |||
| public string Uri { get; set; } | |||
| [ProtoMember(15)] | |||
| public Uri TrackHref { get; set; } | |||
| [ProtoMember(16)] | |||
| public Uri AnalysisUrl { get; set; } | |||
| [ProtoMember(17)] | |||
| public long DurationMs { get; set; } | |||
| [ProtoMember(18)] | |||
| public long TimeSignature { get; set; } | |||
| } | |||
| } | |||
| @@ -1,4 +1,5 @@ | |||
| using GrpcShared.DTO.Search; | |||
| using GrpcShared.DTO.Track.SingleTrack; | |||
| using ProtoBuf.Grpc.Configuration; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| @@ -12,5 +13,6 @@ namespace GrpcShared.Interfaces | |||
| public interface ITrackService | |||
| { | |||
| Task<SearchResponse> ListSearchAsync(SearchRequest request); | |||
| Task<SingleTrackResponse> ListSingleTrackAsync(SingleTrackRequest request); | |||
| } | |||
| } | |||
| @@ -1,9 +1,11 @@ | |||
| using GrpcShared.DTO.Search; | |||
| using GrpcShared.DTO.Track.SingleTrack; | |||
| namespace NemAnBlazor.Services.Interfaces | |||
| { | |||
| public interface ITrackClientService | |||
| { | |||
| Task<SearchResponse> GetListSearchAsync(SearchRequest request); | |||
| Task<SingleTrackResponse> GetListSingleTrackAsync(SingleTrackRequest request); | |||
| } | |||
| } | |||
| @@ -1,5 +1,6 @@ | |||
| using Grpc.Net.Client; | |||
| using GrpcShared.DTO.Search; | |||
| using GrpcShared.DTO.Track.SingleTrack; | |||
| using GrpcShared.Interfaces; | |||
| using NemAnBlazor.Services.Interfaces; | |||
| using ProtoBuf.Grpc.Client; | |||
| @@ -19,5 +20,10 @@ namespace NemAnBlazor.Services | |||
| { | |||
| return await _serviceClient.ListSearchAsync(request); | |||
| } | |||
| public async Task<SingleTrackResponse> GetListSingleTrackAsync(SingleTrackRequest request) | |||
| { | |||
| return await _serviceClient.ListSingleTrackAsync(request); | |||
| } | |||
| } | |||
| } | |||
| @@ -1,6 +1,7 @@ | |||
| using Grpc.Core; | |||
| using GrpcShared; | |||
| using GrpcShared.DTO.Search; | |||
| using GrpcShared.DTO.Track.SingleTrack; | |||
| using GrpcShared.Interfaces; | |||
| using Microsoft.Net.Http.Headers; | |||
| using Newtonsoft.Json; | |||
| @@ -36,6 +37,38 @@ namespace SpotifyService.Services | |||
| } | |||
| public async Task<SingleTrackResponse> ListSingleTrackAsync(SingleTrackRequest request) | |||
| { | |||
| var client = _httpClientFactory.CreateClient("HttpClient"); | |||
| client.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Bearer " + request.Token); | |||
| var trackResult = await client.GetAsync($"audio-features/{request.Id}"); | |||
| var responses = JsonConvert.DeserializeObject<SingleTrackResponse>(await trackResult.Content.ReadAsStringAsync())!; | |||
| return new SingleTrackResponse | |||
| { | |||
| Id = responses!.Id, | |||
| Danceability = responses!.Danceability, | |||
| Key = responses!.Key, | |||
| Loudness = responses!.Loudness, | |||
| Mode = responses!.Mode, | |||
| Speechiness = responses!.Speechiness, | |||
| Acousticness = responses!.Acousticness, | |||
| Instrumentalness = responses!.Instrumentalness, | |||
| Liveness = responses!.Liveness, | |||
| Valence = responses!.Valence, | |||
| Tempo = responses!.Tempo, | |||
| Type = responses!.Type, | |||
| Uri = responses!.Uri, | |||
| TrackHref = responses!.TrackHref, | |||
| AnalysisUrl = responses!.AnalysisUrl, | |||
| DurationMs = responses!.DurationMs, | |||
| TimeSignature = responses!.TimeSignature, | |||
| }; | |||
| } | |||
| } | |||
| } | |||