@@ -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