namespace Fitness_core_BE.DTOs.Agent { // POST /api/agent/enroll (bootstrap, no api-key auth) public class EnrollRequest { public string Code { get; set; } public string AgentName { get; set; } } // POST /api/agent/devices public class RegisterDeviceRequest { public string DeviceName { get; set; } public Guid? DeviceId { get; set; } public string? HardwareId { get; set; } } // POST /api/agent/attendance public class AgentAttendanceRequest { public Guid DeviceId { get; set; } public List Events { get; set; } = new(); } public class AgentAttendanceEvent { public string EmployeeNoString { get; set; } public DateTime Time { get; set; } public string AttendanceStatus { get; set; } } // POST /api/agent/commands/{id}/result public class CommandResultRequest { public bool Success { get; set; } public string? ResultJson { get; set; } } // Full person inventory contains metadata only. Fingerprint template bytes stay // on the terminal and are never uploaded to the cloud. public class DeviceInventoryRequest { public Guid DeviceId { get; set; } public List People { get; set; } = new(); } public class DeviceInventoryPerson { public string EmployeeNo { get; set; } = string.Empty; public string? Name { get; set; } public string? UserType { get; set; } public int FingerprintCount { get; set; } } // POST /api/agent/heartbeat. Device reachability is measured on the LAN by // the agent; the cloud never attempts to connect to a private terminal. public class AgentHeartbeatRequest { public List Devices { get; set; } = new(); } public class AgentDeviceHealthReport { public Guid DeviceId { get; set; } public bool IsOnline { get; set; } } // POST /api/agent/time-bank-cards/redeem -- an RFID-reader-equipped agent station // reporting a card swipe (tap-in or tap-out, see TimeBankCardService.Swipe). FacilityId is // the reader's own fixed station, not something read off the card. public class AgentSwipeTimeBankCardRequest { public string RfidTagId { get; set; } = string.Empty; public Guid FacilityId { get; set; } } }