80 lines
2.1 KiB
TypeScript
80 lines
2.1 KiB
TypeScript
import type { SupabaseHabit } from "@/infrastructure/supabase/supabase"
|
|
import { HABIT_MOCK } from "../domain/Habit"
|
|
import { SUPABASE_USER_MOCK } from "./User"
|
|
|
|
interface SupabaseHabitMockCreateOptions {
|
|
id: SupabaseHabit["id"]
|
|
userId: SupabaseHabit["user_id"]
|
|
name: SupabaseHabit["name"]
|
|
color: SupabaseHabit["color"]
|
|
icon: SupabaseHabit["icon"]
|
|
startDate?: Date
|
|
endDate: Date | null
|
|
goalFrequency: SupabaseHabit["goal_frequency"]
|
|
goalTarget: SupabaseHabit["goal_target"] | null
|
|
goalTargetUnit: SupabaseHabit["goal_target_unit"] | null
|
|
}
|
|
const supabaseHabitMockCreate = (
|
|
options: SupabaseHabitMockCreateOptions,
|
|
): SupabaseHabit => {
|
|
const {
|
|
id,
|
|
userId,
|
|
name,
|
|
color,
|
|
icon,
|
|
startDate = new Date(),
|
|
endDate,
|
|
goalFrequency,
|
|
goalTarget,
|
|
goalTargetUnit,
|
|
} = options
|
|
|
|
return {
|
|
id,
|
|
user_id: userId,
|
|
name,
|
|
color,
|
|
icon,
|
|
start_date: startDate.toISOString(),
|
|
end_date: endDate?.toISOString() ?? null,
|
|
goal_frequency: goalFrequency,
|
|
goal_target: goalTarget,
|
|
goal_target_unit: goalTargetUnit,
|
|
}
|
|
}
|
|
|
|
const examplesByNames = Object.fromEntries(
|
|
Object.entries(HABIT_MOCK.examplesByNames).map(([name, habit]) => {
|
|
const goalTarget = habit.goal.isNumeric() ? habit.goal.target.value : null
|
|
const goalTargetUnit = habit.goal.isNumeric()
|
|
? habit.goal.target.unit
|
|
: null
|
|
return [
|
|
name,
|
|
supabaseHabitMockCreate({
|
|
id: Number.parseInt(habit.id, 10),
|
|
userId: SUPABASE_USER_MOCK.example.id,
|
|
name: habit.name,
|
|
color: habit.color,
|
|
icon: habit.icon,
|
|
startDate: habit.startDate,
|
|
endDate: habit.endDate ?? null,
|
|
goalFrequency: habit.goal.frequency,
|
|
goalTarget,
|
|
goalTargetUnit,
|
|
}),
|
|
]
|
|
}),
|
|
) as {
|
|
[key in keyof (typeof HABIT_MOCK)["examplesByNames"]]: SupabaseHabit
|
|
}
|
|
|
|
export const SUPABASE_HABIT_MOCK = {
|
|
create: supabaseHabitMockCreate,
|
|
example:
|
|
examplesByNames[HABIT_MOCK.example.name as keyof typeof examplesByNames],
|
|
examples: Object.values(examplesByNames),
|
|
examplesByNames,
|
|
}
|