Skip to content
Snippets Groups Projects
Commit 4ab92a40 authored by Timo Geissbühler's avatar Timo Geissbühler
Browse files

Home shii

parent 56ecb0c3
Branches main
No related tags found
No related merge requests found
......@@ -6,6 +6,8 @@ const password = 'sml12345';
const driver = neo4j.driver(uri, neo4j.auth.basic(user, password));
export const runQuery = async (query, params) => {
const session = driver.session({ database: 'neo4j' });
......@@ -100,7 +102,20 @@ export const getAllUsers = async () => {
// Hole Benutzerbeziehungen
export const getUserRelationships = async (name) => {
const query = `MATCH (u:User {name: $name})-[r]-() RETURN r`;
return await runQuery(query, { name });
if (!name) {
console.error("Fehlender Parameter: name");
throw new Error("Parameter 'name' ist erforderlich");
}
try {
const result = await runQuery(query, { name });
console.log(result.records); // Log query output
return result;
} catch (error) {
console.error('Query failed:', error);
throw error;
}
};
// Hole die Firma, in der der Benutzer arbeitet
......@@ -113,4 +128,13 @@ export const getUserCompany = async (name) => {
export const getRemoteJobs = async () => {
const query = `MATCH (j:Job) WHERE j.location = 'Remote' RETURN j`;
return await runQuery(query);
};
export const createFollowsRelationship = async (userId1, userId2) => {
const query = `
MATCH (u1:User {id: $userId1}), (u2:User {id: $userId2})
MERGE (u1)-[:FOLLOWS]->(u2)
RETURN u1, u2
`;
return await runQuery(query, { userId1, userId2 });
};
\ No newline at end of file
import {getAllUsers} from "../lib/db";
import {createFollowsRelationship, getAllUsers, getUserRelationships, runQuery} from "../lib/db";
import {BrowserRouter as Router, Routes, Route, Link, useNavigate} from "react-router-dom";
import React, {useEffect, useState} from "react";
export default function Home() {
const [users, setUsers] = useState([]);
const [follows, setFollows] = useState([]);
const [user, setUser] = useState({});
useEffect(() => {
const fetchUsers = async () => {
const data = await getAllUsers();
// 10 zufällige Benutzer auswählen
const randomUsers = data.records.sort(() => 0.5 - Math.random()).slice(0, 10);
const storedUser = JSON.parse(sessionStorage.getItem("user"));
if (!storedUser) return;
setUser(storedUser);
const name = storedUser.name;
const usersData = await getAllUsers();
const relData = await getUserRelationships(name);
const randomUsers = usersData.records.sort(() => 0.5 - Math.random()).slice(0, 10);
setUsers(randomUsers.map(record => record.get('u').properties));
// Extrahiere sicher die gefolgten Benutzer-IDs, falls 'end' existiert
const followedUserIds = relData.records
.map(record => record.get('r').end?.properties?.id)
.filter(id => id); // Entfernt `undefined`-Werte
setFollows(followedUserIds);
};
fetchUsers();
}, []);
const folgen = async (toFollowId) => {
if (!user.id) return; // Falls `user` nicht geladen ist, abbrechen
await createFollowsRelationship(user.id, toFollowId);
// Nach erfolgreichem Folgen die Liste aktualisieren
const relData = await getUserRelationships(user.name);
const followedUserIds = relData.records
.map(record => record.get('r').end?.properties?.id)
.filter(id => id);
setFollows(followedUserIds);
console.log(followedUserIds);
};
return (
<div className="Profile">
<h2>Empfohlene Benutzer</h2>
<ul>
{users.map((user) => (
<li key={user.id}>
<p>Name: {user.name}</p>
<p>Email: {user.email}</p>
<p>Location: {user.location}</p>
{users.map((usr) => (
<li key={usr.id}>
{Object.entries(usr).map(([key, value]) => (
<p key={key}><strong>{key}:</strong> {String(value)}</p>
))}
<button
onClick={() => folgen(usr.id)}
disabled={follows.includes(usr.id)}
>
{follows.includes(usr.id) ? "Bereits gefolgt" : "Folgen"}
</button>
</li>
))}
</ul>
......
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