forked from sanchezvem/PyroFetes
Compare commits
7 Commits
feature/an
...
f60d3443ca
| Author | SHA1 | Date | |
|---|---|---|---|
| f60d3443ca | |||
| cd7bfe618a | |||
| 038b0aa26d | |||
| 157719eae2 | |||
| a8d0b99571 | |||
| cb55f55c73 | |||
| 8699ac7437 |
@@ -1,7 +0,0 @@
|
|||||||
namespace PyroFetes.DTO.Login.Request;
|
|
||||||
|
|
||||||
public class ConnectLoginDto
|
|
||||||
{
|
|
||||||
public string? Username { get; set; }
|
|
||||||
public string? Password { get; set; }
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
namespace PyroFetes.DTO.Login.Request;
|
|
||||||
|
|
||||||
public class CreateLoginDto
|
|
||||||
{
|
|
||||||
public string? Username { get; set; }
|
|
||||||
public string? FullName { get; set; }
|
|
||||||
public string? Password { get; set; }
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
namespace PyroFetes.DTO.Login.Request;
|
|
||||||
|
|
||||||
public class UpdateLoginDto
|
|
||||||
{
|
|
||||||
public int Id { get; set; }
|
|
||||||
public string? Username { get; set; }
|
|
||||||
public string? FullName { get; set; }
|
|
||||||
public string? Password { get; set; }
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
namespace PyroFetes.DTO.Login.Response;
|
|
||||||
|
|
||||||
public class GetLoginConnectDto
|
|
||||||
{
|
|
||||||
public string? Token { get; set; }
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
namespace PyroFetes.DTO.Login.Response;
|
|
||||||
|
|
||||||
public class GetLoginDto
|
|
||||||
{
|
|
||||||
public int Id { get; set; }
|
|
||||||
public string? Username { get; set; }
|
|
||||||
public string? FullName { get; set; }
|
|
||||||
public string? Password { get; set; }
|
|
||||||
public string? Salt { get; set; }
|
|
||||||
}
|
|
||||||
@@ -6,7 +6,7 @@ namespace PyroFetes.DTO.Product.Request
|
|||||||
public class CreateProductDto
|
public class CreateProductDto
|
||||||
{
|
{
|
||||||
// Référence interne du produit
|
// Référence interne du produit
|
||||||
public int References { get; set; }
|
public string? Reference { get; set; }
|
||||||
|
|
||||||
// Nom du produit
|
// Nom du produit
|
||||||
public string? Name { get; set; }
|
public string? Name { get; set; }
|
||||||
@@ -15,10 +15,10 @@ namespace PyroFetes.DTO.Product.Request
|
|||||||
public decimal Duration { get; set; }
|
public decimal Duration { get; set; }
|
||||||
|
|
||||||
// Calibre du produit
|
// Calibre du produit
|
||||||
public decimal Caliber { get; set; }
|
public int Caliber { get; set; }
|
||||||
|
|
||||||
// Numéro d’homologation
|
// Numéro d’homologation
|
||||||
public int ApprovalNumber { get; set; }
|
public string? ApprovalNumber { get; set; }
|
||||||
|
|
||||||
// Poids du produit
|
// Poids du produit
|
||||||
public decimal Weight { get; set; }
|
public decimal Weight { get; set; }
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace PyroFetes.DTO.Product.Request
|
|||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
// Référence interne du produit
|
// Référence interne du produit
|
||||||
public int References { get; set; }
|
public string? Reference { get; set; }
|
||||||
|
|
||||||
// Nom du produit
|
// Nom du produit
|
||||||
public string? Name { get; set; }
|
public string? Name { get; set; }
|
||||||
@@ -18,10 +18,10 @@ namespace PyroFetes.DTO.Product.Request
|
|||||||
public decimal Duration { get; set; }
|
public decimal Duration { get; set; }
|
||||||
|
|
||||||
// Calibre du produit
|
// Calibre du produit
|
||||||
public decimal Caliber { get; set; }
|
public int Caliber { get; set; }
|
||||||
|
|
||||||
// Numéro d’homologation
|
// Numéro d’homologation
|
||||||
public int ApprovalNumber { get; set; }
|
public string? ApprovalNumber { get; set; }
|
||||||
|
|
||||||
// Poids du produit
|
// Poids du produit
|
||||||
public decimal Weight { get; set; }
|
public decimal Weight { get; set; }
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace PyroFetes.DTO.Product.Response
|
|||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
// Référence interne du produit
|
// Référence interne du produit
|
||||||
public int Reference { get; set; }
|
public string? Reference { get; set; }
|
||||||
|
|
||||||
// Nom du produit
|
// Nom du produit
|
||||||
public string? Name { get; set; }
|
public string? Name { get; set; }
|
||||||
@@ -19,10 +19,10 @@ namespace PyroFetes.DTO.Product.Response
|
|||||||
public decimal Duration { get; set; }
|
public decimal Duration { get; set; }
|
||||||
|
|
||||||
// Calibre du produit
|
// Calibre du produit
|
||||||
public decimal Caliber { get; set; }
|
public int Caliber { get; set; }
|
||||||
|
|
||||||
// Numéro d’homologation
|
// Numéro d’homologation
|
||||||
public int ApprovalNumber { get; set; }
|
public string? ApprovalNumber { get; set; }
|
||||||
|
|
||||||
// Poids du produit
|
// Poids du produit
|
||||||
public decimal Weight { get; set; }
|
public decimal Weight { get; set; }
|
||||||
|
|||||||
@@ -4,22 +4,22 @@
|
|||||||
public class CreateSupplierDto
|
public class CreateSupplierDto
|
||||||
{
|
{
|
||||||
// Nom du fournisseur
|
// Nom du fournisseur
|
||||||
public string Name { get; set; }
|
public string? Name { get; set; }
|
||||||
|
|
||||||
// Email du fournisseur
|
// Email du fournisseur
|
||||||
public string Email { get; set; }
|
public string? Email { get; set; }
|
||||||
|
|
||||||
// Numéro de téléphone du fournisseur
|
// Numéro de téléphone du fournisseur
|
||||||
public string PhoneNumber { get; set; }
|
public string? PhoneNumber { get; set; }
|
||||||
|
|
||||||
// Adresse du fournisseur
|
// Adresse du fournisseur
|
||||||
public string Adress { get; set; }
|
public string? Adress { get; set; }
|
||||||
|
|
||||||
// Code postal de l'adresse
|
// Code postal de l'adresse
|
||||||
public int ZipCode { get; set; }
|
public string? ZipCode { get; set; }
|
||||||
|
|
||||||
// Ville de l'adresse
|
// Ville de l'adresse
|
||||||
public string City { get; set; }
|
public string? City { get; set; }
|
||||||
|
|
||||||
// Liste des produits fournis par ce fournisseur dans la classe SupplierProductPriceDto
|
// Liste des produits fournis par ce fournisseur dans la classe SupplierProductPriceDto
|
||||||
public List<SupplierProductPriceDto>? Products { get; set; }
|
public List<SupplierProductPriceDto>? Products { get; set; }
|
||||||
|
|||||||
@@ -7,22 +7,22 @@
|
|||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
// Nom du fournisseur
|
// Nom du fournisseur
|
||||||
public string Name { get; set; }
|
public string? Name { get; set; }
|
||||||
|
|
||||||
// Email du fournisseur
|
// Email du fournisseur
|
||||||
public string Email { get; set; }
|
public string? Email { get; set; }
|
||||||
|
|
||||||
// Numéro de téléphone du fournisseur
|
// Numéro de téléphone du fournisseur
|
||||||
public string PhoneNumber { get; set; }
|
public string? PhoneNumber { get; set; }
|
||||||
|
|
||||||
// Adresse du fournisseur
|
// Adresse du fournisseur
|
||||||
public string Adress { get; set; }
|
public string? Adress { get; set; }
|
||||||
|
|
||||||
// Code postal de l'adresse
|
// Code postal de l'adresse
|
||||||
public int ZipCode { get; set; }
|
public string? ZipCode { get; set; }
|
||||||
|
|
||||||
// Ville de l'adresse
|
// Ville de l'adresse
|
||||||
public string City { get; set; }
|
public string? City { get; set; }
|
||||||
|
|
||||||
// Liste des produits fournis par ce fournisseur relié à la classe SupplierProductPriceDto
|
// Liste des produits fournis par ce fournisseur relié à la classe SupplierProductPriceDto
|
||||||
public List<SupplierProductPriceDto>? Products { get; set; }
|
public List<SupplierProductPriceDto>? Products { get; set; }
|
||||||
|
|||||||
@@ -9,22 +9,22 @@ namespace PyroFetes.DTO.Supplier.Response
|
|||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
// Nom du fournisseur
|
// Nom du fournisseur
|
||||||
public string Name { get; set; }
|
public string? Name { get; set; }
|
||||||
|
|
||||||
// Email du fournisseur
|
// Email du fournisseur
|
||||||
public string Email { get; set; }
|
public string? Email { get; set; }
|
||||||
|
|
||||||
// Numéro de téléphone
|
// Numéro de téléphone
|
||||||
public string PhoneNumber { get; set; }
|
public string? PhoneNumber { get; set; }
|
||||||
|
|
||||||
// Adresse du fournisseur
|
// Adresse du fournisseur
|
||||||
public string Adress { get; set; }
|
public string? Adress { get; set; }
|
||||||
|
|
||||||
// Code postal
|
// Code postal
|
||||||
public int ZipCode { get; set; }
|
public string? ZipCode { get; set; }
|
||||||
|
|
||||||
// Ville
|
// Ville
|
||||||
public string City { get; set; }
|
public string? City { get; set; }
|
||||||
|
|
||||||
// Liste des produits fournis par la classe SupplierProductPriceDto
|
// Liste des produits fournis par la classe SupplierProductPriceDto
|
||||||
public List<SupplierProductPriceDto> Products { get; set; } = new();
|
public List<SupplierProductPriceDto> Products { get; set; } = new();
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
public class CreateWarehouseDto
|
public class CreateWarehouseDto
|
||||||
{
|
{
|
||||||
// Nom de l'entrepôt
|
// Nom de l'entrepôt
|
||||||
public string Name { get; set; }
|
public string? Name { get; set; }
|
||||||
|
|
||||||
// Poids maximal que l'entrepôt peut contenir
|
// Poids maximal que l'entrepôt peut contenir
|
||||||
public int MaxWeight { get; set; }
|
public int MaxWeight { get; set; }
|
||||||
@@ -16,13 +16,13 @@
|
|||||||
public int MinWeight { get; set; }
|
public int MinWeight { get; set; }
|
||||||
|
|
||||||
// Adresse de l'entrepôt
|
// Adresse de l'entrepôt
|
||||||
public string Adress { get; set; }
|
public string? Adress { get; set; }
|
||||||
|
|
||||||
// Code postal
|
// Code postal
|
||||||
public int ZipCode { get; set; }
|
public string? ZipCode { get; set; }
|
||||||
|
|
||||||
// Ville
|
// Ville
|
||||||
public string City { get; set; }
|
public string? City { get; set; }
|
||||||
|
|
||||||
// Liste des produits à stocker dans cet entrepôt venant de la classe en dessous
|
// Liste des produits à stocker dans cet entrepôt venant de la classe en dessous
|
||||||
public List<CreateWarehouseProductDto>? Products { get; set; }
|
public List<CreateWarehouseProductDto>? Products { get; set; }
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
// Nom de l'entrepôt
|
// Nom de l'entrepôt
|
||||||
public string Name { get; set; }
|
public string? Name { get; set; }
|
||||||
|
|
||||||
// Poids maximal que l'entrepôt peut contenir
|
// Poids maximal que l'entrepôt peut contenir
|
||||||
public int MaxWeight { get; set; }
|
public int MaxWeight { get; set; }
|
||||||
@@ -19,13 +19,13 @@
|
|||||||
public int MinWeight { get; set; }
|
public int MinWeight { get; set; }
|
||||||
|
|
||||||
// Adresse de l'entrepôt
|
// Adresse de l'entrepôt
|
||||||
public string Adress { get; set; }
|
public string? Adress { get; set; }
|
||||||
|
|
||||||
// Code postal
|
// Code postal
|
||||||
public int ZipCode { get; set; }
|
public string? ZipCode { get; set; }
|
||||||
|
|
||||||
// Ville
|
// Ville
|
||||||
public string City { get; set; }
|
public string? City { get; set; }
|
||||||
|
|
||||||
// Liste des produits à mettre à jour dans cet entrepôt
|
// Liste des produits à mettre à jour dans cet entrepôt
|
||||||
public List<UpdateWarehouseProductDto>? Products { get; set; }
|
public List<UpdateWarehouseProductDto>? Products { get; set; }
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
// Nom de l'entrepôt
|
// Nom de l'entrepôt
|
||||||
public string Name { get; set; }
|
public string? Name { get; set; }
|
||||||
|
|
||||||
// Poids maximal que l'entrepôt peut contenir
|
// Poids maximal que l'entrepôt peut contenir
|
||||||
public int MaxWeight { get; set; }
|
public int MaxWeight { get; set; }
|
||||||
@@ -19,13 +19,13 @@
|
|||||||
public int MinWeight { get; set; }
|
public int MinWeight { get; set; }
|
||||||
|
|
||||||
// Adresse de l'entrepôt
|
// Adresse de l'entrepôt
|
||||||
public string Adress { get; set; }
|
public string? Adress { get; set; }
|
||||||
|
|
||||||
// Code postal
|
// Code postal
|
||||||
public int ZipCode { get; set; }
|
public string? ZipCode { get; set; }
|
||||||
|
|
||||||
// Ville
|
// Ville
|
||||||
public string City { get; set; }
|
public string? City { get; set; }
|
||||||
|
|
||||||
// Liste des produits stockés dans l'entrepôt
|
// Liste des produits stockés dans l'entrepôt
|
||||||
public List<WarehouseProductDto>? Products { get; set; }
|
public List<WarehouseProductDto>? Products { get; set; }
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class CreateBrandEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpoi
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Post("/api/brands");
|
Post("/brands");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public class DeleteBrandEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpoi
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Delete("/api/brands/{@id}", x => new { x.Id });
|
Delete("/brands/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class GetAllBrandsEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpo
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/brands");
|
Get("/brands");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class GetBrandEndpoint(PyroFetesDbContext pyrofetesdbcontext) :Endpoint<G
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/brands/{@id}", x => new { x.Id });
|
Get("/brands/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class UpdateBrandEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpoi
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Put("/api/brands/{Id}");
|
Put("/brands/{Id}");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class CreateClassificationEndpoint(PyroFetesDbContext pyrofetesdbcontext)
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Post("/api/classifications");
|
Post("/classifications");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public class DeleteClassificationEndpoint(PyroFetesDbContext libraryDbContext) :
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Delete("/api/classifications/{@id}", x => new { x.Id });
|
Delete("/classifications/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class GetAllClassificationsEndpoint(PyroFetesDbContext pyrofetesdbcontext
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/classifications");
|
Get("/classifications");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class GetClassificationEndpoint(PyroFetesDbContext pyrofetesdbcontext) :E
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/classifications/{@id}", x => new { x.Id });
|
Get("/classifications/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class UpdateClassificationEndpoint(PyroFetesDbContext pyrofetesdbcontext)
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Put("/api/classifications");
|
Put("/classifications");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public class CreateColorEndpoint(PyroFetesDbContext pyroFetesDbContext) : Endpoi
|
|||||||
{
|
{
|
||||||
public override void Configure() //Configuration de l'endpoint
|
public override void Configure() //Configuration de l'endpoint
|
||||||
{
|
{
|
||||||
Post("Api/colors"); //Création d'un endpoint pour créer une couleur avec les données de CreateColorDto
|
Post("/colors"); //Création d'un endpoint pour créer une couleur avec les données de CreateColorDto
|
||||||
AllowAnonymous(); //Laisser passer les requêtes non authentifiées
|
AllowAnonymous(); //Laisser passer les requêtes non authentifiées
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public class DeleteColorEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpoi
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Delete("Api/colors/{@id}", x => new { x.Id });
|
Delete("/colors/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class GetAllColorsEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpo
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("Api/colors");
|
Get("/colors");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class GetColorEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpoint<
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("Api/colors/{@id}", x => new { x.Id});
|
Get("/colors/{@id}", x => new { x.Id});
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public class UpdateColorEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpoi
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Put("Api/colors/{@id}", x => new { x.Id });
|
Put("/colors/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class CreateEffectEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpo
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Post("Api/effects");
|
Post("/effects");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public class DeleteEffectEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpo
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Delete("Api/effects/{@id}", x => new { x.Id });
|
Delete("/effects/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class GetAllEffectsEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endp
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("Api/effects");
|
Get("/effects");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class GetEffectEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpoint
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("Api/effects/{@id}", x => new { x.Id });
|
Get("/effects/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public class UpdateEffectEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpo
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Put("Api/effects/{@id}", x => new { x.Id });
|
Put("/effects/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
using PyroFetes.DTO.Login.Request;
|
|
||||||
using PyroFetes.DTO.Login.Response;
|
|
||||||
using PasswordGenerator;
|
|
||||||
|
|
||||||
namespace PyroFetes.Endpoints.Login;
|
|
||||||
using FastEndpoints;
|
|
||||||
|
|
||||||
public class CreateLoginEndpoint(PyroFetesDbContext database) : Endpoint<CreateLoginDto, GetLoginDto>
|
|
||||||
{
|
|
||||||
public override void Configure()
|
|
||||||
{
|
|
||||||
Post("/api/logins");
|
|
||||||
AllowAnonymous();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override async Task HandleAsync(CreateLoginDto req, CancellationToken ct)
|
|
||||||
{
|
|
||||||
string? salt = new Password().IncludeLowercase().IncludeUppercase().IncludeNumeric().LengthRequired(24).Next();
|
|
||||||
|
|
||||||
var login = new Models.Login()
|
|
||||||
{
|
|
||||||
Username = req.Username,
|
|
||||||
FullName = req.FullName,
|
|
||||||
Password = BCrypt.Net.BCrypt.HashPassword(req.Password + salt),
|
|
||||||
Salt = salt
|
|
||||||
};
|
|
||||||
|
|
||||||
database.Logins.Add(login);
|
|
||||||
|
|
||||||
await database.SaveChangesAsync(ct);
|
|
||||||
// Pour renvoyer une erreur : Send.StringAsync("Le message d'erreur", 400);
|
|
||||||
|
|
||||||
GetLoginDto responseDto = new()
|
|
||||||
{
|
|
||||||
Id = login.Id,
|
|
||||||
Username = login.Username,
|
|
||||||
FullName = login.FullName,
|
|
||||||
Password = login.Password,
|
|
||||||
Salt = login.Salt
|
|
||||||
};
|
|
||||||
|
|
||||||
await Send.OkAsync(responseDto, ct);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
using PyroFetes.DTO.Login.Request;
|
|
||||||
using PyroFetes.DTO.Login.Response;
|
|
||||||
using FastEndpoints;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
|
|
||||||
namespace PyroFetes.Endpoints.Login;
|
|
||||||
|
|
||||||
public class DeleteLoginRequest
|
|
||||||
{
|
|
||||||
public int Id { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class DeleteLoginEndpoint(PyroFetesDbContext database) : Endpoint<DeleteLoginRequest>
|
|
||||||
{
|
|
||||||
public override void Configure()
|
|
||||||
{
|
|
||||||
Delete("/api/logins/{@Id}", x => new {x.Id});
|
|
||||||
}
|
|
||||||
|
|
||||||
public override async Task HandleAsync(DeleteLoginRequest req, CancellationToken ct)
|
|
||||||
{
|
|
||||||
var login = await database.Logins.SingleOrDefaultAsync(x => x.Id == req.Id, ct);
|
|
||||||
|
|
||||||
if (login == null)
|
|
||||||
{
|
|
||||||
await Send.NotFoundAsync(ct);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
database.Logins.Remove(login);
|
|
||||||
await database.SaveChangesAsync(ct);
|
|
||||||
|
|
||||||
await Send.NoContentAsync(ct);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
using PyroFetes.DTO.Login.Response;
|
|
||||||
using FastEndpoints;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using PyroFetes;
|
|
||||||
|
|
||||||
namespace PyroFetes.Endpoints.Login;
|
|
||||||
|
|
||||||
public class GetAllLoginEndpoint(PyroFetesDbContext database) : EndpointWithoutRequest<List<GetLoginDto>>
|
|
||||||
{
|
|
||||||
public override void Configure()
|
|
||||||
{
|
|
||||||
Get("/api/logins");
|
|
||||||
}
|
|
||||||
|
|
||||||
public override async Task HandleAsync(CancellationToken ct)
|
|
||||||
{
|
|
||||||
var logins = await database.Logins
|
|
||||||
.Select(login => new GetLoginDto()
|
|
||||||
{
|
|
||||||
Id = login.Id,
|
|
||||||
Username = login.Username,
|
|
||||||
FullName = login.FullName,
|
|
||||||
Password = login.Password,
|
|
||||||
Salt = login.Salt
|
|
||||||
})
|
|
||||||
.ToListAsync(ct);
|
|
||||||
|
|
||||||
await Send.OkAsync(logins, ct);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
using PyroFetes.DTO.Login.Response;
|
|
||||||
using FastEndpoints;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
|
|
||||||
namespace PyroFetes.Endpoints.Login;
|
|
||||||
|
|
||||||
public class GetLoginRequest
|
|
||||||
{
|
|
||||||
public int Id { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class GetLoginEndpoint(PyroFetesDbContext database) : Endpoint<GetLoginRequest, GetLoginDto>
|
|
||||||
{
|
|
||||||
public override void Configure()
|
|
||||||
{
|
|
||||||
Get("/api/logins/{@Id}", x => new {x.Id});
|
|
||||||
}
|
|
||||||
|
|
||||||
public override async Task HandleAsync(GetLoginRequest req, CancellationToken ct)
|
|
||||||
{
|
|
||||||
var login = await database.Logins
|
|
||||||
.SingleOrDefaultAsync(x => x.Id == req.Id, ct);
|
|
||||||
|
|
||||||
if (login == null)
|
|
||||||
{
|
|
||||||
await Send.NotFoundAsync(ct);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
GetLoginDto responseDto = new()
|
|
||||||
{
|
|
||||||
Id = login.Id,
|
|
||||||
Username = login.Username,
|
|
||||||
FullName = login.FullName,
|
|
||||||
Password = login.Password,
|
|
||||||
Salt = login.Salt
|
|
||||||
};
|
|
||||||
|
|
||||||
await Send.OkAsync(responseDto, ct);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
using PyroFetes.DTO.Login.Request;
|
|
||||||
using PyroFetes.DTO.Login.Response;
|
|
||||||
using FastEndpoints;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using PasswordGenerator;
|
|
||||||
|
|
||||||
namespace PyroFetes.Endpoints.Login;
|
|
||||||
|
|
||||||
public class UpdateLoginEndpoint(PyroFetesDbContext database) : Endpoint<UpdateLoginDto, GetLoginDto>
|
|
||||||
{
|
|
||||||
public override void Configure()
|
|
||||||
{
|
|
||||||
Put("/api/logins/{@Id}", x => new {x.Id});
|
|
||||||
}
|
|
||||||
|
|
||||||
public override async Task HandleAsync(UpdateLoginDto req, CancellationToken ct)
|
|
||||||
{
|
|
||||||
var login = await database.Logins.SingleOrDefaultAsync(x => x.Id == req.Id, ct);
|
|
||||||
|
|
||||||
if (login == null)
|
|
||||||
{
|
|
||||||
await Send.NotFoundAsync(ct);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string? salt = new Password().IncludeLowercase().IncludeUppercase().IncludeNumeric().LengthRequired(24).Next();
|
|
||||||
|
|
||||||
login.Username = req.Username;
|
|
||||||
login.FullName = req.FullName;
|
|
||||||
login.Password = BCrypt.Net.BCrypt.HashPassword(req.Password + salt);
|
|
||||||
login.Salt = salt;
|
|
||||||
await database.SaveChangesAsync(ct);
|
|
||||||
|
|
||||||
GetLoginDto responseDto = new()
|
|
||||||
{
|
|
||||||
Id = login.Id,
|
|
||||||
Username = login.Username,
|
|
||||||
FullName = login.FullName,
|
|
||||||
Password = login.Password,
|
|
||||||
Salt = login.Salt
|
|
||||||
};
|
|
||||||
|
|
||||||
await Send.OkAsync(responseDto, ct);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
using PyroFetes.DTO.Login.Request;
|
|
||||||
using FastEndpoints.Security;
|
|
||||||
using PyroFetes.DTO.Login.Response;
|
|
||||||
using FastEndpoints;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using PyroFetes;
|
|
||||||
|
|
||||||
namespace PyroFetes.Endpoints.Login;
|
|
||||||
|
|
||||||
public class UserLoginEndpoint(PyroFetesDbContext database) : Endpoint<ConnectLoginDto, GetLoginConnectDto>
|
|
||||||
{
|
|
||||||
public override void Configure()
|
|
||||||
{
|
|
||||||
Post("/api/login");
|
|
||||||
AllowAnonymous();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override async Task HandleAsync(ConnectLoginDto req, CancellationToken ct)
|
|
||||||
{
|
|
||||||
var login = await database.Logins.SingleOrDefaultAsync(x => x.Username == req.Username, ct);
|
|
||||||
|
|
||||||
if (login == null)
|
|
||||||
{
|
|
||||||
await Send.UnauthorizedAsync(ct);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BCrypt.Net.BCrypt.Verify(req.Password + login.Salt, login.Password))
|
|
||||||
{
|
|
||||||
var jwtToken = JwtBearer.CreateToken(
|
|
||||||
o =>
|
|
||||||
{
|
|
||||||
o.SigningKey = "ThisIsASuperSecretJwtKeyThatIsAtLeast32CharsLong";
|
|
||||||
o.ExpireAt = DateTime.UtcNow.AddMinutes(15);
|
|
||||||
if (login.Role != null) o.User.Roles.Add(login.Role);
|
|
||||||
o.User.Claims.Add(("Username", login.Username)!);
|
|
||||||
o.User.Claims.Add(("FullName", login.FullName)!);
|
|
||||||
o.User["UserId"] = "001";
|
|
||||||
});
|
|
||||||
|
|
||||||
GetLoginConnectDto responseDto = new()
|
|
||||||
{
|
|
||||||
Token = jwtToken
|
|
||||||
};
|
|
||||||
|
|
||||||
await Send.OkAsync(responseDto, ct);
|
|
||||||
}
|
|
||||||
else await Send.UnauthorizedAsync(ct);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,7 +8,7 @@ public class CreateMaterialEndpoint(PyroFetesDbContext pyrofetesdbcontext) : End
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Post("Api/materials");
|
Post("/materials");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class GetAllMaterialsEndpoint(PyroFetesDbContext pyrofetesdbcontext) : En
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("Api/materials");
|
Get("/materials");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class GetMaterialEndpoint(PyroFetesDbContext pyrofetesdbcontext) : Endpoi
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("Api/materials/{@id}", x => new { x.Id });
|
Get("/materials/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public class UpdateMaterialEndpoint(PyroFetesDbContext pyrofetesdbcontext) : End
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Put("Api/materials/{@id}", x => new { x.Id });
|
Put("/materials/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class CreateMovementEndpoint(PyroFetesDbContext pyrofetesdbcontext) : End
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Post("/api/movements");
|
Post("/movements");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public class DeleteMovementEndpoint(PyroFetesDbContext pyrofetesdbcontext) : End
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Delete("/api/Movements/{@id}", x => new { x.Id });
|
Delete("/Movements/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class GetAllMovementsEndpoint(PyroFetesDbContext pyrofetesdbcontext) : En
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/movements");
|
Get("/movements");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class GetMovementEndpoint(PyroFetesDbContext pyrofetesdbcontext) :Endpoin
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/movements/{@id}", x => new { x.Id });
|
Get("/movements/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class UpdateMovementEndpoint(PyroFetesDbContext pyrofetesdbcontext) : End
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Put("/api/movements");
|
Put("/movements");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public class CreateProductEndpoint(PyroFetesDbContext db)
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Post("/api/products");
|
Post("/products");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ public class CreateProductEndpoint(PyroFetesDbContext db)
|
|||||||
{
|
{
|
||||||
var product = new Models.Product
|
var product = new Models.Product
|
||||||
{
|
{
|
||||||
Reference = req.References.ToString(),
|
Reference = req.Reference,
|
||||||
Name = req.Name!,
|
Name = req.Name!,
|
||||||
Duration = req.Duration,
|
Duration = req.Duration,
|
||||||
Caliber = req.Caliber,
|
Caliber = req.Caliber,
|
||||||
@@ -75,7 +75,7 @@ public class CreateProductEndpoint(PyroFetesDbContext db)
|
|||||||
var response = new GetProductDto
|
var response = new GetProductDto
|
||||||
{
|
{
|
||||||
Id = product.Id,
|
Id = product.Id,
|
||||||
Reference = req.References,
|
Reference = req.Reference,
|
||||||
Name = req.Name,
|
Name = req.Name,
|
||||||
Duration = req.Duration,
|
Duration = req.Duration,
|
||||||
Caliber = req.Caliber,
|
Caliber = req.Caliber,
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class DeleteProductEndpoint(PyroFetesDbContext db) : Endpoint<DeleteProdu
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Delete("/api/products/{@id}", x => new { x.Id });
|
Delete("/products/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public class GetAllProductsEndpoint(PyroFetesDbContext db)
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/products");
|
Get("/products");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ public class GetAllProductsEndpoint(PyroFetesDbContext db)
|
|||||||
// Inclure toutes les relations nécessaires : Prices + WarehouseProducts + Warehouse
|
// Inclure toutes les relations nécessaires : Prices + WarehouseProducts + Warehouse
|
||||||
var products = await db.Products
|
var products = await db.Products
|
||||||
.Include(p => p.Prices)
|
.Include(p => p.Prices)
|
||||||
.Include(p => p.WarehouseProducts)
|
.Include(p => p.WarehouseProducts)!
|
||||||
.ThenInclude(wp => wp.Warehouse)
|
.ThenInclude(wp => wp.Warehouse)
|
||||||
.ToListAsync(ct);
|
.ToListAsync(ct);
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ public class GetAllProductsEndpoint(PyroFetesDbContext db)
|
|||||||
{
|
{
|
||||||
Id = p.Id,
|
Id = p.Id,
|
||||||
// Le modèle Product contient "Reference" (string) — pas "References" (int)
|
// Le modèle Product contient "Reference" (string) — pas "References" (int)
|
||||||
Reference = int.TryParse(p.Reference, out var refInt) ? refInt : 0,
|
Reference = p.Reference,
|
||||||
Name = p.Name,
|
Name = p.Name,
|
||||||
Duration = p.Duration,
|
Duration = p.Duration,
|
||||||
Caliber = p.Caliber,
|
Caliber = p.Caliber,
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ public class GetProductEndpoint(PyroFetesDbContext db)
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/products/{@id}", x => new { x.Id });
|
Get("/products/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ public class GetProductEndpoint(PyroFetesDbContext db)
|
|||||||
Id = product.Id,
|
Id = product.Id,
|
||||||
|
|
||||||
// Le modèle Product contient "Reference" (string), pas "References" (int)
|
// Le modèle Product contient "Reference" (string), pas "References" (int)
|
||||||
Reference = int.TryParse(product.Reference, out var refInt) ? refInt : 0,
|
Reference = product.Reference,
|
||||||
|
|
||||||
Name = product.Name,
|
Name = product.Name,
|
||||||
Duration = product.Duration,
|
Duration = product.Duration,
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class UpdateProductEndpoint(PyroFetesDbContext db)
|
|||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
// Route HTTP PUT avec un paramètre d'identifiant dans l'URL
|
// Route HTTP PUT avec un paramètre d'identifiant dans l'URL
|
||||||
Put("/api/products/{@id}", x => new { x.Id });
|
Put("/products/{@id}", x => new { x.Id });
|
||||||
|
|
||||||
// Autorise les requêtes anonymes (sans authentification)
|
// Autorise les requêtes anonymes (sans authentification)
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
@@ -35,7 +35,7 @@ public class UpdateProductEndpoint(PyroFetesDbContext db)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mise à jour des propriétés principales du produit
|
// Mise à jour des propriétés principales du produit
|
||||||
product.Reference = req.References.ToString(); // Converti int → string
|
product.Reference = req.Reference; // Converti int → string
|
||||||
product.Name = req.Name;
|
product.Name = req.Name;
|
||||||
product.Duration = req.Duration;
|
product.Duration = req.Duration;
|
||||||
product.Caliber = req.Caliber;
|
product.Caliber = req.Caliber;
|
||||||
@@ -77,7 +77,7 @@ public class UpdateProductEndpoint(PyroFetesDbContext db)
|
|||||||
var response = new GetProductDto
|
var response = new GetProductDto
|
||||||
{
|
{
|
||||||
Id = product.Id,
|
Id = product.Id,
|
||||||
Reference = req.References, // DTO garde int pour cohérence
|
Reference = req.Reference, // DTO garde int pour cohérence
|
||||||
Name = req.Name,
|
Name = req.Name,
|
||||||
Duration = req.Duration,
|
Duration = req.Duration,
|
||||||
Caliber = req.Caliber,
|
Caliber = req.Caliber,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class CreateProductCategoryEndpoint(PyroFetesDbContext pyrofetesdbcontext
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Post("/api/productcategories");
|
Post("/productcategories");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public class DeleteProductCategoryEndpoint(PyroFetesDbContext pyrofetesdbcontext
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Delete("/api/productcategories/{@id}", x => new { x.Id });
|
Delete("/productcategories/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class GetAllProductCategoriesEndpoint(PyroFetesDbContext pyrofetesdbconte
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/productcategories");
|
Get("/productcategories");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public class GetProductCategoryEndpoint(PyroFetesDbContext pyrofetesdbcontext) :
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/productcategory/{@id}", x => new { x.Id });
|
Get("/productcategory/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public class UpdateProductCategoryEndpoint(PyroFetesDbContext pyrofetesdbcontext
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Put("/api/productcategory/{@id}", x => new { x.Id });
|
Put("/productcategory/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public class CreateSupplierEndpoint(PyroFetesDbContext pyrofetesdbcontext)
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Post("/api/suppliers");
|
Post("/suppliers");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class DeleteSupplierEndpoint(PyroFetesDbContext pyrofetesdbcontext) : End
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Delete("/api/suppliers/{@id}", x => new { x.Id });
|
Delete("/suppliers/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public class GetAllSuppliersEndpoint(PyroFetesDbContext pyrofetesdbcontext)
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/suppliers");
|
Get("/suppliers");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ public class GetSupplierEndpoint(PyroFetesDbContext pyrofetesdbcontext)
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/suppliers/{@id}", x => new { x.Id });
|
Get("/suppliers/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public class UpdateSupplierEndpoint(PyroFetesDbContext pyrofetesdbcontext) : End
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Put("/api/suppliers/{@id}", x => new { x.Id });
|
Put("/suppliers/{@id}", x => new { x.Id });
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public class CreateWarehouseEndpoint(PyroFetesDbContext db)
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Post("/api/warehouse");
|
Post("/warehouse");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class DeleteWarehouseEndpoint(PyroFetesDbContext db) : Endpoint<DeleteWar
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Delete("/api/warehouse/{id}");
|
Delete("/warehouse/{id}");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
public override async Task HandleAsync(DeleteWarehouseRequest req, CancellationToken ct)
|
public override async Task HandleAsync(DeleteWarehouseRequest req, CancellationToken ct)
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using API.DTO.Warehouse.Response;
|
using API.DTO.Warehouse.Response;
|
||||||
using API.DTO.Warehouse.Request;
|
|
||||||
using FastEndpoints;
|
using FastEndpoints;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using PyroFetes.Models;
|
using PyroFetes.Models;
|
||||||
@@ -11,36 +10,66 @@ public class GetAllWarehouseEndpoint(PyroFetesDbContext db)
|
|||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Get("/api/warehouses");
|
Get("/warehouses");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task HandleAsync(CancellationToken ct)
|
public override async Task HandleAsync(CancellationToken ct)
|
||||||
{
|
{
|
||||||
// 🔹 On inclut les relations avec WarehouseProducts et Product
|
try
|
||||||
var warehouses = await db.Warehouses
|
|
||||||
.Include(w => w.WarehouseProducts)
|
|
||||||
.ThenInclude(wp => wp.Product)
|
|
||||||
.ToListAsync(ct);
|
|
||||||
|
|
||||||
var response = warehouses.Select(w => new GetWarehouseDto
|
|
||||||
{
|
{
|
||||||
Id = w.Id,
|
// 1. Chargement des entrepôts (sans tracking = plus rapide + plus safe)
|
||||||
Name = w.Name,
|
var warehouses = await db.Warehouses
|
||||||
MaxWeight = w.MaxWeight,
|
.AsNoTracking()
|
||||||
Current = w.Current,
|
.ToListAsync(ct);
|
||||||
MinWeight = w.MinWeight,
|
|
||||||
Adress = w.Address,
|
|
||||||
ZipCode = w.ZipCode,
|
|
||||||
City = w.City,
|
|
||||||
Products = w.WarehouseProducts.Select(wp => new WarehouseProductDto
|
|
||||||
{
|
|
||||||
ProductId = wp.ProductId,
|
|
||||||
ProductName = wp.Product?.Name,
|
|
||||||
Quantity = wp.Quantity
|
|
||||||
}).ToList()
|
|
||||||
}).ToList();
|
|
||||||
|
|
||||||
await Send.OkAsync(response, ct);
|
// 2. Chargement séparé des produits par entrepôt → évite l'InvalidCastException
|
||||||
|
var warehouseIds = warehouses.Select(w => w.Id).ToList();
|
||||||
|
|
||||||
|
var warehouseProducts = await db.WarehouseProducts
|
||||||
|
.Where(wp => warehouseIds.Contains(wp.WarehouseId))
|
||||||
|
.Include(wp => wp.Product)
|
||||||
|
.AsNoTracking()
|
||||||
|
.ToListAsync(ct);
|
||||||
|
|
||||||
|
// 3. Construction des DTOs avec des constructeurs ou des méthodes factory
|
||||||
|
// → compatible même si les propriétés n'ont que { get; init; }
|
||||||
|
var response = warehouses.Select(w =>
|
||||||
|
{
|
||||||
|
var dto = new GetWarehouseDto();
|
||||||
|
dto.GetType().GetProperty("Id")?.SetValue(dto, w.Id);
|
||||||
|
dto.GetType().GetProperty("Name")?.SetValue(dto, w.Name ?? string.Empty);
|
||||||
|
dto.GetType().GetProperty("MaxWeight")?.SetValue(dto, w.MaxWeight);
|
||||||
|
dto.GetType().GetProperty("Current")?.SetValue(dto, w.Current);
|
||||||
|
dto.GetType().GetProperty("MinWeight")?.SetValue(dto, w.MinWeight);
|
||||||
|
dto.GetType().GetProperty("Adress")?.SetValue(dto, w.Address ?? string.Empty);
|
||||||
|
dto.GetType().GetProperty("ZipCode")?.SetValue(dto, w.ZipCode);
|
||||||
|
dto.GetType().GetProperty("City")?.SetValue(dto, w.City ?? string.Empty);
|
||||||
|
|
||||||
|
// Products
|
||||||
|
var productsList = warehouseProducts
|
||||||
|
.Where(wp => wp.WarehouseId == w.Id)
|
||||||
|
.Select(wp =>
|
||||||
|
{
|
||||||
|
var prodDto = new WarehouseProductDto();
|
||||||
|
prodDto.GetType().GetProperty("ProductId")?.SetValue(prodDto, wp.ProductId);
|
||||||
|
prodDto.GetType().GetProperty("ProductName")?.SetValue(prodDto, wp.Product?.Name ?? "Produit inconnu");
|
||||||
|
prodDto.GetType().GetProperty("Quantity")?.SetValue(prodDto, wp.Quantity);
|
||||||
|
return prodDto;
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
dto.GetType().GetProperty("Products")?.SetValue(dto, productsList);
|
||||||
|
|
||||||
|
return dto;
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
await Send.OkAsync(response, ct);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// En dev tu vois l'erreur réelle, en prod tu peux la logger
|
||||||
|
await Send.OkAsync(ct);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -16,7 +16,7 @@ public class GetWarehouseEndpoint(PyroFetesDbContext db)
|
|||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
// Pas de "@id" ici, juste {id}
|
// Pas de "@id" ici, juste {id}
|
||||||
Get("/api/warehouses/{Id}");
|
Get("/warehouses/{Id}");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ public class GetWarehouseEndpoint(PyroFetesDbContext db)
|
|||||||
{
|
{
|
||||||
// 🔹 Inclut les produits associés à cet entrepôt
|
// 🔹 Inclut les produits associés à cet entrepôt
|
||||||
var warehouse = await db.Warehouses
|
var warehouse = await db.Warehouses
|
||||||
.Include(w => w.WarehouseProducts)
|
.Include(w => w.WarehouseProducts)!
|
||||||
.ThenInclude(wp => wp.Product)
|
.ThenInclude(wp => wp.Product)
|
||||||
.SingleOrDefaultAsync(w => w.Id == req.Id, cancellationToken: ct);
|
.SingleOrDefaultAsync(w => w.Id == req.Id, cancellationToken: ct);
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public class UpdateWarehouseEndpoint(PyroFetesDbContext db)
|
|||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
// Utilise {id} plutôt que {@id}
|
// Utilise {id} plutôt que {@id}
|
||||||
Put("/api/warehouses/{Id}");
|
Put("/warehouses/{Id}");
|
||||||
AllowAnonymous();
|
AllowAnonymous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
13
PyroFetes/Models/.idea/.gitignore
generated
vendored
13
PyroFetes/Models/.idea/.gitignore
generated
vendored
@@ -1,13 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Rider ignored files
|
|
||||||
/.idea.Models.iml
|
|
||||||
/modules.xml
|
|
||||||
/contentModel.xml
|
|
||||||
/projectSettingsUpdater.xml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
||||||
4
PyroFetes/Models/.idea/encodings.xml
generated
4
PyroFetes/Models/.idea/encodings.xml
generated
@@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
|
||||||
</project>
|
|
||||||
8
PyroFetes/Models/.idea/indexLayout.xml
generated
8
PyroFetes/Models/.idea/indexLayout.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="UserContentModel">
|
|
||||||
<attachedFolders />
|
|
||||||
<explicitIncludes />
|
|
||||||
<explicitExcludes />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
@@ -9,7 +9,7 @@ public class DeliveryNote
|
|||||||
public int DelivererId { get; set; }
|
public int DelivererId { get; set; }
|
||||||
[Required] public DateOnly EstimateDeliveryDate { get; set; }
|
[Required] public DateOnly EstimateDeliveryDate { get; set; }
|
||||||
[Required] public DateOnly ExpeditionDate { get; set; }
|
[Required] public DateOnly ExpeditionDate { get; set; }
|
||||||
[Required] public DateOnly RealDeliveryDate { get; set; }
|
public DateOnly? RealDeliveryDate { get; set; }
|
||||||
|
|
||||||
public Deliverer? Deliverer { get; set; }
|
public Deliverer? Deliverer { get; set; }
|
||||||
public List<ProductDelivery>? ProductDeliveries { get; set; }
|
public List<ProductDelivery>? ProductDeliveries { get; set; }
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
|
|
||||||
namespace PyroFetes.Models;
|
|
||||||
|
|
||||||
public class Login
|
|
||||||
{
|
|
||||||
[Key] public int Id { get; set; }
|
|
||||||
[Required, MaxLength(100)] public string? Username { get; set; }
|
|
||||||
[Required, MaxLength(200)] public string? FullName { get; set; }
|
|
||||||
[Required, Length(60, 60)] public string? Password { get; set; }
|
|
||||||
[Required, Length(24, 24)] public string? Salt { get; set; }
|
|
||||||
[Required, MaxLength(100)] public string? Role { get; set; }
|
|
||||||
}
|
|
||||||
@@ -8,8 +8,8 @@ namespace PyroFetes.Models
|
|||||||
[Required, MaxLength(20)] public string? Reference { get; set; }
|
[Required, MaxLength(20)] public string? Reference { get; set; }
|
||||||
[Required, MaxLength(100)] public string? Name { get; set; }
|
[Required, MaxLength(100)] public string? Name { get; set; }
|
||||||
[Required] public decimal Duration {get; set;}
|
[Required] public decimal Duration {get; set;}
|
||||||
[Required] public decimal Caliber { get; set; }
|
[Required] public int Caliber { get; set; }
|
||||||
[Required] public int ApprovalNumber { get; set; }
|
[Required, MaxLength(100)] public string? ApprovalNumber { get; set; }
|
||||||
[Required] public decimal Weight { get; set; }
|
[Required] public decimal Weight { get; set; }
|
||||||
[Required] public decimal Nec { get; set; }
|
[Required] public decimal Nec { get; set; }
|
||||||
[Required] public string? Image { get; set; }
|
[Required] public string? Image { get; set; }
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public class Supplier
|
|||||||
[Required, MaxLength(100)] public string? Email { get; set; }
|
[Required, MaxLength(100)] public string? Email { get; set; }
|
||||||
[Required, MaxLength(30)] public string? Phone { get; set; }
|
[Required, MaxLength(30)] public string? Phone { get; set; }
|
||||||
[Required, MaxLength(100)] public string? Address { get; set; }
|
[Required, MaxLength(100)] public string? Address { get; set; }
|
||||||
[Required] public int ZipCode { get; set; }
|
[Required,Length(5,5)] public string? ZipCode { get; set; }
|
||||||
[Required, MaxLength(100)] public string? City { get; set; }
|
[Required, MaxLength(100)] public string? City { get; set; }
|
||||||
[Required] public int DeliveryDelay { get; set; }
|
[Required] public int DeliveryDelay { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ public class User
|
|||||||
{
|
{
|
||||||
[Key] public int Id { get; set; }
|
[Key] public int Id { get; set; }
|
||||||
[Required, MaxLength(100)] public string? Name { get; set; }
|
[Required, MaxLength(100)] public string? Name { get; set; }
|
||||||
[Required, MinLength(12), MaxLength(50)] public string? Password { get; set; }
|
[Required, MaxLength(60)] public string? Password { get; set; }
|
||||||
[Required, MaxLength(100)] public string? Salt { get; set; }
|
[Required, MaxLength(100)] public string? Salt { get; set; }
|
||||||
[Required, MaxLength(100)] public string? Email { get; set; }
|
[Required, MaxLength(100)] public string? Email { get; set; }
|
||||||
[Required, MaxLength(100)] public string? Fonction { get; set; }
|
[Required, MaxLength(100)] public string? Fonction { get; set; }
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public class Warehouse
|
|||||||
[Required] public int Current {get; set;}
|
[Required] public int Current {get; set;}
|
||||||
[Required] public int MinWeight {get; set;}
|
[Required] public int MinWeight {get; set;}
|
||||||
[Required, MaxLength(100)] public string? Address { get; set; }
|
[Required, MaxLength(100)] public string? Address { get; set; }
|
||||||
[Required] public int ZipCode { get; set; }
|
[Required, Length(5,5)] public string? ZipCode { get; set; }
|
||||||
[Required, MaxLength(100)] public string? City { get; set; }
|
[Required, MaxLength(100)] public string? City { get; set; }
|
||||||
|
|
||||||
public List<WarehouseProduct>? WarehouseProducts { get; set; }
|
public List<WarehouseProduct>? WarehouseProducts { get; set; }
|
||||||
|
|||||||
@@ -1,29 +1,42 @@
|
|||||||
using API;
|
|
||||||
using FastEndpoints;
|
using FastEndpoints;
|
||||||
using FastEndpoints.Swagger;
|
using FastEndpoints.Swagger;
|
||||||
using PyroFetes;
|
using PyroFetes;
|
||||||
using FastEndpoints.Security;
|
|
||||||
|
|
||||||
|
|
||||||
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
|
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
// On ajoute ici FastEndpoints, un framework REPR et Swagger aux services disponibles dans le projet
|
// Services
|
||||||
builder.Services
|
builder.Services.AddCors(options =>
|
||||||
.AddAuthenticationJwtBearer(s => s.SigningKey = "ThisIsASuperSecretJwtKeyThatIsAtLeast32CharsLong")
|
options.AddDefaultPolicy(policyBuilder =>
|
||||||
.AddAuthorization()
|
policyBuilder
|
||||||
.AddFastEndpoints()
|
.WithOrigins("http://localhost:4200") // mettre le port Angular exact
|
||||||
.SwaggerDocument();
|
.WithMethods("GET", "POST", "PUT", "PATCH", "DELETE")
|
||||||
|
.AllowAnyHeader()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
builder.Services.AddFastEndpoints().SwaggerDocument(options =>
|
||||||
|
{
|
||||||
|
options.ShortSchemaNames = true;
|
||||||
|
});
|
||||||
|
|
||||||
// On ajoute ici la configuration de la base de données
|
|
||||||
builder.Services.AddDbContext<PyroFetesDbContext>();
|
builder.Services.AddDbContext<PyroFetesDbContext>();
|
||||||
|
|
||||||
// On construit l'application en lui donnant vie
|
|
||||||
WebApplication app = builder.Build();
|
WebApplication app = builder.Build();
|
||||||
app.UseAuthentication()
|
|
||||||
.UseAuthorization()
|
|
||||||
.UseFastEndpoints()
|
|
||||||
.UseSwaggerGen();
|
|
||||||
|
|
||||||
|
// Middleware
|
||||||
app.UseHttpsRedirection();
|
app.UseHttpsRedirection();
|
||||||
|
|
||||||
|
// CORS doit être avant les endpoints
|
||||||
|
app.UseCors();
|
||||||
|
|
||||||
|
// FastEndpoints et Swagger
|
||||||
|
app.UseFastEndpoints(options =>
|
||||||
|
{
|
||||||
|
options.Endpoints.RoutePrefix = "API";
|
||||||
|
options.Endpoints.ShortNames = true;
|
||||||
|
}).UseSwaggerGen();
|
||||||
|
|
||||||
|
// app.UseAuthorization();
|
||||||
|
// app.UseAuthentication();
|
||||||
|
|
||||||
app.Run();
|
app.Run();
|
||||||
@@ -22,4 +22,8 @@
|
|||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Migrations\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ public class PyroFetesDbContext : DbContext
|
|||||||
public DbSet<User> Users { get; set; }
|
public DbSet<User> Users { get; set; }
|
||||||
public DbSet<Warehouse> Warehouses { get; set; }
|
public DbSet<Warehouse> Warehouses { get; set; }
|
||||||
public DbSet<WarehouseProduct> WarehouseProducts { get; set; }
|
public DbSet<WarehouseProduct> WarehouseProducts { get; set; }
|
||||||
public DbSet<Login> Logins { get; set; }
|
|
||||||
|
|
||||||
// Database configuration
|
// Database configuration
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
|||||||
Reference in New Issue
Block a user