Iceshrimp.NET/Iceshrimp.Frontend/Core/ControllerModels/NoteControllerModel.cs
2024-11-20 00:48:29 +01:00

76 lines
No EOL
3.5 KiB
C#

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using Iceshrimp.Frontend.Core.Miscellaneous;
using Iceshrimp.Frontend.Core.Services;
using Iceshrimp.Shared.Schemas.Web;
namespace Iceshrimp.Frontend.Core.ControllerModels;
internal class NoteControllerModel(ApiClient api)
{
public Task<NoteResponse?> GetNoteAsync(string id) =>
api.CallNullableAsync<NoteResponse>(HttpMethod.Get, $"/notes/{id}");
public Task<bool> DeleteNoteAsync(string id) =>
api.CallNullableAsync(HttpMethod.Delete, $"/notes/{id}");
public Task<List<NoteResponse>?> GetNoteAscendantsAsync(string id, [DefaultValue(20)] [Range(1, 100)] int? limit)
{
var query = new QueryString();
if (limit.HasValue) query.Add("limit", limit.Value.ToString());
return api.CallNullableAsync<List<NoteResponse>>(HttpMethod.Get, $"/notes/{id}/ascendants", query);
}
public Task<List<NoteResponse>?> GetNoteDescendantsAsync(string id, [DefaultValue(20)] [Range(1, 100)] int? depth)
{
var query = new QueryString();
if (depth.HasValue) query.Add("depth", depth.Value.ToString());
return api.CallNullableAsync<List<NoteResponse>>(HttpMethod.Get, $"/notes/{id}/descendants", query);
}
public Task<List<UserResponse>?> GetNoteReactionsAsync(string id, string name) =>
api.CallNullableAsync<List<UserResponse>>(HttpMethod.Get, $"/notes/{id}/reactions/{name}");
public Task BiteNoteAsync(string id) =>
api.CallAsync(HttpMethod.Post, $"/notes/{id}/bite");
public Task<ValueResponse?> LikeNoteAsync(string id) =>
api.CallNullableAsync<ValueResponse>(HttpMethod.Post, $"/notes/{id}/like");
public Task<ValueResponse?> UnlikeNoteAsync(string id) =>
api.CallNullableAsync<ValueResponse>(HttpMethod.Post, $"/notes/{id}/unlike");
public Task<PaginationWrapper<List<UserResponse>>?> GetNoteLikesAsync(string id, PaginationQuery pq) =>
api.CallNullableAsync<PaginationWrapper<List<UserResponse>>>(HttpMethod.Get, $"/notes/{id}/likes", pq);
public Task<ValueResponse?> RenoteNoteAsync(string id, NoteVisibility? visibility = null)
{
var query = new QueryString();
if (visibility.HasValue) query.Add("visibility", ((int)visibility.Value).ToString().ToLowerInvariant());
return api.CallNullableAsync<ValueResponse>(HttpMethod.Post, $"/notes/{id}/renote", query);
}
public Task<ValueResponse?> UnrenoteNoteAsync(string id) =>
api.CallNullableAsync<ValueResponse>(HttpMethod.Post, $"/notes/{id}/unrenote");
public Task<PaginationWrapper<List<UserResponse>>?> GetRenotesAsync(string id, PaginationQuery pq) =>
api.CallNullableAsync<PaginationWrapper<List<UserResponse>>>(HttpMethod.Get, $"/notes/{id}/renotes", pq);
public Task<PaginationWrapper<List<NoteResponse>>?> GetQuotesAsync(string id, PaginationQuery pq) =>
api.CallNullableAsync<PaginationWrapper<List<NoteResponse>>>(HttpMethod.Get, $"/notes/{id}/quotes");
public Task<ValueResponse?> ReactToNoteAsync(string id, string name) =>
api.CallNullableAsync<ValueResponse>(HttpMethod.Post, $"/notes/{id}/react/{name}");
public Task<ValueResponse?> RemoveReactionFromNoteAsync(string id, string name) =>
api.CallNullableAsync<ValueResponse>(HttpMethod.Post, $"/notes/{id}/unreact/{name}");
public Task<NoteResponse> CreateNoteAsync(NoteCreateRequest request) =>
api.CallAsync<NoteResponse>(HttpMethod.Post, "/notes", data: request);
public Task<NoteRefetchResponse?> RefetchNoteAsync(string id) =>
api.CallNullableAsync<NoteRefetchResponse>(HttpMethod.Get, $"/notes/{id}/refetch");
public Task MuteNoteAsync(string id) =>
api.CallAsync(HttpMethod.Post, $"/notes/{id}/mute");
}