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 GetNoteAsync(string id) => api.CallNullableAsync(HttpMethod.Get, $"/notes/{id}"); public Task DeleteNoteAsync(string id) => api.CallNullableAsync(HttpMethod.Delete, $"/notes/{id}"); public Task?> 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>(HttpMethod.Get, $"/notes/{id}/ascendants", query); } public Task?> 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>(HttpMethod.Get, $"/notes/{id}/descendants", query); } public Task?> GetNoteReactionsAsync(string id, string name) => api.CallNullableAsync>(HttpMethod.Get, $"/notes/{id}/reactions/{name}"); public Task BiteNoteAsync(string id) => api.CallAsync(HttpMethod.Post, $"/notes/{id}/bite"); public Task LikeNoteAsync(string id) => api.CallNullableAsync(HttpMethod.Post, $"/notes/{id}/like"); public Task UnlikeNoteAsync(string id) => api.CallNullableAsync(HttpMethod.Post, $"/notes/{id}/unlike"); public Task>?> GetNoteLikesAsync(string id, PaginationQuery pq) => api.CallNullableAsync>>(HttpMethod.Get, $"/notes/{id}/likes", pq); public Task RenoteNoteAsync(string id, NoteVisibility? visibility = null) { var query = new QueryString(); if (visibility.HasValue) query.Add("visibility", ((int)visibility.Value).ToString().ToLowerInvariant()); return api.CallNullableAsync(HttpMethod.Post, $"/notes/{id}/renote", query); } public Task UnrenoteNoteAsync(string id) => api.CallNullableAsync(HttpMethod.Post, $"/notes/{id}/unrenote"); public Task>?> GetRenotesAsync(string id, PaginationQuery pq) => api.CallNullableAsync>>(HttpMethod.Get, $"/notes/{id}/renotes", pq); public Task>?> GetQuotesAsync(string id, PaginationQuery pq) => api.CallNullableAsync>>(HttpMethod.Get, $"/notes/{id}/quotes"); public Task ReactToNoteAsync(string id, string name) => api.CallNullableAsync(HttpMethod.Post, $"/notes/{id}/react/{name}"); public Task RemoveReactionFromNoteAsync(string id, string name) => api.CallNullableAsync(HttpMethod.Post, $"/notes/{id}/unreact/{name}"); public Task CreateNoteAsync(NoteCreateRequest request) => api.CallAsync(HttpMethod.Post, "/notes", data: request); public Task RefetchNoteAsync(string id) => api.CallNullableAsync(HttpMethod.Get, $"/notes/{id}/refetch"); public Task MuteNoteAsync(string id) => api.CallAsync(HttpMethod.Post, $"/notes/{id}/mute"); }