diff --git a/.gitea/workflows/pipeline.yml b/.gitea/workflows/pipeline.yml new file mode 100644 index 0000000..1342e35 --- /dev/null +++ b/.gitea/workflows/pipeline.yml @@ -0,0 +1,42 @@ +# Name Ihrer Workflow-Pipeline +name: Build and Push Backend API Docker Image + +# Definiert, wann dieser Workflow ausgeführt werden soll +on: + push: + branches: + - master # Wird ausgelöst bei jedem Push auf den Master-Branch + +# Definition der Jobs, die in diesem Workflow ausgeführt werden +jobs: + build-and-push: + # Der Runner, auf dem der Job ausgeführt wird (eine virtuelle Maschine) + runs-on: ubuntu-latest + + # Schritte, die auf dem Runner ausgeführt werden + steps: + - name: Checkout repository + # Checkt Ihren Code aus dem Repository in den Runner + uses: actions/checkout@v4 + + - name: Login to Gitea Container Registry + # Meldet sich bei Ihrer Gitea Container Registry an + uses: docker/login-action@v3 + with: + registry: gitea.tzbre.dev + username: ${{ github.actor }} # Verwendet den GitHub-Benutzer, der den Push ausgelöst hat + password: ${{ secrets.TOKEN }} # Verwendet ein GitHub Secret für das Passwort/Personal Access Token + + - name: Build and push Backend API Docker image + # Baut das Docker-Image für Ihre API und pusht es in die Registry + uses: docker/build-push-action@v5 + with: + # Der Kontext für den Docker-Build ist das Wurzelverzeichnis des Repositories. + # Das ist wichtig, da das Dockerfile auf Dateien in verschiedenen Unterordnern zugreift (z.B. Webshop.Api.csproj, ShopSolution.sln). + context: . + # Der spezifische Pfad zu Ihrem Dockerfile innerhalb des Kontexts. + file: Webshop.Api/Dockerfile + # Legt fest, dass das Image nach dem Bauen in die Registry gepusht werden soll + push: true + # Definiert die Tags für Ihr Docker-Image in der Registry + tags: gitea.tzbre.dev/admin/shopsolution-backend:latest # WICHTIG: Eindeutiger Name für das Backend-Image \ No newline at end of file diff --git a/Webshop.Api/Controllers/ProductsController.cs b/Webshop.Api/Controllers/ProductsController.cs index c0854ff..25f0cb4 100644 --- a/Webshop.Api/Controllers/ProductsController.cs +++ b/Webshop.Api/Controllers/ProductsController.cs @@ -16,11 +16,19 @@ namespace Webshop.Api.Controllers _productService = productService; } - [HttpGet] + [HttpGet] public async Task>> GetAllProducts() { var products = await _productService.GetAllProductsAsync(); return Ok(products); } + + [HttpPost] + public async Task> CreateProduct([FromBody] ProductDto productDto) + { + var createdProduct = await _productService.CreateProductAsync(productDto); + + return CreatedAtAction(nameof(GetAllProducts), new { id = createdProduct.Id }, createdProduct); + } } } \ No newline at end of file diff --git a/Webshop.Application/Class1.cs b/Webshop.Application/Class1.cs deleted file mode 100644 index e568a2b..0000000 --- a/Webshop.Application/Class1.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Webshop.Application -{ - public class Class1 - { - - } -} diff --git a/Webshop.Application/Services/ProductService.cs b/Webshop.Application/Services/ProductService.cs index 242007f..8a03d2f 100644 --- a/Webshop.Application/Services/ProductService.cs +++ b/Webshop.Application/Services/ProductService.cs @@ -28,5 +28,21 @@ namespace Webshop.Application.Services return productDtos; } + + public async Task CreateProductAsync(ProductDto productDto) + { + var newProduct = new Domain.Entities.Product + { + Name = productDto.Name, + Description = productDto.Description, + Price = productDto.Price, + SKU = productDto.Sku + }; + + await _productRepository.AddProductAsync(newProduct); + + productDto.Id = newProduct.Id; + return productDto; + } } } \ No newline at end of file