eletrotupi / tcc/ frontend/lib/history/mappers.ts88aa4c0cec7d53aa6e9cd26bd6c0d90551e4616e
1.5 KB | 53 lines Raw
1
import type { HistoryCard } from '@/lib/history/types'
2
import type { MoodEntry, SleepRecord } from '@/lib/api';
3
import { getMood } from '@/constants/moods';
4
import { parse } from 'date-fns';
5

6
export function mapMoodToHistoryCard(mood: MoodEntry): HistoryCard {
7
  const moodLabel = getMood(mood.selectedMood) ?? mood.selectedMood
8
  const components = mood.moodComponents
9
    .map(c => c.component.charAt(0) + c.component.slice(1).toLowerCase())
10
    .join(', ')
11

12
  const summary = [
13
    components || null,
14
    mood.annotation || null,
15
  ].filter(Boolean).join(' · ')
16

17
  return {
18
    id: `mood-${mood.id}`,
19
    category: 'mood',
20
    timestamp: mood.moment,
21
    title: moodLabel,
22
    summary: summary || 'Sem detalhes',
23
    badge: undefined,
24
    raw: mood
25
  }
26
}
27

28
// Sleep Records
29

30
function sleepQualityBadge(hours: number): HistoryCard['badge'] {
31
  if (hours >= 7) return { label: 'Excelente', variant: 'success' }
32
  if (hours >= 5) return { label: 'Regular',   variant: 'warning' }
33

34
  return {
35
    label: 'Ruim', variant: 'danger'
36
  }
37
}
38

39
export function mapSleepToHistoryCard(record: SleepRecord): HistoryCard {
40
  const hours   = Math.floor(record.average)
41
  const minutes = Math.round((record.average - hours) * 60)
42
  const duration = `${hours}h ${minutes.toString().padStart(2, '0')}min`
43

44
  return {
45
    id: `sleep-${record.id}`,
46
    category: 'sleep',
47
    timestamp: record.date,
48
    title: 'Sono',
49
    summary: [duration, record.annotations].filter(Boolean).join(' · '),
50
    badge: sleepQualityBadge(record.average),
51
    raw: record
52
  }
53
}