CodeQL Advanced / Analyze (actions) (push) Canceled after 0s
CodeQL Advanced / Analyze (java-kotlin) (push) Canceled after 0s
CodeQL Advanced / Analyze (javascript-typescript) (push) Canceled after 0s
CodeQL Advanced / Analyze (python) (push) Canceled after 0s
Docker Image Build & Push / manifest (push) Canceled after 0s
Docker Image Build & Push / build-and-push-arm (push) Canceled after 0s
Docker Image Build & Push / build-and-push-amd (push) Canceled after 0s
Backend Docker Image CI / Build and Push Backend Docker Image (push) Canceled after 0s
Shared Libraries
Overview
Shared Libraries contain code and utilities shared across all backend services, including domain building blocks, exception handling, JWT utilities, and more.
Architecture
backend/shared/
├── domain-common/ # DDD building blocks, exception handling
│ └── src/main/java/com/deepdata/common/
│ ├── infrastructure/exception/ # BusinessException, ErrorCode
│ ├── setting/ # System params, model configs
│ └── domain/ # Base entities, repositories
└── security-common/ # JWT utilities, auth helpers
└── src/main/java/com/deepdata/security/
Libraries
1. domain-common
BusinessException
Unified business exception handling mechanism:
// Throw business exception
throw BusinessException.of(ErrorCode.DATASET_NOT_FOUND)
.withDetail("dataset_id", datasetId);
// Exception with context
throw BusinessException.of(ErrorCode.VALIDATION_FAILED)
.withDetail("field", "email")
.withDetail("reason", "Invalid format");
ErrorCode
Error code enumeration interface:
public interface ErrorCode {
String getCode();
String getMessage();
HttpStatus getHttpStatus();
}
// Example
public enum CommonErrorCode implements ErrorCode {
SUCCESS("0000", "Success", HttpStatus.OK),
DATABASE_NOT_FOUND("4001", "Database not found", HttpStatus.NOT_FOUND);
}
BaseEntity
Base class for all entities, including audit fields:
@Data
@EqualsAndHashCode(callSuper = true)
public class BaseEntity<T> implements Serializable {
@TableId(type = IdType.ASSIGN_ID)
private String id;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createdAt;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updatedAt;
@TableField(fill = FieldFill.INSERT)
private String createdBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updatedBy;
}
2. security-common
JWT Utilities
JWT Token generation and validation:
// Generate Token
String token = JwtUtil.generateToken(userId, secret, expiration);
// Validate Token
Claims claims = JwtUtil.validateToken(token, secret);
String userId = claims.getSubject();
Usage
Using Shared Libraries in Services
Maven Dependencies
<dependency>
<groupId>com.deepdata</groupId>
<artifactId>domain-common</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.deepdata</groupId>
<artifactId>security-common</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
Using BusinessException
@RestController
@RequiredArgsConstructor
public class DatasetController {
public ResponseEntity<DatasetResponse> getDataset(String id) {
Dataset dataset = datasetService.findById(id);
if (dataset == null) {
throw BusinessException.of(ErrorCode.DATASET_NOT_FOUND);
}
return ResponseEntity.ok(DatasetResponse.from(dataset));
}
}
Quick Start
Build Shared Libraries
cd backend
mvn clean install
Use in Services
Shared libraries are automatically inherited by all backend services.