瀏覽代碼

Completed SaveTracks route.

tags/v1.1.0^2
Nemanja Grkovic 3 年之前
父節點
當前提交
ec3e0a0a2d

+ 1
- 1
GrpcShared/DTO/Track/MultipleTrack/MultipleTrackResponse.cs 查看文件

public class MultipleTrackResponse public class MultipleTrackResponse
{ {
[ProtoMember(1)] [ProtoMember(1)]
public AudioFeature AudioFeatures { get; set; }
public List<AudioFeature>? Audio_Features { get; set; }
} }
[ProtoContract] [ProtoContract]
public class AudioFeature public class AudioFeature

+ 18
- 0
GrpcShared/DTO/Track/SaveTracks/SaveTracksRequest.cs 查看文件

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 查看文件

using GrpcShared.DTO.Search; using GrpcShared.DTO.Search;
using GrpcShared.DTO.Track.MultipleTrack; using GrpcShared.DTO.Track.MultipleTrack;
using GrpcShared.DTO.Track.SaveTracks;
using GrpcShared.DTO.Track.SingleTrack; using GrpcShared.DTO.Track.SingleTrack;
using ProtoBuf.Grpc.Configuration; using ProtoBuf.Grpc.Configuration;
using System; using System;
Task<SearchResponse> ListSearchAsync(SearchRequest request); Task<SearchResponse> ListSearchAsync(SearchRequest request);
Task<SingleTrackResponse> ListSingleTrackAsync(SingleTrackRequest request); Task<SingleTrackResponse> ListSingleTrackAsync(SingleTrackRequest request);
Task<MultipleTrackResponse> ListMultipleTrackAsync(MultipleTrackRequest request); Task<MultipleTrackResponse> ListMultipleTrackAsync(MultipleTrackRequest request);
Task SaveTracks(SaveTracksRequest request);
} }
} }

+ 4
- 4
NemAnCore/Pages/FetchData.razor 查看文件

//SearchRequest request = new() { Query = "aitch", Type = "track", Token = token }; //SearchRequest request = new() { Query = "aitch", Type = "track", Token = token };
//SearchResponse searchResponse = await SearchService.GetListSearchAsync(request); //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 查看文件

using GrpcShared.DTO.Search; using GrpcShared.DTO.Search;
using GrpcShared.DTO.Track.MultipleTrack; using GrpcShared.DTO.Track.MultipleTrack;
using GrpcShared.DTO.Track.SaveTracks;
using GrpcShared.DTO.Track.SingleTrack; using GrpcShared.DTO.Track.SingleTrack;


namespace NemAnBlazor.Services.Interfaces namespace NemAnBlazor.Services.Interfaces
Task<SearchResponse> GetListSearchAsync(SearchRequest request); Task<SearchResponse> GetListSearchAsync(SearchRequest request);
Task<SingleTrackResponse> GetListSingleTrackAsync(SingleTrackRequest request); Task<SingleTrackResponse> GetListSingleTrackAsync(SingleTrackRequest request);
Task<MultipleTrackResponse> GetListMultipleTrackAsync(MultipleTrackRequest request); Task<MultipleTrackResponse> GetListMultipleTrackAsync(MultipleTrackRequest request);
Task PutSaveTracks(SaveTracksRequest 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.MultipleTrack; using GrpcShared.DTO.Track.MultipleTrack;
using GrpcShared.DTO.Track.SaveTracks;
using GrpcShared.DTO.Track.SingleTrack; using GrpcShared.DTO.Track.SingleTrack;
using GrpcShared.Interfaces; using GrpcShared.Interfaces;
using NemAnBlazor.Services.Interfaces; using NemAnBlazor.Services.Interfaces;
{ {
return await _serviceClient.ListMultipleTrackAsync(request); return await _serviceClient.ListMultipleTrackAsync(request);
} }

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

+ 46
- 19
gRPCServer/Services/TrackService.cs 查看文件

using GrpcShared; using GrpcShared;
using GrpcShared.DTO.Search; using GrpcShared.DTO.Search;
using GrpcShared.DTO.Track.MultipleTrack; using GrpcShared.DTO.Track.MultipleTrack;
using GrpcShared.DTO.Track.SaveTracks;
using GrpcShared.DTO.Track.SingleTrack; using GrpcShared.DTO.Track.SingleTrack;
using GrpcShared.Interfaces; using GrpcShared.Interfaces;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Web; using System.Web;
using static GrpcShared.DTO.Search.SearchDetails;


namespace SpotifyService.Services namespace SpotifyService.Services
{ {
client.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Bearer " + request.Token); 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>>(); var param = new Dictionary<string, List<string>>();
param["ids"] = request.Ids; 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())!; var responses = JsonConvert.DeserializeObject<MultipleTrackResponse>(await trackMultipleResult.Content.ReadAsStringAsync())!;


return new MultipleTrackResponse 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();
}
} }
} }



Loading…
取消
儲存