נשאר לממש את פונקציית 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.