Les élèves n'avaient aucun moyen de voir leur emploi du temps depuis l'application. Cette fonctionnalité ajoute une page dédiée avec deux modes de visualisation (jour et semaine), la navigation temporelle, et le détail des cours au tap. Le backend résout l'EDT de l'élève en chaînant : affectation classe → créneaux récurrents + exceptions + calendrier scolaire → enrichissement des noms (matières/enseignants). Le frontend utilise un cache offline (Workbox NetworkFirst) pour rester consultable hors connexion.
110 lines
2.4 KiB
TypeScript
110 lines
2.4 KiB
TypeScript
import { sveltekit } from '@sveltejs/kit/vite';
|
|
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
|
|
import { defineConfig } from 'vitest/config';
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
sveltekit(),
|
|
SvelteKitPWA({
|
|
srcDir: 'src',
|
|
mode: 'development',
|
|
strategies: 'generateSW',
|
|
scope: '/',
|
|
base: '/',
|
|
manifest: {
|
|
name: 'Classeo',
|
|
short_name: 'Classeo',
|
|
description: 'Application de gestion scolaire',
|
|
theme_color: '#3b82f6',
|
|
background_color: '#ffffff',
|
|
display: 'standalone',
|
|
start_url: '/',
|
|
categories: ['education'],
|
|
icons: [
|
|
{
|
|
src: 'pwa-192x192.png',
|
|
sizes: '192x192',
|
|
type: 'image/png'
|
|
},
|
|
{
|
|
src: 'pwa-512x512.png',
|
|
sizes: '512x512',
|
|
type: 'image/png'
|
|
},
|
|
{
|
|
src: 'pwa-512x512.png',
|
|
sizes: '512x512',
|
|
type: 'image/png',
|
|
purpose: 'any maskable'
|
|
}
|
|
],
|
|
shortcuts: [
|
|
{
|
|
name: 'Mon emploi du temps',
|
|
short_name: 'EDT',
|
|
url: '/dashboard/schedule',
|
|
description: 'Consulter mon emploi du temps'
|
|
}
|
|
]
|
|
},
|
|
workbox: {
|
|
globPatterns: ['**/*.{js,css,html,ico,png,svg,webp,woff,woff2}'],
|
|
runtimeCaching: [
|
|
{
|
|
urlPattern: /\/api\/me\/schedule\//,
|
|
handler: 'NetworkFirst',
|
|
options: {
|
|
cacheName: 'schedule-v1',
|
|
expiration: {
|
|
maxEntries: 90,
|
|
maxAgeSeconds: 30 * 24 * 60 * 60
|
|
},
|
|
networkTimeoutSeconds: 5,
|
|
cacheableResponse: {
|
|
statuses: [0, 200]
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
devOptions: {
|
|
enabled: false,
|
|
type: 'module',
|
|
navigateFallback: '/'
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
}) as any
|
|
],
|
|
test: {
|
|
include: ['src/**/*.{test,spec}.{js,ts}', 'tests/**/*.{test,spec}.{js,ts}'],
|
|
globals: true,
|
|
environment: 'jsdom',
|
|
server: {
|
|
deps: {
|
|
inline: [/svelte/]
|
|
}
|
|
},
|
|
alias: {
|
|
$lib: '/src/lib',
|
|
$app: '/node_modules/@sveltejs/kit/src/runtime/app'
|
|
}
|
|
},
|
|
resolve: {
|
|
conditions: ['browser']
|
|
},
|
|
server: {
|
|
host: '0.0.0.0',
|
|
port: 5173,
|
|
strictPort: true,
|
|
// Autorise les sous-domaines pour le multi-tenant (dev + prod)
|
|
allowedHosts: ['.classeo.local', '.classeo.fr', 'localhost']
|
|
},
|
|
preview: {
|
|
host: '0.0.0.0',
|
|
port: 4173,
|
|
strictPort: true,
|
|
// Autorise les sous-domaines pour les tests E2E multi-tenant
|
|
allowedHosts: ['.classeo.local', '.classeo.fr', 'localhost']
|
|
}
|
|
});
|