implement PictureService and social gallery models

This commit is contained in:
2026-05-03 15:55:59 +02:00
parent d7d560cd91
commit f738b031b9
2 changed files with 146 additions and 0 deletions

View File

@@ -16,6 +16,89 @@ namespace Chtn.CSharp.SDK.Models.Media
[JsonProperty("path")] public string Path { get; set; }
[JsonProperty("title")] public string Title { get; set; }
[JsonProperty("uploaded_at")] public TimeStamp UploadedAt { get; set; }
[JsonProperty("likes")] public int Likes { get; set; }
[JsonProperty("visibility")] public string Visibility { get; set; }
}
public class Comment
{
[JsonProperty("id")] public string Id { get; set; }
[JsonProperty("authorId")] public string AuthorId { get; set; }
[JsonProperty("content")] public string Content { get; set; }
[JsonProperty("createdAt")] public TimeStamp CreatedAt{ get; set; }
}
public class GetReq
{
[JsonProperty("id")] public string Id { get; set; }
}
public class CreateAlbumReq
{
[JsonProperty("name")] public string Name { get; set; }
}
public class FinalizeUploadReq
{
[JsonProperty("uploadId")] public string UploadId { get; set; }
}
public class DeleteImageReq
{
[JsonProperty("id")] public string Id { get; set; }
}
public class ChangePictureVisibilityReq
{
[JsonProperty("id")] public string Id { get; set; }
[JsonProperty("visibility")] public string Visibility { get; set; }
}
public class EditPictureTitle
{
[JsonProperty("id")] public string Id { get; set; }
[JsonProperty("title")] public string Title { get; set; }
}
public class TogglePictureLikeReq
{
[JsonProperty("id")] public string Id { get; set; }
}
public class PostCommentReq
{
[JsonProperty("imageId")] public string ImageId { get; set; }
[JsonProperty("content")] public string Content { get; set; }
}
public class ToggleFollowReq
{
[JsonProperty("targetUserId")] public string TargetUserId { get; set; }
}
public class GetAlbumsReq
{
[JsonProperty("userId")] public string UserId { get; set; }
}
public class GetCommentsReq
{
[JsonProperty("imageId")] public string ImageId { get; set; }
}
public class UploadImageReq
{
[JsonProperty("albumId")] public string AlbumId { get; set; }
[JsonProperty("data")] public byte[] Data { get; set; }
}
public class GetResp
{
[JsonProperty("image")] public Image Image { get; set; }
}
public class DiscoveryResp
{
[JsonProperty("trending")] public List<Image> Trending { get; set; }
}
}

View File

@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Chtn.CSharp.SDK.Core;
using Chtn.CSharp.SDK.Models.Media;
namespace Chtn.CSharp.SDK.Services
{
public interface IPictureService
{
Task<GetResp> Get(GetReq req);
Task<DiscoveryResp> Discovery();
Task CreateAlbum(CreateAlbumReq req);
Task FinalizeUpload(FinalizeUploadReq req);
Task Delete(DeleteImageReq req);
Task ChangeVisibility(ChangePictureVisibilityReq req);
Task EditTitle(EditPictureTitle req);
Task ToggleLike(TogglePictureLikeReq req);
Task Comment(PostCommentReq req);
Task ToggleFollow(ToggleFollowReq req);
Task<List<Album>> GetAlbums(GetAlbumsReq req);
Task<List<Comment>> GetComments(GetCommentsReq req);
Task UploadPicture(UploadImageReq req);
}
public class PictureServiceProvider : IPictureService
{
private readonly ApiClient _apiClient;
public PictureServiceProvider(ApiClient apiClient)
{
_apiClient = apiClient ?? throw new ArgumentNullException(nameof(apiClient));
}
public async Task<GetResp> Get(GetReq req) =>
await _apiClient.PostAsync<GetReq, GetResp>("picture/pictures", req);
public async Task<DiscoveryResp> Discovery() =>
await _apiClient.PostAsync<object, DiscoveryResp>("picture/discovery", new { });
public async Task CreateAlbum(CreateAlbumReq req) =>
await _apiClient.PostAsync<CreateAlbumReq, object>("picture/createAlbum", req);
public async Task FinalizeUpload(FinalizeUploadReq req) =>
await _apiClient.PostAsync<FinalizeUploadReq, object>("picture/finalizeUpload", req);
public async Task Delete(DeleteImageReq req) =>
await _apiClient.PostAsync<DeleteImageReq, object>("picture/delete", req);
public async Task ChangeVisibility(ChangePictureVisibilityReq req) =>
await _apiClient.PostAsync<ChangePictureVisibilityReq, object>("picture/changeVisibility", req);
public async Task EditTitle(EditPictureTitle req) =>
await _apiClient.PostAsync<EditPictureTitle, object>("picture/editTitle", req);
public async Task ToggleLike(TogglePictureLikeReq req) =>
await _apiClient.PostAsync<TogglePictureLikeReq, object>("picture/toggleLike", req);
public async Task Comment(PostCommentReq req) =>
await _apiClient.PostAsync<PostCommentReq, object>("picture/comment", req);
public async Task ToggleFollow(ToggleFollowReq req) =>
await _apiClient.PostAsync<ToggleFollowReq, object>("picture/toggleFollow", req);
public async Task<List<Album>> GetAlbums(GetAlbumsReq req) =>
await _apiClient.PostAsync<GetAlbumsReq, List<Album>>("picture/getAlbums", req);
public async Task<List<Comment>> GetComments(GetCommentsReq req) =>
await _apiClient.PostAsync<GetCommentsReq, List<Comment>>("picture/comment", req);
public async Task UploadPicture(UploadImageReq req) =>
await _apiClient.PostAsync<UploadImageReq, object>("picture/upload", req);
}
}