Agent Skills
› iflytek/skillhub
› code-conventions
code-conventions
GitHub定义Java后端与TypeScript前端的代码规范,涵盖架构分层、异常处理、日志格式及状态管理等最佳实践,用于指导开发实现与代码审查。
Trigger Scenarios
编写Java或TypeScript代码
进行代码审查
检查代码风格合规性
Install
npx skills add iflytek/skillhub --skill code-conventions -g -y
SKILL.md
Frontmatter
{
"name": "code-conventions",
"license": "Apache-2.0",
"description": "Code style, logging, and testing conventions for SkillHub backend (Java) and frontend (TypeScript). Use when writing or reviewing code."
}
Code Conventions Skill
Java / Backend Conventions
User Identity Type
User identity is always String throughout the codebase. This covers:
- Authentication and authorization
- API parameters and responses
- Permission checks
- Audit logs
- Resource owner, creator, reviewer, actor, submittedBy fields
Never introduce int, long, or bigint as user identifiers. The platform needs to support
external SSO/OIDC/SCIM identity sources whose UIDs are typically stable strings.
Exception Handling
- Use
LocalizedDomainExceptionfor user-facing error messages (supports i18n) - Use
DomainBadRequestExceptionfor invalid client input - Use
DomainNotFoundExceptionfor missing resources - Use
DomainForbiddenExceptionfor authorization failures - Exception classes live in
skillhub-domain/shared/exception/
Domain Services
- Return domain objects, not DTOs
- Contain business rules and state transitions
- Use domain events for cross-cutting side effects (publishing, notifications)
- Located in
domain/{submodule}/service/
Controllers
- Transport only: extract auth context, bind request params, wrap responses
- No business logic in controllers
- Located in
com.iflytek.skillhub.controller/
Query Repositories
- Handle read-model joins and presentation projection
- Return DTOs or presentation models
- Located in
com.iflytek.skillhub.repository/ - Named like
*QueryRepository(e.g.,GovernanceQueryRepository,MySkillQueryRepository)
App Services
- Workflow orchestration: coordinate domain services and query repositories
- Should express "what this endpoint does", not "how it assembles DTOs"
- Located in
com.iflytek.skillhub.service/
Logging
- Use SLF4J with structured logging
- Use MDC for request tracing
- Log at appropriate levels: INFO for business events, DEBUG for troubleshooting, ERROR for failures
TypeScript / Frontend Conventions
Type Safety
- Strict TypeScript mode. No
anytypes. - Use generated OpenAPI types from
web/src/api/generated/schema.d.tsfor all API interactions. - Additional types in
web/src/types/
Data Fetching
- Always use TanStack Query (
@tanstack/react-query) for server state - Never use
useEffectfor data fetching - Use
openapi-fetchclient for type-safe API calls
Component Composition
- Radix UI primitives:
@radix-ui/react-dropdown-menu,@radix-ui/react-select - class-variance-authority (cva) for component variants
- clsx + tailwind-merge for class merging
cn()utility:web/src/shared/lib/utils.ts- shadcn/ui is NOT used as a library
State Management
- TanStack Query for server state (API data, caching, invalidation)
- Zustand for local/UI state (theme, sidebar, modals, form state)
Feature-Sliced Design
| Layer | Path | Purpose |
|---|---|---|
| Pages | web/src/pages/ |
Route-level page components |
| Features | web/src/features/ |
Self-contained business features |
| Entities | web/src/entities/ |
Domain entity display logic |
| Shared | web/src/shared/ |
Reusable UI components, hooks, utilities |
Place code at the lowest appropriate layer. Do not put page-level logic in shared.
Styling
- Tailwind CSS for all styling
- Follow existing component patterns
- Use
cn()for conditional class merging
Internationalization
- Use i18next + react-i18next
- All user-facing text must be translatable
- Translation keys in
web/src/i18n/
Testing Philosophy
Backend
- JUnit 5 + Mockito + AssertJ
- Use Spring Boot test slices where possible (
@WebMvcTest,@DataJpaTest) - Test behaviors, not implementations
- Use
make test-backend-app(includes-amfor dependent modules) - Never run
./mvnw -pl skillhub-app clean testdirectly — stale Maven cache causes misleading errors
Frontend
- Vitest for unit tests
- Playwright for E2E tests
- Test component behavior and user interactions
Common Pitfalls
- Maven multi-module: Always use
-amflag or Makefile targets to include dependent modules - OpenAPI types: Must regenerate and commit after API contract changes
- String identity: Never use numeric types for user identifiers
- Controller business logic: Move to domain service or app service
- Complex read-models in app service: Extract to query repository
Version History
- ac46ad5 Current 2026-07-25 07:07


