diff --git a/GrossesMitaines/GrossesMitainesAPI/Controllers/InvoiceController.cs b/GrossesMitaines/GrossesMitainesAPI/Controllers/InvoiceController.cs index 93871c6..7c46697 100644 --- a/GrossesMitaines/GrossesMitainesAPI/Controllers/InvoiceController.cs +++ b/GrossesMitaines/GrossesMitainesAPI/Controllers/InvoiceController.cs @@ -173,7 +173,8 @@ public class InvoiceController : Controller { Phone = sinv.Phone, Email = sinv.Email, Description = sinv.Description, - CurrencyCode = sinv.CurrencyCode + CurrencyCode = sinv.CurrencyCode, + LastFourDigits = sinv.LastFourDigits, }; inv.Payment = chr; @@ -190,13 +191,6 @@ public class InvoiceController : Controller { if (charge.FailureMessage is not null && charge.FailureMessage != "") return Json(charge.ToJson()); - try { - _context.Invoices.Update(inv); - _context.SaveChanges(); - } catch (Exception ex) { - _logger.LogError(20, ex.Message); - return BadRequest(ex.Message); - } if (user.Result is not null) { // Gestion de l'adresse client. inv.LinkedAccount = user.Result; diff --git a/GrossesMitaines/GrossesMitainesAPI/Migrations/20221209011029_newstuff.Designer.cs b/GrossesMitaines/GrossesMitainesAPI/Migrations/20221209011029_newstuff.Designer.cs new file mode 100644 index 0000000..d0efbc2 --- /dev/null +++ b/GrossesMitaines/GrossesMitainesAPI/Migrations/20221209011029_newstuff.Designer.cs @@ -0,0 +1,1313 @@ +// +using System; +using GrossesMitainesAPI.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace GrossesMitainesAPI.Migrations +{ + [DbContext(typeof(InventoryContext))] + [Migration("20221209011029_newstuff")] + partial class newstuff + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("GrossesMitainesAPI.Data.InventoryUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasData( + new + { + Id = "ecf7503a-591c-454e-a824-048e10bd0474", + AccessFailedCount = 0, + ConcurrencyStamp = "10c22569-c9b6-481a-80b0-ada24d0ed3e3", + Email = "admin@admin.com", + EmailConfirmed = false, + FirstName = "Roger", + LastName = "Admin", + LockoutEnabled = false, + NormalizedEmail = "ADMIN@ADMIN.COM", + NormalizedUserName = "ADMIN", + PasswordHash = "AQAAAAIAAYagAAAAEMFEklU5e/VioCDzfvR1Xf9WhF/UIsZpuI2q6ZL3m68YSyDEe9CyswhrRR3nmj5ylQ==", + PhoneNumber = "111-111-1111", + PhoneNumberConfirmed = false, + SecurityStamp = "12a136a8-303d-4291-9746-bbc18705a483", + TwoFactorEnabled = false, + UserName = "Admin" + }, + new + { + Id = "af9178c8-1a02-4ff8-bc0a-c8248dad6e09", + AccessFailedCount = 0, + ConcurrencyStamp = "e00d8d0f-1510-415a-a59f-386072484ab2", + Email = "paul@exemple.com", + EmailConfirmed = false, + FirstName = "Paul", + LastName = "A.", + LockoutEnabled = false, + NormalizedEmail = "PAUL@EXEMPLE.COM", + NormalizedUserName = "PASLA", + PasswordHash = "AQAAAAIAAYagAAAAEGCyYq3h0iCXjZEzZyx1Jh4IwD6n76MXzopZNtCeBYcAr8rCBAQsgyb1KZINqIi2hA==", + PhoneNumber = "222-222-2222", + PhoneNumberConfirmed = false, + SecurityStamp = "02115bbb-af11-4354-8fd3-d4c121238584", + TwoFactorEnabled = false, + UserName = "PasLa" + }); + }); + + modelBuilder.Entity("GrossesMitainesAPI.Models.AddressModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Appartment") + .HasColumnType("nvarchar(max)"); + + b.Property("City") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CivicNumber") + .HasColumnType("int"); + + b.Property("Country") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("InventoryUserId") + .HasColumnType("nvarchar(450)"); + + b.Property("PostalCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Province") + .IsRequired() + .HasMaxLength(3) + .HasColumnType("nvarchar(3)"); + + b.Property("Street") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("InventoryUserId"); + + b.ToTable("Addresses"); + + b.HasData( + new + { + Id = 1, + Appartment = "B", + City = "Saint-Chrysostome", + CivicNumber = 1234, + Country = "Canada", + InventoryUserId = "ecf7503a-591c-454e-a824-048e10bd0474", + PostalCode = "H0H0H0", + Province = "QC", + Street = "Rue Pierre-Falardeau" + }, + new + { + Id = 2, + City = "Saint-Jérôme", + CivicNumber = 420, + Country = "Canada", + PostalCode = "H0H0H0", + Province = "QC", + Street = "Rue MikeWard" + }, + new + { + Id = 3, + Appartment = "A", + City = "Saint-Québec", + CivicNumber = 69, + Country = "Canada", + InventoryUserId = "af9178c8-1a02-4ff8-bc0a-c8248dad6e09", + PostalCode = "H0H0H0", + Province = "QC", + Street = "Rue PSPP" + }); + }); + + modelBuilder.Entity("GrossesMitainesAPI.Models.ChargesModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AmountInCents") + .HasColumnType("bigint"); + + b.Property("CardAddress") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CurrencyCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LastFourDigits") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Phone") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Token") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("ChargesModel"); + }); + + modelBuilder.Entity("GrossesMitainesAPI.Models.InvoiceModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("EmailAddress") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("LinkedAccountId") + .HasColumnType("nvarchar(450)"); + + b.Property("PaymentId") + .HasColumnType("int"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PurchaseDate") + .HasColumnType("datetime2"); + + b.Property("ShippingAddressId") + .HasColumnType("int"); + + b.Property("Status") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("LinkedAccountId"); + + b.HasIndex("PaymentId"); + + b.HasIndex("ShippingAddressId"); + + b.ToTable("Invoices"); + + b.HasData( + new + { + Id = 1, + EmailAddress = "admin@admin.com", + FirstName = "Roger", + LastName = "Admin", + LinkedAccountId = "ecf7503a-591c-454e-a824-048e10bd0474", + PhoneNumber = "111-111-1111", + PurchaseDate = new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(8956), + ShippingAddressId = 1, + Status = 0 + }, + new + { + Id = 2, + EmailAddress = "admin@admin.com", + FirstName = "Roger", + LastName = "Admin", + LinkedAccountId = "ecf7503a-591c-454e-a824-048e10bd0474", + PhoneNumber = "111-111-1111", + PurchaseDate = new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9034), + ShippingAddressId = 1, + Status = 1 + }, + new + { + Id = 3, + EmailAddress = "admin@admin.com", + FirstName = "Roger", + LastName = "Admin", + LinkedAccountId = "ecf7503a-591c-454e-a824-048e10bd0474", + PhoneNumber = "111-111-1111", + PurchaseDate = new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9037), + ShippingAddressId = 1, + Status = 3 + }, + new + { + Id = 4, + EmailAddress = "admin@admin.com", + FirstName = "Roger", + LastName = "Admin", + LinkedAccountId = "ecf7503a-591c-454e-a824-048e10bd0474", + PhoneNumber = "111-111-1111", + PurchaseDate = new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9039), + ShippingAddressId = 1, + Status = 4 + }, + new + { + Id = 5, + EmailAddress = "admin@admin.com", + FirstName = "Roger", + LastName = "Admin", + LinkedAccountId = "ecf7503a-591c-454e-a824-048e10bd0474", + PhoneNumber = "111-111-1111", + PurchaseDate = new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9041), + ShippingAddressId = 1, + Status = 5 + }, + new + { + Id = 6, + EmailAddress = "test@admin.com", + FirstName = "Jérémy", + LastName = "Le Petit", + PhoneNumber = "111-111-1111", + PurchaseDate = new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9043), + ShippingAddressId = 2, + Status = 0 + }, + new + { + Id = 7, + EmailAddress = "paul@exemple.com", + FirstName = "Paul", + LastName = "A.", + LinkedAccountId = "af9178c8-1a02-4ff8-bc0a-c8248dad6e09", + PhoneNumber = "111-111-1111", + PurchaseDate = new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9055), + ShippingAddressId = 3, + Status = 3 + }); + }); + + modelBuilder.Entity("GrossesMitainesAPI.Models.InvoiceModel+ProductInvoice", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("InvoiceModelId") + .HasColumnType("int"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.Property("Quantity") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("InvoiceModelId"); + + b.HasIndex("ProductId"); + + b.ToTable("ProductInvoice"); + + b.HasData( + new + { + Id = 1, + InvoiceModelId = 1, + ProductId = 1, + Quantity = 2L + }, + new + { + Id = 2, + InvoiceModelId = 1, + ProductId = 4, + Quantity = 5L + }, + new + { + Id = 3, + InvoiceModelId = 2, + ProductId = 3, + Quantity = 1L + }, + new + { + Id = 4, + InvoiceModelId = 2, + ProductId = 5, + Quantity = 2L + }, + new + { + Id = 5, + InvoiceModelId = 2, + ProductId = 7, + Quantity = 1L + }, + new + { + Id = 6, + InvoiceModelId = 3, + ProductId = 9, + Quantity = 1L + }, + new + { + Id = 7, + InvoiceModelId = 3, + ProductId = 11, + Quantity = 1L + }, + new + { + Id = 8, + InvoiceModelId = 4, + ProductId = 14, + Quantity = 1L + }, + new + { + Id = 9, + InvoiceModelId = 4, + ProductId = 13, + Quantity = 1L + }, + new + { + Id = 10, + InvoiceModelId = 4, + ProductId = 16, + Quantity = 1L + }, + new + { + Id = 11, + InvoiceModelId = 4, + ProductId = 24, + Quantity = 25L + }, + new + { + Id = 12, + InvoiceModelId = 5, + ProductId = 25, + Quantity = 1L + }, + new + { + Id = 13, + InvoiceModelId = 5, + ProductId = 29, + Quantity = 1L + }, + new + { + Id = 14, + InvoiceModelId = 5, + ProductId = 30, + Quantity = 1L + }, + new + { + Id = 15, + InvoiceModelId = 5, + ProductId = 15, + Quantity = 2L + }, + new + { + Id = 16, + InvoiceModelId = 6, + ProductId = 20, + Quantity = 4L + }, + new + { + Id = 17, + InvoiceModelId = 7, + ProductId = 1, + Quantity = 1L + }, + new + { + Id = 18, + InvoiceModelId = 7, + ProductId = 15, + Quantity = 2L + }); + }); + + modelBuilder.Entity("GrossesMitainesAPI.Models.ProductModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Category") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Hits") + .HasColumnType("bigint"); + + b.Property("ImageName") + .HasColumnType("nvarchar(max)"); + + b.Property("LastHit") + .HasColumnType("datetime2"); + + b.Property("LastSale") + .HasColumnType("datetime2"); + + b.Property("Price") + .HasColumnType("decimal(18,2)"); + + b.Property("PromoPrice") + .HasColumnType("decimal(18,2)"); + + b.Property("Quantity") + .HasColumnType("bigint"); + + b.Property("Sales") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.HasKey("Id"); + + b.ToTable("Products"); + + b.HasData( + new + { + Id = 1, + Category = "Linge", + Description = "Pour faire votre propre bonhomme de 1837, comme dans le bon vieux temps.", + Hits = 0L, + ImageName = "$ceintureflechee.jpg", + Price = 85.86m, + PromoPrice = 29.99m, + Quantity = 1L, + Sales = 0L, + Status = 4, + Title = "Ceinture flèchée" + }, + new + { + Id = 2, + Category = "Linge", + Description = "Parce que ça sent la coupe!", + Hits = 0L, + ImageName = "$pantouflesCH.jpg", + Price = 15.64m, + PromoPrice = 9.99m, + Quantity = 54L, + Sales = 0L, + Status = 0, + Title = "Pantoufles du Canadien en Phentex" + }, + new + { + Id = 3, + Category = "Homme", + Description = "On ne lui ferait pas mal, en tout cas!!", + Hits = 0L, + ImageName = "$jeanlucmongrain.jpg", + Price = 1453.12m, + PromoPrice = 999.99m, + Quantity = 1L, + Sales = 0L, + Status = 3, + Title = "Jean-Luc Mongrain" + }, + new + { + Id = 4, + Category = "Linge", + Description = "Tellement simple et comfortable.", + Hits = 0L, + ImageName = "$tshirt.jpg", + Price = 12.12m, + PromoPrice = 9.99m, + Quantity = 143L, + Sales = 0L, + Status = 0, + Title = "T-Shirt" + }, + new + { + Id = 5, + Category = "Vêtement d'extérieur", + Description = "Deux pour un!", + Hits = 0L, + ImageName = "$mitaines.jpg", + Price = 8.18m, + PromoPrice = 6.99m, + Quantity = 1423L, + Sales = 0L, + Status = 0, + Title = "Mitaines" + }, + new + { + Id = 6, + Category = "Vêtement d'extérieur", + Description = "Deux pour un!", + Hits = 0L, + ImageName = "$foulard.jpg", + Price = 10.56m, + PromoPrice = 8.99m, + Quantity = 14L, + Sales = 0L, + Status = 4, + Title = "Foulard" + }, + new + { + Id = 7, + Category = "Sous-Vêtement", + Description = "Pour garder le p'tit bout au chaud.", + Hits = 0L, + ImageName = "$kokin.jpg", + Price = 15.45m, + PromoPrice = 12.99m, + Quantity = 144L, + Sales = 0L, + Status = 4, + Title = "Jock-Strap en phentex" + }, + new + { + Id = 8, + Category = "Sous-Vêtement", + Description = "Pour garder l'absence de p'tit bout au chaud.", + Hits = 0L, + ImageName = "$kokinfemme.jpg", + Price = 15.45m, + PromoPrice = 12.99m, + Quantity = 224L, + Sales = 0L, + Status = 4, + Title = "Jock-Strap féminin en phentex" + }, + new + { + Id = 9, + Category = "Alien", + Description = "En chiffon.", + Hits = 0L, + ImageName = "$bibi.jpg", + Price = 1045.45m, + PromoPrice = 1023.99m, + Quantity = 1L, + Sales = 0L, + Status = 3, + Title = "Bibi" + }, + new + { + Id = 10, + Category = "Vêtement d'extérieur", + Description = "En chiffon.", + Hits = 0L, + ImageName = "$tuque.jpg", + Price = 15.45m, + PromoPrice = 12.99m, + Quantity = 1L, + Sales = 0L, + Status = 0, + Title = "Tuque en laine" + }, + new + { + Id = 11, + Category = "Vêtement d'extérieur", + Description = "Pour se faire taper dessus avec une poêle à frire tout en restant au chaud.", + Hits = 0L, + ImageName = "$bonhomme.jpg", + Price = 145.45m, + PromoPrice = 123.99m, + Quantity = 1L, + Sales = 0L, + Status = 4, + Title = "Habit de Bonhomme Carnaval" + }, + new + { + Id = 12, + Category = "Autre", + Description = "Pour se pêter la fiole avec style.", + Hits = 0L, + ImageName = "$gauze.jpg", + Price = 145.45m, + PromoPrice = 123.99m, + Quantity = 0L, + Sales = 0L, + Status = 1, + Title = "Gauze en phentex" + }, + new + { + Id = 13, + Category = "Homme", + Description = "En chiffon.", + Hits = 0L, + ImageName = "$jesus.jpg", + Price = 145.45m, + PromoPrice = 123.99m, + Quantity = 1L, + Sales = 0L, + Status = 3, + Title = "Petit Jésus de plâtre" + }, + new + { + Id = 14, + Category = "Autre", + Description = "À écouter dans l'habit de Bonhomme Carnaval tant que possible.", + Hits = 0L, + ImageName = "$vhs.jpg", + Price = 3.45m, + PromoPrice = 1.99m, + Quantity = 99L, + Sales = 0L, + Status = 3, + Title = "VHS de la Guerre des Tuques" + }, + new + { + Id = 15, + Category = "Linge", + Description = "(N'est pas réellement pare-balle).", + Hits = 0L, + ImageName = "$chandailquetaine.jpg", + Price = 1435.45m, + PromoPrice = 1223.99m, + Quantity = 18L, + Sales = 0L, + Status = 3, + Title = "Gilet pare-balle en laine" + }, + new + { + Id = 16, + Category = "Autre", + Description = "Pour s'éffoirer le nez dedans.", + Hits = 0L, + ImageName = "$doudou.jpg", + Price = 14.45m, + PromoPrice = 13.99m, + Quantity = 14L, + Sales = 0L, + Status = 0, + Title = "Doudou" + }, + new + { + Id = 17, + Category = "Vêtements d'extérieur", + Description = "Pour avoir l'air thug en hiver.", + Hits = 0L, + ImageName = "$mitaines2.jpg", + Price = 9.45m, + PromoPrice = 8.99m, + Quantity = 16L, + Sales = 0L, + Status = 0, + Title = "Mitaines pas de doigts" + }, + new + { + Id = 18, + Category = "Vêtements d'extérieur", + Description = "Pour avoir plus l'air thug en hiver.", + Hits = 0L, + ImageName = "$longmitaines.jpg", + Price = 10.45m, + PromoPrice = 9.99m, + Quantity = 10L, + Sales = 0L, + Status = 5, + Title = "Longues mitaines pas de doigts" + }, + new + { + Id = 19, + Category = "Linge", + Description = "Pour les journées bs", + Hits = 0L, + ImageName = "$pantalon.jpg", + Price = 69.99m, + PromoPrice = 49.99m, + Quantity = 0L, + Sales = 0L, + Status = 1, + Title = "Pantalons slacks" + }, + new + { + Id = 20, + Category = "Linge", + Description = "Pour commencer à apprendre rust et utiliser linux", + Hits = 0L, + ImageName = "$thighs.jpg", + Price = 23.50m, + PromoPrice = 19.99m, + Quantity = 3L, + Sales = 0L, + Status = 4, + Title = "Programmer Socks" + }, + new + { + Id = 21, + Category = "Linge", + Description = "Show off que t'habites su'l plateau", + Hits = 0L, + ImageName = "$plateau.png", + Price = 149.99m, + PromoPrice = 99.99m, + Quantity = 14L, + Sales = 0L, + Status = 0, + Title = "Col-roulé" + }, + new + { + Id = 22, + Category = "Linge", + Description = "Ben oui je vais à l'UQAM comment t'as d'viné", + Hits = 0L, + ImageName = "$uqam.jpg", + Price = 149.99m, + PromoPrice = 99.99m, + Quantity = 4L, + Sales = 0L, + Status = 3, + Title = "Gros col-roulé" + }, + new + { + Id = 23, + Category = "Établissement", + Description = "Oui oui, une SAQ au complete", + Hits = 0L, + ImageName = "$saq.jpg", + Price = 1000000.99m, + PromoPrice = 999999.99m, + Quantity = 1L, + Sales = 0L, + Status = 0, + Title = "SAQ" + }, + new + { + Id = 24, + Category = "Texte", + Description = "Lorem ipsum dolor sit amet, \r\nconsectetur adipiscing elit. Vivamus sapien ipsum, \r\nconvallis quis justo ac, congue sollicitudin metus. \r\nVestibulum nec libero nulla. Integer a pretium dolor. \r\nPhasellus vulputate iaculis ligula, sit amet suscipit \r\ndiam condimentum eu. Suspendisse blandit ipsum sed porttitor volutpat.\r\nDuis iaculis mauris a dapibus bibendum. Integer sollicitudin nunc et neque\r\negestas sagittis. Etiam vitae ornare ex.", + Hits = 0L, + ImageName = "$lorem.jpg", + Price = 0.99m, + PromoPrice = 0.69m, + Quantity = 99L, + Sales = 0L, + Status = 4, + Title = "Lorem" + }, + new + { + Id = 25, + Category = "Homme", + Description = "Quand un vrai coûte trop cher", + Hits = 0L, + ImageName = "$bebe.jpg", + Price = 10.99m, + PromoPrice = 5.99m, + Quantity = 15L, + Sales = 0L, + Status = 0, + Title = "Bébé de laine" + }, + new + { + Id = 26, + Category = "Linge", + Description = "Un beau petit kit pas cher quand vous avez oublié le cadeau pour le shower qui s'en vient", + Hits = 0L, + ImageName = "$kitbebe.jpg", + Price = 39.99m, + PromoPrice = 29.99m, + Quantity = 10L, + Sales = 0L, + Status = 3, + Title = "Kit pour bébé" + }, + new + { + Id = 27, + Category = "Linge", + Description = "Chris Pratt aime ben sauter dessus", + Hits = 0L, + ImageName = "$koopa.jpg", + Price = 29.99m, + PromoPrice = 9.99m, + Quantity = 0L, + Sales = 0L, + Status = 5, + Title = "TORTUE" + }, + new + { + Id = 28, + Category = "Nourriture", + Description = "*ne pa manger", + Hits = 0L, + ImageName = "$potato.jpg", + Price = 1.99m, + PromoPrice = 0.99m, + Quantity = 58L, + Sales = 0L, + Status = 0, + Title = "Patate de laine" + }, + new + { + Id = 29, + 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.\r\n\r\nAu 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.\r\n\r\nMê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.", + Hits = 0L, + ImageName = "$monke.png", + Price = 299.99m, + PromoPrice = 99.99m, + Quantity = 58L, + Sales = 0L, + Status = 0, + Title = "Monke :)" + }, + new + { + Id = 30, + Category = "Pokemon", + Description = "It evolves from Pichu when leveled up with high friendship and evolves into Raichu when exposed to a Thunder Stone.\r\n\r\nIn Alola, Pikachu will evolve into Alolan Raichu when exposed to a Thunder Stone.\r\n\r\nPikachu has a Gigantamax form. Pikachu with the Gigantamax Factor cannot evolve.\r\n\r\nIn 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.\r\n\r\nPikachu is popularly known as the mascot of the Pokémon franchise and one of Nintendo's major mascots.\r\n\r\nIt 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.\r\n\r\nPikachu is also the starter Pokémon of Pokémon Rumble Blast and Pokémon Rumble World.", + Hits = 0L, + ImageName = "$pika.png", + Price = 3.99m, + PromoPrice = 2.99m, + Quantity = 69L, + Sales = 0L, + Status = 5, + Title = "Phat Pikachu" + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + + b.HasData( + new + { + Id = "c9e08b20-d8a5-473f-9f52-572eb23c12af", + Name = "Administrateur", + NormalizedName = "ADMINISTRATEUR" + }, + new + { + Id = "1b7b9c55-c746-493a-a24f-3d5ca937298e", + Name = "Client", + NormalizedName = "CLIENT" + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + + b.HasData( + new + { + UserId = "ecf7503a-591c-454e-a824-048e10bd0474", + RoleId = "c9e08b20-d8a5-473f-9f52-572eb23c12af" + }, + new + { + UserId = "ecf7503a-591c-454e-a824-048e10bd0474", + RoleId = "1b7b9c55-c746-493a-a24f-3d5ca937298e" + }, + new + { + UserId = "af9178c8-1a02-4ff8-bc0a-c8248dad6e09", + RoleId = "1b7b9c55-c746-493a-a24f-3d5ca937298e" + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("GrossesMitainesAPI.Models.AddressModel", b => + { + b.HasOne("GrossesMitainesAPI.Data.InventoryUser", null) + .WithMany("Adresses") + .HasForeignKey("InventoryUserId"); + }); + + modelBuilder.Entity("GrossesMitainesAPI.Models.InvoiceModel", b => + { + b.HasOne("GrossesMitainesAPI.Data.InventoryUser", "LinkedAccount") + .WithMany() + .HasForeignKey("LinkedAccountId"); + + b.HasOne("GrossesMitainesAPI.Models.ChargesModel", "Payment") + .WithMany() + .HasForeignKey("PaymentId"); + + b.HasOne("GrossesMitainesAPI.Models.AddressModel", "ShippingAddress") + .WithMany() + .HasForeignKey("ShippingAddressId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LinkedAccount"); + + b.Navigation("Payment"); + + b.Navigation("ShippingAddress"); + }); + + modelBuilder.Entity("GrossesMitainesAPI.Models.InvoiceModel+ProductInvoice", b => + { + b.HasOne("GrossesMitainesAPI.Models.InvoiceModel", null) + .WithMany("Products") + .HasForeignKey("InvoiceModelId"); + + b.HasOne("GrossesMitainesAPI.Models.ProductModel", "Product") + .WithMany() + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Product"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("GrossesMitainesAPI.Data.InventoryUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("GrossesMitainesAPI.Data.InventoryUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GrossesMitainesAPI.Data.InventoryUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("GrossesMitainesAPI.Data.InventoryUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("GrossesMitainesAPI.Data.InventoryUser", b => + { + b.Navigation("Adresses"); + }); + + modelBuilder.Entity("GrossesMitainesAPI.Models.InvoiceModel", b => + { + b.Navigation("Products"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/GrossesMitaines/GrossesMitainesAPI/Migrations/20221209011029_newstuff.cs b/GrossesMitaines/GrossesMitainesAPI/Migrations/20221209011029_newstuff.cs new file mode 100644 index 0000000..8246085 --- /dev/null +++ b/GrossesMitaines/GrossesMitainesAPI/Migrations/20221209011029_newstuff.cs @@ -0,0 +1,195 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace GrossesMitainesAPI.Migrations +{ + /// + public partial class newstuff : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "CardAddress", + table: "ChargesModel", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + + migrationBuilder.AddColumn( + name: "LastFourDigits", + table: "ChargesModel", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + + migrationBuilder.UpdateData( + table: "AspNetRoles", + keyColumn: "Id", + keyValue: "1b7b9c55-c746-493a-a24f-3d5ca937298e", + column: "ConcurrencyStamp", + value: null); + + migrationBuilder.UpdateData( + table: "AspNetRoles", + keyColumn: "Id", + keyValue: "c9e08b20-d8a5-473f-9f52-572eb23c12af", + column: "ConcurrencyStamp", + value: null); + + migrationBuilder.UpdateData( + table: "AspNetUsers", + keyColumn: "Id", + keyValue: "af9178c8-1a02-4ff8-bc0a-c8248dad6e09", + columns: new[] { "ConcurrencyStamp", "PasswordHash", "SecurityStamp" }, + values: new object[] { "e00d8d0f-1510-415a-a59f-386072484ab2", "AQAAAAIAAYagAAAAEGCyYq3h0iCXjZEzZyx1Jh4IwD6n76MXzopZNtCeBYcAr8rCBAQsgyb1KZINqIi2hA==", "02115bbb-af11-4354-8fd3-d4c121238584" }); + + migrationBuilder.UpdateData( + table: "AspNetUsers", + keyColumn: "Id", + keyValue: "ecf7503a-591c-454e-a824-048e10bd0474", + columns: new[] { "ConcurrencyStamp", "PasswordHash", "SecurityStamp" }, + values: new object[] { "10c22569-c9b6-481a-80b0-ada24d0ed3e3", "AQAAAAIAAYagAAAAEMFEklU5e/VioCDzfvR1Xf9WhF/UIsZpuI2q6ZL3m68YSyDEe9CyswhrRR3nmj5ylQ==", "12a136a8-303d-4291-9746-bbc18705a483" }); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 1, + column: "PurchaseDate", + value: new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(8956)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 2, + column: "PurchaseDate", + value: new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9034)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 3, + column: "PurchaseDate", + value: new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9037)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 4, + column: "PurchaseDate", + value: new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9039)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 5, + column: "PurchaseDate", + value: new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9041)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 6, + column: "PurchaseDate", + value: new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9043)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 7, + column: "PurchaseDate", + value: new DateTime(2022, 12, 8, 20, 10, 28, 658, DateTimeKind.Local).AddTicks(9055)); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "CardAddress", + table: "ChargesModel"); + + migrationBuilder.DropColumn( + name: "LastFourDigits", + table: "ChargesModel"); + + migrationBuilder.UpdateData( + table: "AspNetRoles", + keyColumn: "Id", + keyValue: "1b7b9c55-c746-493a-a24f-3d5ca937298e", + column: "ConcurrencyStamp", + value: "fb8da1f2-a9df-4faa-9786-259cbc8c6f1c"); + + migrationBuilder.UpdateData( + table: "AspNetRoles", + keyColumn: "Id", + keyValue: "c9e08b20-d8a5-473f-9f52-572eb23c12af", + column: "ConcurrencyStamp", + value: "eac9c483-2e9f-4f9e-9b97-dc1c761f76c2"); + + migrationBuilder.UpdateData( + table: "AspNetUsers", + keyColumn: "Id", + keyValue: "af9178c8-1a02-4ff8-bc0a-c8248dad6e09", + columns: new[] { "ConcurrencyStamp", "PasswordHash", "SecurityStamp" }, + values: new object[] { "b7103a3b-8f05-462d-9fc0-5d4faa4669dc", "AQAAAAEAACcQAAAAEN68b+gEQV5Vx2grBL94+BzugXFrgXko6KtdY3p/NJN17mk8QCpGlQfJ3BMe040+dg==", "99183d90-1f1c-4a8e-9891-ea8ab3b714d0" }); + + migrationBuilder.UpdateData( + table: "AspNetUsers", + keyColumn: "Id", + keyValue: "ecf7503a-591c-454e-a824-048e10bd0474", + columns: new[] { "ConcurrencyStamp", "PasswordHash", "SecurityStamp" }, + values: new object[] { "61f3249f-495f-48c8-ac7e-7d21b3da82c7", "AQAAAAEAACcQAAAAELswgBNsSfJwmigdKX2rpHseOEi20F+ZUhxapu80HTnxZamC3lu1hyAGMXj4kQumMw==", "3098997b-a081-41ec-aa08-6cdea0028db7" }); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 1, + column: "PurchaseDate", + value: new DateTime(2022, 12, 4, 9, 8, 50, 6, DateTimeKind.Local).AddTicks(9261)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 2, + column: "PurchaseDate", + value: new DateTime(2022, 12, 4, 9, 8, 50, 6, DateTimeKind.Local).AddTicks(9300)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 3, + column: "PurchaseDate", + value: new DateTime(2022, 12, 4, 9, 8, 50, 6, DateTimeKind.Local).AddTicks(9327)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 4, + column: "PurchaseDate", + value: new DateTime(2022, 12, 4, 9, 8, 50, 6, DateTimeKind.Local).AddTicks(9333)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 5, + column: "PurchaseDate", + value: new DateTime(2022, 12, 4, 9, 8, 50, 6, DateTimeKind.Local).AddTicks(9338)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 6, + column: "PurchaseDate", + value: new DateTime(2022, 12, 4, 9, 8, 50, 6, DateTimeKind.Local).AddTicks(9344)); + + migrationBuilder.UpdateData( + table: "Invoices", + keyColumn: "Id", + keyValue: 7, + column: "PurchaseDate", + value: new DateTime(2022, 12, 4, 9, 8, 50, 6, DateTimeKind.Local).AddTicks(9357)); + } + } +} diff --git a/GrossesMitaines/GrossesMitainesAPI/Models/ChargeReturnModel.cs b/GrossesMitaines/GrossesMitainesAPI/Models/ChargeReturnModel.cs index b594d91..17f9824 100644 --- a/GrossesMitaines/GrossesMitainesAPI/Models/ChargeReturnModel.cs +++ b/GrossesMitaines/GrossesMitainesAPI/Models/ChargeReturnModel.cs @@ -8,4 +8,5 @@ public class ChargeReturnModel { public string Email { get; set; } public string Phone { get; set; } public int Invoice { get; set; } + public string LastFourDigits { get; set; } } diff --git a/GrossesMitaines/GrossesMitainesAPI/Models/ChargesModel.cs b/GrossesMitaines/GrossesMitainesAPI/Models/ChargesModel.cs index f6dbb7e..23717a5 100644 --- a/GrossesMitaines/GrossesMitainesAPI/Models/ChargesModel.cs +++ b/GrossesMitaines/GrossesMitainesAPI/Models/ChargesModel.cs @@ -11,4 +11,5 @@ public class ChargesModel { public string Name { get; set; } public string Email { get; set; } public string Phone { get; set; } + public string LastFourDigits { get; set; } } diff --git a/GrossesMitaines/GrossesMitainesAPI/Models/SendInvoiceModel.cs b/GrossesMitaines/GrossesMitainesAPI/Models/SendInvoiceModel.cs index aa3cf68..a5c8988 100644 --- a/GrossesMitaines/GrossesMitainesAPI/Models/SendInvoiceModel.cs +++ b/GrossesMitaines/GrossesMitainesAPI/Models/SendInvoiceModel.cs @@ -35,4 +35,5 @@ namespace GrossesMitainesAPI.Models; public string Name { get; set; } public string Email { get; set; } public string Phone { get; set; } + public string LastFourDigits { get; set; } } \ No newline at end of file diff --git a/GrossesMitaines/GrossesMitainesAPI/appsettings.json b/GrossesMitaines/GrossesMitainesAPI/appsettings.json index 0b2724c..b3afa36 100644 --- a/GrossesMitaines/GrossesMitainesAPI/appsettings.json +++ b/GrossesMitaines/GrossesMitainesAPI/appsettings.json @@ -10,7 +10,7 @@ "DefaultConnection": "Server=(localdb)\\mssqllocaldb; Database=GrossesMitainesDB; Trusted_Connection=True; MultipleActiveResultSets=true" }, "StripeTest": { - "PublicKey": "pk_test_", - "SecretKey": "sk_test_" + "PublicKey": "pk_test_51M8mzOEerenEZcQIUmJIrmsaZeeNlOil2G1JcMvvO68w50MJr8rDwUjVO44a8dDhSlsRH4GdzH9rDqtkg4Rtbzco00NqkHdn3H", + "SecretKey": "sk_test_51M8mzOEerenEZcQIyHb9AdeluhDsSy9PaxTeqDq6XUhSRCbbqvReHA2KoFb3a8Ru5PAzMgMlCKmj8UDpLKWzUUmr00rta511y8" } } diff --git a/GrossesMitaines/grosses-mitaines-ui/src/components/PaymentForm.js b/GrossesMitaines/grosses-mitaines-ui/src/components/PaymentForm.js index d339d67..e8e045a 100644 --- a/GrossesMitaines/grosses-mitaines-ui/src/components/PaymentForm.js +++ b/GrossesMitaines/grosses-mitaines-ui/src/components/PaymentForm.js @@ -1,6 +1,11 @@ -import React, { useState } from "react" +import React, { useState, useContext } from "react" import { CardElement, useElements, useStripe } from "@stripe/react-stripe-js" import { Button } from "react-bootstrap" +import Swal from "sweetalert2"; +import withReactContent from "sweetalert2-react-content"; +import { CartContext } from "../components/Cart"; +import { useNavigate } from "react-router-dom"; + const CARD_OPTIONS = { iconStyle: "solid", @@ -24,16 +29,23 @@ const CARD_OPTIONS = { -const PaymentForm = ({ cost }) => { +const PaymentForm = ({ cost, invoice }) => { + const navigate = useNavigate(); - const [success, setSuccess] = useState(false); + const mySwal = withReactContent(Swal); const [cardName, setCardName] = useState(""); + const [cardPhone,setCardPhone] = useState(""); + const [cardEmail,setCardEmail] = useState(""); + const [isLoading, setIsLoading] = useState(false); + const stripe = useStripe(); const elements = useElements(); + const cart = useContext(CartContext); const handleSubmit = async (e) => { e.preventDefault(); - const { error, paymentMethod } = await stripe.createPaymentMethod({ + setIsLoading(true); + const { error } = await stripe.createPaymentMethod({ type: "card", card: elements.getElement(CardElement) }) @@ -44,32 +56,54 @@ const PaymentForm = ({ cost }) => { } if (!error) { - const { id } = paymentMethod; + stripe.createToken(elements.getElement(CardElement), { name: cardName }) + .then((result) => { + if (!result.error) { + invoice.token = result.token.id; + invoice.description = `Payement de ${cost} à GM`; + invoice.amountInCents = cost; + invoice.currencyCode = "CAD"; + invoice.name = cardName; + invoice.email = cardEmail; + invoice.phone = cardPhone; + invoice.lastFourDigits = result.token.card.last4; - const json = JSON.stringify({ amount: cost, stripeId: id }); - - - fetch(`https://localhost:7292/api/Payment`, { - method: 'POST', - credentials: 'include', - mode: 'cors', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: json - }).then((response) => { - if (response.ok) { - console.log("Successful payment"); - setSuccess(true); - } - else { - console.log(response); - } - }).catch((error) => { - console.log("Error: ", error); - }) + const json = JSON.stringify(invoice); + fetch(`https://localhost:7292/api/Invoice`, { + method: 'POST', + credentials: 'include', + mode: 'cors', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: json + }).then((response) => { + if (response.ok) { + mySwal.fire({ + title: 'Commande envoyée avec succès!', + timer: 2000, + icon: "success" + }).then( + () => { + cart.emptyCart(); + navigate('/myInvoices'); + } + ); + } + else { + mySwal.fire({ + title: 'Erreur!', + timer: 2000, + icon: "error" + }).then(()=>{ + setIsLoading(false); + }); + } + }); + } + }); } else { console.log(error.message); @@ -80,24 +114,23 @@ const PaymentForm = ({ cost }) => { return ( <> - {!success ? + {
- setCardName(e.target.value)} /> + setCardName(e.target.value)} /> + setCardPhone(e.target.value)} /> + setCardEmail(e.target.value)} />
- + + { + isLoading &&
Paiement en cours...
+ }
- : -
-

- L'achat s'est déroulé avec succès -

-
} ) diff --git a/GrossesMitaines/grosses-mitaines-ui/src/components/StripeContainer.js b/GrossesMitaines/grosses-mitaines-ui/src/components/StripeContainer.js index c5d2b93..ffec286 100644 --- a/GrossesMitaines/grosses-mitaines-ui/src/components/StripeContainer.js +++ b/GrossesMitaines/grosses-mitaines-ui/src/components/StripeContainer.js @@ -7,10 +7,10 @@ const PUBLIC_KEY = "pk_test_51M8mzOEerenEZcQIUmJIrmsaZeeNlOil2G1JcMvvO68w50MJr8r const stripeTestPromise = loadStripe(PUBLIC_KEY); -const StripeContainer = ({cost}) => { +const StripeContainer = ({cost, invoice}) => { return ( - + ) } diff --git a/GrossesMitaines/grosses-mitaines-ui/src/pages/ReviewInvoice.js b/GrossesMitaines/grosses-mitaines-ui/src/pages/ReviewInvoice.js index c7c79db..d855385 100644 --- a/GrossesMitaines/grosses-mitaines-ui/src/pages/ReviewInvoice.js +++ b/GrossesMitaines/grosses-mitaines-ui/src/pages/ReviewInvoice.js @@ -4,8 +4,6 @@ import ReviewProdList from "../components/ReviewProdList"; import TotalProductsPrice from "../components/TotalProductsPrice"; import { Row, Col, Button } from "react-bootstrap"; import { useNavigate } from "react-router-dom"; -import Swal from "sweetalert2"; -import withReactContent from "sweetalert2-react-content"; import { CartContext } from "../components/Cart"; import StripeContainer from "../components/StripeContainer" @@ -13,7 +11,7 @@ const ReviewInvoice = () => { const navigate = useNavigate(); - const mySwal = withReactContent(Swal); + const cart = useContext(CartContext); @@ -90,41 +88,42 @@ const ReviewInvoice = () => { navigate("/formulaire") } - const handleConfirmer = async () => { - const json = JSON.stringify(thisInvoice); - const response = await fetch(`https://localhost:7292/api/Invoice`, { - method: 'POST', - credentials: 'include', - mode: 'cors', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: json - }) - if (response.ok) { - mySwal.fire({ - title: 'Commande envoyée avec succès!', - timer: 2000, - icon: "success" - }).then( - () => { - cart.emptyCart(); - navigate('/morceaux'); - } - ) - } - else { - console.log("Erreur de creation la commande #" + thisInvoice.id); - mySwal.fire({ - title: 'Erreur!', - timer: 2000, - icon: "error" - }) - } + // const handleConfirmer = async () => { + // const json = JSON.stringify(thisInvoice); - } + // const response = await fetch(`https://localhost:7292/api/Invoice`, { + // method: 'POST', + // credentials: 'include', + // mode: 'cors', + // headers: { + // 'Accept': 'application/json', + // 'Content-Type': 'application/json' + // }, + // body: json + // }) + // if (response.ok) { + // mySwal.fire({ + // title: 'Commande envoyée avec succès!', + // timer: 2000, + // icon: "success" + // }).then( + // () => { + // cart.emptyCart(); + // navigate('/morceaux'); + // } + // ) + // } + // else { + // console.log("Erreur de creation la commande #" + thisInvoice.id); + // mySwal.fire({ + // title: 'Erreur!', + // timer: 2000, + // icon: "error" + // }) + // } + + // } return ( <> @@ -177,21 +176,21 @@ const ReviewInvoice = () => { - - {/* + + {/* */} - - - - + + + + - + ); diff --git a/GrossesMitaines/grosses-mitaines-ui/src/stylesheets/site.css b/GrossesMitaines/grosses-mitaines-ui/src/stylesheets/site.css index 5ecd3f4..687381a 100644 --- a/GrossesMitaines/grosses-mitaines-ui/src/stylesheets/site.css +++ b/GrossesMitaines/grosses-mitaines-ui/src/stylesheets/site.css @@ -39,7 +39,7 @@ a { border-radius: 4px; } -#cardholder-name { +.cardholder-info { background-color: transparent; border:none; color:white;