fix: Transform sleep voice command duration to startTime/endTime format
Some checks failed
CI/CD Pipeline / Lint and Test (push) Has been cancelled
CI/CD Pipeline / E2E Tests (push) Has been cancelled
CI/CD Pipeline / Build Application (push) Has been cancelled

Voice classification extracts duration in minutes, but sleep tracker expects
startTime/endTime. Added transformation logic to convert duration to proper
time range for sleep activities.

- Convert duration (minutes) to startTime + endTime timestamps
- Set default quality='good' and location='crib' if not specified
- Remove duration field after transformation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-04 08:00:11 +00:00
parent 53e375724b
commit 962d0fb5ed
2 changed files with 25 additions and 3 deletions

View File

@@ -173,11 +173,33 @@ export function VoiceFloatingButton() {
const childId = children[0].id; const childId = children[0].id;
console.log('[Voice] Using child ID:', childId); console.log('[Voice] Using child ID:', childId);
// Transform sleep activity data - convert duration to startTime/endTime
let transformedDetails = { ...activityDetails };
const startTimestamp = activityTimestamp ? new Date(activityTimestamp) : new Date();
if (activityType === 'sleep' && activityDetails.duration) {
const durationMinutes = Number(activityDetails.duration);
const endTime = new Date(startTimestamp.getTime() + durationMinutes * 60 * 1000);
transformedDetails = {
...activityDetails,
startTime: startTimestamp.toISOString(),
endTime: endTime.toISOString(),
quality: activityDetails.quality || 'good',
location: activityDetails.location || 'crib',
};
// Remove duration as it's now represented by startTime/endTime
delete transformedDetails.duration;
console.log('[Voice] Transformed sleep data - duration', durationMinutes, 'minutes to startTime/endTime');
}
// Create the activity - use frontend API format (trackingApi transforms to backend DTO) // Create the activity - use frontend API format (trackingApi transforms to backend DTO)
const activityData = { const activityData = {
type: activityType, type: activityType,
timestamp: activityTimestamp ? new Date(activityTimestamp).toISOString() : new Date().toISOString(), timestamp: startTimestamp.toISOString(),
data: activityDetails, data: transformedDetails,
notes: activityDetails.notes || undefined, notes: activityDetails.notes || undefined,
}; };

File diff suppressed because one or more lines are too long