diff --git a/src/FeedsV3Client.cs b/src/FeedsV3Client.cs index d299b16..79984a8 100644 --- a/src/FeedsV3Client.cs +++ b/src/FeedsV3Client.cs @@ -104,10 +104,11 @@ public async Task> TrackActivityMet public async Task> QueryActivitiesAsync(QueryActivitiesRequest request, CancellationToken cancellationToken = default) { + var queryParams = ExtractQueryParams(request); var result = await _client.MakeRequestAsync( "POST", - "/api/v2/feeds/activities/query", null, request, null, + "/api/v2/feeds/activities/query", queryParams, request, null, cancellationToken); return result; @@ -359,6 +360,21 @@ public async Task> RestoreActivityAsync( return result; } + public async Task> TranslateActivityAsync(string id, TranslateActivityRequest request, + CancellationToken cancellationToken = default) + { + var pathParams = new Dictionary + { + ["id"] = id, + }; + + var result = await _client.MakeRequestAsync( + "POST", + "/api/v2/feeds/activities/{id}/translate", null, request, pathParams, + cancellationToken); + + return result; + } public async Task> QueryBookmarkFoldersAsync(QueryBookmarkFoldersRequest request, CancellationToken cancellationToken = default) { @@ -403,10 +419,11 @@ public async Task> UpdateBookmarkFo public async Task> QueryBookmarksAsync(QueryBookmarksRequest request, CancellationToken cancellationToken = default) { + var queryParams = ExtractQueryParams(request); var result = await _client.MakeRequestAsync( "POST", - "/api/v2/feeds/bookmarks/query", null, request, null, + "/api/v2/feeds/bookmarks/query", queryParams, request, null, cancellationToken); return result; @@ -516,10 +533,11 @@ public async Task> AddCommentsBatchAsyn public async Task> QueryCommentsAsync(QueryCommentsRequest request, CancellationToken cancellationToken = default) { + var queryParams = ExtractQueryParams(request); var result = await _client.MakeRequestAsync( "POST", - "/api/v2/feeds/comments/query", null, request, null, + "/api/v2/feeds/comments/query", queryParams, request, null, cancellationToken); return result; @@ -721,6 +739,21 @@ public async Task> RestoreCommentAsync(st return result; } + public async Task> TranslateCommentAsync(string id, TranslateCommentRequest request, + CancellationToken cancellationToken = default) + { + var pathParams = new Dictionary + { + ["id"] = id, + }; + + var result = await _client.MakeRequestAsync( + "POST", + "/api/v2/feeds/comments/{id}/translate", null, request, pathParams, + cancellationToken); + + return result; + } public async Task> ListFeedGroupsAsync(object request = null, CancellationToken cancellationToken = default) { @@ -769,10 +802,11 @@ public async Task> GetOrCreateFeedAsync( ["feed_group_id"] = feedGroupID, ["feed_id"] = feedID, }; + var queryParams = ExtractQueryParams(request); var result = await _client.MakeRequestAsync( "POST", - "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}", null, request, pathParams, + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}", queryParams, request, pathParams, cancellationToken); return result; @@ -932,10 +966,11 @@ public async Task> QueryPinnedActi ["feed_group_id"] = feedGroupID, ["feed_id"] = feedID, }; + var queryParams = ExtractQueryParams(request); var result = await _client.MakeRequestAsync( "POST", - "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}/pinned_activities/query", null, request, pathParams, + "/api/v2/feeds/feed_groups/{feed_group_id}/feeds/{feed_id}/pinned_activities/query", queryParams, request, pathParams, cancellationToken); return result; diff --git a/src/models.cs b/src/models.cs index 2599c15..f302bce 100644 --- a/src/models.cs +++ b/src/models.cs @@ -1078,6 +1078,8 @@ public class ActivityResponse public List LatestShares { get; set; } [JsonPropertyName("current_feed")] public FeedResponse? CurrentFeed { get; set; } + [JsonPropertyName("i18n")] + public Dictionary I18n { get; set; } [JsonPropertyName("location")] public Location? Location { get; set; } [JsonPropertyName("metrics")] @@ -2002,8 +2004,6 @@ public class AppResponseFields public int MaxAggregatedActivitiesLength { get; set; } [JsonPropertyName("moderation_audio_call_moderation_enabled")] public bool ModerationAudioCallModerationEnabled { get; set; } - [JsonPropertyName("moderation_audio_file_enabled")] - public bool ModerationAudioFileEnabled { get; set; } [JsonPropertyName("moderation_enabled")] public bool ModerationEnabled { get; set; } [JsonPropertyName("moderation_llm_configurability_enabled")] @@ -7868,6 +7868,8 @@ public class CommentResponse /// [JsonPropertyName("custom")] public object Custom { get; set; } + [JsonPropertyName("i18n")] + public Dictionary I18n { get; set; } [JsonPropertyName("moderation")] public ModerationV2Response? Moderation { get; set; } /// @@ -11977,6 +11979,8 @@ public class FeedsV3ActivityResponse public List LatestShares { get; set; } [JsonPropertyName("current_feed")] public FeedsFeedResponse? CurrentFeed { get; set; } + [JsonPropertyName("i18n")] + public Dictionary I18n { get; set; } [JsonPropertyName("location")] public FeedsActivityLocation? Location { get; set; } [JsonPropertyName("metrics")] @@ -12043,6 +12047,8 @@ public class FeedsV3CommentResponse public List LatestReactions { get; set; } [JsonPropertyName("custom")] public object Custom { get; set; } + [JsonPropertyName("i18n")] + public Dictionary I18n { get; set; } [JsonPropertyName("moderation")] public ModerationV2Response? Moderation { get; set; } [JsonPropertyName("reaction_groups")] @@ -24795,6 +24801,8 @@ public class ThreadedCommentResponse public List Replies { get; set; } [JsonPropertyName("custom")] public object Custom { get; set; } + [JsonPropertyName("i18n")] + public Dictionary I18n { get; set; } [JsonPropertyName("meta")] public RepliesMeta? Meta { get; set; } [JsonPropertyName("moderation")] @@ -24964,6 +24972,46 @@ public class TranscriptionSettingsResponse public TranslationSettings? Translation { get; set; } } + public class TranslateActivityRequest + { + /// + /// ISO 639-1 language code to translate to + /// + [JsonPropertyName("language")] + public string Language { get; set; } + } + + public class TranslateActivityResponse + { + /// + /// Duration of the request in milliseconds + /// + [JsonPropertyName("duration")] + public string Duration { get; set; } + [JsonPropertyName("activity")] + public ActivityResponse Activity { get; set; } + } + + public class TranslateCommentRequest + { + /// + /// ISO 639-1 language code to translate to + /// + [JsonPropertyName("language")] + public string Language { get; set; } + } + + public class TranslateCommentResponse + { + /// + /// Duration of the request in milliseconds + /// + [JsonPropertyName("duration")] + public string Duration { get; set; } + [JsonPropertyName("comment")] + public CommentResponse Comment { get; set; } + } + public class TranslateMessageRequest { /// @@ -25668,6 +25716,8 @@ public class UpdateAppRequest public int? RemindersInterval { get; set; } [JsonPropertyName("reminders_max_members")] public int? RemindersMaxMembers { get; set; } + [JsonPropertyName("reminders_max_per_user")] + public int? RemindersMaxPerUser { get; set; } [JsonPropertyName("revoke_tokens_issued_before")] public DateTime? RevokeTokensIssuedBefore { get; set; } [JsonPropertyName("sns_key")] diff --git a/tests/FeedTests.cs b/tests/FeedTests.cs index 0c34c92..596b664 100644 --- a/tests/FeedTests.cs +++ b/tests/FeedTests.cs @@ -810,6 +810,42 @@ public async Task RestoreActivityAsync_ShouldCallCorrectEndpoint() It.IsAny()), Times.Once); } [Test] + public async Task TranslateActivityAsync_ShouldCallCorrectEndpoint() + { + // Arrange + var request = new TranslateActivityRequest(); + var id = "test-id"; + + var expectedResponse = new StreamResponse + { + Data = new TranslateActivityResponse() + }; + + _mockClient.Setup(x => x.MakeRequestAsync( + It.IsAny(), + It.IsAny(), + It.IsAny>(), + It.IsAny(), + It.IsAny>(), + It.IsAny())) + .ReturnsAsync(expectedResponse); + + // Act + var result = await _client.TranslateActivityAsync(id, request); + + // Assert + Assert.That(result, Is.Not.Null); + Assert.That(result, Is.EqualTo(expectedResponse)); + + _mockClient.Verify(x => x.MakeRequestAsync( + "POST", + "/api/v2/feeds/activities/{id}/translate", + It.IsAny>(), + It.IsAny(), + It.IsAny>(), + It.IsAny()), Times.Once); + } + [Test] public async Task QueryBookmarkFoldersAsync_ShouldCallCorrectEndpoint() { // Arrange @@ -1770,6 +1806,42 @@ public async Task RestoreCommentAsync_ShouldCallCorrectEndpoint() It.IsAny()), Times.Once); } [Test] + public async Task TranslateCommentAsync_ShouldCallCorrectEndpoint() + { + // Arrange + var request = new TranslateCommentRequest(); + var id = "test-id"; + + var expectedResponse = new StreamResponse + { + Data = new TranslateCommentResponse() + }; + + _mockClient.Setup(x => x.MakeRequestAsync( + It.IsAny(), + It.IsAny(), + It.IsAny>(), + It.IsAny(), + It.IsAny>(), + It.IsAny())) + .ReturnsAsync(expectedResponse); + + // Act + var result = await _client.TranslateCommentAsync(id, request); + + // Assert + Assert.That(result, Is.Not.Null); + Assert.That(result, Is.EqualTo(expectedResponse)); + + _mockClient.Verify(x => x.MakeRequestAsync( + "POST", + "/api/v2/feeds/comments/{id}/translate", + It.IsAny>(), + It.IsAny(), + It.IsAny>(), + It.IsAny()), Times.Once); + } + [Test] public async Task ListFeedGroupsAsync_ShouldCallCorrectEndpoint() { // Arrange