public AuthController(CardInfoContext context, UserManager <User> userMgr, ILogger <AuthController> logger, IPasswordHasher <User> hasher, IHostingEnvironment env, IConfiguration config) { _context = context; _userMgr = userMgr; _logger = logger; _hasher = hasher; _env = env; _config = config; }
public CardInfoRepository(CardInfoContext context) { _context = context; }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, CardInfoContext context) { if (env.IsDevelopment()) { //set developer friendly error page for dev environment app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler(); } //enable IP throttling app.UseIpRateLimiting(); //tell automapper all mappings used between Entities and Models to remove manual mapping work AutoMapper.Mapper.Initialize(c => { c.CreateMap <Set, SetWithNoCardsDTO>(); c.CreateMap <Set, SetDTO>(); c.CreateMap <Deck, DeckWithNoCardsDTO>(); c.CreateMap <Deck, DeckDTO>(); c.CreateMap <Card, CardDTO>() .ForMember(d => d.Loyalty, opt => opt.ResolveUsing(e => e.Loyalty == 0 ? null : e.Loyalty)) .ForMember(d => d.LinkedCard, opt => opt.ResolveUsing(e => e.LinkedCard == 0 ? null : e.LinkedCard)); c.CreateMap <Card, CardNoIdDTO>() .ForMember(d => d.Loyalty, opt => opt.ResolveUsing(e => e.Loyalty == 0 ? null : e.Loyalty)) .ForMember(d => d.LinkedCard, opt => opt.ResolveUsing(e => e.LinkedCard == 0 ? null : e.LinkedCard)); c.CreateMap <CardsInDeck, CardsInDeckDTO>(); c.CreateMap <Legality, LegalityDTO>(); c.CreateMap <CardToDeckAddingDTO, CardsInDeck>(); c.CreateMap <DeckAddingDTO, Deck>(); c.CreateMap <DeckUpdatingDTO, Deck>(); c.CreateMap <Deck, DeckUpdatingDTO>(); c.CreateMap <Game, GameDTO>(); c.CreateMap <Game, GameWithNoSetsDTO>(); c.CreateMap <Format, FormatDTO>(); c.CreateMap <SetType, SetTypeDTO>(); c.CreateMap <Language, LanguageDTO>() .ForMember(d => d.LanguageName, opt => opt.ResolveUsing(e => e.LanguageString())); c.CreateMap <Rarity, RarityDTO>() .ForMember(d => d.Name, opt => opt.ResolveUsing(e => e.RarityName())); c.CreateMap <CardLayout, CardLayoutDTO>(); c.CreateMap <Color, ColorDTO>() .ForMember(d => d.Name, opt => opt.ResolveUsing(e => e.ColorName())); c.CreateMap <ColorIdentity, ColorIdentityDTO>() .ForMember(d => d.Name, opt => opt.ResolveUsing(e => e.ColorIdentityName())); c.CreateMap <CardSuperType, CardSuperTypeDTO>(); c.CreateMap <CardType, CardTypeDTO>(); c.CreateMap <CardSubType, CardSubTypeDTO>(); c.CreateMap <ImportSet, Set>() .ForMember(d => d.ReleaseDate, opt => opt.ResolveUsing(e => DateTime.ParseExact(e.ReleaseDate, "yyyy-MM-dd", null))) .ForMember(d => d.Abbreviation, opt => opt.MapFrom(e => e.Code)) .ForMember(d => d.SetType, opt => opt.ResolveUsing(e => new SetType() { Name = e.Type })) .ForMember(d => d.NumberOfCards, opt => opt.ResolveUsing(e => e.NumberOfCards())); c.CreateMap <ImportCard, Card>() .ForMember(d => d.FlavorText, opt => opt.MapFrom(e => e.Flavor)) .ForMember(d => d.Number, opt => opt.ResolveUsing(e => e.MciNumber == null ? "" : e.MciNumber)) .ForMember(d => d.RulesText, opt => opt.MapFrom(e => e.Text)) .ForMember(d => d.Image, opt => opt.ResolveUsing(e => "https://www.google.com/")) .ForMember(d => d.Loyalty, opt => opt.ResolveUsing(e => e.Loyalty == null ? 0 : e.Loyalty)) .ForMember(d => d.LinkedCard, opt => opt.ResolveUsing(e => 0)) .ForMember(d => d.CardLayout, opt => opt.ResolveUsing(e => new CardLayout() { Type = e.Layout })) .ForMember(d => d.ColorIdentity, opt => opt.Ignore()) .ForMember(d => d.Rarity, opt => opt.Ignore()) .ForMember(d => d.Language, opt => opt.ResolveUsing(e => new Language() { CardName = e.Name, LanguageName = 0 })); //to map to a versioned model //c.CreateMap<Deck, DeckWithNoCardsDTOTest>().IncludeBase<Deck, DeckWithNoCardsDTO>(); //to map to object with a different name //c.CreateMap<Example, ExampleDTO>().ForMember(c => c.StartDate, opt => opt.MapFrom(example => example.EventDate)) //to calculate new values on the fly //.ForMember(c => c.EndDate, opt => opt.ResolveUsing(example => example.EventDate.AddDays(example.Length - 1))); }); //only initialize data if project is built running instead of entity framework tooling if (Configuration["DesignTime"] != "true") { using (var scope = app.ApplicationServices.CreateScope()) { var userInitializer = scope.ServiceProvider.GetRequiredService <UserDataInitializer>(); userInitializer.Seed().Wait(); var cardInitializer = scope.ServiceProvider.GetRequiredService <CardDataInitializer>(); cardInitializer.Seed().Wait(); } } //enable authentication app.UseAuthentication(); //enable statuscode modification app.UseStatusCodePages(); //enable mvc app.UseMvc(); }
public static async Task <string> Begin(IConfiguration config) { var jsonresult = ""; //create dbcontext options from config var optionsBuilder = new DbContextOptionsBuilder <CardInfoContext>(); optionsBuilder.UseNpgsql(config["connectionStrings:TCGCardFetcher"]); using (CardInfoContext context = new CardInfoContext(optionsBuilder.Options)) { //set base game data List <Game> _sample = new List <Game> { new Game() { Name = "Magic: The Gathering", Abbreviation = "MTG", Published = DateTime.Parse("1993-08-05 00:00:00.000000"), Publisher = "Wizards of the Coast", Website = "https://magic.wizards.com/en", Description = "Magic can be played by two or more players in various formats, which fall into two categories: constructed and limited. Limited formats involve players building a deck spontaneously out of a pool of random cards with a minimum deck size of 40 cards. In constructed, players create decks from cards they own, usually 60 cards with no more than 4 of any given card. Each game represents a battle between wizards known as planeswalkers, who employ spells, artifacts, and creatures depicted on individual Magic cards to defeat their opponents.", AvailableOnConsole = true, AvailableOnMobile = true, AvailableOnPaper = true, AvailableOnPC = true, Formats = new List <Format> { new Format() { Name = "Standard", NumberOfCards = 60, CopyLimit = 4, Category = "Constructed", Description = "" }, new Format() { Name = "Modern", NumberOfCards = 60, CopyLimit = 4, Category = "Constructed", Description = "" }, new Format() { Name = "Legacy", NumberOfCards = 60, CopyLimit = 4, Category = "Constructed", Description = "" }, new Format() { Name = "Vintage", NumberOfCards = 60, CopyLimit = 4, Category = "Constructed", Description = "" }, new Format() { Name = "Commander", NumberOfCards = 100, CopyLimit = 1, Category = "Casual", Description = "" }, new Format() { Name = "Sealed", NumberOfCards = 40, CopyLimit = 40, Category = "Limited", Description = "" }, new Format() { Name = "Draft", NumberOfCards = 40, CopyLimit = 40, Category = "Limited", Description = "" }, new Format() { Name = "Pauper", NumberOfCards = 60, CopyLimit = 4, Category = "Casual", Description = "" }, new Format() { Name = "Frontier", NumberOfCards = 60, CopyLimit = 4, Category = "Casual", Description = "" }, new Format() { Name = "Arena", NumberOfCards = 60, CopyLimit = 4, Category = "Constructed", Description = "" } } } }; //empty all data before records are added context.Database.ExecuteSqlCommand("TRUNCATE TABLE \"Games\" RESTART IDENTITY CASCADE;"); context.Games.AddRange(_sample); await context.SaveChangesAsync(); } //read set data from json file JObject jObject = JObject.Load(new JsonTextReader(File.OpenText("enrichData.json"))); JArray resources = (JArray)jObject["set"]; //fetch more data for each set from online, bind to the model and enrich it foreach (var set in resources) { jsonresult = await DownloadJSON("https://mtgjson.com/json/" + set["id"].ToString() + "-x.json"); if (jsonresult != null) { using (CardInfoContext context = new CardInfoContext(optionsBuilder.Options)) { var modelresult = ConvertToModel(jsonresult); var enrichedModel = EnrichModel(modelresult); //add set to context context.Sets.Add(enrichedModel); //set power and toughness even when null var nulls = enrichedModel.Cards.Where(item => item.Power == null); foreach (Card card in nulls) { card.Power = " "; card.Toughness = " "; } //update cards in context context.Cards.UpdateRange(nulls); await context.SaveChangesAsync(); } } } return(jsonresult); }