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

Completed SaveTracks route.

tags/v1.1.0^2
Nemanja Grkovic 3 лет назад
Родитель
Сommit
ec3e0a0a2d

+ 1
- 1
GrpcShared/DTO/Track/MultipleTrack/MultipleTrackResponse.cs Просмотреть файл

@@ -11,7 +11,7 @@ namespace GrpcShared.DTO.Track.MultipleTrack
public class MultipleTrackResponse
{
[ProtoMember(1)]
public AudioFeature AudioFeatures { get; set; }
public List<AudioFeature>? Audio_Features { get; set; }
}
[ProtoContract]
public class AudioFeature

+ 18
- 0
GrpcShared/DTO/Track/SaveTracks/SaveTracksRequest.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.SaveTracks
{
[ProtoContract]
public class SaveTracksRequest
{
[ProtoMember(1)]
public List<string> Ids { get; set; }
[ProtoMember(2)]
public string Token { get; set; }
}
}

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

@@ -1,5 +1,6 @@
using GrpcShared.DTO.Search;
using GrpcShared.DTO.Track.MultipleTrack;
using GrpcShared.DTO.Track.SaveTracks;
using GrpcShared.DTO.Track.SingleTrack;
using ProtoBuf.Grpc.Configuration;
using System;
@@ -16,5 +17,6 @@ namespace GrpcShared.Interfaces
Task<SearchResponse> ListSearchAsync(SearchRequest request);
Task<SingleTrackResponse> ListSingleTrackAsync(SingleTrackRequest request);
Task<MultipleTrackResponse> ListMultipleTrackAsync(MultipleTrackRequest request);
Task SaveTracks(SaveTracksRequest request);
}
}

+ 4
- 4
NemAnCore/Pages/FetchData.razor Просмотреть файл

@@ -21,11 +21,11 @@
//SearchRequest request = new() { Query = "aitch", Type = "track", Token = token };
//SearchResponse searchResponse = await SearchService.GetListSearchAsync(request);

//MultipleTrackRequest mreq = new() { Ids = new List<string>(){"3JAeYOjyJodI4PRs44lx2l", "6clZa1yrZe7pJrYFUcD9KW"}, Token = token };
//MultipleTrackResponse multipleTrackResponse = await SearchService.GetListMultipleTrackAsync(mreq);
MultipleTrackRequest mreq = new() { Ids = new List<string>(){"3JAeYOjyJodI4PRs44lx2l", "6clZa1yrZe7pJrYFUcD9KW"}, Token = token };
MultipleTrackResponse multipleTrackResponse = await SearchService.GetListMultipleTrackAsync(mreq);

SingleTrackRequest singleTrackRequest = new() { Id = "3JAeYOjyJodI4PRs44lx2l", Token = token };
SingleTrackResponse singleTrackResponse = await SearchService.GetListSingleTrackAsync(singleTrackRequest);
//SingleTrackRequest singleTrackRequest = new() { Id = "3JAeYOjyJodI4PRs44lx2l", Token = token };
//SingleTrackResponse singleTrackResponse = await SearchService.GetListSingleTrackAsync(singleTrackRequest);
}



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

@@ -1,5 +1,6 @@
using GrpcShared.DTO.Search;
using GrpcShared.DTO.Track.MultipleTrack;
using GrpcShared.DTO.Track.SaveTracks;
using GrpcShared.DTO.Track.SingleTrack;

namespace NemAnBlazor.Services.Interfaces
@@ -9,5 +10,6 @@ namespace NemAnBlazor.Services.Interfaces
Task<SearchResponse> GetListSearchAsync(SearchRequest request);
Task<SingleTrackResponse> GetListSingleTrackAsync(SingleTrackRequest request);
Task<MultipleTrackResponse> GetListMultipleTrackAsync(MultipleTrackRequest request);
Task PutSaveTracks(SaveTracksRequest request);
}
}

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

@@ -1,6 +1,7 @@
using Grpc.Net.Client;
using GrpcShared.DTO.Search;
using GrpcShared.DTO.Track.MultipleTrack;
using GrpcShared.DTO.Track.SaveTracks;
using GrpcShared.DTO.Track.SingleTrack;
using GrpcShared.Interfaces;
using NemAnBlazor.Services.Interfaces;
@@ -31,5 +32,10 @@ namespace NemAnBlazor.Services
{
return await _serviceClient.ListMultipleTrackAsync(request);
}

public async Task PutSaveTracks(SaveTracksRequest request)
{
await _serviceClient.SaveTracks(request);
}
}
}

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

@@ -2,6 +2,7 @@
using GrpcShared;
using GrpcShared.DTO.Search;
using GrpcShared.DTO.Track.MultipleTrack;
using GrpcShared.DTO.Track.SaveTracks;
using GrpcShared.DTO.Track.SingleTrack;
using GrpcShared.Interfaces;
using Microsoft.Net.Http.Headers;
@@ -9,6 +10,7 @@ using Newtonsoft.Json;
using System.Text;
using System.Text.Json;
using System.Web;
using static GrpcShared.DTO.Search.SearchDetails;

namespace SpotifyService.Services
{
@@ -79,37 +81,62 @@ namespace SpotifyService.Services
client.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Bearer " + request.Token);


bool startingQuestionMarkAdded = false;
var sb = new StringBuilder();
//bool startingQuestionMarkAdded = false;
//var sb = new StringBuilder();

var param = new Dictionary<string, List<string>>();
param["ids"] = request.Ids;

foreach(var id in param)
{
sb.Append(startingQuestionMarkAdded ? '&' : '?');
sb.Append(id.Key);
sb.Append('=');

foreach(var Xid in id.Value)
{
sb.Append(Xid);
sb.Append("%2C");
startingQuestionMarkAdded = true;
}
}
sb.Length = sb.Length - 3;
sb.ToString();
var query = UriUtil(param);

var trackMultipleResult = await client.GetAsync($"audio-features{sb}");
var trackMultipleResult = await client.GetAsync($"audio-features{query}");

var responses = JsonConvert.DeserializeObject<MultipleTrackResponse>(await trackMultipleResult.Content.ReadAsStringAsync())!;

return new MultipleTrackResponse
{
AudioFeatures = responses!.AudioFeatures
Audio_Features = responses!.Audio_Features
};
}

public async Task SaveTracks(SaveTracksRequest request)
{
var client = _httpClientFactory.CreateClient("HttpClient");

client.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Bearer " + request.Token);

var param = new Dictionary<string, List<string>>();
param["ids"] = request.Ids;

var query = UriUtil(param);


await client.PutAsync($"me/tracks/{query}", null);


}

public static string UriUtil(Dictionary<string, List<string>> param)
{
bool startingQuestionMarkAdded = false;
var sb = new StringBuilder();

foreach (var id in param)
{
sb.Append(startingQuestionMarkAdded ? '&' : '?');
sb.Append(id.Key);
sb.Append('=');

foreach (var Xid in id.Value)
{
sb.Append(Xid);
sb.Append("%2C");
startingQuestionMarkAdded = true;
}
}
sb.Length = sb.Length - 3;
return sb.ToString();
}
}
}


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