Skip to content

Added functionality for named API #15

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions samples/ScryfallApi.WebSample/Pages/Named.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
@page
@model NamedModel
@{
}

<h2>Named</h2>
<div class="row">
<div class="col-md-12">
<p>
Search Query:
</p>
<div asp-validation-summary="All"></div>
<form method="POST">
<div>
Name: <input asp-for="Query" />
<input type="submit" value="Search" />
</div>
</form>
</div>
</div>
@if (@Model?.NamedCard != null)
{
<h3>Result: <a href="@Model.NamedCard.ScryfallUri">@Model.NamedCard.Name</a></h3>
<div class="row">
<div class="col-md-12">
<a href="@Model.NamedCard.ScryfallUri">
@if (Model.NamedCard.Layout.Equals("transform", StringComparison.OrdinalIgnoreCase))
{
foreach (var face in Model.NamedCard.CardFaces)
{
<img src="@face.ImageUris["normal"]" style="max-width: 320px;" />
}
}
else
{
<img src="@Model.NamedCard.ImageUris["normal"]" style="max-width: 320px;" />
}
</a>
</div>
</div>
}
else
{
<div class="row">
<div class="col-sm-12">
<p>No cards found!</p>
</div>
</div>
}
33 changes: 33 additions & 0 deletions samples/ScryfallApi.WebSample/Pages/Named.cshtml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using ScryfallApi.Client;
using ScryfallApi.Client.Models;

namespace ScryfallApi.WebSample.Pages
{
public class NamedModel : PageModel
{
ScryfallApiClient _scryfallApi { get; }
public Card NamedCard { get; set; }

[BindProperty]
public string Query { get; set; }

public NamedModel(ScryfallApiClient scryfallApi)
{
_scryfallApi = scryfallApi ?? throw new ArgumentNullException(nameof(scryfallApi));
}

public void OnGet()
{
}

public async Task<ActionResult> OnPostAsync()
{
NamedCard = await _scryfallApi.Cards.Named(Query, true);
return Page();
}
}
}
8 changes: 8 additions & 0 deletions src/ScryfallApi.Client/Apis/Cards.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,13 @@ internal Cards(BaseRestService restService)

public Task<Card> GetRandom() => _restService.GetAsync<Card>($"/cards/random", false);

public Task<Card> Named(string cardname, bool fuzzySearch)
{
cardname = WebUtility.UrlEncode(cardname);
var searchType = fuzzySearch ? "fuzzy" : "exact";
return _restService.GetAsync<Card>($"/cards/named?{searchType}={cardname}");
}

public Task<ResultList<Card>> Search(string query, int page, CardSort sort) =>
Search(query, page, new SearchOptions { Sort = sort });

Expand All @@ -29,5 +36,6 @@ public Task<ResultList<Card>> Search(string query, int page, SearchOptions optio
query = WebUtility.UrlEncode(query);
return _restService.GetAsync<ResultList<Card>>($"/cards/search?q={query}&page={page}&{options.BuildQueryString()}");
}

#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
}
9 changes: 9 additions & 0 deletions src/ScryfallApi.Client/Apis/ICards.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ public interface ICards
/// <returns></returns>
Task<ResultList<Card>> Get(int page);

/// <summary>
/// Search for exactly one card of the given name. Search parameters can be either exact or fuzzy.
/// </summary>
/// <param name="cardname"></param>
/// <param name="fuzzySearch"></param>
/// <returns></returns>
Task<Card> Named(string cardname, bool fuzzySearch);

/// <summary>
/// Search for cards with a sort option
/// </summary>
Expand All @@ -39,4 +47,5 @@ public interface ICards
/// <param name="options"></param>
/// <returns></returns>
Task<ResultList<Card>> Search(string query, int page, SearchOptions options);

}