using DigitalData.Core.Abstraction.Application.Repository; using MediatR; using Microsoft.EntityFrameworkCore; using ReC.Domain.Entities; namespace ReC.Application.Endpoints.Commands; public class GetOrCreateCommand : IRequest { public string Uri { get; init; } = null!; } public class GetOrCreateCommandHandler(IRepository repo) : IRequestHandler { public async Task Handle(GetOrCreateCommand request, CancellationToken cancel) { var endpoint = await repo.Where(e => e.Uri == request.Uri).FirstOrDefaultAsync(cancel); if (endpoint is not null) return endpoint; endpoint = new Endpoint { Uri = request.Uri }; await repo.CreateAsync(endpoint, cancel); return endpoint; } }