Initial import
This commit is contained in:
+55
@@ -0,0 +1,55 @@
|
||||
using MediatR;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using MinAttest.Application.Abstractions;
|
||||
using MinAttest.Contracts.Employers;
|
||||
using MinAttest.Domain.Entities;
|
||||
|
||||
namespace MinAttest.Application.Features.Employers.Commands;
|
||||
|
||||
public record UpsertEmployerUserCommand(
|
||||
Guid EmployerId,
|
||||
string ExternalObjectId,
|
||||
string Email,
|
||||
string? Name,
|
||||
string Role
|
||||
) : IRequest<EmployerUserResponse?>;
|
||||
|
||||
public class UpsertEmployerUserCommandHandler(IAppDbContext db)
|
||||
: IRequestHandler<UpsertEmployerUserCommand, EmployerUserResponse?>
|
||||
{
|
||||
public async Task<EmployerUserResponse?> Handle(UpsertEmployerUserCommand request, CancellationToken cancellationToken)
|
||||
{
|
||||
var employer = await db.Employers.FirstOrDefaultAsync(e => e.Id == request.EmployerId, cancellationToken);
|
||||
if (employer is null) return null;
|
||||
|
||||
var roleParsed = Enum.TryParse<EmployerUserRole>(request.Role, ignoreCase: true, out var role)
|
||||
? role : EmployerUserRole.Issuer;
|
||||
|
||||
var user = await db.EmployerUsers.FirstOrDefaultAsync(u => u.ExternalObjectId == request.ExternalObjectId, cancellationToken);
|
||||
if (user is null)
|
||||
{
|
||||
user = new EmployerUser
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
EmployerId = employer.Id,
|
||||
ExternalObjectId = request.ExternalObjectId,
|
||||
Email = request.Email,
|
||||
Name = request.Name,
|
||||
Role = roleParsed
|
||||
};
|
||||
db.EmployerUsers.Add(user);
|
||||
}
|
||||
else
|
||||
{
|
||||
user.EmployerId = employer.Id;
|
||||
user.Email = request.Email;
|
||||
user.Name = request.Name;
|
||||
user.Role = roleParsed;
|
||||
}
|
||||
|
||||
await db.SaveChangesAsync(cancellationToken);
|
||||
|
||||
return new EmployerUserResponse(user.Id, user.EmployerId, user.ExternalObjectId, user.Email, user.Name, user.Role.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user