Просмотр исходного кода

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

tags/v1.1.0^2
nemanja.grkovic 3 лет назад
Родитель
Сommit
8d779eeb1c

+ 18
- 0
GrpcShared/DTO/Track/SingleTrack/SingleTrackRequest.cs Просмотреть файл

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 Просмотреть файл

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 Просмотреть файл

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

+ 2
- 0
NemAnCore/Services/Interfaces/ITrackClientService.cs Просмотреть файл

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

+ 6
- 0
NemAnCore/Services/TrackClientService.cs Просмотреть файл

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

+ 33
- 0
gRPCServer/Services/TrackService.cs Просмотреть файл

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



Загрузка…
Отмена
Сохранить