Controllers – Insert

נשאר לממש את פונקציית post שהיא הכנסה של item חדש.

כאשר אנחנו מבצעים פעולת post יצרנו resource חדש בשרת. כשזה קורה אנחנו רוצים לדעת איך מגיעים אליו ולכן מחזירים את ה-URL של המוצר שהוספנו.

קובץ ProductsController.cs

[HttpPost]
[ProducesResponseType(201, Type = typeof(Product))]
public async Task<ActionResult<Product>> AddNewProduct(Product product) {
    Product product = await _productRepository.AddNewProduct(product);
    return Created("api/products/{product.id}", product);
}

קובץ IProductsRepository.cs

public interface IProductsRepository
{
    Task<List<Product>> GetAllProducts();
    Task<Product?> GetProductById(int id);
    Task DeleteProduct(int id);
    Task<Product?> UpdateProduct(int id, Product product);
    Task<Product> AddNewProduct(Product product);
}

קובץ ProductsRepository.cs

public Task<Product> AddNewProduct(Product product) {
    var newId = this._products.Max(x => x.id) + 1;
    var productToInsert = product with { id = newId };
    _products.Add(productToInsert);
    return Task.FromResult(productToInsert);
}

יש ל-controller סטטוס נוסף של 409 שמשמעותו קונפליקט, למשל מנסים להוסיף מוצר שה-id כבר קיים ב-DB.