using System.Reflection; using Microsoft.EntityFrameworkCore; using Yavsc.Abstract.Workflow; using Yavsc.Models; namespace Yavsc.Services { public class BillingService : IBillingService { public ApplicationDbContext DbContext { get; private set; } public static Dictionary> Billing = new Dictionary> (); public static List UserSettings = new List(); public static Dictionary GlobalBillingMap = new Dictionary(); public Dictionary BillingMap { get { return GlobalBillingMap; } } public BillingService(ApplicationDbContext dbContext) { DbContext = dbContext; } public Task GetBillAsync(string billingCode, long queryId) { return Task.FromResult(GetBillable(DbContext,billingCode,queryId)); } public static IDecidableQuery GetBillable(ApplicationDbContext context, string billingCode, long queryId ) => Billing[billingCode](context, queryId); public async Task GetPerformerSettingsAsync(string activityCode, string userId) { return (await GetPerformersSettingsAsync(activityCode)).SingleOrDefault(s=> s.UserId == userId); } public async Task> GetPerformersSettingsAsync(string activityCode) { var activity = await DbContext.Activities.SingleAsync(a=>a.Code == activityCode); if (activity.SettingsClassName==null) return null; return UserSettings.Where(s => s.PropertyType.GenericTypeArguments[0].FullName == activity.SettingsClassName) .Cast(); } } }