# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview This is a Spring Boot course management system (`youfool-course`) built with the youfool-framework-springboot3. It's a training course platform that handles course management, user authentication, and related functionality. ## Technology Stack - **Java 21** - Latest LTS Java version - **Spring Boot 3.4.5** - Main framework - **PostgreSQL** - Primary database - **MyBatis-Plus** - ORM with dynamic datasource support - **Sa-Token** - Authentication and authorization - **Thymeleaf** - Template engine - **Knife4j** - API documentation (Swagger) - **Druid** - Database connection pool - **Lombok** - Code generation ## Development Commands ### Build and Run ```bash # Compile the project mvn compile # Run tests mvn test # Package the application mvn package # Run the application (development) mvn spring-boot:run # Run with specific profile mvn spring-boot:run -Dspring-boot.run.profiles=dev ``` ### Code Quality ```bash # Run checkstyle validation mvn checkstyle:check # Skip tests during build mvn package -DskipTests=true ``` ### Database Operations The project uses dynamic datasources with `@DSTransactional` instead of `@Transactional` for transaction management. ## Architecture ### Package Structure - `com.chinaweal.youfool.course` - Main application package - `controller/` - REST API controllers and web controllers - `service/` - Business logic layer with service interfaces and implementations - `mapper/` - MyBatis data access layer - `entity/` - JPA/MyBatis entity classes - `config/` - Configuration classes including datasource setup - `common/` - Shared utilities and constants - `dev/` - Development tools including code generators ### Key Components #### Data Source Configuration - Uses dynamic datasource from `苞米豆` (baomidou) - Primary datasource: `master` - Framework datasource: `youfool` (for restLog storage) - Configuration in `PrjDataSource.java` and `application.yml` #### Authentication System - Sa-Token based authentication with JWT support - OAuth2 integration with Gitea - Session management with custom `UserBaseExtend` entity - Default admin credentials: username `admin`, password `123456` #### Entity Relationships Core entities: - `Course` - Main course entity with ID, date, name, description - `CourseVideo` - Course video attachments - `CourseAttachment` - General course attachments - `CourseComment` - Course discussion/comments - `SysUser` - System user management #### Code Generation The project includes code generation tools: - `TableCodeGen` - Generates entity, mapper, service, controller from database tables - `ConstantCodeGen` - Generates constants - `EnumsCodeGen` - Generates enums - Configuration in `properties/codeGenerator.properties` ## Application URLs When running locally: - **Application**: http://localhost:8080/course - **API Documentation**: http://localhost:8080/course/doc.html (admin/123456) - **Druid Monitor**: http://localhost:8080/course/druid (admin/123456) - **CMS Backend**: http://localhost:8080/course/cms (admin/123456) ## Configuration Files - `application.yml` - Main configuration with datasource, security, and application settings - `application-dev.yml` - Development environment configuration - `application-prod.yml` - Production environment configuration - `checkstyle-v1.0.xml` - Code style rules ## Database Transaction Management **Important**: When working with transactions, always use `@DSTransactional` instead of `@Transactional` due to the dynamic datasource configuration. ## Security Configuration - JWT tokens with configurable TTL (default 125 minutes) - SM3 encryption for password storage - File upload size limit: 100MB - CORS and security filter configurations in `SpringMvcConfig` ## Development Notes - The project uses Chinese comments and documentation - Default context path is `/course` - Logging directory: `../logs` (configurable via `LOG_PATH` environment variable) - Caching is enabled via `@EnableCaching` - The application extends `SpringBootServletInitializer` for WAR deployment