diff --git a/databases/init/mobility.sql b/databases/init/mobility.sql index 98ac5ae..e69de29 100644 --- a/databases/init/mobility.sql +++ b/databases/init/mobility.sql @@ -1,12 +0,0 @@ -CREATE TABLE IF NOT EXISTS students ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - firstName TEXT NOT NULL, - lastName TEXT NOT NULL, - email TEXT NOT NULL, - promotion TEXT NOT NULL -); -CREATE TABLE IF NOT EXISTS promotions ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - year INTEGER NOT NULL -); diff --git a/databases/mobility.ts b/databases/mobility.ts index 13055f0..9bb1400 100644 --- a/databases/mobility.ts +++ b/databases/mobility.ts @@ -1,21 +1,30 @@ -import { Database } from "@db/sqlite"; +import { DB } from "https://deno.land/x/sqlite/mod.ts"; -export default async function insertIntoMobility(data: Array<{ firstName: string; lastName: string; email: string }>, promoName: string) { +export default function insertIntoMobility( + data: Array<{ firstName: string; lastName: string; email: string }>, + promoName: string +) { try { - const databasePath = "databases/data/mobility.db"; - const db = new Database(databasePath); + const db = new DB("databases/data/mobility.db"); - db.transaction(() => { - for (const student of data) { - db.query( - "INSERT INTO students (firstName, lastName, email, promotion) VALUES (?, ?, ?, ?)", - [student.firstName, student.lastName, student.email, promoName] - ); - } - })(); + db.execute(` + CREATE TABLE IF NOT EXISTS students ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + firstName TEXT NOT NULL, + lastName TEXT NOT NULL, + email TEXT NOT NULL, + promotion TEXT NOT NULL + ); + `); + + const insertQuery = "INSERT INTO students (firstName, lastName, email, promotion) VALUES (?, ?, ?, ?)"; + for (const student of data) { + db.query(insertQuery, [student.firstName, student.lastName, student.email, promoName]); + } + + console.log(`Data for promotion ${promoName} inserted successfully.`); db.close(); - console.log(`Data for promotion ${promoName} inserted successfully.`); } catch (error) { console.error("Error inserting data into mobility database:", error); } diff --git a/routes/(apps)/mobility/(_islands)/SaveStudents.tsx b/routes/(apps)/mobility/(_islands)/SaveStudents.tsx deleted file mode 100644 index 01d1cc3..0000000 --- a/routes/(apps)/mobility/(_islands)/SaveStudents.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { useSignal } from "@preact/signals"; -import Papa from "https://cdn.skypack.dev/papaparse"; - -type Student = { - firstName: string; - lastName: string; - email: string; -}; - -type Promotion = { - name: string; - students: Student[]; -}; - -export default function SaveStudents() { - const promotions = useSignal([]); - const statusMessage = useSignal(""); - - const loadCSV = async () => { - try { - const response = await fetch("/api/students"); // Assurez-vous que l'API est appelée correctement - if (!response.ok) { - throw new Error("Failed to load CSV file"); - } - const csvText = await response.text(); // Lire le contenu en texte - - const parsedData = Papa.parse(csvText, { - header: true, - skipEmptyLines: true, - }); - - const groupedPromotions: Record = {}; - parsedData.data.forEach((row: any) => { - const { promotion, firstName, lastName, email } = row; - if (!groupedPromotions[promotion]) { - groupedPromotions[promotion] = []; - } - groupedPromotions[promotion].push({ firstName, lastName, email }); - }); - - const loadedPromotions = Object.entries(groupedPromotions).map( - ([name, students]) => ({ - name, - students, - }) - ); - - promotions.value = loadedPromotions; - statusMessage.value = "Data loaded successfully!"; - } catch (error) { - console.error("Error loading CSV file:", error); - statusMessage.value = "Failed to load data. Please try again."; - } - }; - - - - // Charger les données CSV dès le chargement du composant - loadCSV(); - - return ( -
-

Loaded Promotions

- -

{statusMessage.value}

-
    - {promotions.value.map((promotion) => ( -
  • - {promotion.name} -
      - {promotion.students.map((student, index) => ( -
    • - {student.firstName} {student.lastName} - {student.email} -
    • - ))} -
    -
  • - ))} -
-
- ); -} diff --git a/routes/(apps)/mobility/(_islands)/UploadStudents.tsx b/routes/(apps)/mobility/(_islands)/UploadStudents.tsx index 8d1edde..8f562f0 100644 --- a/routes/(apps)/mobility/(_islands)/UploadStudents.tsx +++ b/routes/(apps)/mobility/(_islands)/UploadStudents.tsx @@ -18,7 +18,7 @@ export default function UploadStudents() { } }; - const handleUpload = async () => { + const handleUpload = () => { if (!fileData.value) { statusMessage.value = "Please select a file before confirming upload."; return; @@ -39,13 +39,19 @@ export default function UploadStudents() { }); console.log(`Data from sheet ${sheetName}:`, data); - await insertIntoMobility(data as Array<{ firstName: string; lastName: string; email: string }>, sheetName); + await insertIntoMobility( + data as Array< + { firstName: string; lastName: string; email: string } + >, + sheetName, + ); } statusMessage.value = "File uploaded and data inserted successfully!"; } catch (error) { console.error("Error reading or inserting file:", error); - statusMessage.value = "Error processing the file. Please check its format."; + statusMessage.value = + "Error processing the file. Please check its format."; } }; diff --git a/routes/(apps)/mobility/partials/students.tsx b/routes/(apps)/mobility/partials/students.tsx index 964b91c..5878f81 100644 --- a/routes/(apps)/mobility/partials/students.tsx +++ b/routes/(apps)/mobility/partials/students.tsx @@ -1,13 +1,11 @@ - import { RouteConfig } from "$fresh/server.ts"; import UploadStudents from "../(_islands)/UploadStudents.tsx"; //import ConsultStudents from "../(_islands)/ConsultStudents.tsx"; //import EditStudents from "../(_islands)/EditStudents.tsx"; export const config: RouteConfig = { - skipAppWrapper: false, - skipInheritedLayouts: false, - + skipAppWrapper: false, + skipInheritedLayouts: false, }; export default function Students() { @@ -16,7 +14,6 @@ export default function Students() {

Manage Promotions


- ); }