47 lines
1.7 KiB
JavaScript
47 lines
1.7 KiB
JavaScript
import Project from '#models/project';
|
|
export default class ProjectsController {
|
|
async index({ request, response }) {
|
|
const query = Project.query().preload('category');
|
|
const sort = request.qs().sort;
|
|
if (sort === 'start:desc') {
|
|
query.orderBy('start', 'desc');
|
|
}
|
|
const projects = await query;
|
|
return response.ok({
|
|
data: projects.map((p) => ({
|
|
id: p.id,
|
|
title: p.title,
|
|
category: p.category ? { name: p.category.name } : null,
|
|
})),
|
|
});
|
|
}
|
|
async show({ params, response }) {
|
|
const numericId = Number(params.id);
|
|
const query = Project.query()
|
|
.preload('category')
|
|
.preload('tags')
|
|
.preload('trainings');
|
|
const project = await query.where('id', numericId).first();
|
|
if (!project) {
|
|
return response.notFound({ data: null });
|
|
}
|
|
return response.ok({
|
|
data: {
|
|
title: project.title,
|
|
content: project.content,
|
|
start: project.start?.toISODate() ?? null,
|
|
end: project.end?.toISODate() ?? null,
|
|
thumbnail: project.thumbnailUrl ? [{ url: project.thumbnailUrl }] : [],
|
|
tags: project.tags.map((t) => ({ name: t.name, color: t.color })),
|
|
trainings: project.trainings.map((t) => ({
|
|
name: t.name,
|
|
start: t.start?.toISODate(),
|
|
end: t.end?.toISODate(),
|
|
skill: t.skill,
|
|
place: t.place,
|
|
})),
|
|
},
|
|
});
|
|
}
|
|
}
|
|
//# sourceMappingURL=projects_controller.js.map
|