docs: add overview of project scope and docs for Claudia
This commit is contained in:
parent
9607e55e2a
commit
96b07323cc
2 changed files with 217 additions and 1 deletions
155
CLAUDE.md
Normal file
155
CLAUDE.md
Normal 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.
|
63
README.md
63
README.md
|
@ -1,3 +1,64 @@
|
||||||
# peer-group-grading
|
# 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).
|
Loading…
Add table
Reference in a new issue