Files
pig-farm-controller/internal/app/dto/monitor_dto.go
2025-10-18 15:36:32 +08:00

177 lines
5.7 KiB
Go

package dto
import (
"encoding/json"
"time"
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
)
// --- General ---
// PaginationDTO 定义了分页信息的标准结构
type PaginationDTO struct {
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
// --- SensorData ---
// ListSensorDataRequest 定义了获取传感器数据列表的请求参数
type ListSensorDataRequest struct {
Page int `form:"page,default=1"`
PageSize int `form:"pageSize,default=10"`
DeviceID *uint `form:"device_id"`
SensorType *string `form:"sensor_type"`
StartTime *time.Time `form:"start_time" time_format:"rfc3339"`
EndTime *time.Time `form:"end_time" time_format:"rfc3339"`
OrderBy string `form:"order_by"`
}
// SensorDataDTO 是用于API响应的传感器数据结构
type SensorDataDTO struct {
Time time.Time `json:"time"`
DeviceID uint `json:"device_id"`
RegionalControllerID uint `json:"regional_controller_id"`
SensorType models.SensorType `json:"sensor_type"`
Data json.RawMessage `json:"data"`
}
// ListSensorDataResponse 是获取传感器数据列表的响应结构
type ListSensorDataResponse struct {
List []SensorDataDTO `json:"list"`
Pagination PaginationDTO `json:"pagination"`
}
// NewListSensorDataResponse 从模型数据创建列表响应 DTO
func NewListSensorDataResponse(data []models.SensorData, total int64, page, pageSize int) *ListSensorDataResponse {
dtos := make([]SensorDataDTO, len(data))
for i, item := range data {
dtos[i] = SensorDataDTO{
Time: item.Time,
DeviceID: item.DeviceID,
RegionalControllerID: item.RegionalControllerID,
SensorType: item.SensorType,
Data: json.RawMessage(item.Data),
}
}
return &ListSensorDataResponse{
List: dtos,
Pagination: PaginationDTO{
Total: total,
Page: page,
PageSize: pageSize,
},
}
}
// --- DeviceCommandLog ---
// ListDeviceCommandLogRequest 定义了获取设备命令日志列表的请求参数
type ListDeviceCommandLogRequest struct {
Page int `form:"page,default=1"`
PageSize int `form:"pageSize,default=10"`
DeviceID *uint `form:"device_id"`
ReceivedSuccess *bool `form:"received_success"`
StartTime *time.Time `form:"start_time" time_format:"rfc3339"`
EndTime *time.Time `form:"end_time" time_format:"rfc3339"`
OrderBy string `form:"order_by"`
}
// DeviceCommandLogDTO 是用于API响应的设备命令日志结构
type DeviceCommandLogDTO struct {
MessageID string `json:"message_id"`
DeviceID uint `json:"device_id"`
SentAt time.Time `json:"sent_at"`
AcknowledgedAt *time.Time `json:"acknowledged_at"`
ReceivedSuccess bool `json:"received_success"`
}
// ListDeviceCommandLogResponse 是获取设备命令日志列表的响应结构
type ListDeviceCommandLogResponse struct {
List []DeviceCommandLogDTO `json:"list"`
Pagination PaginationDTO `json:"pagination"`
}
// NewListDeviceCommandLogResponse 从模型数据创建列表响应 DTO
func NewListDeviceCommandLogResponse(data []models.DeviceCommandLog, total int64, page, pageSize int) *ListDeviceCommandLogResponse {
dtos := make([]DeviceCommandLogDTO, len(data))
for i, item := range data {
dtos[i] = DeviceCommandLogDTO{
MessageID: item.MessageID,
DeviceID: item.DeviceID,
SentAt: item.SentAt,
AcknowledgedAt: item.AcknowledgedAt,
ReceivedSuccess: item.ReceivedSuccess,
}
}
return &ListDeviceCommandLogResponse{
List: dtos,
Pagination: PaginationDTO{
Total: total,
Page: page,
PageSize: pageSize,
},
}
}
// --- PlanExecutionLog ---
// ListPlanExecutionLogRequest 定义了获取计划执行日志列表的请求参数
type ListPlanExecutionLogRequest struct {
Page int `form:"page,default=1"`
PageSize int `form:"pageSize,default=10"`
PlanID *uint `form:"plan_id"`
Status *string `form:"status"`
StartTime *time.Time `form:"start_time" time_format:"rfc3339"`
EndTime *time.Time `form:"end_time" time_format:"rfc3339"`
OrderBy string `form:"order_by"`
}
// PlanExecutionLogDTO 是用于API响应的计划执行日志结构
type PlanExecutionLogDTO struct {
ID uint `json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
PlanID uint `json:"plan_id"`
Status models.ExecutionStatus `json:"status"`
StartedAt time.Time `json:"started_at"`
EndedAt time.Time `json:"ended_at"`
Error string `json:"error"`
}
// ListPlanExecutionLogResponse 是获取计划执行日志列表的响应结构
type ListPlanExecutionLogResponse struct {
List []PlanExecutionLogDTO `json:"list"`
Pagination PaginationDTO `json:"pagination"`
}
// NewListPlanExecutionLogResponse 从模型数据创建列表响应 DTO
func NewListPlanExecutionLogResponse(data []models.PlanExecutionLog, total int64, page, pageSize int) *ListPlanExecutionLogResponse {
dtos := make([]PlanExecutionLogDTO, len(data))
for i, item := range data {
dtos[i] = PlanExecutionLogDTO{
ID: item.ID,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
PlanID: item.PlanID,
Status: item.Status,
StartedAt: item.StartedAt,
EndedAt: item.EndedAt,
Error: item.Error,
}
}
return &ListPlanExecutionLogResponse{
List: dtos,
Pagination: PaginationDTO{
Total: total,
Page: page,
PageSize: pageSize,
},
}
}