Prac2026_Email/ListmonkIntegration/Pages/Campaigns/Send.cshtml.cs
2026-07-15 17:17:03 +03:00

108 lines
3.5 KiB
C#

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using ListmonkIntegration.Services;
namespace ListmonkIntegration.Pages.Campaigns
{
public class SendModel : PageModel
{
private readonly IListmonkService _listmonkService;
private readonly ILogger<SendModel> _logger;
[BindProperty]
public string CampaignName { get; set; } = string.Empty;
[BindProperty]
public int? SelectedTemplateId { get; set; }
[BindProperty]
public int? SelectedListId { get; set; }
public SelectList Templates { get; set; } = new SelectList(Enumerable.Empty<SelectListItem>());
public SelectList Lists { get; set; } = new SelectList(Enumerable.Empty<SelectListItem>());
public string? ErrorMessage { get; set; }
public string? SuccessMessage { get; set; }
public SendModel(IListmonkService listmonkService, ILogger<SendModel> logger)
{
_listmonkService = listmonkService;
_logger = logger;
}
public async Task OnGetAsync()
{
await LoadDataAsync();
}
public async Task<IActionResult> OnPostAsync()
{
if (!SelectedTemplateId.HasValue || !SelectedListId.HasValue || string.IsNullOrWhiteSpace(CampaignName))
{
ErrorMessage = "Çàïîëíèòå âñå ïîëÿ";
await LoadDataAsync();
return Page();
}
try
{
var templates = await _listmonkService.GetTemplatesAsync();
var template = templates.FirstOrDefault(t => t.Id == SelectedTemplateId.Value);
if (template == null)
{
ErrorMessage = "Øàáëîí íå íàéäåí";
await LoadDataAsync();
return Page();
}
var campaignId = await _listmonkService.CreateCampaignAsync(
CampaignName,
SelectedListId.Value,
SelectedTemplateId.Value,
template.Subject
);
var started = await _listmonkService.StartCampaignAsync(campaignId);
if (started)
{
SuccessMessage = $"Êàìïàíèÿ \"{CampaignName}\" óñïåøíî ñîçäàíà è çàïóùåíà!";
_logger.LogInformation($"Campaign {campaignId} started successfully");
}
else
{
ErrorMessage = $"Êàìïàíèÿ ñîçäàíà (ID: {campaignId}), íî íå óäàëîñü çàïóñòèòü";
}
await LoadDataAsync();
return Page();
}
catch (Exception ex)
{
_logger.LogError(ex, "Error sending campaign");
ErrorMessage = $"Îøèáêà: {ex.Message}";
await LoadDataAsync();
return Page();
}
}
private async Task LoadDataAsync()
{
try
{
var templates = await _listmonkService.GetTemplatesAsync();
Templates = new SelectList(templates, "Id", "Name");
var lists = await _listmonkService.GetListsAsync();
Lists = new SelectList(lists, "Id", "Name");
}
catch (Exception ex)
{
_logger.LogError(ex, "Error loading data");
ErrorMessage = $"Îøèáêà çàãðóçêè äàííûõ: {ex.Message}";
}
}
}
}