| 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; } | |||||
| } | |||||
| } |
| 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; } | |||||
| } | |||||
| } |
| using GrpcShared.DTO.Search; | using GrpcShared.DTO.Search; | ||||
| using GrpcShared.DTO.Track.SingleTrack; | |||||
| using ProtoBuf.Grpc.Configuration; | using ProtoBuf.Grpc.Configuration; | ||||
| using System; | using System; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| public interface ITrackService | public interface ITrackService | ||||
| { | { | ||||
| Task<SearchResponse> ListSearchAsync(SearchRequest request); | Task<SearchResponse> ListSearchAsync(SearchRequest request); | ||||
| Task<SingleTrackResponse> ListSingleTrackAsync(SingleTrackRequest request); | |||||
| } | } | ||||
| } | } |
| using GrpcShared.DTO.Search; | using GrpcShared.DTO.Search; | ||||
| using GrpcShared.DTO.Track.SingleTrack; | |||||
| namespace NemAnBlazor.Services.Interfaces | namespace NemAnBlazor.Services.Interfaces | ||||
| { | { | ||||
| public interface ITrackClientService | public interface ITrackClientService | ||||
| { | { | ||||
| Task<SearchResponse> GetListSearchAsync(SearchRequest request); | Task<SearchResponse> GetListSearchAsync(SearchRequest request); | ||||
| Task<SingleTrackResponse> GetListSingleTrackAsync(SingleTrackRequest request); | |||||
| } | } | ||||
| } | } |
| using Grpc.Net.Client; | using Grpc.Net.Client; | ||||
| using GrpcShared.DTO.Search; | using GrpcShared.DTO.Search; | ||||
| using GrpcShared.DTO.Track.SingleTrack; | |||||
| using GrpcShared.Interfaces; | using GrpcShared.Interfaces; | ||||
| using NemAnBlazor.Services.Interfaces; | using NemAnBlazor.Services.Interfaces; | ||||
| using ProtoBuf.Grpc.Client; | using ProtoBuf.Grpc.Client; | ||||
| { | { | ||||
| return await _serviceClient.ListSearchAsync(request); | return await _serviceClient.ListSearchAsync(request); | ||||
| } | } | ||||
| public async Task<SingleTrackResponse> GetListSingleTrackAsync(SingleTrackRequest request) | |||||
| { | |||||
| return await _serviceClient.ListSingleTrackAsync(request); | |||||
| } | |||||
| } | } | ||||
| } | } |
| using Grpc.Core; | using Grpc.Core; | ||||
| using GrpcShared; | using GrpcShared; | ||||
| using GrpcShared.DTO.Search; | using GrpcShared.DTO.Search; | ||||
| using GrpcShared.DTO.Track.SingleTrack; | |||||
| using GrpcShared.Interfaces; | using GrpcShared.Interfaces; | ||||
| using Microsoft.Net.Http.Headers; | using Microsoft.Net.Http.Headers; | ||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
| } | } | ||||
| 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, | |||||
| }; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||