From 7ce0e7a83fcde7e9bf7c969de6a3d75750521f2f Mon Sep 17 00:00:00 2001 From: MarcEricMartel <74071476+MarcEricMartel@users.noreply.github.com> Date: Sat, 8 Oct 2022 10:22:12 -0700 Subject: [PATCH] =?UTF-8?q?D=C3=A9but=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/InventoryController.cs | 49 +++++++++++++++++++ .../Controllers/WeatherForecastController.cs | 32 ------------ .../Data/InventoryContext.cs | 32 ++++++++++++ .../GrossesMitainesAPI.csproj | 14 +++++- .../GrossesMitainesAPI/Models/Product.cs | 15 ++++++ .../GrossesMitainesAPI/WeatherForecast.cs | 12 ----- .../GrossesMitainesAPI/appsettings.json | 5 +- 7 files changed, 112 insertions(+), 47 deletions(-) create mode 100644 GrossesMitaines/GrossesMitainesAPI/Controllers/InventoryController.cs delete mode 100644 GrossesMitaines/GrossesMitainesAPI/Controllers/WeatherForecastController.cs create mode 100644 GrossesMitaines/GrossesMitainesAPI/Data/InventoryContext.cs create mode 100644 GrossesMitaines/GrossesMitainesAPI/Models/Product.cs delete mode 100644 GrossesMitaines/GrossesMitainesAPI/WeatherForecast.cs diff --git a/GrossesMitaines/GrossesMitainesAPI/Controllers/InventoryController.cs b/GrossesMitaines/GrossesMitainesAPI/Controllers/InventoryController.cs new file mode 100644 index 0000000..a6a212b --- /dev/null +++ b/GrossesMitaines/GrossesMitainesAPI/Controllers/InventoryController.cs @@ -0,0 +1,49 @@ +using Microsoft.AspNetCore.Mvc; +using GrossesMitainesAPI.Models; +using System.Linq; +using GrossesMitainesAPI.Data; +using Microsoft.Extensions.Logging; + +namespace GrossesMitainesAPI.Controllers; + +[ApiController] +[Route("[controller]")] +public class InventoryController : Controller { + private readonly ILogger _logger; + private readonly InventoryContext _context; + + public InventoryController(ILogger logger, InventoryContext context) { + _logger = logger; + _context = context; + } + + [HttpGet(Name ="Inventory")] + public IEnumerable Get(int? last) { + if (!last.HasValue) + last = 1; + return _context.Products.Where(x => x.Id >= last && x.Id < last + 5).ToList(); + } + + [HttpGet(Name = "Product")] + public Product Get(int id) { + Product prod; + try { + prod = _context.Products.Where(x => x.Id == id).First(); + } catch (Exception e) { + _logger.LogError(8, e.Message); + prod = new Product(); + } + return prod; + } + + [HttpPost(Name = "Product")] + public void Post(Product prod) { + prod.Id = _context.Products.Count(); + try { + _context.Products.Add(prod); + } catch (Exception e){ + _logger.LogError(8, e.Message); + } + } +} + diff --git a/GrossesMitaines/GrossesMitainesAPI/Controllers/WeatherForecastController.cs b/GrossesMitaines/GrossesMitainesAPI/Controllers/WeatherForecastController.cs deleted file mode 100644 index 1313aec..0000000 --- a/GrossesMitaines/GrossesMitainesAPI/Controllers/WeatherForecastController.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace GrossesMitainesAPI.Controllers; - -[ApiController] -[Route("[controller]")] -public class WeatherForecastController : ControllerBase -{ - private static readonly string[] Summaries = new[] - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } - - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = DateTime.Now.AddDays(index), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }) - .ToArray(); - } -} diff --git a/GrossesMitaines/GrossesMitainesAPI/Data/InventoryContext.cs b/GrossesMitaines/GrossesMitainesAPI/Data/InventoryContext.cs new file mode 100644 index 0000000..e665868 --- /dev/null +++ b/GrossesMitaines/GrossesMitainesAPI/Data/InventoryContext.cs @@ -0,0 +1,32 @@ +using Microsoft.EntityFrameworkCore; +using GrossesMitainesAPI.Models; + +namespace GrossesMitainesAPI.Data; + +public class InventoryContext : DbContext { + public DbSet Products { get; set; } + public InventoryContext(DbContextOptions options) : base(options) { } + + protected override void OnModelCreating(ModelBuilder modelBuilder) { + base.OnModelCreating(modelBuilder); + + // Pour partir la BD. + modelBuilder.Entity().HasData(new Product { + Id = 1, + Title = $"", + Description = $"", + Price = 0.00M, + ImageData = $"" + }); + + } + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { + var configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json") + .Build(); + + var connectionString = configuration.GetConnectionString("DefaultConnection"); + optionsBuilder.UseSqlServer(connectionString); + } +} \ No newline at end of file diff --git a/GrossesMitaines/GrossesMitainesAPI/GrossesMitainesAPI.csproj b/GrossesMitaines/GrossesMitainesAPI/GrossesMitainesAPI.csproj index 60bf9ea..0aa0a40 100644 --- a/GrossesMitaines/GrossesMitainesAPI/GrossesMitainesAPI.csproj +++ b/GrossesMitaines/GrossesMitainesAPI/GrossesMitainesAPI.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -7,7 +7,17 @@ - + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/GrossesMitaines/GrossesMitainesAPI/Models/Product.cs b/GrossesMitaines/GrossesMitainesAPI/Models/Product.cs new file mode 100644 index 0000000..ef4b22f --- /dev/null +++ b/GrossesMitaines/GrossesMitainesAPI/Models/Product.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations; + +namespace GrossesMitainesAPI.Models; + +public class Product { + [Key] + public int Id { get; set; } + [Required, MaxLength(255)] + public string Title { get; set; } = ""; + [Required] + public string Description { get; set; } = ""; + [Range(0, (double)decimal.MaxValue)] // Range qui prend pas les decimals! + public decimal Price { get; set; } = 0; + public string? ImageData { get; set; } // Base64 en string pour le html. +} \ No newline at end of file diff --git a/GrossesMitaines/GrossesMitainesAPI/WeatherForecast.cs b/GrossesMitaines/GrossesMitainesAPI/WeatherForecast.cs deleted file mode 100644 index 1093e16..0000000 --- a/GrossesMitaines/GrossesMitainesAPI/WeatherForecast.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace GrossesMitainesAPI; - -public class WeatherForecast -{ - public DateTime Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } -} diff --git a/GrossesMitaines/GrossesMitainesAPI/appsettings.json b/GrossesMitaines/GrossesMitainesAPI/appsettings.json index 10f68b8..de785b1 100644 --- a/GrossesMitaines/GrossesMitainesAPI/appsettings.json +++ b/GrossesMitaines/GrossesMitainesAPI/appsettings.json @@ -5,5 +5,8 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", + "ConnectionStrings": { + "DefaultConnection": "Server=(localdb)\\mssqllocaldb; Database=GrosseMitainesDB; Trusted_Connection=True; MultipleActiveResultSets=true" + } }