| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- using Google.Rpc;
- using Grpc.Core;
- using GrpcShared;
- using GrpcShared.DTO.Search;
- using GrpcShared.DTO.Track.MultipleTrack;
- using GrpcShared.DTO.Track.SaveTracks;
- using GrpcShared.DTO.Track.SingleTrack;
- using GrpcShared.DTO.TrackByID;
- using GrpcShared.Interfaces;
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.Net.Http.Headers;
- using NemAnBlazor.Services;
- using Newtonsoft.Json;
- using System.Text;
- using System.Text.Json;
- using System.Web;
- using static GrpcShared.DTO.Search.SearchDetails;
-
- namespace SpotifyService.Services
- {
- public class TrackService : ITrackService
- {
- private readonly IHttpClientFactory _httpClientFactory;
- public TrackService(IHttpClientFactory httpClientFactory)
- {
- _httpClientFactory = httpClientFactory;
- }
- public async Task<SearchResponse> ListSearchAsync(SearchRequest request)
- {
-
- var client = _httpClientFactory.CreateClient("HttpClient");
-
- string url = $"search?q={request.Query}&type={request.Type}";
-
- return await HttpUtils.HttpUtils<SearchResponse>.GetData(client, url, request.Token!);
-
-
- }
- public async Task<SingleTrackResponse> ListSingleTrackAsync(SingleTrackRequest request)
- {
- var client = _httpClientFactory.CreateClient("HttpClient");
- string url = $"audio-features/{request.Id}";
-
- return await HttpUtils.HttpUtils<SingleTrackResponse>.GetData(client, url, request.Token!);
- }
- public async Task<MultipleTrackResponse> ListMultipleTrackAsync(MultipleTrackRequest request)
- {
- var client = _httpClientFactory.CreateClient("HttpClient");
-
- var param = new Dictionary<string, List<string>>();
- param["ids"] = request.Ids!;
-
- var query = UriUtil(param);
- string url = $"audio-features{query}";
-
- return await HttpUtils.HttpUtils<MultipleTrackResponse>.GetData(client,url,request.Token!);
- }
- public async Task SaveTracks(SaveTracksRequest request)
- {
- var client = _httpClientFactory.CreateClient("HttpClient");
-
- var param = new Dictionary<string, List<string>>();
- param["ids"] = request.Ids!;
-
- var query = UriUtil(param);
- string url = $"me/tracks/{query}";
-
- //the response type has nothing to do with the method, it's there so that the method can be called
- await HttpUtils.HttpUtils<MultipleTrackResponse>.PutData(client, url, request.Token!);
-
- }
- 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();
- }
- public async Task<TrackResponse> GetById(TrackRequest request)
- {
- var client = _httpClientFactory.CreateClient("HttpClient");
-
- string url = $"tracks/{request.TrackID}";
-
- return await HttpUtils.HttpUtils<TrackResponse>.GetData(client, url, request.Token!);
- }
- }
- }
|