Files
Predictalytics/src/Predictalytics.Infrastructure/Helpers/MarketCategoryMapper.cs
T

47 lines
2.6 KiB
C#

using Predictalytics.Domain.Enums;
namespace Predictalytics.Infrastructure.Helpers;
public static class MarketCategoryMapper
{
public static (MarketCategory Category, string Subcategory) Map(string rawCategory, string tags)
{
var searchString = $"{rawCategory} {tags}".ToLowerInvariant();
if (searchString.Contains("politic") || searchString.Contains("election") || searchString.Contains("trump") || searchString.Contains("biden"))
return (MarketCategory.Politics, GetSubcategory(rawCategory, tags, "Elections"));
if (searchString.Contains("crypto") || searchString.Contains("bitcoin") || searchString.Contains("eth") || searchString.Contains("solana"))
return (MarketCategory.Crypto, GetSubcategory(rawCategory, tags, "Crypto"));
if (searchString.Contains("sport") || searchString.Contains("nfl") || searchString.Contains("nba") || searchString.Contains("soccer") || searchString.Contains("tennis"))
return (MarketCategory.Sports, GetSubcategory(rawCategory, tags, "Sports"));
if (searchString.Contains("pop") || searchString.Contains("culture") || searchString.Contains("movie") || searchString.Contains("oscars") || searchString.Contains("music"))
return (MarketCategory.PopCulture, GetSubcategory(rawCategory, tags, "Pop Culture"));
if (searchString.Contains("science") || searchString.Contains("space") || searchString.Contains("weather") || searchString.Contains("climate"))
return (MarketCategory.Science, GetSubcategory(rawCategory, tags, "Science"));
if (searchString.Contains("news") || searchString.Contains("global") || searchString.Contains("world"))
return (MarketCategory.GlobalNews, GetSubcategory(rawCategory, tags, "Global News"));
if (searchString.Contains("economy") || searchString.Contains("finance") || searchString.Contains("business") || searchString.Contains("fed"))
return (MarketCategory.Economy, GetSubcategory(rawCategory, tags, "Economy"));
return (MarketCategory.Other, GetSubcategory(rawCategory, tags, "Other"));
}
private static string GetSubcategory(string rawCategory, string tags, string fallback)
{
if (!string.IsNullOrWhiteSpace(rawCategory) && !rawCategory.Equals("OVERALL", StringComparison.OrdinalIgnoreCase))
return rawCategory;
var firstTag = tags.Split(',', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault()?.Trim();
if (!string.IsNullOrWhiteSpace(firstTag))
return firstTag;
return fallback;
}
}