KZ
Anuar Nurmakanov
ENGX AND XP PRACTICES
BELIEVE IN AGILE
AND LOVE JAVA
Guys, can you add documents search for back-off users?
I do not see documents in the system, only files...
We have documents functionality, but we use files term
How I could know this?
public void discardPolicies(
Set<Policy> policies,
long brokerId) {
val broker = this.brokerRepository.findBy(brokerId);
this.broker.discardPolicies(policies);
}
public class Broker {
public void discardPolicies(Set<Policy> policies) {
//some domain logic here
...
//
}
}
@AllArgsConstructor
@RestController
public class InsuredAdultsEndpoint {
private final SearchInsuredPersonService service;
@GetMapping("/insuredadults")
List<InsuredAdultAggregate> findAll() {
return service.findAll();
}
...
}
LOOKS LIKE IT IS NOT WHERE WE CAN HAVE IT
@AllArgsConstructor
@Service
public class SearchInsuredPersonService {
private final BrokersService brokersService;
private final InsuredPersonRepository repository;
public InsuredPersonAggregate findById(long insuredPersonId) {
var insured = this.repository.findById(insuredPersonId);
this.insured.ifPresent(
ins-> ins.fetchBrokerInfo(brokersService)
);
...
}
}
LOOKS LIKE IT IS NOT WHERE WE CAN HAVE IT
@Entity
@Data
@NoArgsConstructor
public class InsuredPersonaAggregate {
@Embedded
private Name name;
private Company company;
private ApplicationForm applicationForm;
@OneToOne
@JoinColumn(name = "broker_info_id")
private BrokerInfoAggregate brokerInfo;
//domain business logic is here
public void changeAddress(Address address) {
//...
//
}
public void changeName(Address address) {
//...
//
}
}
@Entity
@Data
@NoArgsConstructor
public class InsuredPersonaAggregate {
@Embedded
private Name name;
private Company company;
private ApplicationForm applicationForm;
@OneToOne
@JoinColumn(name = "broker_info_id")
private BrokerInfoAggregate brokerInfo;
//domain business logic is here
public void changeAddress(Address address) {
//...
//
}
public void changeName(Address address) {
//...
//
}
}
EVEN IF WE HAVE LAZY LOAD
@Entity
@Data
@NoArgsConstructor
public class InsuredPersonAggregate {
@Embedded
private Name name;
private Company company;
private ApplicationForm applicationForm;
@Embedded
private BrokerInfoId brokerInfoId;
...
}
@Data
@Embeddable
@NoArgsConstructor
public class BrokerInfoId {
@Column(name = "broker_info_id")
private long id;
}
from microsoft.com
API GATEWAY
server.port=8080
eureka.client.serviceUrl.defaultZone = http://localhost:8010/eureka
spring.application.name=ApiGateway
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
spring.cloud.gateway.routes[0].id=policies
spring.cloud.gateway.routes[0].uri=lb://INSURANCE-MONOLITH/policies
spring.cloud.gateway.routes[0].predicates[0]=Path=/policies/**
...
spring.cloud.gateway.routes[0].id=documents
spring.cloud.gateway.routes[0].uri=lb://INSURANCE-MONOLITH/documents
spring.cloud.gateway.routes[0].predicates[0]=Path=/documents/**
...
spring.cloud.gateway.routes[0].id=brokers
spring.cloud.gateway.routes[0].uri=lb://INSURANCE-MONOLITH/brokers
spring.cloud.gateway.routes[0].predicates[0]=Path=/brokers/**
...
spring.cloud.gateway.routes[0].id=payments
spring.cloud.gateway.routes[0].uri=lb://INSURANCE-MONOLITH/payments
spring.cloud.gateway.routes[0].predicates[0]=Path=/payments/**
API GATEWAY
server.port=8080
eureka.client.serviceUrl.defaultZone = http://localhost:8010/eureka
spring.application.name=ApiGateway
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
spring.cloud.gateway.routes[0].id=policies
spring.cloud.gateway.routes[0].uri=lb://INSURANCE-POLICIES/policies
spring.cloud.gateway.routes[0].predicates[0]=Path=/policies/**
...
spring.cloud.gateway.routes[0].id=documents
spring.cloud.gateway.routes[0].uri=lb://INSURANCE-DOCUMENTS/documents
spring.cloud.gateway.routes[0].predicates[0]=Path=/documents/**
...
spring.cloud.gateway.routes[0].id=brokers
spring.cloud.gateway.routes[0].uri=lb://INSURANCE-MONOLITH/brokers
spring.cloud.gateway.routes[0].predicates[0]=Path=/brokers/**
...
spring.cloud.gateway.routes[0].id=payments
spring.cloud.gateway.routes[0].uri=lb://INSURANCE-MONOLITH/payments
spring.cloud.gateway.routes[0].predicates[0]=Path=/payments/**
@AllArgsConstructor
@Service
public class PoliciesSubmitService {
private final BrokersSearchService brokersSearchService;
private final PolicyRepository repository;
public void submitPolicy(long policyId, long brokerId) {
var broker = this.brokersSearchService.findBy(brokerId);
this.repository.findById(policyId).ifPresent(
policy -> policy.submitTo(broker)
);
}
}
@AllArgsConstructor
@Service
public class PoliciesSubmitService {
private final BrokerRepository brokerRepository;
private final PolicyRepository repository;
public void submitPolicy(long policyId, long brokerId) {
var broker = this.brokerRepository.findBy(brokerId);
this.repository.findById(policyId).ifPresent(
policy -> policy.submitTo(broker)
);
}
}
@AllArgsConstructor
@Service
public class PoliciesSubmitService {
private final BrokerClient brokerClient;
private final PolicyRepository repository;
public void submitPolicy(long policyId, long brokerId) {
var broker = this.brokerClient.findBy(brokerId);
this.repository.findById(policyId).ifPresent(
policy -> policy.submitTo(broker)
);
}
}
@FeignClient(name="BrokersService" )
public interface BrokerClient {
@RequestMapping("/brokers/{id}")
Broker findById(@Param("id") Long id);
@RequestMapping("/brokers")
List<Broker> findAll();
}