瀏覽代碼

Added DTO, implement backend for get audio feature for single track

tags/v1.1.0^2
nemanja.grkovic 3 年之前
父節點
當前提交
8d779eeb1c

+ 18
- 0
GrpcShared/DTO/Track/SingleTrack/SingleTrackRequest.cs 查看文件

@@ -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; }
}
}

+ 67
- 0
GrpcShared/DTO/Track/SingleTrack/SingleTrackResponse.cs 查看文件

@@ -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; }
}
}

+ 2
- 0
GrpcShared/Interfaces/ITrackService.cs 查看文件

@@ -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);
}
}

+ 2
- 0
NemAnCore/Services/Interfaces/ITrackClientService.cs 查看文件

@@ -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);
}
}

+ 6
- 0
NemAnCore/Services/TrackClientService.cs 查看文件

@@ -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);
}
}
}

+ 33
- 0
gRPCServer/Services/TrackService.cs 查看文件

@@ -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,
};
}
}
}


Loading…
取消
儲存