80 lines
2.3 KiB
TypeScript
80 lines
2.3 KiB
TypeScript
|
import type { Goal } from "@/domain/entities/Goal"
|
||
|
import { GoalBoolean, GoalNumeric } from "@/domain/entities/Goal"
|
||
|
import type { HabitCreateData, HabitEditData } from "@/domain/entities/Habit"
|
||
|
import { Habit } from "@/domain/entities/Habit"
|
||
|
import type {
|
||
|
SupabaseHabit,
|
||
|
SupabaseHabitInsert,
|
||
|
SupabaseHabitUpdate,
|
||
|
} from "../supabase"
|
||
|
|
||
|
export const habitSupabaseDTO = {
|
||
|
fromSupabaseToDomain: (supabaseHabit: SupabaseHabit): Habit => {
|
||
|
let goal: Goal
|
||
|
if (
|
||
|
supabaseHabit.goal_target != null &&
|
||
|
supabaseHabit.goal_target_unit != null
|
||
|
) {
|
||
|
goal = new GoalNumeric({
|
||
|
frequency: supabaseHabit.goal_frequency,
|
||
|
target: {
|
||
|
value: supabaseHabit.goal_target,
|
||
|
unit: supabaseHabit.goal_target_unit,
|
||
|
},
|
||
|
})
|
||
|
} else {
|
||
|
goal = new GoalBoolean({
|
||
|
frequency: supabaseHabit.goal_frequency,
|
||
|
})
|
||
|
}
|
||
|
const habit = new Habit({
|
||
|
id: supabaseHabit.id.toString(),
|
||
|
name: supabaseHabit.name,
|
||
|
color: supabaseHabit.color,
|
||
|
icon: supabaseHabit.icon,
|
||
|
userId: supabaseHabit.user_id.toString(),
|
||
|
startDate: new Date(supabaseHabit.start_date),
|
||
|
endDate:
|
||
|
supabaseHabit.end_date != null
|
||
|
? new Date(supabaseHabit.end_date)
|
||
|
: undefined,
|
||
|
goal,
|
||
|
})
|
||
|
return habit
|
||
|
},
|
||
|
fromDomainCreateDataToSupabaseInsert: (
|
||
|
habitCreateData: HabitCreateData,
|
||
|
): SupabaseHabitInsert => {
|
||
|
return {
|
||
|
name: habitCreateData.name,
|
||
|
color: habitCreateData.color,
|
||
|
icon: habitCreateData.icon,
|
||
|
goal_frequency: habitCreateData.goal.frequency,
|
||
|
...(habitCreateData.goal.target.type === "numeric"
|
||
|
? {
|
||
|
goal_target: habitCreateData.goal.target.value,
|
||
|
goal_target_unit: habitCreateData.goal.target.unit,
|
||
|
}
|
||
|
: {}),
|
||
|
}
|
||
|
},
|
||
|
fromDomainEditDataToSupabaseUpdate: (
|
||
|
habitEditData: HabitEditData,
|
||
|
): SupabaseHabitUpdate => {
|
||
|
return {
|
||
|
name: habitEditData.name,
|
||
|
color: habitEditData.color,
|
||
|
icon: habitEditData.icon,
|
||
|
end_date: habitEditData?.endDate?.toISOString(),
|
||
|
}
|
||
|
},
|
||
|
}
|
||
|
|
||
|
export const habitsSupabaseDTO = {
|
||
|
fromSupabaseToDomain: (supabaseHabits: SupabaseHabit[]): Habit[] => {
|
||
|
return supabaseHabits.map((supabaseHabit) => {
|
||
|
return habitSupabaseDTO.fromSupabaseToDomain(supabaseHabit)
|
||
|
})
|
||
|
},
|
||
|
}
|