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(); return 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(); } [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); return CreatedAtAction(nameof(GetAllCredentials), new { id = created.Id }, new CredentialResponse { Id = created.Id, Name = created.Name, Username = created.Username, IsDefault = created.IsDefault, Description = created.Description, HasPassword = true }); } [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); return new CredentialResponse { Id = updated.Id, Name = updated.Name, Username = updated.Username, IsDefault = updated.IsDefault, Description = updated.Description, HasPassword = !string.IsNullOrEmpty(updated.Password) }; } catch (KeyNotFoundException) { return NotFound(); } } [HttpDelete("{id}")] public async Task DeleteCredential(long id) { await _credentialService.DeleteCredentialAsync(id); return NoContent(); } } 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; } }