fix: Transform sleep voice command duration to startTime/endTime format
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:
@@ -173,11 +173,33 @@ export function VoiceFloatingButton() {
|
||||
const childId = children[0].id;
|
||||
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)
|
||||
const activityData = {
|
||||
type: activityType,
|
||||
timestamp: activityTimestamp ? new Date(activityTimestamp).toISOString() : new Date().toISOString(),
|
||||
data: activityDetails,
|
||||
timestamp: startTimestamp.toISOString(),
|
||||
data: transformedDetails,
|
||||
notes: activityDetails.notes || undefined,
|
||||
};
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user