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;
|
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
Reference in New Issue
Block a user