Код: Выделить всё
@Data
@MappedSuperclass
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String creatorId;
private ZonedDateTime createTime;
private String updaterId;
private ZonedDateTime updateTime;
private boolean deleted;
}
Чтобы добиться этого, я создал API для каждого объекта, который получает информацию о создании и обновлении, используя запрос к репозиторию, специфичный для этого объекта. Однако это приводит к дублированию логики в нескольких API и методах службы.
Чтобы избежать дублирования, я попытался создать один API, getCreateUpdateInfo(), который принимает идентификатор объекта. и тип (для идентификации объекта). В общем сервисе я использовал оператор переключения для вызова соответствующего запроса к репозиторию в зависимости от типа.
Пример логики общего сервиса:
Код: Выделить всё
public CreateUpdateInfoDto getCreateUpdateInfo(IdTypeEnumDto dto) {
return switch (dto.getTypeEnum()) {
case USER -> userRepository.getCreateUpdateInfo(dto.getId());
case ORDER -> orderRepository.getCreateUpdateInfo(dto.getId());
case PROJECT -> projectRepository.getCreateUpdateInfo(dto.getId());
default -> throw new IllegalArgumentException("Unhandled entity type: " + dto.getTypeEnum());
};
}
Лучше ли сохранять отдельные конечные точки для получения данных create-update? метаданные для каждой сущности или существует более эффективный способ реализовать общую логику без дублирования?
Подробнее здесь: https://stackoverflow.com/questions/792 ... pring-boot
Мобильная версия