using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using LittleShop.Services; using LittleShop.DTOs; using LittleShop.Data; namespace LittleShop.Controllers; [ApiController] [Route("api/[controller]")] public class TestController : ControllerBase { private readonly ICategoryService _categoryService; private readonly IProductService _productService; private readonly LittleShopContext _context; public TestController(ICategoryService categoryService, IProductService productService, LittleShopContext context) { _categoryService = categoryService; _productService = productService; _context = context; } [HttpPost("create-product")] public async Task CreateTestProduct() { try { // Get the first category var categories = await _categoryService.GetAllCategoriesAsync(); var firstCategory = categories.FirstOrDefault(); if (firstCategory == null) { return BadRequest("No categories found. Create a category first."); } var product = await _productService.CreateProductAsync(new CreateProductDto { Name = "Test Product via API", Description = "This product was created via the test API endpoint 🚀", Price = 49.99m, Weight = 0.5m, WeightUnit = LittleShop.Enums.ProductWeightUnit.Pounds, CategoryId = firstCategory.Id }); return Ok(new { message = "Product created successfully", product = product }); } catch (Exception ex) { return BadRequest(new { error = ex.Message }); } } [HttpPost("setup-test-data")] public async Task SetupTestData() { try { // Create test category var category = await _categoryService.CreateCategoryAsync(new CreateCategoryDto { Name = "Electronics", Description = "Electronic devices and gadgets" }); // Create test product var product = await _productService.CreateProductAsync(new CreateProductDto { Name = "Sample Product", Description = "This is a test product with emoji support 📱💻", Price = 99.99m, Weight = 1.5m, WeightUnit = LittleShop.Enums.ProductWeightUnit.Pounds, CategoryId = category.Id }); return Ok(new { message = "Test data created successfully", category = category, product = product }); } catch (Exception ex) { return BadRequest(new { error = ex.Message }); } } [HttpPost("cleanup-bots")] public async Task CleanupBots() { try { // Get count before cleanup var totalBots = await _context.Bots.CountAsync(); // Keep only the most recent active bot per platform var keepBots = await _context.Bots .Where(b => b.IsActive && b.Status == Enums.BotStatus.Active) .GroupBy(b => b.PlatformId) .Select(g => g.OrderByDescending(b => b.LastSeenAt ?? b.CreatedAt).First()) .ToListAsync(); var keepBotIds = keepBots.Select(b => b.Id).ToList(); // Delete old/inactive bots and related data var botsToDelete = await _context.Bots .Where(b => !keepBotIds.Contains(b.Id)) .ToListAsync(); _context.Bots.RemoveRange(botsToDelete); await _context.SaveChangesAsync(); var deletedCount = botsToDelete.Count; var remainingCount = keepBots.Count; return Ok(new { message = "Bot cleanup completed", totalBots = totalBots, deletedBots = deletedCount, remainingBots = remainingCount, keptBots = keepBots.Select(b => new { id = b.Id, name = b.Name, platformUsername = b.PlatformUsername, lastSeen = b.LastSeenAt, created = b.CreatedAt }) }); } catch (Exception ex) { return BadRequest(new { error = ex.Message }); } } }