diff --git a/CleanArchitecture/CleanArchitecture.API/Controllers/DirectorController.cs b/CleanArchitecture/CleanArchitecture.API/Controllers/DirectorController.cs new file mode 100644 index 0000000..3b05a98 --- /dev/null +++ b/CleanArchitecture/CleanArchitecture.API/Controllers/DirectorController.cs @@ -0,0 +1,28 @@ +using CleanArchitecture.Application.Features.Directors.Commands.CreateDirector; +using MediatR; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace CleanArchitecture.API.Controllers +{ + [Route("api/v1/[controller]")] + [ApiController] + public class DirectorController : ControllerBase + { + private IMediator mediator; + + public DirectorController(IMediator mediator) + { + this.mediator = mediator; + } + + [HttpPost(Name = "CreateDirector")] + [Authorize(Roles ="Administrator")] + [ProducesResponseType(StatusCodes.Status200OK)] + public async Task> Create([FromBody] CreateDirectorCommand createDirectorCommand) + { + var response = await mediator.Send(createDirectorCommand); + return Ok(new { directorId = response }); + } + } +} diff --git a/CleanArchitecture/CleanArchitecture.Application/Features/Directors/Commands/CreateDirector/CreateDirectorCommandHandler.cs b/CleanArchitecture/CleanArchitecture.Application/Features/Directors/Commands/CreateDirector/CreateDirectorCommandHandler.cs index b6d3f0c..5a950dc 100644 --- a/CleanArchitecture/CleanArchitecture.Application/Features/Directors/Commands/CreateDirector/CreateDirectorCommandHandler.cs +++ b/CleanArchitecture/CleanArchitecture.Application/Features/Directors/Commands/CreateDirector/CreateDirectorCommandHandler.cs @@ -22,6 +22,20 @@ namespace CleanArchitecture.Application.Features.Directors.Commands.CreateDirect public Task Handle(CreateDirectorCommand request, CancellationToken cancellationToken) { var directorEntity = mapper.Map(request); + unitOfWork.Repository().AddEntity(directorEntity); + var response = unitOfWork.Complete(); + + if (response.Result > 0) + { + logger.LogInformation($"Director {directorEntity.Id} is successfully created."); + return Task.FromResult(directorEntity.Id); + } + else + { + logger.LogError($"Director {directorEntity.Id} creation failed."); + throw new Exception("Director creation failed."); + } + } } } diff --git a/CleanArchitecture/CleanArchitecture.Data/InfrastructureServiceRegistration.cs b/CleanArchitecture/CleanArchitecture.Data/InfrastructureServiceRegistration.cs index afa138f..8ca81ae 100644 --- a/CleanArchitecture/CleanArchitecture.Data/InfrastructureServiceRegistration.cs +++ b/CleanArchitecture/CleanArchitecture.Data/InfrastructureServiceRegistration.cs @@ -22,6 +22,8 @@ namespace CleanArchitecture.Infrastructure .LogTo(Console.WriteLine, new[] { DbLoggerCategory.Database.Command.Name }, Microsoft.Extensions.Logging.LogLevel.Information) ); + services.AddScoped(); + services.AddScoped(typeof(IAsyncRepository<>), typeof(RepositoryBase<>)); services.AddScoped(); services.AddScoped(); diff --git a/CleanArchitecture/CleanArchitecture.Data/Persistence/UnitOfWork.cs b/CleanArchitecture/CleanArchitecture.Data/Persistence/UnitOfWork.cs index 75a0524..40233d9 100644 --- a/CleanArchitecture/CleanArchitecture.Data/Persistence/UnitOfWork.cs +++ b/CleanArchitecture/CleanArchitecture.Data/Persistence/UnitOfWork.cs @@ -1,5 +1,6 @@ using CleanArchitecture.Application.Contracts.Persistence; using CleanArchitecture.Domain.Common; +using CleanArchitecture.Infrastructure.Repositories; using System.Collections; namespace CleanArchitecture.Infrastructure.Persistence @@ -35,7 +36,7 @@ namespace CleanArchitecture.Infrastructure.Persistence var type = typeof(T).Name; if(!repositories.ContainsKey(type)) { - var repositoryType = typeof(IAsyncRepository<>); + var repositoryType = typeof(RepositoryBase<>); var repositoryInstance = Activator.CreateInstance(repositoryType.MakeGenericType(typeof(T)), context); repositories.Add(type, repositoryInstance); }