Skip to content

Commit 8507609

Browse files
committed
feat: include reddit post title in public api
1 parent 94bfcb9 commit 8507609

1 file changed

Lines changed: 20 additions & 5 deletions

File tree

WebApi/Controllers/PublicController.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,20 @@ public class PublicController : Controller
1818
{
1919
private readonly LinkProvider _linkProvider;
2020
private readonly UserProvider _userProvider;
21+
private readonly RedditPostProvider _redditPostProvider;
2122

2223
/// <summary>
2324
/// C'tor
2425
/// </summary>
2526
public PublicController(
2627
LinkProvider linkProvider,
27-
UserProvider userProvider
28+
UserProvider userProvider,
29+
RedditPostProvider redditPostProvider
2830
)
2931
{
3032
_linkProvider = linkProvider;
3133
_userProvider = userProvider;
34+
_redditPostProvider = redditPostProvider;
3235
}
3336

3437
/// <summary>
@@ -44,17 +47,29 @@ UserProvider userProvider
4447
public async Task<IReadOnlyCollection<PublicLinkListingResult>> FindLinksByPostId(string redditPostId, CancellationToken cancellationToken)
4548
{
4649
return await _linkProvider.FindAllLinksByPostId(redditPostId, cancellationToken)
47-
.SelectAwait(async link => new PublicLinkListingResult(
48-
link.LinkUrl,
49-
LinkTypeHelpers.ParseToSerializableLinkType(link.LinkType.RawValue),
50-
ProviderUsername: (await _userProvider.FindUserByIdIncludeDeleted(link.OwnerId)).Map(x => x.DisplayUsername).Value))
50+
.SelectAwait(async link =>
51+
{
52+
var postTitle = await _redditPostProvider.GetPostTitleByPostId(link.RedditPostId, cancellationToken);
53+
var providerUsername = (await _userProvider.FindUserByIdIncludeDeleted(link.OwnerId))
54+
.Map(x => x.DisplayUsername)
55+
.OrThrow(() => $"Unable to find user info for user id {link.OwnerId}");
56+
57+
return new PublicLinkListingResult(
58+
RedditPostId: link.RedditPostId,
59+
PostTitle: postTitle.Cast<string?>().OrValue(null),
60+
link.LinkUrl,
61+
LinkTypeHelpers.ParseToSerializableLinkType(link.LinkType.RawValue),
62+
ProviderUsername: providerUsername);
63+
})
5164
.ToArrayAsync(cancellationToken: cancellationToken);
5265
}
5366

5467
/// <summary>
5568
/// A link listing result accessible to the public.
5669
/// </summary>
5770
public record PublicLinkListingResult(
71+
[JsonProperty("redditPostId")] string RedditPostId,
72+
[JsonProperty("postTitle")] string? PostTitle,
5873
[JsonProperty("linkUrl")] string LinkUrl,
5974
[JsonProperty("linkType")] SerializableLinkType LinkType,
6075
[JsonProperty("providerUsername")] string ProviderUsername

0 commit comments

Comments
 (0)