119 lines
3.1 KiB
TypeScript
119 lines
3.1 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import { dailyService } from '@/services/task-management/daily';
|
|
import {
|
|
getToday,
|
|
parseDate,
|
|
isValidAPIDate,
|
|
createDateFromParts,
|
|
} from '@/lib/date-utils';
|
|
|
|
/**
|
|
* API route pour récupérer la vue daily (hier + aujourd'hui)
|
|
*/
|
|
export async function GET(request: Request) {
|
|
try {
|
|
const { searchParams } = new URL(request.url);
|
|
|
|
const action = searchParams.get('action');
|
|
const date = searchParams.get('date');
|
|
|
|
if (action === 'history') {
|
|
// Récupérer l'historique
|
|
const limit = parseInt(searchParams.get('limit') || '30');
|
|
const history = await dailyService.getCheckboxHistory(limit);
|
|
return NextResponse.json(history);
|
|
}
|
|
|
|
if (action === 'search') {
|
|
// Recherche dans les checkboxes
|
|
const query = searchParams.get('q') || '';
|
|
const limit = parseInt(searchParams.get('limit') || '20');
|
|
|
|
if (!query.trim()) {
|
|
return NextResponse.json(
|
|
{ error: 'Query parameter required' },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
const checkboxes = await dailyService.searchCheckboxes(query, limit);
|
|
return NextResponse.json(checkboxes);
|
|
}
|
|
|
|
// Vue daily pour une date donnée (ou aujourd'hui par défaut)
|
|
let targetDate: Date;
|
|
|
|
if (date) {
|
|
if (!isValidAPIDate(date)) {
|
|
return NextResponse.json(
|
|
{ error: 'Format de date invalide. Utilisez YYYY-MM-DD' },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
targetDate = parseDate(date);
|
|
} else {
|
|
targetDate = getToday();
|
|
}
|
|
|
|
const dailyView = await dailyService.getDailyView(targetDate);
|
|
return NextResponse.json(dailyView);
|
|
} catch (error) {
|
|
console.error('Erreur lors de la récupération du daily:', error);
|
|
return NextResponse.json(
|
|
{ error: 'Erreur interne du serveur' },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* API route pour ajouter une checkbox
|
|
*/
|
|
export async function POST(request: Request) {
|
|
try {
|
|
const body = await request.json();
|
|
|
|
// Validation des données
|
|
if (!body.date || !body.text) {
|
|
return NextResponse.json(
|
|
{ error: 'Date et text sont requis' },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Parser la date de façon plus robuste
|
|
let date: Date;
|
|
if (typeof body.date === 'string') {
|
|
// Si c'est une string YYYY-MM-DD, créer une date locale
|
|
const [year, month, day] = body.date.split('-').map(Number);
|
|
date = createDateFromParts(year, month, day);
|
|
} else {
|
|
date = parseDate(body.date);
|
|
}
|
|
|
|
if (isNaN(date.getTime())) {
|
|
return NextResponse.json(
|
|
{ error: 'Format de date invalide. Utilisez YYYY-MM-DD' },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
const checkbox = await dailyService.addCheckbox({
|
|
date,
|
|
text: body.text,
|
|
type: body.type,
|
|
taskId: body.taskId,
|
|
order: body.order,
|
|
isChecked: body.isChecked,
|
|
});
|
|
|
|
return NextResponse.json(checkbox, { status: 201 });
|
|
} catch (error) {
|
|
console.error("Erreur lors de l'ajout de la checkbox:", error);
|
|
return NextResponse.json(
|
|
{ error: 'Erreur interne du serveur' },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|