< Summary - Syki

Information
Class: Syki.Back.Emails.EmailsService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Emails/EmailsService.cs
Tag: 56_26538939494
Line coverage
0%
Covered lines: 0
Uncovered lines: 35
Coverable lines: 35
Total lines: 62
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%210%
.ctor(...)100%210%
SendResetPasswordEmail()100%210%
SendFirstAccessMagicLinkEmail()100%210%
LoadTemplate(...)100%210%

File(s)

/home/runner/work/syki/syki/Back/Emails/EmailsService.cs

#LineLine coverage
 1using System.Reflection;
 2using System.Collections.Concurrent;
 3
 4namespace Syki.Back.Emails;
 5
 6public class EmailsService : IEmailsService
 7{
 8    private readonly HttpClient _client;
 9    private readonly EmailSettings _settings;
 010    private static readonly ConcurrentDictionary<string, string> Templates = new();
 11
 012    public EmailsService(EmailSettings settings)
 13    {
 014        _settings = settings;
 015        _client = new HttpClient { BaseAddress = new Uri(_settings.ApiUrl) };
 016        _client.DefaultRequestHeaders.Add("api-key", _settings.ApiKey);
 017    }
 18
 19    public async Task SendResetPasswordEmail(string to, string token)
 20    {
 021        var link = $"{_settings.FrontUrl}/reset-password?token={token}";
 22
 023        var body = new BrevoEmailMessage(
 024            sender: "suporte@syki.com",
 025            to: to,
 026            subject: "Syki - Redefinição de senha",
 027            content: LoadTemplate("ResetPassword.html", link)
 028        );
 29
 030        await _client.PostAsJsonAsync("", body);
 031    }
 32
 33    public async Task SendFirstAccessMagicLinkEmail(string to, string token)
 34    {
 035        var link = $"{_settings.FrontUrl}/magic-link?token={token}";
 36
 037        var body = new BrevoEmailMessage(
 038            sender: "suporte@syki.com",
 039            to: to,
 040            subject: "Syki - Acesse sua conta",
 041            content: LoadTemplate("FirstAccessMagicLink.html", link)
 042        );
 43
 044        await _client.PostAsJsonAsync("", body);
 045    }
 46
 47    private static string LoadTemplate(string name, string link)
 48    {
 049        var raw = Templates.GetOrAdd(name, static n =>
 050        {
 051            var assembly = Assembly.GetExecutingAssembly();
 052            var resourcePath = assembly.GetManifestResourceNames().Single(str => str.EndsWith(n));
 053
 054            using var stream = assembly.GetManifestResourceStream(resourcePath)!;
 055            using var reader = new StreamReader(stream);
 056
 057            return reader.ReadToEnd();
 058        });
 59
 060        return raw.Replace("{{link}}", link);
 61    }
 62}