using AmtScanner.Api.Models; using AmtScanner.Api.Services; using Microsoft.AspNetCore.Mvc; namespace AmtScanner.Api.Controllers; [ApiController] [Route("api/[controller]")] public class CredentialsController : ControllerBase { private readonly ICredentialService _credentialService; public CredentialsController(ICredentialService credentialService) { _credentialService = credentialService; } [HttpGet] public async Task>>> GetAllCredentials() { var credentials = await _credentialService.GetAllCredentialsAsync(); var result = credentials.Select(c => new CredentialResponse { Id = c.Id, Name = c.Name, Username = c.Username, IsDefault = c.IsDefault, Description = c.Description, HasPassword = !string.IsNullOrEmpty(c.Password) }).ToList(); return Ok(ApiResponse>.Success(result)); } [HttpPost] public async Task>> CreateCredential([FromBody] CredentialRequest request) { var credential = new AmtCredential { Name = request.Name, Username = request.Username, Password = request.Password, IsDefault = request.IsDefault, Description = request.Description }; var created = await _credentialService.CreateCredentialAsync(credential); var response = new CredentialResponse { Id = created.Id, Name = created.Name, Username = created.Username, IsDefault = created.IsDefault, Description = created.Description, HasPassword = true }; return Ok(ApiResponse.Success(response, "创建成功")); } [HttpPut("{id}")] public async Task>> UpdateCredential(long id, [FromBody] CredentialRequest request) { try { var credential = new AmtCredential { Name = request.Name, Username = request.Username, Password = request.Password, IsDefault = request.IsDefault, Description = request.Description }; var updated = await _credentialService.UpdateCredentialAsync(id, credential); var response = new CredentialResponse { Id = updated.Id, Name = updated.Name, Username = updated.Username, IsDefault = updated.IsDefault, Description = updated.Description, HasPassword = !string.IsNullOrEmpty(updated.Password) }; return Ok(ApiResponse.Success(response, "更新成功")); } catch (KeyNotFoundException) { return Ok(ApiResponse.Fail(404, "凭据不存在")); } } [HttpDelete("{id}")] public async Task>> DeleteCredential(long id) { await _credentialService.DeleteCredentialAsync(id); return Ok(ApiResponse.Success(null, "删除成功")); } } public class CredentialRequest { public string Name { get; set; } = string.Empty; public string Username { get; set; } = string.Empty; public string Password { get; set; } = string.Empty; public bool IsDefault { get; set; } public string? Description { get; set; } } public class CredentialResponse { public long Id { get; set; } public string Name { get; set; } = string.Empty; public string Username { get; set; } = string.Empty; public bool IsDefault { get; set; } public string? Description { get; set; } public bool HasPassword { get; set; } }