113 lines
3.3 KiB
TypeScript
113 lines
3.3 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import { prisma } from '@/lib/prisma';
|
|
import { getSession } from '@/lib/session';
|
|
|
|
export async function GET() {
|
|
try {
|
|
const session = await getSession();
|
|
if (!session?.user) {
|
|
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
|
}
|
|
|
|
const preferences = await prisma.userPreferences.findUnique({
|
|
where: { userId: session.user.id },
|
|
});
|
|
|
|
if (!preferences) {
|
|
return NextResponse.json({
|
|
substance: 'nicotine',
|
|
trackingStartDate: null,
|
|
hasCompletedSetup: false,
|
|
dailyGoal: null,
|
|
quitPlan: null,
|
|
userName: null,
|
|
userAge: null,
|
|
});
|
|
}
|
|
|
|
return NextResponse.json({
|
|
substance: preferences.substance,
|
|
trackingStartDate: preferences.trackingStartDate,
|
|
hasCompletedSetup: preferences.hasCompletedSetup,
|
|
dailyGoal: preferences.dailyGoal,
|
|
quitPlan: preferences.quitPlanJson ? JSON.parse(preferences.quitPlanJson) : null,
|
|
userName: preferences.userName,
|
|
userAge: preferences.userAge,
|
|
religion: preferences.religion,
|
|
lastNicotineUsageTime: preferences.lastNicotineUsageTime,
|
|
lastWeedUsageTime: preferences.lastWeedUsageTime,
|
|
});
|
|
} catch (error) {
|
|
console.error('Error fetching preferences:', error);
|
|
return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const session = await getSession();
|
|
if (!session?.user) {
|
|
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
|
}
|
|
|
|
const body = await request.json();
|
|
const {
|
|
substance,
|
|
trackingStartDate,
|
|
hasCompletedSetup,
|
|
dailyGoal,
|
|
quitPlan,
|
|
userName,
|
|
userAge,
|
|
religion,
|
|
lastNicotineUsageTime,
|
|
lastWeedUsageTime
|
|
} = body;
|
|
|
|
const preferences = await prisma.userPreferences.upsert({
|
|
where: { userId: session.user.id },
|
|
update: {
|
|
substance,
|
|
trackingStartDate,
|
|
hasCompletedSetup,
|
|
dailyGoal,
|
|
quitPlanJson: quitPlan ? JSON.stringify(quitPlan) : null,
|
|
userName,
|
|
userAge,
|
|
religion,
|
|
lastNicotineUsageTime,
|
|
lastWeedUsageTime,
|
|
},
|
|
create: {
|
|
userId: session.user.id,
|
|
substance,
|
|
trackingStartDate,
|
|
hasCompletedSetup,
|
|
dailyGoal,
|
|
quitPlanJson: quitPlan ? JSON.stringify(quitPlan) : null,
|
|
userName,
|
|
userAge,
|
|
religion,
|
|
lastNicotineUsageTime,
|
|
lastWeedUsageTime,
|
|
},
|
|
});
|
|
|
|
return NextResponse.json({
|
|
substance: preferences.substance,
|
|
trackingStartDate: preferences.trackingStartDate,
|
|
hasCompletedSetup: preferences.hasCompletedSetup,
|
|
dailyGoal: preferences.dailyGoal,
|
|
quitPlan: preferences.quitPlanJson ? JSON.parse(preferences.quitPlanJson) : null,
|
|
userName: preferences.userName,
|
|
userAge: preferences.userAge,
|
|
religion: preferences.religion,
|
|
lastNicotineUsageTime: preferences.lastNicotineUsageTime,
|
|
lastWeedUsageTime: preferences.lastWeedUsageTime,
|
|
});
|
|
} catch (error) {
|
|
console.error('Error saving preferences:', error);
|
|
return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
|
|
}
|
|
}
|