docs: add overview of project scope and docs for Claudia

This commit is contained in:
Mika 2025-06-25 10:59:04 +02:00
parent 9607e55e2a
commit 96b07323cc
2 changed files with 217 additions and 1 deletions

155
CLAUDE.md Normal file
View file

@ -0,0 +1,155 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Architecture
This is a peer group grading application built with:
**Backend**: Rust using Actix Web framework
- Located in `crates/backend/`
- Uses SeaORM for database operations with PostgreSQL
- Redis for session management
- OpenAPI documentation via utoipa
- JWT/session-based authentication
- LDAP integration support (currently disabled)
**Frontend**: Vue 3 with TypeScript
- Located in `frontend/`
- Uses Vite for build tooling
- PrimeVue for UI components
- Pinia for state management
- Vue Router for routing
**Database**: PostgreSQL with SeaORM migrations
- Migration crate in `crates/migration/`
- Entities defined in `crates/backend/src/db/entity/`
**Architecture Pattern**:
- Rust workspace with multiple crates
- Monorepo structure with frontend and backend
- Docker Compose for local development
- REST API with OpenAPI/Swagger documentation
## Development Commands
### Backend (Rust)
```bash
# Build backend
cargo build --package backend
# Run backend with hot reload
cargo run --package backend
# Run backend tests
cargo test --package backend
# Run migrations
cargo run --package migration
# Run specific test
cargo test --package backend test_name
# Lint backend code
cargo clippy --package backend -- -W clippy::all
```
### Frontend (Vue)
```bash
# Navigate to frontend directory first
cd frontend
# Install dependencies
pnpm install
# Development server
pnpm dev
# Build for production
pnpm build
# Run tests
pnpm test:unit
# Type checking
pnpm type-check
# Lint and format
pnpm lint
pnpm format
```
### Docker Development
```bash
# Start all services (PostgreSQL, Redis, OpenLDAP, Backend)
docker compose -f dev-compose.yml up -d
# View logs
docker compose -f dev-compose.yml logs -f
# Stop services
docker compose -f dev-compose.yml down
```
## Key Components
### Backend Controllers
- `auth.rs` - Authentication and session management
- `user.rs` - User management endpoints
- `project.rs` - Project CRUD operations
- `group.rs` - Group management
- `class.rs` - Class/course management
- `template.rs` - Template management
### Database Entities
Located in `crates/backend/src/db/entity/`:
- `user.rs` - User entity
- `project.rs` - Project entity
- `group.rs` - Group entity
- `local_auth.rs` - Local authentication
- `user_group_project.rs` - Many-to-many relationships
### Frontend Structure
- `src/views/` - Vue page components
- `src/components/` - Reusable Vue components
- `src/stores/` - Pinia state management
- `src/router/` - Vue Router configuration
## Environment Configuration
Required environment variables (create `.env` file):
```
# Database
DB_HOST=localhost
DB_USER=pgg
DB_PASSWORD=pgg
DB_NAME=pgg
DB_PORT=5432
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
# LDAP (optional)
LDAP_ADMIN_PASSWORD=admin
```
## Testing
Backend uses:
- `testcontainers` for integration tests with real PostgreSQL/Redis
- `serial_test` for test isolation
- `temp-env` for environment variable testing
Frontend uses:
- Vitest for unit testing
- Vue Test Utils for component testing
## API Documentation
Swagger UI available at: `http://localhost:8080/swagger-ui/`
OpenAPI spec at: `http://localhost:8080/api-docs/openapi.json`
## Project Management Tools
Bruno API collection available in `bruno/` directory for API testing.

View file

@ -1,3 +1,64 @@
# peer-group-grading
Wir sind cool
Anforderungen an die Bewertungsplattform
Adminbereich
Verwaltung der Lehrkräfte
Anlegen neuer Lehrkräfte
Löschen von Lehrkräften
Lehrendenbereich
Login (Username, PW)
LDAP-Anbindung wäre natürlich wünschenswert
Anlegen von Klassenbereichen (IT3o, IT3e etc.)
Darin können dann Lernfelder angelegt werden
In den LF können die globalen Einzelbefragung eingerichtet werden
Beim Anlegen wird das Standarttemplate genutzt (siehe Anagen > Evaluationsbogen.docx)
Das Standarttemplate kann in seinen Fragen (Teil 1) abgeändert werden
Die Gewichtung (Faktor) der Gruppennote kann global festgelegt werden (Default = 0,5)
Schüler*innengruppen können händisch angelegt werden
Der Gruppen-Moodle-Export (siehe Moodle_Exports) kann eingelesen werden und die Gruppen werden automatisch angelegt anhand der angegebenen Gruppierung
Im Nachhinein können Schüler*innen sowie Gruppen noch hinzugefügt oder entfernt werden
Für jede Person in den Gruppen wird ein eigener Link zum privaten Feedbackformular generiert (möglicherweise mit PW?)
Die Lehrkraft sieht die URLs der Links und kann Sie entsprechend kopieren
Der Link kann auch direkt an die E-Mail aus dem Moodle_Exports versendet werden (Der Versand wird von der Lehrkraft ausgelöst)
Die Lehrkraft ist in der Lage ein ausgefülltes Formular zurückzusetzen (bspw. bei fehlerhaften Eingaben)
Einer Gruppe kann eine Gruppennote zugewiesen werden
Sobald die Gruppennote und alle Peerfeedbackbögen ausgefüllt wurden, wird die Einzelnote bei den Namen der Schüler*innen angezeigt
Die Lehrkraft hat danach ebenfalls vollen Einblick in das schriftliche Feedback und die Kommentare.
Die Gruppennote kann auch ohne vorhandene Peerfeedbackbögen eingetragen werden. Ebenso können auch Peerfeedbackbögen ausgefüllt werden, auch wenn noch keine Gruppennote feststeht. Eine Berechnung der Einzelnote erfolgt erst wenn alle Werte vorliegen.
Schüler*innenbereich
Über den erhaltenen Link können sie auf den Peerfeedbackbogen zugreifen
Das Ausfüllen des Formulars ist nur einmal möglich
Außer die Lehrkraft setzt das Formular zurück
Nach dem Absenden des Formulars werden die Schüler*innen auf eine Warteseite weitergeleitet
„Vielen Dank für dein Feedback! Sobald alle Bögen ausgefüllt wurden und die Gruppennote feststehst erfährst du hier deine Note.“
Sobald die Note feststeht, wird die diese auf der Warteseite angezeigt.
Außerdem sehen die Schüler*innen das Feedback, das sie von den anderen Gruppenmitgliedern erhalten haben (anonymisiert).