Files
minattest/backend/src/MinAttest.Application/Features/Employers/Commands/UpsertEmployerUserCommand.cs
T
Stein Helge Riise ede31fbb7e Initial import
2025-11-17 08:32:46 +01:00

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());
}
}