diff --git a/AB-API/AB.WEB.csproj b/AB-API/AB.WEB.csproj
index 13d8260..387fc6d 100644
--- a/AB-API/AB.WEB.csproj
+++ b/AB-API/AB.WEB.csproj
@@ -12,7 +12,7 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/AB-API/Program.cs b/AB-API/Program.cs
index 26edc72..aea83c9 100644
--- a/AB-API/Program.cs
+++ b/AB-API/Program.cs
@@ -5,12 +5,15 @@ using AB.Services;
using AB.Services.Abstractions;
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;
+using System.Text.Json.Serialization;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
-builder.Services.AddControllers().AddApplicationPart(typeof(AB.API.AssemblyReference).Assembly);
+builder.Services.AddControllers().AddApplicationPart(typeof(AB.API.AssemblyReference).Assembly)
+ .AddJsonOptions(options => options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));
+
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c => c.SwaggerDoc("v1", new OpenApiInfo { Title = "AB-API", Version = "v1", Description = "An Api for the AB-Application" }));
diff --git a/AB.API/Controllers/BusinessPartner/SupplierController.cs b/AB.API/Controllers/BusinessPartner/SupplierController.cs
index b0abe21..0977013 100644
--- a/AB.API/Controllers/BusinessPartner/SupplierController.cs
+++ b/AB.API/Controllers/BusinessPartner/SupplierController.cs
@@ -28,9 +28,9 @@ public class SupplierController : ControllerBase
}
[HttpPost]
- public async Task CreateSupplier([FromBody] SupplierForCreationDto supplierForCreation)
+ public async Task CreateSupplier([FromBody] SupplierForCreationDto supplierForCreation, CancellationToken cancellationToken)
{
- var supplierDto = await _supplierService.CreateAsync(supplierForCreation);
+ var supplierDto = await _supplierService.CreateAsync(supplierForCreation, cancellationToken);
return CreatedAtAction(nameof(CreateSupplier), new { id = supplierDto.Id }, supplierDto);
}
diff --git a/AB.Contracts/ContactPersonDto.cs b/AB.Contracts/ContactPersonDto.cs
new file mode 100644
index 0000000..43ebc61
--- /dev/null
+++ b/AB.Contracts/ContactPersonDto.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AB.Contracts;
+
+public class ContactPersonDto
+{
+
+
+
+ public string Name { get; set; }
+
+ public string Salutation { get; set; }
+
+ public string PhoneNumer { get; set; }
+
+ public string Email { get; set; }
+
+}
+
diff --git a/AB.Contracts/CustomerDto.cs b/AB.Contracts/CustomerDto.cs
index b73c023..0846bf6 100644
--- a/AB.Contracts/CustomerDto.cs
+++ b/AB.Contracts/CustomerDto.cs
@@ -16,5 +16,4 @@ public class CustomerDto
public string Iban { get; set; }
public string PhoneNumber { get; set; }
-
}
diff --git a/AB.Contracts/PreferredCommunicationType.cs b/AB.Contracts/PreferredCommunicationType.cs
new file mode 100644
index 0000000..bfbe611
--- /dev/null
+++ b/AB.Contracts/PreferredCommunicationType.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AB.Contracts
+{
+ public enum PreferredCommunicationType
+ {
+ [EnumMember(Value = "Email")]
+ Email,
+
+ [EnumMember(Value = "Postal")]
+ Postal,
+
+ [EnumMember(Value = "Phone")]
+ Phone,
+
+ [EnumMember(Value = "Phone")]
+ Fax
+ }
+}
diff --git a/AB.Contracts/SupplierForCreationDto.cs b/AB.Contracts/SupplierForCreationDto.cs
index 04c7b74..fd7a7aa 100644
--- a/AB.Contracts/SupplierForCreationDto.cs
+++ b/AB.Contracts/SupplierForCreationDto.cs
@@ -1,11 +1,27 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.Runtime.Serialization;
namespace AB.Contracts;
public class SupplierForCreationDto
{
+
+ public string Salutation { get; set; }
+
+ public string Name1 { get; set; }
+
+ public string Name2 { get; set; }
+
+ public string Email { get; set; }
+
+ public string PhoneNumber { get; set; }
+
+ public string TaxId { get; set; }
+
+ [DataMember(Name = "PreferredCommunication", EmitDefaultValue = true)]
+ public PreferredCommunicationType PreferredCommunication { get; set; }
+
+ public IEnumerable ContactPersons { get; set; }
+
+
+
}
diff --git a/AB.Domain/Repositories/ICustomerRepository.cs b/AB.Domain/Repositories/ICustomerRepository.cs
index 5365510..62f9d6d 100644
--- a/AB.Domain/Repositories/ICustomerRepository.cs
+++ b/AB.Domain/Repositories/ICustomerRepository.cs
@@ -10,7 +10,7 @@ namespace AB.Domain.Repositories;
public interface ICustomerRepository
{
public Task> GetAllAsync(CancellationToken cancellationToken);
- Task GetByIdAsync(Guid customerId, CancellationToken cancellationToken);
- void Insert(Customer customer);
- void Remove(Customer customer);
+ public Task GetByIdAsync(Guid customerId, CancellationToken cancellationToken);
+ public void Insert(Customer customer);
+ public void Remove(Customer customer);
}
diff --git a/AB.Domain/Repositories/ISupplierRepository.cs b/AB.Domain/Repositories/ISupplierRepository.cs
index 7cd292a..7d3d5d2 100644
--- a/AB.Domain/Repositories/ISupplierRepository.cs
+++ b/AB.Domain/Repositories/ISupplierRepository.cs
@@ -1,11 +1,11 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using AB.Domain.Entities;
namespace AB.Domain.Repositories;
-public class ISupplierRepository
+public interface ISupplierRepository
{
+ public Task> GetAllAsync(CancellationToken cancellationToken);
+ public Task GetByIdAsync(Guid supplierId, CancellationToken cancellationToken);
+ public void Insert(Supplier supplier);
+ public void Remove(Supplier supplier);
}
diff --git a/AB.Persistence/RepoDbContext.cs b/AB.Persistence/RepoDbContext.cs
index 28a886c..ab8df82 100644
--- a/AB.Persistence/RepoDbContext.cs
+++ b/AB.Persistence/RepoDbContext.cs
@@ -1,10 +1,5 @@
using AB.Domain.Entities;
using Microsoft.EntityFrameworkCore;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace AB.Persistence;
@@ -12,7 +7,7 @@ public sealed class RepoDbContext : DbContext
{
public RepoDbContext(DbContextOptions options)
- : base (options)
+ : base(options)
{
}
diff --git a/AB.Persistence/Repos/SupplierRepository.cs b/AB.Persistence/Repos/SupplierRepository.cs
index 04d4a11..41c14c1 100644
--- a/AB.Persistence/Repos/SupplierRepository.cs
+++ b/AB.Persistence/Repos/SupplierRepository.cs
@@ -1,4 +1,7 @@
-using System;
+using AB.Domain.Entities;
+using AB.Domain.Repositories;
+using Microsoft.EntityFrameworkCore;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -6,9 +9,33 @@ using System.Threading.Tasks;
namespace AB.Persistence.Repos;
-public class SupplierRepository
+public class SupplierRepository : ISupplierRepository
{
+ private readonly RepoDbContext _dbContext;
+ public SupplierRepository(RepoDbContext dbContext)
+ {
+ _dbContext = dbContext;
+ }
+ public async Task> GetAllAsync(CancellationToken cancellationToken)
+ {
+ return await _dbContext.Suppliers.ToListAsync(cancellationToken);
+ }
+ public async Task GetByIdAsync(Guid supplierId, CancellationToken cancellationToken)
+ {
+ return await _dbContext.Suppliers.FirstOrDefaultAsync(x => x.SupplierId == supplierId, cancellationToken);
+ }
+
+ public void Insert(Supplier supplier)
+ {
+ _dbContext.Add(supplier);
+ }
+
+ public void Remove(Supplier supplier)
+ {
+
+ _dbContext.Suppliers.Remove(supplier);
+ }
}
diff --git a/AB.Services.Abstractions/ISupplierService.cs b/AB.Services.Abstractions/ISupplierService.cs
index e00decf..ba106d9 100644
--- a/AB.Services.Abstractions/ISupplierService.cs
+++ b/AB.Services.Abstractions/ISupplierService.cs
@@ -4,8 +4,8 @@ namespace AB.Services.Abstractions;
public interface ISupplierService
{
- Task CreateAsync(SupplierForCreationDto supplierForCreation);
- Task DeleteAsync(Guid supplierId, CancellationToken cancellationToken);
- Task> GetAllAsync(CancellationToken cancellationToken);
- Task GetSupplierByIdAsync(Guid supplierId, CancellationToken cancellationToken);
+ public Task CreateAsync(SupplierForCreationDto supplierForCreation, CancellationToken cancellationToken);
+ public Task DeleteAsync(Guid supplierId, CancellationToken cancellationToken);
+ public Task> GetAllAsync(CancellationToken cancellationToken);
+ public Task GetSupplierByIdAsync(Guid supplierId, CancellationToken cancellationToken);
}
diff --git a/AB.Services/CustomerService.cs b/AB.Services/CustomerService.cs
index 8bb7e68..7bc45c0 100644
--- a/AB.Services/CustomerService.cs
+++ b/AB.Services/CustomerService.cs
@@ -21,8 +21,6 @@ public class CustomerService : ICustomerService
public async Task CreateAsync(CustomerForCreationDto customerForCreation, CancellationToken cancellationToken = default)
{
-
-
var customer = new Customer
{
Salutation = customerForCreation.Salutaion,
@@ -46,7 +44,7 @@ public class CustomerService : ICustomerService
{
var customer = await _customerRepository.GetByIdAsync(customerId, cancellationToken);
- if (customer == null)
+ if (customer is null)
{
throw new BusinessPartnerNotFoundException(customerId);
}
@@ -122,7 +120,7 @@ public class CustomerService : ICustomerService
public static void SetIfContains(T value, Customer customer, string propertyName)
{
- if (value is not null)
+ if (value is not null && !string.IsNullOrWhiteSpace(propertyName))
{
customer.GetType().GetProperty(propertyName).SetValue(customer, value);
diff --git a/AB.Services/SupplierService.cs b/AB.Services/SupplierService.cs
new file mode 100644
index 0000000..faaf70b
--- /dev/null
+++ b/AB.Services/SupplierService.cs
@@ -0,0 +1,87 @@
+using AB.Contracts;
+using AB.Domain.Entities;
+using AB.Domain.Exceptions;
+using AB.Domain.Repositories;
+using AB.Services.Abstractions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AB.Services
+{
+ public class SupplierService : ISupplierService
+ {
+
+ private readonly ISupplierRepository _supplierRepository;
+
+ private readonly IUnitOfWork _unitOfWork;
+
+ public SupplierService(ISupplierRepository supplierRepository, IUnitOfWork unitOfWork)
+ {
+ _supplierRepository = supplierRepository;
+ _unitOfWork = unitOfWork;
+ }
+
+ public async Task CreateAsync(SupplierForCreationDto supplierForCreation, CancellationToken cancellationToken)
+ {
+ var supplier = new Supplier
+ {
+
+ };
+
+ _supplierRepository.Insert(supplier);
+
+ await _unitOfWork.SaveChangesAsync(cancellationToken);
+
+ var supplierDto = ConvertToSupplierDto(supplier);
+
+ return supplierDto;
+ }
+
+ public async Task DeleteAsync(Guid supplierId, CancellationToken cancellationToken)
+ {
+ var supplier = await _supplierRepository.GetByIdAsync(supplierId, cancellationToken);
+
+ if (supplier is null)
+ {
+ throw new BusinessPartnerNotFoundException(supplierId);
+ }
+
+ _supplierRepository.Remove(supplier);
+
+ await _unitOfWork.SaveChangesAsync(cancellationToken);
+ }
+
+ public async Task> GetAllAsync(CancellationToken cancellationToken)
+ {
+ var supplierList = await _supplierRepository.GetAllAsync(cancellationToken);
+
+ var supplierDtoList = supplierList.Select(supplier =>
+ {
+ return ConvertToSupplierDto(supplier);
+ });
+
+ return supplierDtoList;
+ }
+
+ public async Task GetSupplierByIdAsync(Guid supplierId, CancellationToken cancellationToken)
+ {
+ var supplier = await _supplierRepository.GetByIdAsync(supplierId, cancellationToken);
+
+ var supplierDto = ConvertToSupplierDto(supplier);
+
+ return supplierDto;
+ }
+
+ private SupplierDto ConvertToSupplierDto(Supplier supplier)
+ {
+ var supplierDto = new SupplierDto
+ {
+ Id = supplier.SupplierId,
+ };
+ return supplierDto;
+ }
+ }
+}