using Microsoft.AspNetCore.Mvc; using HardwarePerformance.Infrastructure.Data; namespace HardwarePerformance.API.Controllers; [ApiController] [Route("api/[controller]")] public class TestController : ControllerBase { private readonly SimpleAppDbContext _context; private readonly ILogger _logger; public TestController(SimpleAppDbContext context, ILogger logger) { _context = context; _logger = logger; } [HttpGet("database-status")] public async Task GetDatabaseStatus() { try { var isConnected = await _context.TestConnectionAsync(); return Ok(new { IsConnected = isConnected, Message = isConnected ? "数据库连接成功" : "数据库连接失败", Timestamp = DateTime.Now }); } catch (Exception ex) { _logger.LogError(ex, "检查数据库连接时发生错误"); return StatusCode(500, new { IsConnected = false, Message = $"检查数据库连接时发生错误: {ex.Message}", Timestamp = DateTime.Now }); } } [HttpPost("initialize-database")] public async Task InitializeDatabase() { try { await _context.InitializeDatabaseAsync(); await _context.SeedInitialDataAsync(); return Ok(new { Message = "数据库初始化成功,种子数据已添加", Timestamp = DateTime.Now }); } catch (Exception ex) { _logger.LogError(ex, "初始化数据库时发生错误"); return StatusCode(500, new { Message = $"初始化数据库时发生错误: {ex.Message}", Timestamp = DateTime.Now }); } } [HttpGet("categories")] public async Task GetCategories() { try { var categories = new List(); using var connection = new MySql.Data.MySqlClient.MySqlConnection( "Server=localhost;Database=HardwarePerformance;User=root;Password=123456;"); await connection.OpenAsync(); using var cmd = new MySql.Data.MySqlClient.MySqlCommand("SELECT * FROM Categories", connection); using var reader = await cmd.ExecuteReaderAsync(); while (await reader.ReadAsync()) { categories.Add(new { Id = reader.GetInt32("Id"), Name = reader.GetString("Name"), Description = reader.IsDBNull("Description") ? null : reader.GetString("Description"), CreatedAt = reader.GetDateTime("CreatedAt") }); } return Ok(categories); } catch (Exception ex) { _logger.LogError(ex, "获取类别列表时发生错误"); return StatusCode(500, new { Message = $"获取类别列表时发生错误: {ex.Message}", Timestamp = DateTime.Now }); } } [HttpGet("products")] public async Task GetProducts() { try { var products = new List(); using var connection = new MySql.Data.MySqlClient.MySqlConnection( "Server=localhost;Database=HardwarePerformance;User=root;Password=123456;"); await connection.OpenAsync(); using var cmd = new MySql.Data.MySqlClient.MySqlCommand( @"SELECT p.*, c.Name as CategoryName FROM Products p LEFT JOIN Categories c ON p.CategoryId = c.Id", connection); using var reader = await cmd.ExecuteReaderAsync(); while (await reader.ReadAsync()) { products.Add(new { Id = reader.GetInt32("Id"), Name = reader.GetString("Name"), Model = reader.IsDBNull("Model") ? null : reader.GetString("Model"), Manufacturer = reader.IsDBNull("Manufacturer") ? null : reader.GetString("Manufacturer"), ImageUrl = reader.IsDBNull("ImageUrl") ? null : reader.GetString("ImageUrl"), ReleaseDate = reader.IsDBNull("ReleaseDate") ? (DateTime?)null : reader.GetDateTime("ReleaseDate"), CategoryId = reader.IsDBNull("CategoryId") ? (int?)null : reader.GetInt32("CategoryId"), CategoryName = reader.IsDBNull("CategoryName") ? null : reader.GetString("CategoryName"), CurrentRank = reader.IsDBNull("CurrentRank") ? (int?)null : reader.GetInt32("CurrentRank"), CreatedAt = reader.GetDateTime("CreatedAt") }); } return Ok(products); } catch (Exception ex) { _logger.LogError(ex, "获取产品列表时发生错误"); return StatusCode(500, new { Message = $"获取产品列表时发生错误: {ex.Message}", Timestamp = DateTime.Now }); } } }