78 lines
2.4 KiB
Markdown
78 lines
2.4 KiB
Markdown
# Assignment 03: Graph Database for Lecture Management
|
|
|
|
This repository contains an exercise for the Graph Databases course at the JKU.
|
|
It contains the implementation for an application layer that uses an underlying graph database with data that is provided in the Moodle course.
|
|
|
|
## How to Use
|
|
|
|
1. **Clone the repository**:
|
|
```bash
|
|
git clone https://git.implohq.de/semester06-graph_databases/assignment03
|
|
```
|
|
2. **Set up the database**:
|
|
- Run with `docker run -p 7474:7474 -p 7687:7687 -v /home/quirinecker/Downloads/neo4j/data:/data --env=NEO4J_AUTH=none neo4j:latest`
|
|
- Import via the cypher file that is provided in the moodle course
|
|
3. Run Application:
|
|
- Install dependencies with `deno install` or alternatively `npm install`
|
|
- Configure the environment variables in `.env` file.
|
|
- Sample file:
|
|
```
|
|
|
|
NEO4J_URI=neo4j://localhost:7687
|
|
NEO4J_USERNAME=neo4j
|
|
NEO4J_PASSWORD=admin
|
|
|
|
```
|
|
- Run `deno run dev` or alternatively `npm run dev`
|
|
|
|
## Tech Stack
|
|
|
|
- Deno (or Node.js) (its just for package management)
|
|
- Neo4j
|
|
- Astro
|
|
- TypeScript
|
|
|
|
## Features
|
|
|
|
### 1. **Automatic Deletion Notifications**
|
|
|
|
- Deleting any node (e.g., student, professor, lecture) automatically creates a **Notification** node.
|
|
|
|
### 2. **Lecture Participant Management**
|
|
|
|
- **List Participants**: Enter a lecture number to list all participants (students and professors) in **ascending order by name**.
|
|
- **Add Participants**: Add new participants to a lecture.
|
|
|
|
### 3. **Lecture Search**
|
|
|
|
- Search for lectures using a **flexible search string**.
|
|
- The string can match:
|
|
- Professor's name.
|
|
- Lecture ID.
|
|
- Lecture topic.
|
|
- Room.
|
|
- Date.
|
|
- Returns a list of all matching lectures.
|
|
|
|
### 4. **Student Grading**
|
|
|
|
- Search for a student by name or matriculation number.
|
|
- Grade them for an exam **only if they are registered** for that exam.
|
|
- Prevents grading unregistered students.
|
|
|
|
### 5. **Delete Students**
|
|
|
|
- Delete a student by:
|
|
- Matriculation number.
|
|
- Name (first or last).
|
|
|
|
### 6. **Relationship Queries**
|
|
|
|
- **Connection Check (A and B are people)**:
|
|
- If A and B are **students** in the same lecture → "classmates".
|
|
- If A and B are **professors** teaching the same lecture → "colleagues".
|
|
- If no connection exists → "No connection found".
|
|
- **Path Finding (A and B are any nodes)**:
|
|
- Display **all paths** connecting A and B.
|
|
- Paths are ordered by length: **shortest first, longest last**.
|