[frontend] Add non-generic nullable ApiClient abstractions

This commit is contained in:
Laura Hausmann 2024-07-13 00:42:51 +02:00
parent f42aeee2fd
commit b26bf79807
No known key found for this signature in database
GPG key ID: D044E84C5BE01605
7 changed files with 33 additions and 15 deletions

View file

@ -11,8 +11,8 @@ internal class FilterControllerModel(ApiClient api)
public Task<FilterResponse> CreateFilter(FilterRequest request) =>
api.Call<FilterResponse>(HttpMethod.Post, "/filters", data: request);
public Task UpdateFilter(long id, FilterRequest request) =>
api.Call(HttpMethod.Put, $"/filters/{id}", data: request);
public Task<bool> UpdateFilter(long id, FilterRequest request) =>
api.CallNullable(HttpMethod.Put, $"/filters/{id}", data: request);
public Task DeleteFilter(long id) => api.Call(HttpMethod.Delete, $"/filters/{id}");
public Task<bool> DeleteFilter(long id) => api.CallNullable(HttpMethod.Delete, $"/filters/{id}");
}

View file

@ -9,6 +9,9 @@ internal class FollowRequestControllerModel(ApiClient api)
public Task<List<FollowRequestResponse>> GetFollowRequests(PaginationQuery pq) =>
api.Call<List<FollowRequestResponse>>(HttpMethod.Get, "/follow_requests", pq);
public Task AcceptFollowRequest(string id) => api.Call(HttpMethod.Post, $"/follow_requests/{id}/accept");
public Task RejectFollowRequest(string id) => api.Call(HttpMethod.Post, $"/follow_requests/{id}/reject");
public Task<bool> AcceptFollowRequest(string id) =>
api.CallNullable(HttpMethod.Post, $"/follow_requests/{id}/accept");
public Task<bool> RejectFollowRequest(string id) =>
api.CallNullable(HttpMethod.Post, $"/follow_requests/{id}/reject");
}

View file

@ -11,8 +11,8 @@ internal class NoteControllerModel(ApiClient api)
public Task<NoteResponse?> GetNote(string id) =>
api.CallNullable<NoteResponse>(HttpMethod.Get, $"/notes/{id}");
public Task DeleteNote(string id) =>
api.Call(HttpMethod.Delete, $"/notes/{id}");
public Task<bool> DeleteNote(string id) =>
api.CallNullable(HttpMethod.Delete, $"/notes/{id}");
public Task<List<NoteResponse>?> GetNoteAscendants(string id, [DefaultValue(20)] [Range(1, 100)] int? limit)
{

View file

@ -10,14 +10,14 @@ internal class NotificationControllerModel(ApiClient api)
public Task<List<NotificationResponse>> GetNotifications(PaginationQuery pq) =>
api.Call<List<NotificationResponse>>(HttpMethod.Get, "/notifications", pq);
public Task MarkNotificationAsRead(string id) =>
api.Call(HttpMethod.Post, $"/notifications/{id}/read");
public Task<bool> MarkNotificationAsRead(string id) =>
api.CallNullable(HttpMethod.Post, $"/notifications/{id}/read");
public Task MarkAllNotificationsAsRead() =>
api.Call(HttpMethod.Post, "/notifications/read");
public Task DeleteNotification(string id) =>
api.Call(HttpMethod.Delete, $"/notifications/{id}");
public Task<bool> DeleteNotification(string id) =>
api.CallNullable(HttpMethod.Delete, $"/notifications/{id}");
public Task DeleteAllNotifications() =>
api.Call(HttpMethod.Delete, "/notifications");

View file

@ -6,5 +6,7 @@ namespace Iceshrimp.Frontend.Core.ControllerModels;
internal class SettingsControllerModel(ApiClient api)
{
public Task<UserSettingsEntity> GetSettings() => api.Call<UserSettingsEntity>(HttpMethod.Get, "/settings");
public Task UpdateSettings(UserSettingsEntity settings) => api.Call(HttpMethod.Put, "/settings", data: settings);
public Task<bool> UpdateSettings(UserSettingsEntity settings) =>
api.CallNullable(HttpMethod.Put, "/settings", data: settings);
}

View file

@ -25,7 +25,6 @@ internal class UserControllerModel(ApiClient api)
return api.CallNullable<UserResponse>(HttpMethod.Get, "/users/lookup", query);
}
public Task FollowUser(string id) => api.Call(HttpMethod.Post, $"/users/{id}/follow");
public Task UnfollowUser(string id) => api.Call(HttpMethod.Post, $"/users/{id}/unfollow");
public Task<bool> FollowUser(string id) => api.CallNullable(HttpMethod.Post, $"/users/{id}/follow");
public Task<bool> UnfollowUser(string id) => api.CallNullable(HttpMethod.Post, $"/users/{id}/unfollow");
}

View file

@ -29,6 +29,20 @@ internal class ApiClient(HttpClient client)
throw new ApiException(error);
}
public async Task<bool> CallNullable(
HttpMethod method, string path, QueryString? query = null, object? data = null
)
{
var res = await MakeRequest(method, path, query, data);
if (res.IsSuccessStatusCode)
return true;
var error = await res.Content.ReadFromJsonAsync<ErrorResponse>(JsonSerialization.Options);
if (error == null)
throw new Exception("Deserialized API error was null");
throw new ApiException(error);
}
public async Task<T> Call<T>(
HttpMethod method, string path, QueryString? query = null, object? data = null
) where T : class