Добавить поддержку ChatId и улучшить управление заявками

Внесены изменения в класс `Program` в файле `Program.cs`:
- Добавлено поле `ChatId` в SQL-запрос для извлечения идентификатора чата.
- Введена переменная `ownerChatId` для хранения значения `ChatId`.
- Обновлена логика формирования клавиатуры для администраторов и пользователей.
- Добавлена проверка прав администратора в методе `UpdateReportStatus`.
- Реализована логика возврата к списку в зависимости от роли пользователя, если заявка не найдена.
- Добавлен метод `RemoveAdminFromDatabase` для удаления администратора из базы данных.
This commit is contained in:
107 2025-03-21 09:39:31 +07:00
parent 621f8c25c8
commit e26002b16a

View File

@ -1145,7 +1145,7 @@ class Program
{ {
await connection.OpenAsync(); await connection.OpenAsync();
var command = connection.CreateCommand(); var command = connection.CreateCommand();
command.CommandText = "SELECT Priority, Room, Description, ReporterName, Status, DateCreated, AdminId FROM Reports WHERE Id = @id"; command.CommandText = "SELECT Priority, Room, Description, ReporterName, Status, DateCreated, AdminId, ChatId FROM Reports WHERE Id = @id";
command.Parameters.AddWithValue("@id", reportId); command.Parameters.AddWithValue("@id", reportId);
using (var reader = await command.ExecuteReaderAsync()) using (var reader = await command.ExecuteReaderAsync())
@ -1158,6 +1158,7 @@ class Program
string reporterName = reader.GetString(3); string reporterName = reader.GetString(3);
string status = reader.GetString(4); string status = reader.GetString(4);
string dateCreated = reader.GetDateTime(5).ToString("yyyy-MM-dd HH:mm:ss"); string dateCreated = reader.GetDateTime(5).ToString("yyyy-MM-dd HH:mm:ss");
long ownerChatId = reader.GetInt64(7);
// Проверяем существование столбца AdminId // Проверяем существование столбца AdminId
long adminId = 0; long adminId = 0;
@ -1178,7 +1179,13 @@ class Program
string priorityEmoji = GetPriorityEmoji(priority); string priorityEmoji = GetPriorityEmoji(priority);
string statusEmoji = GetStatusEmoji(status); string statusEmoji = GetStatusEmoji(status);
var statusButtons = new InlineKeyboardMarkup(new[] InlineKeyboardMarkup keyboard;
// Разные клавиатуры для админов и обычных пользователей
if (admins.Contains(chatId))
{
// Клавиатура для администраторов с возможностью изменения статуса
keyboard = new InlineKeyboardMarkup(new[]
{ {
new[] new[]
{ {
@ -1199,6 +1206,23 @@ class Program
InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu") InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu")
} }
}); });
}
else
{
// Клавиатура для обычных пользователей - только удаление своих заявок
keyboard = new InlineKeyboardMarkup(new[]
{
new[]
{
InlineKeyboardButton.WithCallbackData("❌ Удалить заявку", $"delete_{reportId}")
},
new[]
{
InlineKeyboardButton.WithCallbackData("🔙 Назад к списку", "user_reports"),
InlineKeyboardButton.WithCallbackData("🏠 Главное меню", "main_menu")
}
});
}
string newText = $"Заявка #{reportId}\n\n" + string newText = $"Заявка #{reportId}\n\n" +
$"Приоритет: {priorityEmoji} {priority}\n" + $"Приоритет: {priorityEmoji} {priority}\n" +
@ -1212,7 +1236,7 @@ class Program
await botClient.SendMessage( await botClient.SendMessage(
chatId: chatId, chatId: chatId,
text: newText, text: newText,
replyMarkup: statusButtons replyMarkup: keyboard
); );
} }
else else
@ -1224,8 +1248,17 @@ class Program
); );
Log.Warning($"Заявка #{reportId} не найдена при попытке просмотра деталей."); Log.Warning($"Заявка #{reportId} не найдена при попытке просмотра деталей.");
await Task.Delay(2000); await Task.Delay(2000);
// Возвращаем к нужному списку в зависимости от роли пользователя
if (admins.Contains(chatId))
{
await ViewReports(botClient, chatId); await ViewReports(botClient, chatId);
} }
else
{
await ViewUserReports(botClient, chatId);
}
}
} }
} }
} }
@ -1242,6 +1275,7 @@ class Program
// Метод для удаления администратора из базы данных // Метод для удаления администратора из базы данных
private static async Task RemoveAdminFromDatabase(long chatId) private static async Task RemoveAdminFromDatabase(long chatId)
{ {
@ -1548,6 +1582,12 @@ class Program
{ {
try try
{ {
if (!admins.Contains(changerId))
{
Log.Warning($"Попытка изменения статуса пользователем без прав администратора: {changerId}");
return; // Прерываем выполнение, если пользователь не администратор
}
string oldStatus = ""; string oldStatus = "";
long userChatId = 0; long userChatId = 0;