# Reading Platform Java Backend

Spring Boot + MyBatis-Plus backend for the Reading Platform.

## Tech Stack

- **Java**: 17
- **Spring Boot**: 3.2.3
- **MyBatis-Plus**: 3.5.5
- **MySQL**: 8.0+
- **Spring Security + JWT**: Authentication
- **Knife4j**: API Documentation (Swagger)
- **Lombok**: Boilerplate reduction

## Project Structure

```
lesingle-edu-reading-platform-backend/
├── pom.xml                          # Maven dependencies
├── src/main/java/com/reading/platform/
│   ├── ReadingPlatformApplication.java
│   ├── common/                      # Common components
│   │   ├── config/                  # Configuration classes
│   │   ├── exception/               # Exception handling
│   │   ├── response/                # Unified response
│   │   ├── security/                # JWT security
│   │   ├── annotation/              # Custom annotations
│   │   ├── enums/                   # Enum classes
│   │   ├── aspect/                  # AOP aspects
│   │   └── util/                    # Utilities
│   ├── entity/                      # Entity classes (27)
│   ├── mapper/                      # MyBatis-Plus mappers (27)
│   ├── service/                     # Service interfaces
│   ├── service/impl/                # Service implementations
│   ├── controller/                  # REST controllers
│   │   ├── admin/                   # Super admin endpoints
│   │   ├── school/                  # School admin endpoints
│   │   ├── teacher/                 # Teacher endpoints
│   │   └── parent/                  # Parent endpoints
│   └── dto/                         # Data Transfer Objects
│       ├── request/
│       └── response/
└── src/main/resources/
    ├── application.yml              # Main configuration
    ├── application-dev.yml          # Dev environment config
    ├── mapper/                      # MyBatis XML files
    └── db/migration/                # SQL scripts
```

## Quick Start

### 1. Prerequisites

- JDK 17+
- Maven 3.6+
- MySQL 8.0+

### 2. Database Setup

```bash
# Create database and import schema
mysql -u root -p < src/main/resources/db/migration/V1__init_schema.sql
```

### 3. Configuration

Edit `src/main/resources/application-dev.yml`:

```yaml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/reading_platform
    username: your_username
    password: your_password
```

### 4. Build and Run

```bash
# Build
mvn clean package -DskipTests

# Run
java -jar target/reading-platform-1.0.0.jar

# Or run with Maven
mvn spring-boot:run
```

### 5. API Documentation

After starting the application, access the API documentation at:

- Swagger UI: http://localhost:8080/swagger-ui.html
- Knife4j UI: http://localhost:8080/doc.html

## API Endpoints

### Authentication
- `POST /api/auth/login` - User login
- `GET /api/auth/me` - Get current user info
- `POST /api/auth/change-password` - Change password

### Admin Endpoints
- `/api/admin/tenants` - Tenant management
- `/api/admin/courses` - System course management

### School Endpoints
- `/api/school/teachers` - Teacher management
- `/api/school/students` - Student management
- `/api/school/classes` - Class management
- `/api/school/parents` - Parent management
- `/api/school/tasks` - Task management
- `/api/school/growth-records` - Growth record management

### Teacher Endpoints
- `/api/teacher/courses` - View courses
- `/api/teacher/lessons` - Lesson management
- `/api/teacher/tasks` - Task management
- `/api/teacher/growth-records` - Growth record management
- `/api/teacher/notifications` - Notifications

### Parent Endpoints
- `/api/parent/children` - Child information
- `/api/parent/tasks` - View and complete tasks
- `/api/parent/growth-records` - Growth record management
- `/api/parent/notifications` - Notifications

## Test Accounts

| Role | Username | Password |
|------|----------|----------|
| Admin | admin | 123456 |

School, teacher, and parent accounts need to be created through the admin interface.

## Database Tables (27)

| Module | Tables |
|--------|--------|
| Tenant | tenants, tenant_courses |
| Users | admin_users, teachers, students, parents, parent_students |
| Class | classes, class_teachers, student_class_history |
| Course | courses, course_versions, course_resources, course_scripts, course_script_pages, course_activities |
| Lesson | lessons, lesson_feedbacks, student_records |
| Task | tasks, task_targets, task_completions, task_templates |
| Growth | growth_records |
| Resource | resource_library, resource_items |
| Schedule | schedule_plans, schedule_templates |
| System | system_settings, notifications, operation_logs, tags |

## Development

### Adding a New Entity

1. Create entity class in `entity/`
2. Create mapper interface in `mapper/`
3. Create service interface in `service/`
4. Create service implementation in `service/impl/`
5. Create controller in appropriate `controller/` subdirectory

### Code Style

- Use Lombok annotations to reduce boilerplate
- Follow Spring Boot conventions
- Use `@RequireRole` annotation for role-based access control

## License

MIT License
