56 lines
1.9 KiB
C#
56 lines
1.9 KiB
C#
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());
|
|
}
|
|
}
|
|
|