setting up test functionality
This commit is contained in:
74
lib/daily-quiz-storage.ts
Normal file
74
lib/daily-quiz-storage.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import {
|
||||
computeAvatarCondition,
|
||||
normalizeDailyQuizAnswers,
|
||||
type AvatarCondition,
|
||||
type DailyQuizAnswers,
|
||||
type DailyQuizSubmission,
|
||||
} from "@/lib/avatar-state";
|
||||
import { notifyHabitPetDataUpdated } from "@/lib/app-events";
|
||||
const STORAGE_KEY = "habit-pet-daily-quiz";
|
||||
|
||||
export function getTodayDateKey(date = new Date()) {
|
||||
return date.toISOString().slice(0, 10);
|
||||
}
|
||||
|
||||
function normalizeSubmission(
|
||||
submission: DailyQuizSubmission,
|
||||
): DailyQuizSubmission {
|
||||
const answers = normalizeDailyQuizAnswers(submission.answers);
|
||||
|
||||
return {
|
||||
...submission,
|
||||
answers,
|
||||
condition: computeAvatarCondition(answers),
|
||||
};
|
||||
}
|
||||
|
||||
export function getDailyQuizSubmission(): DailyQuizSubmission | null {
|
||||
if (typeof window === "undefined") {
|
||||
return null;
|
||||
}
|
||||
|
||||
const raw = window.localStorage.getItem(STORAGE_KEY);
|
||||
|
||||
if (!raw) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return normalizeSubmission(JSON.parse(raw) as DailyQuizSubmission);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export function hasCompletedDailyQuizToday() {
|
||||
const submission = getDailyQuizSubmission();
|
||||
return submission?.date === getTodayDateKey();
|
||||
}
|
||||
|
||||
export function saveDailyQuizSubmission(
|
||||
answers: DailyQuizAnswers,
|
||||
): DailyQuizSubmission {
|
||||
const submission: DailyQuizSubmission = {
|
||||
date: getTodayDateKey(),
|
||||
answers,
|
||||
condition: computeAvatarCondition(answers),
|
||||
};
|
||||
|
||||
window.localStorage.setItem(STORAGE_KEY, JSON.stringify(submission));
|
||||
|
||||
notifyHabitPetDataUpdated();
|
||||
|
||||
return submission;
|
||||
}
|
||||
|
||||
export function getAvatarConditionForToday(): AvatarCondition | null {
|
||||
const submission = getDailyQuizSubmission();
|
||||
|
||||
if (!submission || submission.date !== getTodayDateKey()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return submission.condition;
|
||||
}
|
||||
Reference in New Issue
Block a user