GGMM/GrossesMitaines/GrossesMitainesAPI/Data/InventoryContext.cs
2022-11-14 07:19:33 -08:00

679 lines
25 KiB
C#

using Microsoft.EntityFrameworkCore;
using GrossesMitainesAPI.Models;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity;
namespace GrossesMitainesAPI.Data;
public class InventoryContext : IdentityDbContext<InventoryUser> {
public DbSet<ProductModel> Products { get; set; }
public DbSet<AddressModel> Addresses { get; set; }
public DbSet<InvoiceModel> Invoices { get; set; }
//public DbSet<InvoiceModel.ProductInvoice> ProductInvoice { get; set; }
public InventoryContext(DbContextOptions<InventoryContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder modelBuilder) {
#region Products
// Pour partir la BD.
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 1,
Title = @"Ceinture flèchée",
Category = @"Linge",
Description = @"Pour faire votre propre bonhomme de 1837, comme dans le bon vieux temps.",
Status = ProductModel.States.Promotion,
Price = 85.86M,
PromoPrice = 29.99M,
Quantity = 1,
ImageName = @"$ceintureflechee.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 2,
Title = @"Pantoufles du Canadien en Phentex",
Category = @"Linge",
Description = @"Parce que ça sent la coupe!",
Status = ProductModel.States.Available,
Price = 15.64M,
PromoPrice = 9.99M,
Quantity = 54,
ImageName = @"$pantouflesCH.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 3,
Title = @"Jean-Luc Mongrain",
Category = @"Homme",
Description = @"On ne lui ferait pas mal, en tout cas!!",
Status = ProductModel.States.Clearance,
Price = 1453.12M,
PromoPrice = 999.99M,
Quantity = 1,
ImageName = @"$jeanlucmongrain.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 4,
Title = @"T-Shirt",
Category = @"Linge",
Description = @"Tellement simple et comfortable.",
Status = ProductModel.States.Available,
Price = 12.12M,
PromoPrice = 9.99M,
Quantity = 143,
ImageName = @"$tshirt.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 5,
Title = @"Mitaines",
Category = @"Vêtement d'extérieur",
Description = @"Deux pour un!",
Status = ProductModel.States.Available,
Price = 8.18M,
PromoPrice = 6.99M,
Quantity = 1423,
ImageName = @"$mitaines.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 6,
Title = @"Foulard",
Category = @"Vêtement d'extérieur",
Description = @"Deux pour un!",
Status = ProductModel.States.Promotion,
Price = 10.56M,
PromoPrice = 8.99M,
Quantity = 14,
ImageName = @"$foulard.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 7,
Title = @"Jock-Strap en phentex",
Category = @"Sous-Vêtement",
Description = @"Pour garder le p'tit bout au chaud.",
Status = ProductModel.States.Promotion,
Price = 15.45M,
PromoPrice = 12.99M,
Quantity = 144,
ImageName = @"$kokin.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 8,
Title = @"Jock-Strap féminin en phentex",
Category = @"Sous-Vêtement",
Description = @"Pour garder l'absence de p'tit bout au chaud.",
Status = ProductModel.States.Promotion,
Price = 15.45M,
PromoPrice = 12.99M,
Quantity = 224,
ImageName = @"$kokinfemme.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 9,
Title = @"Bibi",
Category = @"Alien",
Description = @"En chiffon.",
Status = ProductModel.States.Clearance,
Price = 1045.45M,
PromoPrice = 1023.99M,
Quantity = 1,
ImageName = @"$bibi.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 10,
Title = @"Tuque en laine",
Category = @"Vêtement d'extérieur",
Description = @"En chiffon.",
Status = ProductModel.States.Available,
Price = 15.45M,
PromoPrice = 12.99M,
Quantity = 1,
ImageName = @"$tuque.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 11,
Title = @"Habit de Bonhomme Carnaval",
Category = @"Vêtement d'extérieur",
Description = @"Pour se faire taper dessus avec une poêle à frire tout en restant au chaud.",
Status = ProductModel.States.Promotion,
Price = 145.45M,
PromoPrice = 123.99M,
Quantity = 1,
ImageName = @"$bonhomme.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 12,
Title = @"Gauze en phentex",
Category = @"Autre",
Description = @"Pour se pêter la fiole avec style.",
Status = ProductModel.States.BackOrder,
Price = 145.45M,
PromoPrice = 123.99M,
Quantity = 0,
ImageName = @"$gauze.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 13,
Title = @"Petit Jésus de plâtre",
Category = @"Homme",
Description = @"En chiffon.",
Status = ProductModel.States.Clearance,
Price = 145.45M,
PromoPrice = 123.99M,
Quantity = 1,
ImageName = @"$jesus.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 14,
Title = @"VHS de la Guerre des Tuques",
Category = @"Autre",
Description = @"À écouter dans l'habit de Bonhomme Carnaval tant que possible.",
Status = ProductModel.States.Clearance,
Price = 3.45M,
PromoPrice = 1.99M,
Quantity = 99,
ImageName = @"$vhs.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 15,
Title = @"Gilet pare-balle en laine",
Category = @"Linge",
Description = @"(N'est pas réellement pare-balle).",
Status = ProductModel.States.Clearance,
Price = 1435.45M,
PromoPrice = 1223.99M,
Quantity = 18,
ImageName = @"$chandailquetaine.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 16,
Title = @"Doudou",
Category = @"Autre",
Description = @"Pour s'éffoirer le nez dedans.",
Status = ProductModel.States.Available,
Price = 14.45M,
PromoPrice = 13.99M,
Quantity = 14,
ImageName = @"$doudou.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 17,
Title = @"Mitaines pas de doigts",
Category = @"Vêtements d'extérieur",
Description = @"Pour avoir l'air thug en hiver.",
Status = ProductModel.States.Available,
Price = 9.45M,
PromoPrice = 8.99M,
Quantity = 16,
ImageName = @"$mitaines2.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 18,
Title = @"Longues mitaines pas de doigts",
Category = @"Vêtements d'extérieur",
Description = @"Pour avoir plus l'air thug en hiver.",
Status = ProductModel.States.Discontinued,
Price = 10.45M,
PromoPrice = 9.99M,
Quantity = 10,
ImageName = @"$longmitaines.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 19,
Title = @"Pantalons slacks",
Category = @"Linge",
Description = @"Pour les journées bs",
Status = ProductModel.States.BackOrder,
Price = 69.99M,
PromoPrice = 49.99M,
Quantity = 0,
ImageName = @"$pantalon.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 20,
Title = @"Programmer Socks",
Category = @"Linge",
Description = @"Pour commencer à apprendre rust et utiliser linux",
Status = ProductModel.States.Promotion,
Price = 23.50M,
PromoPrice = 19.99M,
Quantity = 3,
ImageName = @"$thighs.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 21,
Title = @"Col-roulé",
Category = @"Linge",
Description = @"Show off que t'habites su'l plateau",
Status = ProductModel.States.Available,
Price = 149.99M,
PromoPrice = 99.99M,
Quantity = 14,
ImageName = @"$plateau.png"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 22,
Title = @"Gros col-roulé",
Category = @"Linge",
Description = @"Ben oui je vais à l'UQAM comment t'as d'viné",
Status = ProductModel.States.Clearance,
Price = 149.99M,
PromoPrice = 99.99M,
Quantity = 4,
ImageName = @"$uqam.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 23,
Title = @"SAQ",
Category = @"Établissement",
Description = @"Oui oui, une SAQ au complete",
Status = ProductModel.States.Available,
Price = 1000000.99M,
PromoPrice = 999999.99M,
Quantity = 1,
ImageName = @"$saq.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 24,
Title = @"Lorem",
Category = @"Texte",
Description = @"Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Vivamus sapien ipsum,
convallis quis justo ac, congue sollicitudin metus.
Vestibulum nec libero nulla. Integer a pretium dolor.
Phasellus vulputate iaculis ligula, sit amet suscipit
diam condimentum eu. Suspendisse blandit ipsum sed porttitor volutpat.
Duis iaculis mauris a dapibus bibendum. Integer sollicitudin nunc et neque
egestas sagittis. Etiam vitae ornare ex.",
Status = ProductModel.States.Promotion,
Price = 0.99M,
PromoPrice = 0.69M,
Quantity = 99,
ImageName = @"$lorem.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 25,
Title = @"Bébé de laine",
Category = @"Homme",
Description = @"Quand un vrai coûte trop cher",
Status = ProductModel.States.Available,
Price = 10.99M,
PromoPrice = 5.99M,
Quantity = 15,
ImageName = @"$bebe.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 26,
Title = @"Kit pour bébé",
Category = @"Linge",
Description = @"Un beau petit kit pas cher quand vous avez oublié le cadeau pour le shower qui s'en vient",
Status = ProductModel.States.Clearance,
Price = 39.99M,
PromoPrice = 29.99M,
Quantity = 10,
ImageName = @"$kitbebe.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 27,
Title = @"TORTUE",
Category = @"Linge",
Description = @"Chris Pratt aime ben sauter dessus",
Status = ProductModel.States.Discontinued,
Price = 29.99M,
PromoPrice = 9.99M,
Quantity = 0,
ImageName = @"$koopa.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 28,
Title = @"Patate de laine",
Category = @"Nourriture",
Description = @"*ne pa manger",
Status = ProductModel.States.Available,
Price = 1.99M,
PromoPrice = 0.99M,
Quantity = 58,
ImageName = @"$potato.jpg"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 29,
Title = @"Monke :)",
Category = @"Animal",
Description = @"Les singes sont des mammifères de l'ordre des primates, généralement arboricoles, à la face souvent glabre et caractérisés par un encéphale développé et de longs membres terminés par des doigts. Bien que leur ressemblance avec l'Homme ait toujours frappé les esprits, la science a mis de nombreux siècles à prouver le lien étroit qui existe entre ceux-ci et l'espèce humaine.
Au sein des primates, les singes forment un infra-ordre monophylétique, si l'on y inclut le genre Homo, nommé Simiiformes et qui se divise entre les Platyrhiniens (singes du Nouveau Monde : Amérique centrale et méridionale) et les Catarhiniens (singes de l'Ancien Monde : Afrique et Asie tropicales). Ces derniers comprennent les hominoïdes, également appelés « grands singes », dont fait partie Homo sapiens et ses ancêtres les plus proches.
Même s'il ne fait plus de doute aujourd'hui que « l'Homme est un singe comme les autres », l'expression est majoritairement utilisée pour parler des animaux sauvages, et évoque un référentiel culturel, littéraire et artistique qui exclut l'espèce humaine.",
Status = ProductModel.States.Available,
Price = 299.99M,
PromoPrice = 99.99M,
Quantity = 58,
ImageName = @"$monke.png"
});
modelBuilder.Entity<ProductModel>().HasData(new ProductModel {
Id = 30,
Title = @"Phat Pikachu",
Category = @"Pokemon",
Description = @"It evolves from Pichu when leveled up with high friendship and evolves into Raichu when exposed to a Thunder Stone.
In Alola, Pikachu will evolve into Alolan Raichu when exposed to a Thunder Stone.
Pikachu has a Gigantamax form. Pikachu with the Gigantamax Factor cannot evolve.
In Pokémon Yellow, the starter Pikachu will refuse to evolve into Raichu unless it is traded and evolved on another save file. In Pokémon: Let's Go, Pikachu!, the player's starter Pikachu also will not evolve, but cannot be traded to become a Raichu.
Pikachu is popularly known as the mascot of the Pokémon franchise and one of Nintendo's major mascots.
It is also the game mascot and starter Pokémon of Pokémon Yellow and Let's Go, Pikachu!. It has made numerous appearances on the boxes of spin-off titles.
Pikachu is also the starter Pokémon of Pokémon Rumble Blast and Pokémon Rumble World.",
Status = ProductModel.States.Discontinued,
Price = 3.99M,
PromoPrice = 2.99M,
Quantity = 69,
ImageName = @"$pika.png"
});
#endregion
#region Users
// Source: Notre TP Web 4DW.
//RolesID
string AdministrateurID = "c9e08b20-d8a5-473f-9f52-572eb23c12af";
string ClientID = "1b7b9c55-c746-493a-a24f-3d5ca937298e";
//UsersID
string AdminID = "ecf7503a-591c-454e-a824-048e10bd0474";
string PaulID = "af9178c8-1a02-4ff8-bc0a-c8248dad6e09";
InventoryUser admin = new InventoryUser() {
FirstName = "Roger",
LastName = "Admin",
NormalizedUserName = "ADMIN",
UserName = "Admin",
PhoneNumber = "111-111-1111",
Id = AdminID,
NormalizedEmail = "ADMIN@ADMIN.COM",
Email = "admin@admin.com"
};
InventoryUser paul = new InventoryUser() {
FirstName = "Paul",
LastName = "A.",
NormalizedUserName = "PASLA",
UserName = "PasLa",
PhoneNumber="222-222-2222",
Id = PaulID,
NormalizedEmail = "PAUL@EXEMPLE.COM",
Email = "paul@exemple.com"
};
admin.PasswordHash = new PasswordHasher<InventoryUser>().HashPassword(admin, "Qwerty123!");
paul.PasswordHash = new PasswordHasher<InventoryUser>().HashPassword(paul, "Qwerty123!");
modelBuilder.Entity<InventoryUser>().HasData(admin, paul);
modelBuilder.Entity<IdentityRole>().HasData(
new IdentityRole { Id = AdministrateurID, Name = "Administrateur", NormalizedName = "ADMINISTRATEUR" },
new IdentityRole { Id = ClientID, Name = "Client", NormalizedName = "CLIENT" }
);
modelBuilder.Entity<IdentityUserRole<string>>().HasData(
new IdentityUserRole<string> { RoleId = AdministrateurID, UserId = AdminID },
new IdentityUserRole<string> { RoleId = ClientID, UserId = AdminID },
new IdentityUserRole<string> { RoleId = ClientID, UserId = PaulID }
);
#endregion
#region Addresses
modelBuilder.Entity<AddressModel>().HasData(
new {
Id = 1,
CivicNumber = 1234,
Appartment = "B",
Street = "Rue Pierre-Falardeau",
City = "Saint-Chrysostome",
PostalCode = "H0H0H0",
Province = "QC",
Country = "Canada",
InventoryUserId = AdminID,
},
new {
Id = 2,
CivicNumber = 420,
Street = "Rue MikeWard",
City = "Saint-Jérôme",
PostalCode = "H0H0H0",
Province = "QC",
Country = "Canada",
},
new {
Id = 3,
CivicNumber = 69,
Appartment = "A",
Street = "Rue PSPP",
City = "Saint-Québec",
PostalCode = "H0H0H0",
Province = "QC",
Country = "Canada",
InventoryUserId = PaulID,
}
);
#endregion
#region Invoices
modelBuilder.Entity<InvoiceModel>().HasData(
new {
Id = 1,
EmailAddress = "admin@admin.com",
FirstName = "Roger",
LastName = "Admin",
LinkedAccountId = AdminID,
PhoneNumber = "111-111-1111",
PurchaseDate = DateTime.Now,
ShippingAddressId = 1,
Status = InvoiceModel.InStates.Confirmed,
},
new {
Id = 2,
EmailAddress = "admin@admin.com",
FirstName = "Roger",
LastName = "Admin",
LinkedAccountId = AdminID,
PhoneNumber = "111-111-1111",
PurchaseDate = DateTime.Now,
ShippingAddressId = 1,
Status = InvoiceModel.InStates.Cancelled,
},
new {
Id = 3,
EmailAddress = "admin@admin.com",
FirstName = "Roger",
LastName = "Admin",
LinkedAccountId = AdminID,
PhoneNumber = "111-111-1111",
PurchaseDate = DateTime.Now,
ShippingAddressId = 1,
Status = InvoiceModel.InStates.Shipping,
},
new {
Id = 4,
EmailAddress = "admin@admin.com",
FirstName = "Roger",
LastName = "Admin",
LinkedAccountId = AdminID,
PhoneNumber = "111-111-1111",
PurchaseDate = DateTime.Now,
ShippingAddressId = 1,
Status = InvoiceModel.InStates.Shipped,
},
new {
Id = 5,
EmailAddress = "admin@admin.com",
FirstName = "Roger",
LastName = "Admin",
LinkedAccountId = AdminID,
PhoneNumber = "111-111-1111",
PurchaseDate = DateTime.Now,
ShippingAddressId = 1,
Status = InvoiceModel.InStates.Returned,
},
new {
Id = 6,
EmailAddress = "test@admin.com",
FirstName = "Jérémy",
LastName = "Le Petit",
PhoneNumber = "111-111-1111",
PurchaseDate = DateTime.Now,
ShippingAddressId = 2,
Status = InvoiceModel.InStates.Confirmed,
},
new {
Id = 7,
EmailAddress = "paul@exemple.com",
FirstName = "Paul",
LastName = "A.",
LinkedAccountId = PaulID,
PhoneNumber = "111-111-1111",
PurchaseDate = DateTime.Now,
ShippingAddressId = 3,
Status = InvoiceModel.InStates.Shipping,
}
);
modelBuilder.Entity<InvoiceModel.ProductInvoice>().HasData(
// invoice 1
new {
Id = 1,
ProductId = 1,
Quantity = (uint)2,
InvoiceModelId = 1
},
new {
Id = 2,
ProductId = 4,
Quantity = (uint)5,
InvoiceModelId = 1
},
// invoice 2
new {
Id = 3,
ProductId = 3,
Quantity = (uint)1,
InvoiceModelId = 2
},
new {
Id = 4,
ProductId = 5,
Quantity = (uint)2,
InvoiceModelId = 2
},
new {
Id = 5,
ProductId = 7,
Quantity = (uint)1,
InvoiceModelId = 2
},
// invoice 3
new {
Id = 6,
ProductId = 9,
Quantity = (uint)1,
InvoiceModelId = 3
},
new {
Id = 7,
ProductId = 11,
Quantity = (uint)1,
InvoiceModelId = 3
},
// invoice 4
new {
Id = 8,
ProductId = 14,
Quantity = (uint)1,
InvoiceModelId = 4
},
new {
Id = 9,
ProductId = 13,
Quantity = (uint)1,
InvoiceModelId = 4
},
new {
Id = 10,
ProductId = 16,
Quantity = (uint)1,
InvoiceModelId = 4
},
new {
Id = 11,
ProductId = 24,
Quantity = (uint)25,
InvoiceModelId = 4
},
// invoice 5
new {
Id = 12,
ProductId = 25,
Quantity = (uint)1,
InvoiceModelId = 5
},
new {
Id = 13,
ProductId = 29,
Quantity = (uint)1,
InvoiceModelId = 5
},
new {
Id = 14,
ProductId = 30,
Quantity = (uint)1,
InvoiceModelId = 5
},
new {
Id = 15,
ProductId = 15,
Quantity = (uint)2,
InvoiceModelId = 5
},
// invoice 6
new {
Id = 16,
ProductId = 20,
Quantity = (uint)4,
InvoiceModelId = 6
},
// invoice 7
new {
Id = 17,
ProductId = 1,
Quantity = (uint)1,
InvoiceModelId = 7
},
new {
Id = 18,
ProductId = 15,
Quantity = (uint)2,
InvoiceModelId = 7
}
);
#endregion
base.OnModelCreating(modelBuilder);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var connectionString = configuration.GetConnectionString("DefaultConnection");
optionsBuilder.UseSqlServer(connectionString);
}
}