Skip to content
Snippets Groups Projects
Commit 33634a56 authored by Tim-Luca Taxis's avatar Tim-Luca Taxis
Browse files

changeds

parent 232be095
No related branches found
No related tags found
1 merge request!4added vercel integration
import React, { useState } from 'react'; import React, { useState } from 'react';
const AddFruit = () => { const AddFruit = () => {
const [germanName, setGermanName] = useState(''); const [germanName, setGermanName] = useState('');
const [latinName, setLatinName] = useState(''); const [latinName, setLatinName] = useState('');
const [color, setColor] = useState(''); const [color, setColor] = useState('');
const [origin, setOrigin] = useState(''); const [origin, setOrigin] = useState('');
const [calories, setCalories] = useState(''); const [calories, setCalories] = useState('');
const handleSubmit = async (e) => { const handleSubmit = async (e) => {
e.preventDefault(); e.preventDefault();
const newFruit = { const newFruit = {
germanName, germanName,
latinName, latinName,
color, color,
origin, origin,
calories, calories,
}; };
const response = await fetch('/api/add-fruit', { const response = await fetch('/api/add-fruit', {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
body: JSON.stringify(newFruit), body: JSON.stringify(newFruit),
}); });
if (!response.ok) { if (!response.ok) {
console.error('Failed to add fruit'); console.error('Failed to add fruit');
return; return;
} }
const data = await response.json(); const data = await response.json();
console.log(JSON.stringify(data)); console.log(JSON.stringify(data));
}; };
return ( return (
<form onSubmit={handleSubmit}> <form onSubmit={handleSubmit}>
<div> <div>
<label htmlFor="germanName">German Name</label> <label htmlFor="germanName">Frucht</label>
<input <input
id="germanName" id="germanName"
type="text" type="text"
value={germanName} value={germanName}
onChange={(e) => setGermanName(e.target.value)} onChange={(e) => setGermanName(e.target.value)}
/> />
</div> </div>
<div> <div>
<label htmlFor="latinName">Latin Name</label> <label htmlFor="latinName">Lateinischer Name</label>
<input <input
id="latinName" id="latinName"
type="text" type="text"
value={latinName} value={latinName}
onChange={(e) => setLatinName(e.target.value)} onChange={(e) => setLatinName(e.target.value)}
/> />
</div> </div>
<div> <div>
<label htmlFor="color">Color</label> <label htmlFor="color">Farbe</label>
<input <input
id="color" id="color"
type="text" type="text"
value={color} value={color}
onChange={(e) => setColor(e.target.value)} onChange={(e) => setColor(e.target.value)}
/> />
</div> </div>
<div> <div>
<label htmlFor="origin">Origin</label> <label htmlFor="origin">Herkunft</label>
<input <input
id="origin" id="origin"
type="text" type="text"
value={origin} value={origin}
onChange={(e) => setOrigin(e.target.value)} onChange={(e) => setOrigin(e.target.value)}
/> />
</div> </div>
<div> <div>
<label htmlFor="calories">Calories</label> <label htmlFor="calories">Kalorien pro 100g</label>
<input <input
id="calories" id="calories"
type="text" type="text"
value={calories} value={calories}
onChange={(e) => setCalories(e.target.value)} onChange={(e) => setCalories(e.target.value)}
/> />
</div> </div>
<button type="submit">Submit</button> <button type="submit">Submit</button>
</form> </form>
); );
}; };
export default AddFruit; export default AddFruit;
...@@ -4,32 +4,32 @@ import useSWR from 'swr'; ...@@ -4,32 +4,32 @@ import useSWR from 'swr';
const fetcher = url => fetch(url).then(res => res.json()); const fetcher = url => fetch(url).then(res => res.json());
const FruitList = () => { const FruitList = () => {
const { data: fruits, error } = useSWR('/api/list-fruits', fetcher, { const { data: fruits, error } = useSWR('/api/list-fruits', fetcher, {
revalidateOnFocus: false, revalidateOnFocus: false,
revalidateOnReconnect: false, revalidateOnReconnect: false,
}); });
if (error) { if (error) {
return <p>Failed to fetch</p>; return <p>Failed to fetch</p>;
} }
if (!fruits) { if (!fruits) {
return <p>Loading fruits...</p>; return <p>Loading fruits...</p>;
} }
return ( return (
<ul> <ul>
{fruits.length > 0 ? ( {fruits.length > 0 ? (
fruits.map((fruit, index) => ( fruits.map((fruit, index) => (
<li key={index}> <li key={index}>
{fruit['Deutscher Name']} ({fruit['Lateinischer Name']}), {fruit.Farbe}, {fruit.Herkunft}, {fruit.Kalorien} kcal Frucht: {fruit['German Name']}, Lateinischer Name: ({fruit['Latin Name']}), Farbe: {fruit.Color}, Herkunft: {fruit.Origin}, Kalorien pro 100g: {fruit.Calories}
</li> </li>
)) ))
) : ( ) : (
<li>No fruits available</li> <li>No fruits available</li>
)} )}
</ul> </ul>
); );
}; };
export default FruitList; export default FruitList;
...@@ -2,21 +2,21 @@ import { sql } from '@vercel/postgres'; ...@@ -2,21 +2,21 @@ import { sql } from '@vercel/postgres';
export default async function handler(request, response) { export default async function handler(request, response) {
try { try {
const { germanName, latinName, color, origin, calories } = request.body; const { germanName, latinName, color, origin, calories } = request.body;
if (!germanName || !latinName || !color || !origin || !calories) { if (!germanName || !latinName || !color || !origin || !calories) {
return response.status(400).json({ error: 'All fields are required' }); return response.status(400).json({ error: 'All fields are required' });
} }
await sql` await sql`
INSERT INTO obst ("Deutscher Name", "Lateinischer Name", Farbe, Herkunft, Kalorien) INSERT INTO fruits ("German Name", "Latin Name", Color, Origin, Calories)
VALUES (${germanName}, ${latinName}, ${color}, ${origin}, ${calories}); VALUES (${germanName}, ${latinName}, ${color}, ${origin}, ${calories});
`; `;
const { rows: fruits } = await sql`SELECT * FROM obst;`; const { rows: fruits } = await sql`SELECT * FROM fruits;`;
return response.status(200).json(fruits); // Ensure you return the rows return response.status(200).json(fruits);
} catch (error) { } catch (error) {
console.error('Error during request processing:', error); console.error('Error during request processing:', error);
return response.status(500).json({ error: error.message }); return response.status(500).json({ error: error.message });
} }
} }
...@@ -2,18 +2,18 @@ import { sql } from '@vercel/postgres'; ...@@ -2,18 +2,18 @@ import { sql } from '@vercel/postgres';
export default async function handler(request, response) { export default async function handler(request, response) {
try { try {
const result = await sql` const result = await sql`
CREATE TABLE IF NOT EXISTS obst ( CREATE TABLE IF NOT EXISTS fruits (
"Deutscher Name" varchar(50) NOT NULL, "German Name" varchar(50) NOT NULL,
"Lateinischer Name" varchar(50) NOT NULL, "Latin Name" varchar(50) NOT NULL,
Farbe varchar(50) NOT NULL, Color varchar(50) NOT NULL,
Herkunft varchar(200) NOT NULL, Origin varchar(200) NOT NULL,
Kalorien int NOT NULL Calories int NOT NULL
); );
`; `;
return response.status(200).json({ result }); return response.status(200).json({ result });
} catch (error) { } catch (error) {
console.error('Error creating table:', error); console.error('Error creating table:', error);
return response.status(500).json({ error: error.message }); return response.status(500).json({ error: error.message });
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment