Skip to content

Commit 94bfcb9

Browse files
committed
feat: display post title when available
1 parent 8de0ee2 commit 94bfcb9

5 files changed

Lines changed: 110 additions & 76 deletions

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using FruityFoundation.Base.Structures;
2+
using FruityFoundation.DataAccess.Abstractions;
3+
4+
namespace ApplicationData.Services;
5+
6+
public class RedditPostProvider
7+
{
8+
private readonly IDbConnectionFactory _dbConnectionFactory;
9+
10+
public RedditPostProvider(IDbConnectionFactory dbConnectionFactory)
11+
{
12+
_dbConnectionFactory = dbConnectionFactory;
13+
}
14+
15+
public async Task<Maybe<string>> GetPostTitleByPostId(string redditPostId, CancellationToken cancellationToken)
16+
{
17+
await using var connection = _dbConnectionFactory.CreateReadOnlyConnection();
18+
await using var reader = await connection.ExecuteReader(
19+
"SELECT post_title FROM reddit_posts WHERE reddit_post_id = @redditPostId",
20+
new { redditPostId }, cancellationToken);
21+
22+
if (!await reader.ReadAsync(cancellationToken))
23+
return Maybe.Empty<string>();
24+
25+
return reader.TryGetString(0);
26+
}
27+
}

WebApi/Pages/Index.cshtml

Lines changed: 70 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
<div class="text-center" xmlns="http://www.w3.org/1999/html">
1010
<h1 class="display-4">a-mirror database</h1>
1111
<p>search for a video mirror using the id of a reddit post.</p>
12-
<p>example: <a href="https://www.reddit.com/r/PublicFreakout/comments/j2vitm/she_just_got_hired/">https://www.reddit.com/r/PublicFreakout/comments/<mark>j2vitm</mark>/she_just_got_hired/</a></p>
12+
<p>example: <a class="text-break" href="https://www.reddit.com/r/PublicFreakout/comments/j2vitm/she_just_got_hired/">
13+
https://www.reddit.com/r/PublicFreakout/comments/<mark style="white-space: nowrap">j2vitm</mark>/she_just_got_hired/
14+
</a></p>
1315

1416
<form method="get">
1517
<label for="redditPostId">reddit post id</label>
@@ -21,68 +23,81 @@
2123
<button type="submit" class="btn btn-primary">search</button>
2224
</form>
2325

24-
@if (Model.SearchResults.Try(out var links))
25-
{
26-
<h2>results</h2>
27-
<p><a href="https://reddit.com/@Model.RedditPostId" target="_blank">(open reddit post)</a></p>
28-
29-
@if (links.Count == 0)
30-
{
31-
<p>no links found. sorry about that.</p>
32-
}
33-
else
26+
<div class="container-fluid mt-4">
27+
@if (Model.SearchResults.Try(out var searchResult))
3428
{
35-
var mirrors = links.Where(x => x.Link.LinkType.IsMirror).ToArray();
36-
var downloads = links.Where(x => x.Link.LinkType.IsDownload).ToArray();
29+
<h2>results</h2>
30+
if (searchResult.PostTitle.Try(out var postTitle))
31+
{
32+
<h3>
33+
<a href="https://reddit.com/@Model.RedditPostId" target="_blank">
34+
@postTitle
35+
</a>
36+
</h3>
37+
}
38+
else
39+
{
40+
<p><a href="https://reddit.com/@Model.RedditPostId" target="_blank">(open reddit post)</a></p>
41+
}
3742

38-
<p>
39-
found <strong>@mirrors.Length</strong> @(mirrors.Length == 1 ? "mirror" : "mirrors")
40-
and <strong>@downloads.Length</strong> @(downloads.Length == 1 ? "download" : "downloads").
41-
</p>
43+
@if (searchResult.Links.Count == 0)
44+
{
45+
<p>no links found. sorry about that.</p>
46+
}
47+
else
48+
{
49+
var mirrors = searchResult.Links.Where(x => x.Link.LinkType.IsMirror).ToArray();
50+
var downloads = searchResult.Links.Where(x => x.Link.LinkType.IsDownload).ToArray();
4251

43-
<div class="results-container">
44-
<div class="linktype-container">
45-
<h3>mirrors</h3>
52+
<p>
53+
found <strong>@mirrors.Length</strong> @(mirrors.Length == 1 ? "mirror" : "mirrors")
54+
and <strong>@downloads.Length</strong> @(downloads.Length == 1 ? "download" : "downloads").
55+
</p>
4656

47-
@if (mirrors.Length == 0)
48-
{
49-
<p>(none)</p>
50-
}
51-
else
52-
{
53-
<ul>
54-
@foreach (var (mirror, i) in mirrors.Select((x, i) => (x, i)))
55-
{
56-
<li>
57-
<a href="@mirror.Link.LinkUrl" target="_blank">mirror #@(i + 1)</a>
58-
(provided by <a href="https://reddit.com/user/@mirror.Owner.DisplayUsername" target="_blank">/u/@mirror.Owner.DisplayUsername</a>)
59-
</li>
60-
}
61-
</ul>
62-
}
63-
</div>
57+
<div class="d-flex flex-column flex-lg-row justify-content-center ms-auto">
58+
<div class="m-2 flex-grow-1 flex-lg-grow-0">
59+
<h3>mirrors</h3>
6460

65-
<div class="linktype-container">
66-
<h3>downloads</h3>
61+
@if (mirrors.Length == 0)
62+
{
63+
<p>(none)</p>
64+
}
65+
else
66+
{
67+
<ul>
68+
@foreach (var (mirror, i) in mirrors.Select((x, i) => (x, i)))
69+
{
70+
<li class="text-start">
71+
<a href="@mirror.Link.LinkUrl" target="_blank">mirror #@(i + 1)</a>
72+
(provided by <a href="https://reddit.com/user/@mirror.Owner.DisplayUsername" target="_blank">/u/@mirror.Owner.DisplayUsername</a>)
73+
</li>
74+
}
75+
</ul>
76+
}
77+
</div>
78+
79+
<div class="m-2 flex-grow-1 flex-lg-grow-0">
80+
<h3>downloads</h3>
6781

68-
@if (downloads.Length == 0)
69-
{
70-
<p>(none)</p>
71-
}
72-
else
73-
{
74-
<ul>
75-
@foreach (var (download, i) in downloads.Select((x, i) => (x, i)))
82+
@if (downloads.Length == 0)
83+
{
84+
<p>(none)</p>
85+
}
86+
else
7687
{
77-
<li>
78-
<a href="@download.Link.LinkUrl" target="_blank">download #@(i + 1)</a>
79-
(provided by <a href="https://reddit.com/user/@download.Owner.DisplayUsername" target="_blank">/u/@download.Owner.DisplayUsername</a>)
80-
</li>
88+
<ul>
89+
@foreach (var (download, i) in downloads.Select((x, i) => (x, i)))
90+
{
91+
<li class="text-start">
92+
<a href="@download.Link.LinkUrl" target="_blank">download #@(i + 1)</a>
93+
(provided by <a href="https://reddit.com/user/@download.Owner.DisplayUsername" target="_blank">/u/@download.Owner.DisplayUsername</a>)
94+
</li>
95+
}
96+
</ul>
8197
}
82-
</ul>
83-
}
98+
</div>
8499
</div>
85-
</div>
100+
}
86101
}
87-
}
102+
</div>
88103
</div>

WebApi/Pages/Index.cshtml.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,34 @@
66

77
namespace WebApi.Pages;
88

9+
/// <summary>
10+
/// Search result
11+
/// </summary>
12+
public record SearchResult(Maybe<string> PostTitle, IReadOnlyCollection<(Link Link, User Owner)> Links);
13+
914
/// <summary>
1015
/// Index Model
1116
/// </summary>
1217
public class IndexModel : PageModel
1318
{
1419
private readonly LinkProvider _linkProvider;
1520
private readonly UserProvider _userProvider;
21+
private readonly RedditPostProvider _redditPostProvider;
1622

1723
/// <summary>
1824
/// C'tor
1925
/// </summary>
20-
public IndexModel(LinkProvider linkProvider, UserProvider userProvider)
26+
public IndexModel(LinkProvider linkProvider, UserProvider userProvider, RedditPostProvider redditPostProvider)
2127
{
2228
_linkProvider = linkProvider;
2329
_userProvider = userProvider;
30+
_redditPostProvider = redditPostProvider;
2431
}
2532

2633
/// <summary>
2734
/// Search results
2835
/// </summary>
29-
public Maybe<IReadOnlyCollection<(Link Link, User Owner)>> SearchResults = Maybe.Empty<IReadOnlyCollection<(Link, User)>>();
36+
public Maybe<SearchResult> SearchResults = Maybe.Empty<SearchResult>();
3037

3138
/// <summary>
3239
/// Reddit Post Id
@@ -52,6 +59,8 @@ public async Task OnGet(CancellationToken cancellationToken)
5259
})
5360
.ToArrayAsync(cancellationToken);
5461

55-
SearchResults = Maybe.Create<IReadOnlyCollection<(Link Link, User Owner)>>(linksWithOwners);
62+
var postTitle = await _redditPostProvider.GetPostTitleByPostId(RedditPostId, cancellationToken);
63+
64+
SearchResults = new SearchResult(postTitle, linksWithOwners);
5665
}
5766
}

WebApi/Pages/Index.cshtml.css

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,3 @@
11
mark {
22
font-weight: bold;
33
}
4-
5-
.results-container {
6-
display: flex;
7-
flex-direction: row;
8-
justify-content: center;
9-
margin-left: auto;
10-
margin-right: auto;
11-
max-width: 1000px;
12-
}
13-
14-
.linktype-container {
15-
margin: 2em;
16-
max-width: 500px;
17-
}
18-
19-
ul li {
20-
text-align: left;
21-
}

WebApi/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ static void ConfigureServices(IServiceCollection services, IConfiguration config
162162
services.AddScoped<LinkProvider>();
163163
services.AddScoped<UserProvider>();
164164
services.AddScoped<RedditCommentProvider>();
165+
services.AddScoped<RedditPostProvider>();
165166

166167
services.AddSingleton<TemplateCache>();
167168
services.AddSingleton<ResourceAccessManager>();

0 commit comments

Comments
 (0)