From b9401ba4bb8985e800064517c0c2b2c9e41c199f Mon Sep 17 00:00:00 2001 From: eduardo Date: Mon, 4 Sep 2023 16:42:28 -0300 Subject: [PATCH] feat: add ReportDeadlineNotificationFunction --- .../Notice/IReportDeadlineNotification.cs | 11 + .../Notice/ReportDeadlineNotification.cs | 61 ++ .../UseCases/Project/GenerateCertificate.cs | 1 - .../Repositories/IProjectRepository.cs | 9 + .../Interfaces/Services/IEmailService.cs | 1 + src/Infrastructure/IoC/ApplicationDI.cs | 1 + .../Repositories/ProjectRepository.cs | 24 + .../Services/Email/EmailService.cs | 48 +- .../Email/Templates/ConfirmEmail.html | 5 +- .../Templates/Imgs/icon-gpic-original.png | Bin 0 -> 12905 bytes .../Templates/Imgs/icon-gpic-original.svg | 150 +++++ .../Email/Templates/Imgs/icon-gpic-white.png | Bin 0 -> 7121 bytes .../Email/Templates/Imgs/icon-gpic-white.svg | 98 ++++ .../Templates/Imgs/logo-gpic-original.png | Bin 0 -> 40433 bytes .../Templates/Imgs/logo-gpic-original.svg | 533 ++++++++++++++++++ .../Email/Templates/Imgs/logo-gpic-white.png | Bin 0 -> 20492 bytes .../Email/Templates/Imgs/logo-gpic-white.svg | 249 ++++++++ .../Services/Email/Templates/NewEdital.html | 7 +- .../Templates/NotifyOfReportDeadline.html | 86 +++ .../Email/Templates/ProjectStatusChange.html | 5 +- .../Templates/RequestStudentRegister.html | 5 +- .../Email/Templates/ResetPassword.html | 5 +- src/Infrastructure/Services/Services.csproj | 3 + .../GenerateCertificateFunction.cs} | 23 +- .../ReportDeadlineNotificationFunction.cs | 51 ++ 25 files changed, 1358 insertions(+), 18 deletions(-) create mode 100644 src/Application/Interfaces/UseCases/Notice/IReportDeadlineNotification.cs create mode 100644 src/Application/UseCases/Notice/ReportDeadlineNotification.cs create mode 100644 src/Infrastructure/Services/Email/Templates/Imgs/icon-gpic-original.png create mode 100644 src/Infrastructure/Services/Email/Templates/Imgs/icon-gpic-original.svg create mode 100644 src/Infrastructure/Services/Email/Templates/Imgs/icon-gpic-white.png create mode 100644 src/Infrastructure/Services/Email/Templates/Imgs/icon-gpic-white.svg create mode 100644 src/Infrastructure/Services/Email/Templates/Imgs/logo-gpic-original.png create mode 100644 src/Infrastructure/Services/Email/Templates/Imgs/logo-gpic-original.svg create mode 100644 src/Infrastructure/Services/Email/Templates/Imgs/logo-gpic-white.png create mode 100644 src/Infrastructure/Services/Email/Templates/Imgs/logo-gpic-white.svg create mode 100644 src/Infrastructure/Services/Email/Templates/NotifyOfReportDeadline.html rename src/Infrastructure/WebFunctions/{GenerateCertificate.cs => Functions/GenerateCertificateFunction.cs} (62%) create mode 100644 src/Infrastructure/WebFunctions/Functions/ReportDeadlineNotificationFunction.cs diff --git a/src/Application/Interfaces/UseCases/Notice/IReportDeadlineNotification.cs b/src/Application/Interfaces/UseCases/Notice/IReportDeadlineNotification.cs new file mode 100644 index 00000000..e48f8eb1 --- /dev/null +++ b/src/Application/Interfaces/UseCases/Notice/IReportDeadlineNotification.cs @@ -0,0 +1,11 @@ +namespace Application.Interfaces.UseCases.Notice +{ + public interface IReportDeadlineNotification + { + /// + /// Envia notificação para os professores de que está próximo o prazo de entrega dos relatórios. + /// + /// Resultado do processo de notificação + Task ExecuteAsync(); + } +} \ No newline at end of file diff --git a/src/Application/UseCases/Notice/ReportDeadlineNotification.cs b/src/Application/UseCases/Notice/ReportDeadlineNotification.cs new file mode 100644 index 00000000..0e1a3a85 --- /dev/null +++ b/src/Application/UseCases/Notice/ReportDeadlineNotification.cs @@ -0,0 +1,61 @@ +using Application.Interfaces.UseCases.Notice; +using Domain.Interfaces.Repositories; +using Domain.Interfaces.Services; + +namespace Application.UseCases.Notice +{ + public class ReportDeadlineNotification : IReportDeadlineNotification + { + #region Global Scope + private readonly IProjectRepository _projectRepository; + private readonly IEmailService _emailService; + public ReportDeadlineNotification( + IProjectRepository projectRepository, + IEmailService emailService) + { + _projectRepository = projectRepository; + _emailService = emailService; + } + #endregion + + public async Task ExecuteAsync() + { + // Verifica se o há projetos que estejam no status Iniciado + var projects = await _projectRepository.GetProjectsWithCloseReportDueDateAsync(); + if (!projects.Any()) + return "Nenhum projeto com prazo de entrega de relatório próxima."; + + // Define datas de comparação + DateTime nextMonth = DateTime.UtcNow.AddMonths(1).Date; + DateTime nextWeek = DateTime.UtcNow.AddDays(7).Date; + + // Envia notificação para cada projeto + foreach (var project in projects) + { + // Verifica qual o relatório com data de entrega mais próxima + DateTime reportDeadline = project.Notice!.PartialReportDeadline!.Value.Date; + string reportType; + if (reportDeadline == nextWeek || reportDeadline == nextMonth) + { + reportType = "Relatório Parcial"; + } + else + { + reportType = "Relatório Final"; + reportDeadline = project.Notice!.FinalReportDeadline!.Value.Date; + } + + // Envia notificação para o professor + await _emailService.SendNotificationOfReportDeadlineEmailAsync( + project.Professor!.User!.Email, + project.Professor.User.Name, + project.Title, + reportType, + reportDeadline + ); + } + + return "Notificação de prazo de entrega de relatório enviada com sucesso."; + } + } +} \ No newline at end of file diff --git a/src/Application/UseCases/Project/GenerateCertificate.cs b/src/Application/UseCases/Project/GenerateCertificate.cs index b1298088..0c514484 100644 --- a/src/Application/UseCases/Project/GenerateCertificate.cs +++ b/src/Application/UseCases/Project/GenerateCertificate.cs @@ -2,7 +2,6 @@ using Domain.Entities.Enums; using Domain.Interfaces.Repositories; using Domain.Interfaces.Services; -using Microsoft.AspNetCore.Http; namespace Application.UseCases.Project { diff --git a/src/Domain/Interfaces/Repositories/IProjectRepository.cs b/src/Domain/Interfaces/Repositories/IProjectRepository.cs index c0098232..f7697674 100644 --- a/src/Domain/Interfaces/Repositories/IProjectRepository.cs +++ b/src/Domain/Interfaces/Repositories/IProjectRepository.cs @@ -76,5 +76,14 @@ public interface IProjectRepository /// Id do Edital. /// Projetos encontrados. Task> GetProjectByNoticeAsync(Guid? noticeId); + + /// + /// Obtém projetos que possuem data de entrega de relatório parcial ou final próxima. + /// + /// Projetos encontrados. + /// + /// A data de entrega de relatório parcial ou final é considerada próxima quando a mesma está a um mês ou 7 dias de distância. + /// + Task> GetProjectsWithCloseReportDueDateAsync(); } } \ No newline at end of file diff --git a/src/Domain/Interfaces/Services/IEmailService.cs b/src/Domain/Interfaces/Services/IEmailService.cs index c7a58bbc..7499653c 100644 --- a/src/Domain/Interfaces/Services/IEmailService.cs +++ b/src/Domain/Interfaces/Services/IEmailService.cs @@ -7,5 +7,6 @@ public interface IEmailService Task SendNoticeEmailAsync(string? email, string? name, DateTime? registrationStartDate, DateTime? registrationEndDate, string? noticeUrl); Task SendProjectNotificationEmailAsync(string? email, string? name, string? projectTitle, string? status, string? description); Task SendRequestStudentRegisterEmailAsync(string? email); + Task SendNotificationOfReportDeadlineEmailAsync(string? email, string? name, string? projectTitle, string? reportType, DateTime? reportDeadline); } } \ No newline at end of file diff --git a/src/Infrastructure/IoC/ApplicationDI.cs b/src/Infrastructure/IoC/ApplicationDI.cs index 8aadbce1..7aa30200 100644 --- a/src/Infrastructure/IoC/ApplicationDI.cs +++ b/src/Infrastructure/IoC/ApplicationDI.cs @@ -102,6 +102,7 @@ public static IServiceCollection AddApplication(this IServiceCollection services services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); #endregion Notice #region Professor diff --git a/src/Infrastructure/Persistence/Repositories/ProjectRepository.cs b/src/Infrastructure/Persistence/Repositories/ProjectRepository.cs index ab8d2c8a..709af464 100644 --- a/src/Infrastructure/Persistence/Repositories/ProjectRepository.cs +++ b/src/Infrastructure/Persistence/Repositories/ProjectRepository.cs @@ -192,5 +192,29 @@ public async Task> GetProjectsToEvaluateAsync(int skip, int .Take(take) .ToListAsync(); } + + public async Task> GetProjectsWithCloseReportDueDateAsync() + { + DateTime nextMonth = DateTime.UtcNow.AddMonths(1); + DateTime nextWeek = DateTime.UtcNow.AddDays(7); + return await _context.Projects + .Include(x => x.Professor) + .Include(x => x.Notice) + .AsAsyncEnumerable() + .Where(x => + // Contabiliza apenas projetos que estejam no status Iniciado + x.Status is EProjectStatus.Started + && ( + // Data de entrega do relatório parcial deverá ocorrer dentro de 1 mês + (x.Notice!.PartialReportDeadline.HasValue && x.Notice.PartialReportDeadline.Value.Date == nextMonth.Date) || + // Data de entrega do relatório final deverá ocorrer dentro de 1 mês + (x.Notice!.FinalReportDeadline.HasValue && x.Notice.FinalReportDeadline.Value.Date == nextMonth.Date) || + // Data de entrega do relatório parcial deverá ocorrer dentro de 7 dias + (x.Notice!.PartialReportDeadline.HasValue && x.Notice.PartialReportDeadline.Value.Date == nextWeek.Date) || + // Data de entrega do relatório final deverá ocorrer dentro de 7 dias + (x.Notice!.FinalReportDeadline.HasValue && x.Notice.FinalReportDeadline.Value.Date == nextWeek.Date) + )) + .ToListAsync(); + } } } \ No newline at end of file diff --git a/src/Infrastructure/Services/Email/EmailService.cs b/src/Infrastructure/Services/Email/EmailService.cs index 57443975..c779c746 100644 --- a/src/Infrastructure/Services/Email/EmailService.cs +++ b/src/Infrastructure/Services/Email/EmailService.cs @@ -14,6 +14,7 @@ public class EmailService : IEmailService private readonly string? _smtpPassword; private readonly string? _currentDirectory; private readonly string? _siteUrl; + private readonly string? _logoGpic; public EmailService(string? smtpServer, int smtpPort, string? smtpUsername, string? smtpPassword, IConfiguration configuration) { @@ -21,8 +22,9 @@ public EmailService(string? smtpServer, int smtpPort, string? smtpUsername, stri _smtpPort = smtpPort; _smtpUsername = smtpUsername; _smtpPassword = smtpPassword; - _currentDirectory = Path.GetDirectoryName(typeof(EmailService).Assembly.Location); + _currentDirectory = AppContext.BaseDirectory; _siteUrl = configuration.GetSection("SiteUrl").Value; + _logoGpic = Convert.ToBase64String(File.ReadAllBytes(Path.Combine(_currentDirectory, "Email/Templates/Imgs/logo-gpic-original.svg"))); } #endregion Global Scope @@ -41,7 +43,10 @@ public async Task SendConfirmationEmailAsync(string? email, string? name, string // Gera mensagem de envio const string subject = "Confirmação de Cadastro"; - string body = template.Replace("#USER_NAME#", name).Replace("#USER_TOKEN#", token); + string body = template + .Replace("#LOGO_GPIC#", _logoGpic) + .Replace("#USER_NAME#", name) + .Replace("#USER_TOKEN#", token); // Tentativa de envio de email await SendEmailAsync(email, subject, body); @@ -67,7 +72,10 @@ public async Task SendResetPasswordEmailAsync(string? email, string? name, strin // Gera mensagem de envio const string subject = "Recuperação de Senha"; - string body = template.Replace("#USER_NAME#", name).Replace("#USER_TOKEN#", token); + string body = template + .Replace("#LOGO_GPIC#", _logoGpic) + .Replace("#USER_NAME#", name) + .Replace("#USER_TOKEN#", token); // Tentativa de envio de email await SendEmailAsync(email, subject, body); @@ -92,6 +100,7 @@ public async Task SendNoticeEmailAsync(string? email, string? name, DateTime? re // Gera mensagem de envio const string subject = "Novo Edital"; string body = template + .Replace("#LOGO_GPIC#", _logoGpic) .Replace("#PROFESSOR_NAME#", name) .Replace("#START_DATE#", registrationStartDate.Value.ToString("dd/MM/yyyy")) .Replace("#END_DATE#", registrationEndDate.Value.ToString("dd/MM/yyyy")) @@ -117,6 +126,7 @@ public async Task SendProjectNotificationEmailAsync(string? email, string? name, // Gera mensagem de envio const string subject = "Alteração de Status de Projeto"; string body = template + .Replace("#LOGO_GPIC#", _logoGpic) .Replace("#PROFESSOR_NAME#", name) .Replace("#PROJECT_TITLE#", projectTitle) .Replace("#PROJECT_STATUS#", status) @@ -147,6 +157,7 @@ public async Task SendRequestStudentRegisterEmailAsync(string? email) // Gera mensagem de envio const string subject = "Solicitação de Registro"; string body = template + .Replace("#LOGO_GPIC#", _logoGpic) .Replace("#REGISTRATION_LINK#", _siteUrl); // Tentativa de envio de email @@ -158,6 +169,37 @@ public async Task SendRequestStudentRegisterEmailAsync(string? email) } } + public async Task SendNotificationOfReportDeadlineEmailAsync(string? email, string? name, string? projectTitle, string? reportType, DateTime? reportDeadline) + { + try + { + // Verifica se os parâmetros são nulos ou vazios + if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(name) || string.IsNullOrEmpty(projectTitle) || string.IsNullOrEmpty(reportType) || !reportDeadline.HasValue) + { + throw new Exception("Parâmetros inválidos. Email, nome, título do projeto, tipo de relatório e prazo de entrega são obrigatórios."); + } + + // Lê mensagem do template em html salvo localmente + string template = await File.ReadAllTextAsync(Path.Combine(_currentDirectory!, "Email/Templates/NotifyOfReportDeadline.html")); + + // Gera mensagem de envio + const string subject = "Entrega de Relatório Próxima"; + string body = template + .Replace("#LOGO_GPIC#", _logoGpic) + .Replace("#PROFESSOR_NAME#", name) + .Replace("#PROJECT_TITLE#", projectTitle) + .Replace("#REPORT_TYPE#", reportType) + .Replace("#REPORT_DEADLINE#", reportDeadline.Value.ToString("dd/MM/yyyy")); + + // Tentativa de envio de email + await SendEmailAsync(email, subject, body); + } + catch (Exception ex) + { + throw new Exception($"Não foi possível enviar o email de notificação de prazo de entrega de relatório. {ex.Message}"); + } + } + #region Private Methods public async Task SendEmailAsync(string email, string subject, string message) { diff --git a/src/Infrastructure/Services/Email/Templates/ConfirmEmail.html b/src/Infrastructure/Services/Email/Templates/ConfirmEmail.html index bfbf637f..3ae43037 100644 --- a/src/Infrastructure/Services/Email/Templates/ConfirmEmail.html +++ b/src/Infrastructure/Services/Email/Templates/ConfirmEmail.html @@ -63,7 +63,10 @@

Confirmação de Cadastro

#USER_TOKEN#

-

Atenciosamente,
G-PIC

+ +
Atenciosamente,
+ +

Este e-mail foi enviado automaticamente. Por favor, não responda. diff --git a/src/Infrastructure/Services/Email/Templates/Imgs/icon-gpic-original.png b/src/Infrastructure/Services/Email/Templates/Imgs/icon-gpic-original.png new file mode 100644 index 0000000000000000000000000000000000000000..9eb861101556eaaf07d705e385cf489f52ab4f12 GIT binary patch literal 12905 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 + + + + + + + + \ No newline at end of file diff --git a/src/Infrastructure/Services/Email/Templates/Imgs/icon-gpic-white.png b/src/Infrastructure/Services/Email/Templates/Imgs/icon-gpic-white.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c4fae92b495e079a8992c22367abaccb329df3 GIT binary patch literal 7121 zcmcJU=T{Rz_vaG=0ZHgB5V{ITlM*pV?@AXHLKje~^bQK4gd!cJ_bwnHT}tRB^w3d? zD4kFR1*z+^=h@%>1G_Wlp3isA`QH2H&Y2f?B6YRZD9BmJ0RRBSlgG+>|5ytE0Ex-K z|5UV-Q~f^x-SyNI0aatH+y4%suTf8|wX^{I|1=qZ1V{@2{m1fe1Ar_5lK-s%0Cgbz zf3zNu@4p@*03h5BK>S~i(LerYJ^mN}vj0m^9`OHG%p>|AcWoZ%|7hTUDgeI9r}q5A zEtkiJ?f?LU?mqzpWMshr0G5p>$_meYfP2}HGt;T`e!5i7MB4ZECW+<7Wf~vFs`Bf< zl^M@8IN81468WZ(nUYv$#~u=EZ!|4ZD8xm4H?3u+xc^FfNsLU0R@sD(CgCqO{U)K~ zSnd?tj{Wm(^CD;S-I%0*_3uh&EJ23w2|N4k;)Jld0Y!qw(Bdoq|9}?*9dC}CLj{-I zz&cw{`UIeIn?M>_JEgv`Wi)$|I6fX2+DeoL<@b8v+~|-tsPhPrfcz>lVbX?OCCYYS>{ikQ6%wRk0SFQ%Lhw}W$4E{Ou&?4ayJ%G+ zzpuK08AZ^11|+A!`g=08IS|!g1?@s{>TF=>7d{y2Mv#{y5AzsNZloCvRbDHze5f&+ znKNohVdJVRe&2e^!FdQkM4(cA&NS(MIoB5U+1u3(G7o`%6dsn70;My{qoe>7AZODr2&X>c&4tKDa2s)x6$`QJS-Re?%Hl?VM!}Ng}c7F3|`L<07ezA+?!{_^` zk+vcXiLLupV}$Q~x6<_(^VYw6P_*PYK(v%d-?N{Ozuo1=rr%X334(alIAS7l;__F_ zUfVyLMCxwYSf1ev^1j1D3x(3dgJ!tH&luOg_h7!aCal_`+91tbGEa5XdoR>t&>SQ~ z9q>hF$=H&<*7!`l4}nB}R$5K#&A|rMiPf$@-}tR=|E8s1{{m^|6FNFV)*pD+#c{m< zWhchn&Z9o)$hf2Elq5n}JL&JaXGI^eBr#6YlRo>KVqH$cFn{MMxm*NlJP`@*4Tw(e z?_b@DIncqNnA{YM%573C;oX0EPzW~^?V(D7m2HI&lbf+eI?t^1-ttS5DZLD-T%|;D zv;@UnE8(@Dh#7Ebts1bqISp3z3YGsuMQlS+SpJ#lCsd+HfAIXcv409|OtIJbIO9We zeAI-=1x2xXOc zOH-VJ?Jh2oQSQCSk{1iNwlzsL`;_pS-w2HTU^|AYG-CepCI%MZjG9?A8Q>9Xde2zQ zsr-rJxUfr`B;rYCu$iztYq}D3nUka#I=*2J6_?MFWmVJgz9lu}LgW*k`|+<08MkXK zWEi(q)ES%Q*=s}PtUx+1-^i1Gf4~*5n&uSS*ACK_^$x^_QdCw3?GIayzT7TVNe07e z*phM!8}{hkZ`vZC#c;;I4c~P5?5{50R~S$B)<&Wpcyi4-9=Pys#r#IjXDj6BK+0bP z@gjZHE9uHO+_~UQoZO59et;i-{VEMVuj&0(^<)Y2m__wt8;v@yuT;b}&Fzt}s&RdW z@ug%a9!^D^8Zs{t189d@2BwdA=ze>jE;^fI<(T%p0V~K;<~%@n2NjS-9GL-1gXEs18BxY%I&!p`+1tF@4!g%Hyit|oge+~OzQMh^%RUYW~xW(TldvK9DQ7X3~g&SIh{&-~it-8}3B?VQW9(xO~9gY^X=AQy< zav43CL_b(oy9#KnDLP?_8K>~@z{DcbkYwW#%j7rgv7SMvDKCI3#{@;nY3>LV{Ie>$ z64X5Mb3;{32ltb+p-p(rMX1E4i47pjF!ow42f-touzWTe>&BZgh+(bz(H<)h6JwPT zM&AJ{{#NjnJYRTCA7!5yX3^)8cnRxWUMg8WGxD>#)lxBnVJ&Hn>(|=F_Pa+a1STK4 zr13YWR#~E#eV!dkL^#G#qXU>*Cfn4;@VjJcr`W68c#N6mlv1-!>BB!ZO?_`L&xciU zr06F3H&Ri6mX>F~GIgXb8M(4v;QYAeOO%-MYq#?k36t;+*pS8hfR=OPMY|9#%TaCH zYS%Y3734M^tr0505JSOwXQLBj(bbzS_pR+;t0Dec_1wg%FzwcMZvcYtO1B5IsGK6hjeP&AhJ$qB&SXaE1DVrjhoGH= z$<)u*uPR3`k}bSBgU6*cX|*t7gT1*v97|Sb z@SPUl;^liC`TnUH1!!UQ}pBhF~nw0-V}lh1|YPJqbcKf?sY{RBIm+W|>&t)3xn6+6iIao&)L z!}ubeL}*JnjpDoM^0|ldyQL(Ua-G(I6Ptq@qG@s7fgp&lg}Z}X-z-E<)%TRWc$vyl zhEm`1`rg0i&P~yF+yr;1LREB+Psa9ciQW31ex6-NARrFNHoOp~w-VSL83rFj%|X(^ zQzT;wD|89Qj*RQ(gNS+auD-T8@+>o}2w%{U4F3aBI`>nSme`PV}6-!rulWr_PaXXU80c&{%R!fxjfFzyOei@ z5sk00Zm|wYQQ3lCy7;lYL+=5P;`nU~#$s15U?zHA0-T`jc$aJvtJK04Wc~1$*l0BerA^N< z|K}vP7Cjtwam;$Shazf4+Fg_#)M=0kEn zis+KDw{ebaMI&23sja6oFsQBnEbf^;O+eS9;!h@jZK00w_kvB8sr`Pw8&JJY?ktql zSG`EJGJiI`R#6eaZ%bUM&tNfJ5JpM|;~6RY$}hxz=f)$E9h~DVsxkY@ye}x{=qZxG z&(+hO5?~OwNPb>-tU>c*joNi(Gw`smvQ#JRaIQBzXR^aP2@&uu5$L!2Lw>bw-U|+V z`-bGcGWMv<*ZQh1sR64AbO?`-EQ)j5Nw{JDIZN@xEWBMikBOqal_EF8hMhF{qN=>K zWL4FGE$X^PAXJm8pe8#>^!x-r{*bM3N_JEw@+#z2RS(XpEjpvFm(Ge6F} zj*KemWA`j1!$?&+=ZL~B)bIs{Ss>L2cLHl!{qaS_F?DdbaP9go_Y|!=yVpaEiM2`m zAM>{)u?@dAtp@>j2ot(BdyYiN>Druzx6d{*R_s=XvteJ}G#kko4;vIk*|0t@6AA-scgxobe zH(qjob=nhj7;X-0%9<3hxQBt7`v(b8_&Ut|#@@L+(5HhJWny$9|7wB0Go%)7Ay3k3 zKI%W>Qrf8%DR&GHDG*zz{_g)FkRE$Mnw4vP z^$+Y`uqx-@esYywTcddU42%Sn|^FY3h<* zj^?c>`@(e=+jz?D%XRyw1@#$S-n&}Sz1QS7k}}^lL_=)#{wQV5rH*!cz`ug)!zJj~ zot{9LClN~}hVLugZK|Au=D2Xnsx!4!sDYc}MxZ0)Adicx1=*tU?Q&BUW9p zktPw+Js!&}4}VQym#aK8Ow&J0sc~5xvDr}!2qR}FbpnZQzR}5VYHelyN+Nk9;(FP| z$GBus34iY1RD_B4F#|F6d{dB@!XmJ*9vHkQWO$LPjeqhj`9fORKR7wXU(-L>SKJzd z<8%g~;H;$AOmE3P?NN}=x5tP;5`)V}M8=A*o z{AMvpzr$GHlR0G=P9!#9?2K*p=LCys+^QLwyZlXMj2AS?@ge%lwZgd0jxck5SLYz- zgM>N+i=5pzMA1=gqnpvUw^kd zW0Dnd5hyHrUk@b|uJ21mW1glYIji!xx7vs)G4)1|jJXz(g>!&xPWV2Eb(N&8{S%H# z(>HN%Si@*Kx6w!Mk)CACc+kw@PQqi$%vN5^X{@fDmQ$6SOZsvtwK*Y{?&^XTLpVku zfvBF`suQ(2WX>8_dpzwC0>3-F@Z`#E?!`WdSGPJ=`lSChvNZRcdP=6n=R$a%BMUT* zV|aGp$&FuhP1oFWc6Gf>7fX0$#H8GI2g&djQ2WgviTpwAL@@h8XygF0Z2Q z@cyDxMNd$2{DTvXVNNUeLwegjVcrSKP7jl?o7Y_lD_*)wtF~w2VnQj71sKw+CoP!u zcFx2|E*Ok#44ho!Dp1t6oMf}AiD`;Yche_gk<%ezxUhm4wsPMJ{kSJMa_KxDEI|$3 zIw&*SLf;aKQa9m67l(jftV3_2&=&IEr}iVVpZK2`1cZ_b8Er95cJuHm@i&-*ZOer! z>`=8ao_+U}C~VG)YpRqU-?-#o-I*hTv_5+Esq$>cmOVYg!O)$T+VWz}=&YF`mkB){ zOzqEmKAqicBO}Z?=)ZgZoM$BHfs43wbcL*$+xN}Ign0k%oSq7a8Cy@jP&*oxDEI*P zh6NXEOI#S#cGkKt?A{|eU!_gM+iS`$0>KBtyz-A*;WmX`on$jR@40_?afrZC^OS=L zWDp}$IAuTZ%G8lBshZF=)@d28?`9HC4wGdfX~8#smPF3Dh-%$F>+4coAs1l^6|0=i zrkd4AO8==sk*X154ubf@O7)deE^$S)8Ei zKWsx*jWR47DPKY4Z8vx^YCc}ZJFV>oyll3dL1x>oINc%p%Jby{cOB!cQPQItm7rI4 zKe(>*yF8yisah(!I_N~Av>unOB6c=OG~tbAEEe45%d$?VsQc&z%YCkCRhy0OHNc(* zDX}ehxW$rYhDFw2nysiSb;toBQ&rtd>Z9BY)4TohE}UN=p<+uaSJE($tf@UM=s9I< z7&^VPyZ+tO+hhpjKA1}@MdV$iY@KTW`hegf=toYw^sn_`LggN3?yTS8!A~r#z}2OeUGNjFXI}O zb6{n1^HTCB-zV{B$R)`nE4#3kXX;}t5k0*tk-)plpoi$mw|QmTB3xw0(fR7LSNDkr z{Ugt7Z)&$<25*k^DvhyyzRymB#0srJq(LQL71RGXUs7+~x6yE(c7K+a8z3-6l$?|B zV>SZ#n1vW&dU}VXBgW$bc)U-fsLtlE`okUo2od~NKmB;nDAAvyX$_GnVBn}%m{ zO{u|b8Y=oauRo@4>^88?P6nV<_caO14qMGQb7DU)mB&*tWgS5Mrkk{1dc%^Q6Ak^q z6|I-A$A5ew*o4|2eV-J?858YNlmzRRR2-zDOMpooPm>=(NvVJuQbon!W91m;JWL8G zgX0}rsEHr;R^V-g+KQ0gDgwE~l-4Jwd{|yXBQQxGm-}>7j-X9G+Lf`m#8!Si6A)oQ z<$VeHTn~3K+kvdxo4NmmmKp6YGc7_D$I^$s<4yQ!@~AD@pkttv67vpcV23fUeCCV? zu(?G~j#iqoHlv;TTV2A)_vh4vA1@g{*N40AU!d&yMOG9Z&t`X5gd_$18T7KxXw|mn z2|+b*pQB2X9dGCQ2yJF_0zF|P46hu>?KSe&o%X66HiLC5A`62_tac+%1|WkV-_FUL z{=Y5#Gp?r%Ftkr4B|FhRapm%3)ts&OVI1nJH2DS~I>8e?w!Q&8C zHNLU=ule7jya8MW(gfGS<@wS@u?GFT5kzSJI2>Tws|9M<^`K<*8;Ut&9DyC4lf1+p zD$qc7@$#c9PKu)Pb+(=^#v;HIiO~+8qj}z+({5Pd$H$*D`FeACY1PsBS9m0-i(Q^5 zgw z0CJQW9X|Q+k*y`grP>Dxrq+vwNWFWyfzA#3B{ME$a{Qns7G@_E=@Q`7a>lj%Hc zuXo!nJE#T9$+Op)N%RXL#Co@`)-Y9CjwbittdK!U2B4Se@vG5+4}W=(x>~nOlO~3a zKtvT_(qVs~nDhAVdW^Mr8pBY$hWP^>0;XY5Z zz84E>SDC8KAKrx@*%t3h<9GI@6TuD5K5$ZSa=J}*CJl(phWOv4k5)wGzKEkSoAq-o zZ(~(3b+m-w_VS~>BOmtOMkX@Oui?{o+&PR4d!tb)`NFxxq`*DG6>Y>-hlhBCh2YIh z_N@5{0%X=)5{j!}jk*Vgf zCs!1PvQq5}Xs{|UVKSS}fhfke13Gwq*XQkLt8dZ%0ee_ zt={^4$K4=t?2 zkJyU%W>r5uLD{FOFA&_<-xal=z|vVZy(L=FUl3>X?p3& z_#r%9YI#0Hm)Wi$nM++Q--t{yF1I|EpO9W47M~U0m-0JJz&^_72b(CTR@!!Vf!hAZ zl$^2?Xqx@#wC{FizrZ{t$QoM{?84PFMV})90a-Kokq=?AitVJGrJz1>iE73w#6Z)ux|-u#b+r=8-|$$@45;HuFU zZ`p@KslPR5ao$)TOLphd_84TfXB7<-cKF4kTg^|;HCai#7mx9@?-a^OvhL}Qn~;My w+?X1uq%lNFsghKi^?bRJ4_=6ki7aFLHP|kpKVy literal 0 HcmV?d00001 diff --git a/src/Infrastructure/Services/Email/Templates/Imgs/icon-gpic-white.svg b/src/Infrastructure/Services/Email/Templates/Imgs/icon-gpic-white.svg new file mode 100644 index 00000000..b94a5b05 --- /dev/null +++ b/src/Infrastructure/Services/Email/Templates/Imgs/icon-gpic-white.svg @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/src/Infrastructure/Services/Email/Templates/Imgs/logo-gpic-original.png b/src/Infrastructure/Services/Email/Templates/Imgs/logo-gpic-original.png new file mode 100644 index 0000000000000000000000000000000000000000..8d4057a7618a1db2aa1fddce726f9164d966876a GIT binary patch literal 40433 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 z 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Infrastructure/Services/Email/Templates/Imgs/logo-gpic-white.png b/src/Infrastructure/Services/Email/Templates/Imgs/logo-gpic-white.png new file mode 100644 index 0000000000000000000000000000000000000000..31dc4d60eee993bf0914fa15a51aa5b4faa230a1 GIT binary patch literal 20492 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 + + + + + + + + + \ No newline at end of file diff --git a/src/Infrastructure/Services/Email/Templates/NewEdital.html b/src/Infrastructure/Services/Email/Templates/NewEdital.html index c2811cc6..7235d015 100644 --- a/src/Infrastructure/Services/Email/Templates/NewEdital.html +++ b/src/Infrastructure/Services/Email/Templates/NewEdital.html @@ -69,13 +69,16 @@

Novo Edital Disponível

#START_DATE# até #END_DATE#.

- Para mais informações acesse a plataforma do G-PIC ou consulte as + Para mais informações acesse a plataforma do GPIC ou consulte as informações do Edital através do link abaixo.

-

Atenciosamente,
G-PIC

+ +
Atenciosamente,
+ +

Este e-mail foi enviado automaticamente. Por favor, não responda. diff --git a/src/Infrastructure/Services/Email/Templates/NotifyOfReportDeadline.html b/src/Infrastructure/Services/Email/Templates/NotifyOfReportDeadline.html new file mode 100644 index 00000000..245099bf --- /dev/null +++ b/src/Infrastructure/Services/Email/Templates/NotifyOfReportDeadline.html @@ -0,0 +1,86 @@ + + + + + + Entrega de Relatório Próxima + + + +

+

Entrega de Relatório Próxima

+

Olá #PROFESSOR_NAME#,

+

+ Informamos que o #REPORT_TYPE# do seu projeto com o + título "#PROJECT_TITLE#" deverá ser entregue até o dia + #REPORT_DEADLINE#. +

+

+ Acesse a plataforma pelo link abaixo e realize o envio do relatório. +

+ + +
Atenciosamente,
+ + +

+ Este e-mail foi enviado automaticamente. Por favor, não responda. + +
Gerenciador de Projetos de Iniciação Científica, CEFET +
+

+
+ + diff --git a/src/Infrastructure/Services/Email/Templates/ProjectStatusChange.html b/src/Infrastructure/Services/Email/Templates/ProjectStatusChange.html index 036336e6..d261eee1 100644 --- a/src/Infrastructure/Services/Email/Templates/ProjectStatusChange.html +++ b/src/Infrastructure/Services/Email/Templates/ProjectStatusChange.html @@ -52,7 +52,10 @@

Status do Projeto Alterado

Para mais detalhes, você pode acessar o projeto na nossa plataforma.

-

Atenciosamente,
G-PIC

+ +
Atenciosamente,
+ +

Este e-mail foi enviado automaticamente. Por favor, não responda. diff --git a/src/Infrastructure/Services/Email/Templates/RequestStudentRegister.html b/src/Infrastructure/Services/Email/Templates/RequestStudentRegister.html index c5e8fb6a..ec10396a 100644 --- a/src/Infrastructure/Services/Email/Templates/RequestStudentRegister.html +++ b/src/Infrastructure/Services/Email/Templates/RequestStudentRegister.html @@ -71,7 +71,10 @@

Solicitação de Cadastro

-

Atenciosamente,
G-PIC

+ +
Atenciosamente,
+ +

Este e-mail foi enviado automaticamente. Por favor, não responda. diff --git a/src/Infrastructure/Services/Email/Templates/ResetPassword.html b/src/Infrastructure/Services/Email/Templates/ResetPassword.html index d03d6e74..c44c31c4 100644 --- a/src/Infrastructure/Services/Email/Templates/ResetPassword.html +++ b/src/Infrastructure/Services/Email/Templates/ResetPassword.html @@ -61,7 +61,10 @@

Recuperação de Senha

Se você não solicitou a recuperação de senha, por favor ignore este e-mail.

-

Atenciosamente,
G-PIC

+ +
Atenciosamente,
+ +

Este e-mail foi enviado automaticamente. Por favor, não responda. diff --git a/src/Infrastructure/Services/Services.csproj b/src/Infrastructure/Services/Services.csproj index b268ce65..72b34083 100644 --- a/src/Infrastructure/Services/Services.csproj +++ b/src/Infrastructure/Services/Services.csproj @@ -23,6 +23,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/src/Infrastructure/WebFunctions/GenerateCertificate.cs b/src/Infrastructure/WebFunctions/Functions/GenerateCertificateFunction.cs similarity index 62% rename from src/Infrastructure/WebFunctions/GenerateCertificate.cs rename to src/Infrastructure/WebFunctions/Functions/GenerateCertificateFunction.cs index 5e2182aa..038df523 100644 --- a/src/Infrastructure/WebFunctions/GenerateCertificate.cs +++ b/src/Infrastructure/WebFunctions/Functions/GenerateCertificateFunction.cs @@ -3,13 +3,13 @@ using Microsoft.Extensions.Logging; using WebFunctions.Models; -namespace Infrastructure.WebFunctions +namespace Infrastructure.Functions.WebFunctions { - public class GenerateCertificate + public class GenerateCertificateFunction { - private readonly ILogger _logger; + private readonly ILogger _logger; private readonly IGenerateCertificate _generateCertificate; - public GenerateCertificate(ILogger logger, IGenerateCertificate generateCertificate) + public GenerateCertificateFunction(ILogger logger, IGenerateCertificate generateCertificate) { _logger = logger; _generateCertificate = generateCertificate; @@ -28,11 +28,18 @@ public async Task Run([TimerTrigger("0 0 4 * * *")] CustomTimerInfo timer) // Informa início da execução _logger.LogInformation("Geração de certificados iniciada."); - // Realiza a geração dos certificados - var result = await _generateCertificate.ExecuteAsync(); + try + { + // Realiza a geração dos certificados + string result = await _generateCertificate.ExecuteAsync(); - // Informa fim da execução - _logger.LogInformation("Geração de certificados finalizada. Resultado: {Result}", result); + // Informa fim da execução + _logger.LogInformation("Geração de certificados finalizada. Resultado: {Result}", result); + } + catch (Exception ex) + { + _logger.LogError("Erro ao executar geração de certificados.", ex); + } // Informa próxima execução if (timer is not null) diff --git a/src/Infrastructure/WebFunctions/Functions/ReportDeadlineNotificationFunction.cs b/src/Infrastructure/WebFunctions/Functions/ReportDeadlineNotificationFunction.cs new file mode 100644 index 00000000..99c0417f --- /dev/null +++ b/src/Infrastructure/WebFunctions/Functions/ReportDeadlineNotificationFunction.cs @@ -0,0 +1,51 @@ +using Application.Interfaces.UseCases.Notice; +using Microsoft.Azure.Functions.Worker; +using Microsoft.Extensions.Logging; +using WebFunctions.Models; + +namespace Infrastructure.Functions.WebFunctions +{ + public class ReportDeadlineNotificationFunction + { + private readonly ILogger _logger; + private readonly IReportDeadlineNotification _reportDeadlineNotification; + public ReportDeadlineNotificationFunction( + ILogger logger, + IReportDeadlineNotification reportDeadlineNotification) + { + _logger = logger; + _reportDeadlineNotification = reportDeadlineNotification; + } + + ///

+ /// Envia notificação para os professores sobre o prazo para entrega dos relatórios. + /// Execução diária às 05:00 UTC, equivalente à 02:00 BRT. + /// + /// Informações do timer. + [Function("ReportDeadlineNotification")] + public async Task Run([TimerTrigger("0 0 5 * * *")] CustomTimerInfo timer) + { + // Informa início da execução + _logger.LogInformation("Notificação de prazo para entrega de relatório iniciada."); + + try + { + // Realiza a notificação dos professores e prazo para entrega dos relatórios + string result = await _reportDeadlineNotification.ExecuteAsync(); + + // Informa fim da execução + _logger.LogInformation("Notificação de prazo para entrega de relatório finalizada. Resultado: {Result}", result); + } + catch (Exception ex) + { + _logger.LogError("Erro ao executar notificação de prazo para entrega de relatório.", ex); + } + + // Informa próxima execução + if (timer is not null) + { + _logger.LogInformation("Próxima notificação de prazo para entrega de relatório: {NextExecutionTime}", timer.ScheduleStatus?.Next.ToString("dd/MM/yyyy HH:mm:ss")); + } + } + } +} \ No newline at end of file