fix: Bot registration duplicate prevention and SilverPay integration update
All checks were successful
Build and Deploy LittleShop / Deploy to Production VPS (Manual Only) (push) Has been skipped
Build and Deploy LittleShop / Deploy to Pre-Production (CT109) (push) Successful in 1m1s

- Fixed BotService to prevent duplicate bot registrations by checking for existing bot with same name/type
- Updated existing bot record instead of creating duplicates on re-registration
- Configured SilverPay integration with production API key
- Updated TeleBot configuration for local development (localhost API URL, Tor disabled)

This ensures single bot instances and proper payment gateway integration for testing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
sysadmin 2025-11-17 15:56:23 +00:00
parent 8dfaa7e0f7
commit 1d249d13ba
3 changed files with 37 additions and 6 deletions

View File

@ -26,8 +26,39 @@ public class BotService : IBotService
public async Task<BotRegistrationResponseDto> RegisterBotAsync(BotRegistrationDto dto)
{
_logger.LogInformation("Registering new bot: {BotName}", dto.Name);
_logger.LogInformation("Registering bot: {BotName} (Type: {BotType})", dto.Name, dto.Type);
// Check if a bot with the same name and type already exists
var existingBot = await _context.Bots
.FirstOrDefaultAsync(b => b.Name == dto.Name && b.Type == dto.Type);
if (existingBot != null)
{
_logger.LogInformation("Bot already exists: {BotId}. Updating existing bot instead of creating duplicate.", existingBot.Id);
// Update existing bot
existingBot.Description = dto.Description;
existingBot.Version = dto.Version;
existingBot.Settings = JsonSerializer.Serialize(dto.InitialSettings);
existingBot.PersonalityName = string.IsNullOrEmpty(dto.PersonalityName) ? existingBot.PersonalityName : dto.PersonalityName;
existingBot.Status = BotStatus.Active;
existingBot.IsActive = true;
existingBot.LastConfigSyncAt = DateTime.UtcNow;
await _context.SaveChangesAsync();
_logger.LogInformation("Existing bot updated: {BotId}", existingBot.Id);
return new BotRegistrationResponseDto
{
BotId = existingBot.Id,
BotKey = existingBot.BotKey,
Name = existingBot.Name,
Settings = dto.InitialSettings
};
}
// Create new bot if none exists
var botKey = await GenerateBotKeyAsync();
var bot = new Bot
@ -48,7 +79,7 @@ public class BotService : IBotService
_context.Bots.Add(bot);
await _context.SaveChangesAsync();
_logger.LogInformation("Bot registered successfully: {BotId}", bot.Id);
_logger.LogInformation("New bot registered successfully: {BotId}", bot.Id);
return new BotRegistrationResponseDto
{

View File

@ -10,7 +10,7 @@
},
"SilverPay": {
"BaseUrl": "http://10.0.0.51:5500",
"ApiKey": "sp_test_key_development",
"ApiKey": "OCTk42VKenf5KZqKDDRAAskxf53yJsEby72j99Fc",
"WebhookSecret": "webhook_secret_dev",
"DefaultWebhookUrl": "http://localhost:5000/api/orders/payments/webhook",
"AllowUnsignedWebhooks": true

View File

@ -20,7 +20,7 @@
"Comment": "Optional secret key for webhook authentication"
},
"LittleShop": {
"ApiUrl": "http://littleshop:5000",
"ApiUrl": "http://localhost:5000",
"OnionUrl": "",
"Username": "admin",
"Password": "admin",
@ -34,7 +34,7 @@
"EnableAnalytics": false,
"RequirePGPForShipping": false,
"EphemeralByDefault": true,
"EnableTor": true,
"EnableTor": false,
"TorSocksHost": "tor-gateway",
"TorSocksPort": 9050,
"TorControlPort": 9051,