diff --git a/Src/VTEX.API/Controllers/ProductController.cs b/Src/VTEX.API/Controllers/ProductController.cs new file mode 100644 index 000000000..fcfb18cca --- /dev/null +++ b/Src/VTEX.API/Controllers/ProductController.cs @@ -0,0 +1,32 @@ +using Microsoft.AspNetCore.Mvc; +using System.ComponentModel.DataAnnotations; + + +namespace VTEX.API.Controllers +{ + [ApiController] + [Route("api/[controller]")] + public class ProductController : ControllerBase + { + [HttpPost] + public IActionResult CreateProduct([FromBody] Product product) + { + // Lógica para criar um novo produto + return Ok(); + } + + [Required] + [StringLength(100, MinimumLength = 3)] + // Outros métodos para atualizar e gerenciar produtos + [Required] + [Range(0.01, 10000.00)] + } +} + +// Classe de modelo de produto +public class Product +{ + public string Name { get; set; } + public decimal Price { get; set; } + // Outros campos de produto +} diff --git a/Src/VTEX.API/Middleware/AuthenticationMiddleware.cs b/Src/VTEX.API/Middleware/AuthenticationMiddleware.cs new file mode 100644 index 000000000..69558e766 --- /dev/null +++ b/Src/VTEX.API/Middleware/AuthenticationMiddleware.cs @@ -0,0 +1,21 @@ +using Microsoft.AspNetCore.Http; +using System.Threading.Tasks; + +namespace VTEX.API.Middleware +{ + public class AuthenticationMiddleware + { + private readonly RequestDelegate _next; + + public AuthenticationMiddleware(RequestDelegate next) + { + _next = next; + } + + public async Task InvokeAsync(HttpContext context) + { + // Lógica para verificar o token de autenticação + await _next(context); + } + } +} diff --git a/Src/VTEX.API/Startup.cs b/Src/VTEX.API/Startup.cs new file mode 100644 index 000000000..6520b9a7a --- /dev/null +++ b/Src/VTEX.API/Startup.cs @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.OpenApi.Models; + +namespace VTEX.API +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(); + services.AddSwaggerGen(c => + { + c.SwaggerDoc("v1", new OpenApiInfo { Title = "VTEX API", Version = "v1" }); + }); + } + + public void Configure(IApplicationBuilder app) + { + app.UseSwagger(); + app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "VTEX API v1")); + app.UseRouting(); + app.UseEndpoints(endpoints => endpoints.MapControllers()); + } + } +} diff --git a/Tests/VTEX.Tests/Controllers/ProductControllerTest.cs b/Tests/VTEX.Tests/Controllers/ProductControllerTest.cs new file mode 100644 index 000000000..12b115844 --- /dev/null +++ b/Tests/VTEX.Tests/Controllers/ProductControllerTest.cs @@ -0,0 +1,23 @@ +using Microsoft.AspNetCore.Mvc; +using VTEX.API.Controllers; +using Xunit; + +namespace VTEX.Tests.Controllers +{ + public class ProductControllerTest + { + [Fact] + public void CreateProduct_ReturnsOkResult() + { + // Arrange + var controller = new ProductController(); + var product = new Product { Name = "Test Product", Price = 10.0m }; + + // Act + var result = controller.CreateProduct(product); + + // Assert + Assert.IsType(result); + } + } +}