using GrpcShared.DTO; using GrpcShared.DTO.TopItem; using GrpcShared.DTO.Track; using GrpcShared.Interfaces; using Microsoft.Net.Http.Headers; using Newtonsoft.Json; using SpotifyService.HttpUtils; namespace SpotifyService.Services { public class StatsService : IStatsService { private readonly IHttpClientFactory _httpClientFactory; private IIdentityService _identityService; private IAuthService _authService; public StatsService(IHttpClientFactory httpClientFactory, IIdentityService identityService, IAuthService authService) { _httpClientFactory = httpClientFactory; _identityService = identityService; _authService = authService; } public async Task GetCurrentlyPlayingTrack(SessionMessage message) { string url = "me/player/currently-playing"; var response = await HttpUtils .GetData(_httpClientFactory, url, message.UserId!, _identityService, _authService); string savedUrl = $"me/tracks/contains?ids={response.Item!.Id}"; var savedResponse = await HttpUtils> .GetData(_httpClientFactory, savedUrl, message.UserId!, _identityService, _authService); if (response != null) { response.IsSaved = savedResponse[0]; } return response; } public async Task GetTopItems(TopItemRequest request) { //https://api.spotify.com/v1/me/top/albums?limit=10&offset=5 //URL PARAMS string url = "me/top/"; url += !request.IsTracks ? "artists" : "tracks"; url += request.Limit == null ? "" : $"?limit={request.Limit}"; if (request.Limit == null && request.Offset != null) url += $"?offset={request.Offset}"; else url += request.Offset == null ? "" : $"&offset={request.Offset}"; return await HttpUtils .GetData(_httpClientFactory, url, request.UserId!, _identityService, _authService); } } }