5.9 KiB
5.9 KiB
AGENTS.md
This file provides guidance to agentic coding agents operating in this repository.
Project Overview
zcloud-gbs-primeport - A Spring Boot application for port access control management built with COLA framework and DDD architecture.
Build Commands
# Build the project
mvn clean install
# Build without running tests
mvn clean install -DskipTests
# Run the application
mvn spring-boot:run -pl start
# Package for deployment
mvn clean package
# Compile only
mvn compile
Test Commands
# Run all tests
mvn test
# Run a single test class
mvn test -Dtest=ClassNameTest
# Run a single test method
mvn test -Dtest=ClassNameTest#methodName
# Run tests in a specific module
mvn test -pl web-app
Code Style Guidelines
Architecture (COLA + DDD)
This is a multi-module Maven project with strict layer separation:
start/ # Application entry point
web-adapter/ # Controllers (HTTP request handling)
web-client/ # DTOs + API interface definitions
web-app/ # Executors + Service implementations (business orchestration)
web-domain/ # Entities + Gateway interfaces (core business logic)
web-infrastructure/ # DOs + Mappers + Repository implementations (data persistence)
Naming Conventions
| Layer | Suffix | Example |
|---|---|---|
| Entity | E |
MkmjE |
| Data Object | DO |
MkmjDO |
| Client Object | CO |
MkmjCO |
| Command DTO | Cmd |
MkmjAddCmd, MkmjUpdateCmd |
| Query DTO | Qry |
MkmjPageQry |
| Service Interface | ServiceI |
MkmjServiceI |
| Service Impl | ServiceImpl |
MkmjServiceImpl |
| Gateway Interface | Gateway |
MkmjGateway |
| Gateway Impl | GatewayImpl |
MkmjGatewayImpl |
| Repository | Repository |
MkmjRepository |
| Repository Impl | RepositoryImpl |
MkmjRepositoryImpl |
| Mapper | Mapper |
MkmjMapper |
| Add Executor | AddExe |
MkmjAddExe |
| Update Executor | UpdateExe |
MkmjUpdateExe |
| Remove Executor | RemoveExe |
MkmjRemoveExe |
| Query Executor | QueryExe |
MkmjQueryExe |
| Convertor | CoConvertor |
MkmjCoConvertor |
Import Guidelines
- Imports should be organized alphabetically
- Use
@AllArgsConstructorfor constructor injection (preferred over@Autowired) - Example import order:
import com.alibaba.cola.dto.PageResponse;
import com.zcloud.primeport.api.MkmjServiceI;
import com.zcloud.primeport.command.MkmjAddExe;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
Annotations
- Use Lombok annotations:
@Data,@AllArgsConstructor,@NoArgsConstructor,@Builder,@RequiredArgsConstructor - Controller:
@RestController,@RequestMapping,@AllArgsConstructor,@Api - Service:
@Service,@AllArgsConstructor - Executor:
@Component,@AllArgsConstructor - Mapper:
@Mapper(MyBatis) - DO:
@Data,@TableName,@EqualsAndHashCode(callSuper = true)
CQRS Pattern
Write and read operations are separated:
- Write:
XxxAddExe,XxxUpdateExe,XxxRemoveExeinweb-app/command/ - Read:
XxxQueryExeinweb-app/command/query/
Request Flow
Controller (web-adapter)
-> ServiceI (web-client)
-> ServiceImpl (web-app)
-> Executor (web-app/command)
-> Gateway (web-domain)
-> GatewayImpl -> Repository -> Mapper (web-infrastructure)
MyBatis Plus Conventions
- Non-database fields in DO: Use
@TableField(exist = false)
@ApiModelProperty(value = "摄像头数量")
@TableField(exist = false)
private Integer videoCount;
- Field naming: MyBatis Plus auto-converts snake_case to camelCase. Write SQL with underscore:
SELECT m.hg_auth_area AS hgAuthArea, m.mkmj_name AS mkmjName FROM mkmj m
- Default ordering: Use
ORDER BY m.create_time DESCor appropriate ordering in XML mappers.
Error Handling
- Use
BizExceptionfrom COLA for business exceptions:
if (!res) {
throw new BizException("保存失败");
}
- Use
@Transactional(rollbackFor = Exception.class)for transactional methods.
Validation
- Use JSR-303 annotations in Cmd classes:
@NotEmpty(message = "口门名称不能为空")
private String mkmjName;
@NotNull(message = "口门级别不能为空")
private Integer mkmjLevel;
- Use
@Validatedin Controller methods:
public SingleResponse<MkmjCO> add(@Validated @RequestBody MkmjAddCmd cmd)
MapStruct Convertors
Use MapStruct for DO to CO conversions:
@Mapper(componentModel = "spring")
public interface MkmjCoConvertor {
List<MkmjCO> converDOsToCOs(List<MkmjDO> mkmjDOs);
MkmjCO converDOToCO(MkmjDO mkmjDOs);
}
Adding New Features
When adding a new entity, create files in this order:
web-client/dto/clientobject/XxxCO.javaweb-client/dto/XxxAddCmd.java,XxxUpdateCmd.java,XxxPageQry.javaweb-client/api/XxxServiceI.javaweb-adapter/web/XxxController.javaweb-domain/model/XxxE.javaweb-domain/gateway/XxxGateway.javaweb-infrastructure/dataobject/XxxDO.javaweb-infrastructure/mapper/XxxMapper.javaweb-infrastructure/resources/mapper/XxxDO.xmlweb-infrastructure/repository/XxxRepository.javaweb-infrastructure/repository/impl/XxxRepositoryImpl.javaweb-infrastructure/gatewayimpl/XxxGatewayImpl.javaweb-app/command/XxxAddExe.java,XxxUpdateExe.java,XxxRemoveExe.javaweb-app/command/query/XxxQueryExe.javaweb-app/command/convertor/XxxCoConvertor.javaweb-app/service/XxxServiceImpl.java
Database
- PostgreSQL (driver version 42.6.0)
- DDL location:
web-infrastructure/src/main/resources/TableCreationDDL.sql - Multi-tenant support via
tenant_idandorg_idcolumns - Soft delete via
delete_enumcolumn (use'false'for active records)
Response Types (COLA)
Response- Simple success/failureSingleResponse<T>- Single object responseMultiResponse<T>- List responsePageResponse<T>- Paginated list response