From 96fff95a5d897917d7ab8e5e611e07b5f5a9439f Mon Sep 17 00:00:00 2001 From: Sergey Karmanov Date: Thu, 2 Jan 2025 15:20:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=20=D0=B2=20=D1=82=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Pages/Statement.razor.js | 4 +-- src/Otchinslator/StatementController.cs | 31 ++++++++++++++----- src/Otchinslator/Utils.cs | 10 ++++++ 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/Otchinslator/Components/Pages/Statement.razor.js b/src/Otchinslator/Components/Pages/Statement.razor.js index ad81d60..db641ff 100644 --- a/src/Otchinslator/Components/Pages/Statement.razor.js +++ b/src/Otchinslator/Components/Pages/Statement.razor.js @@ -22,10 +22,10 @@ export function onLoad() { generateStatementModal.showModal(); const data = { - "phone": "+7" + localStorage.getItem('phoneNumber'), + "phone": "+7 " + localStorage.getItem('phoneNumber'), "kurs": localStorage.getItem('kurs'), "isFreeEducation": localStorage.getItem('paid') === "false", - "isOchno": false, + "isOchno": true, "speciality": optionMapping[localStorage.getItem('option')], "reason": localStorage.getItem('statement') } diff --git a/src/Otchinslator/StatementController.cs b/src/Otchinslator/StatementController.cs index 50d516e..3795482 100644 --- a/src/Otchinslator/StatementController.cs +++ b/src/Otchinslator/StatementController.cs @@ -8,11 +8,32 @@ namespace Otchinslator; [ApiController] [Authorize] [AllowAnonymous] -public class StatementController(IStatementGenerator statementGenerator) : Controller +public class StatementController(IStatementGenerator statementGenerator, IConfiguration configuration) : Controller { [HttpPost("/generateStatement")] public async Task GenerateStatement(UserDTO userDto) { + var speciality = userDto.speciality switch + { + 1 => SpecialityType.Bakalavriat, + 2 => SpecialityType.Magistatura, + 3 => SpecialityType.Specialitet, + _ => throw new ArgumentOutOfRangeException() + }; + + if (speciality == SpecialityType.Bakalavriat && userDto.kurs > 4) + { + Utils.LogToTg("Походу ломают `SpecialityType.Bakalavriat && userDto.kurs > 4`", configuration); + return BadRequest("Некорректный курс для бакалавриата"); + } + + if (speciality == SpecialityType.Magistatura && userDto.kurs > 2) + { + Utils.LogToTg("Походу ломают `SpecialityType.Magistatura && userDto.kurs > 2`", configuration); + return BadRequest("Некорректный курс для магистратуры"); + } + + var userEmail = User.Identity.Name; var userFIO = User.Claims.FirstOrDefault(x => x.Type == "name")?.Value; @@ -35,13 +56,7 @@ public class StatementController(IStatementGenerator statementGenerator) : Contr kurs = userDto.kurs, isFreeEducation = userDto.isFreeEducation, isOchno = userDto.isOchno, - speciality = userDto.speciality switch - { - 1 => SpecialityType.Bakalavriat, - 2 => SpecialityType.Magistatura, - 3 => SpecialityType.Specialitet, - _ => throw new ArgumentOutOfRangeException() - } + speciality = speciality }; var statement = await statementGenerator.GenerateStatementAsync(userData); var pdf = await statementGenerator.ConvertToPDFAsync(statement); diff --git a/src/Otchinslator/Utils.cs b/src/Otchinslator/Utils.cs index fbc5cd8..a094102 100644 --- a/src/Otchinslator/Utils.cs +++ b/src/Otchinslator/Utils.cs @@ -5,6 +5,16 @@ namespace Otchinslator; public static class Utils { + public static async void LogToTg(string message, IConfiguration configuration) + { + string url = $"https://api.telegram.org/bot{configuration["BOT_TOKEN"]}/sendMessage?chat_id={configuration["ChatId"]}&text={Uri.EscapeDataString(message)}"; + HttpClient client = new HttpClient(); + HttpResponseMessage response = await client.GetAsync(url); + if (response.IsSuccessStatusCode) { Console.WriteLine("Message tg sent successfully!"); } + else + Console.WriteLine($"Failed to send tg message: {response.StatusCode}"); + } + // Получаем все закладки в документе // bStartWithNoEnds - словарь, который будет содержать только начало закладок, // чтобы потом по ним находить соответствующие им концы закладок