Compare commits

...

3 Commits

Author SHA1 Message Date
Sándor Máté Magony
544a59b92e Működik a form a módosított adatbázissal 2025-04-14 19:11:29 +02:00
Sándor Máté Magony
03b81b65e5 Backend frissítve 2025-04-14 18:04:59 +02:00
Sándor Máté Magony
7faeb32b14 HTTPS készítés folyamatban... 2025-04-11 13:21:08 +02:00
6 changed files with 118 additions and 26 deletions

View File

@@ -13,6 +13,65 @@ class WcController extends Controller
return response()->json($mosdok);
}
public function store(Request $request)
{
$validatedData = $request->validate([
'nev' => 'required|string',
'kerulet_id' => 'required|integer|exists:keruletek,id',
'kozeli_megall' => 'required|string',
'akadalym' => 'nullable|boolean',
'ar' => 'nullable|numeric',
'nyitva' => 'nullable|string',
'utvonal' => 'required|string',
'koordinatak' => 'required|string',
'felhasznalo_id' => 'nullable|numeric'
]);
try {
$szelesseg = null;
$hosszusag = null;
if (!empty($validatedData['koordinatak'])) {
$koordinatak = explode(',', $validatedData['koordinatak']);
if (count($koordinatak) == 2) {
$hosszusag = trim($koordinatak[0]);
$szelesseg = trim($koordinatak[1]);
if (!is_numeric($szelesseg) || !is_numeric($hosszusag)) {
return response()->json([
'message' => 'Érvénytelen a koordináták formátuma'
], 422);
}
}
}
$mosdo = WcAdatok::create([
'nev' => $validatedData['nev'],
'kerulet_id' => $validatedData['kerulet_id'],
'kozeli_megall' => $validatedData['kozeli_megall'],
'akadalym' => $validatedData['akadalym'],
'ar' => $validatedData['ar'],
'nyitva' => $validatedData['nyitva'],
'utvonal' => $validatedData['utvonal'],
'szel_koord' => $szelesseg,
'hossz_koord' => $hosszusag,
'felhasznalo_id' => $validatedData['felhasznalo_id'] ?? null
]);
return response()->json([
'message' => 'Sikeres rögzítés',
'data' => $mosdo
], 201);
} catch (\Exception $e) {
return response()->json([
'message' => 'Hiba történt a mentés során',
'error' => $e->getMessage()
], 500);
}
}
public function show($id)
{
$wc = WcAdatok::find($id);

View File

@@ -13,6 +13,10 @@ class WcAdatok extends Model
return $this->belongsTo(Keruletek::class);
}
public function felhasznalo(){
return $this->belongsTo(User::class);
}
protected $table = 'wc_adatok';
protected $fillable = [

View File

@@ -37,7 +37,7 @@ return new class extends Migration
$table->double('hossz_koord');
$table->double('szel_koord');
$table->string('utvonal', 1000);
$table->foreignId('felhasznalo_id')->references('id')->on('felhasznalok');
$table->foreignId('felhasznalo_id')->nullable()->references('id')->on('felhasznalok');
$table->timestamps();
});
}

View File

@@ -1,6 +1,5 @@
<?php
use App\Http\Controllers\HozzaadasController;
use App\Http\Controllers\UserController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
@@ -10,6 +9,6 @@ Route::get('/mosdok', [WcController::class, 'index']);
Route::get('/mosdok/{id}', [WcController::class, 'show']);
Route::get('/users', [UserController::class, 'index']);
Route::post('/hozzaadas', [WcController::class, 'store']);
Route::post('/hozzaadas', [HozzaadasController::class, 'store']);
Route::get('/users', [UserController::class, 'index']);

View File

@@ -1,9 +1,9 @@
import React, {useState} from "react";
import React, { useState} from "react";
import { useNavigate } from "react-router-dom";
export default function HozzaadForm() {
const [nev, setNev] = useState("");
const [kerulet, setKerulet] = useState("");
const [kerulet_id, setKeruletId] = useState("");
const [kozeli_megall, setKozeli] = useState("");
const [akadalym, setAkadalym] = useState(false);
const [ar, setAr] = useState("");
@@ -17,37 +17,50 @@ export default function HozzaadForm() {
event.preventDefault();
const wcInfo = {
nev: nev,
kerulet: kerulet,
kerulet_id: kerulet_id,
kozeli_megall: kozeli_megall,
akadalym: akadalym,
ar: ar,
nyitva: nyitva,
utvonal: utvonal,
koordinatak: koordinatak
koordinatak: koordinatak,
felhasznalo_id: null
}
fetch("http://192.168.0.78:8000/api/hozzaadas", {
fetch("http://localhost:8000/api/hozzaadas", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(wcInfo)
})
.then((response) => response.json())
.then((newWC) => {
setNev("");
setKerulet("");
setKozeli("");
setAkadalym(false);
setAr("");
setNyitva("");
setUtvonal("");
setKoordinatak("");
navigate("/");
})
.catch((error) => {
console.log(error);
})
.then(async (response) => {
if (!response.ok) {
const errorData = await response.json();
console.error("Hiba a POST kérésnél:", errorData);
alert("Hiba történt az adatok mentésekor.");
return;
}
const newWC = await response.json();
console.log("Sikeres mentés:", newWC);
// csak siker után törlünk mindent és navigálunk
setNev("");
setKeruletId("");
setKozeli("");
setAkadalym(false);
setAr("");
setNyitva("");
setUtvonal("");
setKoordinatak("");
navigate("/");
})
.catch((error) => {
console.log("Hálózati hiba:", error);
alert("Nem sikerült csatlakozni a szerverhez.");
});
}
const ToolTip = ({children, text}) => {
@@ -82,14 +95,31 @@ export default function HozzaadForm() {
/>
<label className="block text-gray-700">Kerület:</label>
<select
id="kerulet"
name="kerulet_id"
value={kerulet_id}
onChange={(event) => setKeruletId(event.target.value)}
>
<option value="">Válassz kerületet</option>
{Array.from({ length: 23 }, (_, i) => (
<option key={i + 1} value={i + 1}>
{i + 1}. kerület
</option>
))}
</select>
{/*
<input
type="text"
name="kerulet"
value={kerulet}
value={kerulet_id}
onChange={(event) => setKerulet(event.target.value)}
placeholder="Kerület"
className="w-full px-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
*/}
<label className="block text-gray-700">Legközelebbi megálló:</label>
<input

View File

@@ -1,6 +1,6 @@
export async function mosdokFetch() {
try {
const response = await fetch('http://192.168.0.78:8000/api/mosdok');
const response = await fetch('http://localhost:8000/api/mosdok');
if (!response.ok) {
throw new Error(`Hiba: ${response.status}`);
}