Changes
Build and Push Docker Images / build (push) Failing after 28s

This commit is contained in:
2026-05-06 17:45:05 +03:00
parent 64b0219038
commit b154fe51c3
15 changed files with 50 additions and 110 deletions
@@ -1,6 +0,0 @@
namespace Api.Services.Contracts;
public interface IEmailService
{
Task SendMatchAsync(string? explicitTo, string subject, string body, CancellationToken ct);
}
+20 -23
View File
@@ -16,7 +16,6 @@ public sealed class CvMatcherService : ICvMatcherService
private readonly IJobTextExtractor _jobTextExtractor;
private readonly IMatcherAiClient _ai;
private readonly IMatcherRepository _repository;
private readonly IEmailService _email;
private readonly MatcherSettings _settings;
public CvMatcherService(
@@ -24,14 +23,12 @@ public sealed class CvMatcherService : ICvMatcherService
IJobTextExtractor jobTextExtractor,
IMatcherAiClient ai,
IMatcherRepository repository,
IEmailService email,
IOptions<MatcherSettings> options)
{
_rag = rag;
_jobTextExtractor = jobTextExtractor;
_ai = ai;
_repository = repository;
_email = email;
_settings = options.Value;
}
@@ -138,11 +135,11 @@ public sealed class CvMatcherService : ICvMatcherService
result.Cached = false;
await _repository.SaveMatchAsync(cv.Id, job.Id, result, ct);
await _email.SendMatchAsync(
email,
$"MyAi.ro CV Match: {result.Score}% - {job.Title}",
BuildEmailBody(cv, job, result),
ct);
//await _email.SendMatchAsync(
// email,
// $"MyAi.ro CV Match: {result.Score}% - {job.Title}",
// BuildEmailBody(cv, job, result),
// ct);
return result;
}
@@ -181,24 +178,24 @@ public sealed class CvMatcherService : ICvMatcherService
private static string Limit(string value, int max) => value.Length <= max ? value : value[..max];
private static string BuildEmailBody(RagDocumentDetails cv, RagDocumentDetails job, JobMatchResponse result) => $"""
CV Matcher result
//private static string BuildEmailBody(RagDocumentDetails cv, RagDocumentDetails job, JobMatchResponse result) => $"""
// CV Matcher result
CV: {cv.Title}
Job: {job.Title}
Job URL: {job.SourceUrl ?? "N/A"}
Score: {result.Score}%
// CV: {cv.Title}
// Job: {job.Title}
// Job URL: {job.SourceUrl ?? "N/A"}
// Score: {result.Score}%
Summary:
{result.Summary}
// Summary:
// {result.Summary}
Strengths:
- {string.Join("\n- ", result.Strengths)}
// Strengths:
// - {string.Join("\n- ", result.Strengths)}
Gaps:
- {string.Join("\n- ", result.Gaps)}
// Gaps:
// - {string.Join("\n- ", result.Gaps)}
Recommendations:
- {string.Join("\n- ", result.Recommendations)}
""";
// Recommendations:
// - {string.Join("\n- ", result.Recommendations)}
// """;
}
-46
View File
@@ -1,46 +0,0 @@
using CvMatcher.Models.Settings;
using Api.Services.Contracts;
using MailKit.Net.Smtp;
using MailKit.Security;
using Microsoft.Extensions.Options;
using MimeKit;
namespace Api.Services;
public sealed class EmailService : IEmailService
{
private readonly SmtpSettings _settings;
private readonly ILogger<EmailService> _logger;
public EmailService(IOptions<SmtpSettings> options, ILogger<EmailService> logger)
{
_settings = options.Value;
_logger = logger;
}
public async Task SendMatchAsync(string? explicitTo, string subject, string body, CancellationToken ct)
{
var to = !string.IsNullOrWhiteSpace(explicitTo) ? explicitTo : _settings.ToEmail;
if (string.IsNullOrWhiteSpace(_settings.Host) || string.IsNullOrWhiteSpace(to))
{
_logger.LogInformation("SMTP is not configured. Skipping CV matcher email.");
return;
}
var message = new MimeMessage();
message.From.Add(MailboxAddress.Parse(_settings.FromEmail));
message.To.Add(MailboxAddress.Parse(to));
message.Subject = subject;
message.Body = new TextPart("plain") { Text = body };
using var client = new SmtpClient();
var secureSocket = _settings.UseStartTls ? SecureSocketOptions.StartTls : SecureSocketOptions.Auto;
await client.ConnectAsync(_settings.Host, _settings.Port, secureSocket, ct);
if (!string.IsNullOrWhiteSpace(_settings.Username))
{
await client.AuthenticateAsync(_settings.Username, _settings.Password, ct);
}
await client.SendAsync(message, ct);
await client.DisconnectAsync(true, ct);
}
}