website/Website/Data/GitServerApi.cs

39 lines
No EOL
1.4 KiB
C#

using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Website.Data.States.Git;
using Website.Models.Git;
namespace Website.Data {
public class GitServerApi {
private readonly HttpClient _client;
private readonly string _domain;
private readonly string _token;
public GitServerApi(HttpClient client, string domain, string token) {
_client = client;
_domain = domain;
_token = token;
}
public async Task<IEnumerable<Repository>> GetRepositories() {
var response = await _client.GetStringAsync($"https://{_domain}/api/v1/users/rob/repos?token={_token}");
var states = JsonConvert.DeserializeObject<IEnumerable<RepositoryState>>(response);
return states.Select(state => new Repository(state));
}
public async Task<IEnumerable<Branch>> GetBranches(string repository) {
var response = await _client.GetStringAsync($"https://{_domain}/api/v1/repos/rob/{repository}/branches?token={_token}");
var states = JsonConvert.DeserializeObject<IEnumerable<BranchState>>(response);
return states.Select(state => new Branch(state));
}
public async Task<Commit> GetCommit(string repository, string hash) {
var response = await _client.GetStringAsync($"https://{_domain}/api/v1/repos/rob/{repository}/commits/{hash}?token={_token}");
var state = JsonConvert.DeserializeObject<CommitDetailsState>(response);
return new Commit(state);
}
}
}