39
loading...
This website collects cookies to deliver better user experience
mongo:
image: mongo
container_name: mongo
depends_on:
- kafka-cluster
ports:
- 27017:27017
networks:
- kafka-network
docker exec -it mongo mongo
use taxpayer
connector.class=com.datamountaineer.streamreactor.connect.mongodb.sink.MongoSinkConnector
connect.mongo.kcql=UPSERT INTO taxpayer SELECT after FROM irs-conn.decider.complaint_taxpayer PK after.document;UPSERT INTO taxpayer SELECT after FROM irs-conn.decider.defaulted_taxpayer PK after.document
connect.mongo.connection=mongodb://mongo:27017
tasks.max=2
topics=irs-conn.decider.complaint_taxpayer,irs-conn.decider.defaulted_taxpayer
name=mongo
connect.mongo.db=taxpayer
> db.taxpayer.find().pretty()
{
"_id" : "890.955.180-19",
"after" : {
"document" : "890.955.180-19",
"email" : "[email protected]",
"name" : "Sandra Nair Sueli Ribeiro",
"status" : "DEFAULTED"
}
}
{
"_id" : "869.097.474-10",
"after" : {
"document" : "869.097.474-10",
"email" : "[email protected]",
"name" : "Joao Alface",
"status" : "COMPLAINT"
}
}
@Data
@Builder
public class Taxpayer {
private String document;
private String email;
private String name;
private String status;
}
@Component
public class SearchTaxpayer {
private final TaxpayerRepository taxpayerRepository;
@Autowired
public SearchTaxpayer(TaxpayerRepository taxpayerRepository){
this.taxpayerRepository = taxpayerRepository;
}
public Taxpayer searchByEmail(String email){
final Optional<Taxpayer> optionalTaxpayer = taxpayerRepository.findByEmail(email);
if(!optionalTaxpayer.isPresent()){
throw new TaxpayerNotFoundException("Taxpayer not found");
}
return optionalTaxpayer.get();
}
public Taxpayer searchByDocument(String document){
final Optional<Taxpayer> optionalTaxpayer = taxpayerRepository.findByDocument(document);
if(!optionalTaxpayer.isPresent()){
throw new TaxpayerNotFoundException("Taxpayer not found");
}
return optionalTaxpayer.get();
}
public List<Taxpayer> findAll(){
return taxpayerRepository.findAll().get();
}
}
public interface TaxpayerRepository {
Optional<Taxpayer> findByEmail(String email);
Optional<Taxpayer> findByDocument(String document);
Optional<List<Taxpayer>> findAll();
}
@Data
@Document(collection = "taxpayer")
public class TaxpayerEntity {
@Id
private String id;
private After after;
}
@Data
public class After {
private String document;
private String email;
private String name;
private String status;
}
public interface MongoTaxpayerRepository extends MongoRepository<TaxpayerEntity, String> {
Optional<TaxpayerEntity> findByAfter_Email(String email);
Optional<TaxpayerEntity> findByAfter_Document(String document);
}
@Component
public class MongoTaxpayer implements TaxpayerRepository {
private final MongoTaxpayerRepository mongoTaxpayerRepository;
@Autowired
public MongoTaxpayer(MongoTaxpayerRepository mongoTaxpayerRepository){
this.mongoTaxpayerRepository = mongoTaxpayerRepository;
}
@Override
public Optional<Taxpayer> findByEmail(String email) {
final Optional<TaxpayerEntity> optionalTaxpayerEntity = mongoTaxpayerRepository.findByAfter_Email(email);
if(!optionalTaxpayerEntity.isPresent()){
return Optional.empty();
}
final After after = optionalTaxpayerEntity.get().getAfter();
return Optional.of(Taxpayer.builder().name(after.getName()).document(after.getDocument()).email(after.getEmail()).status(after.getStatus()).build());
}
@Override
public Optional<Taxpayer> findByDocument(String document) {
final Optional<TaxpayerEntity> optionalTaxpayerEntity = mongoTaxpayerRepository.findByAfter_Document(document);
if(!optionalTaxpayerEntity.isPresent()){
return Optional.empty();
}
final After after = optionalTaxpayerEntity.get().getAfter();
return Optional.of(Taxpayer.builder().name(after.getName()).document(after.getDocument()).email(after.getEmail()).status(after.getStatus()).build());
}
@Override
public Optional<List<Taxpayer>> findAll() {
final List<TaxpayerEntity> taxpayerEntityList = mongoTaxpayerRepository.findAll();
if(null == taxpayerEntityList || taxpayerEntityList.isEmpty()){
return Optional.empty();
}
final List<Taxpayer> taxpayerList = taxpayerEntityList.stream().map(taxpayerEntity -> {
final After after = taxpayerEntity.getAfter();
return Taxpayer.builder().name(after.getName()).document(after.getDocument()).email(after.getEmail()).status(after.getStatus()).build();
}).collect(Collectors.toList());
return Optional.of(taxpayerList);
}
}
@RestController
@RequestMapping("/taxpayer")
public class TaxpayerController {
@Autowired
private SearchTaxpayer searchTaxpayer;
@GetMapping
public ResponseEntity<List<Taxpayer>> getAllTaxpayers(){
return ResponseEntity.ok(searchTaxpayer.findAll());
}
@GetMapping("document")
public ResponseEntity<Taxpayer> getTaxpayerByDocument(@RequestParam("document") String document){
return ResponseEntity.ok(searchTaxpayer.searchByDocument(document));
}
@GetMapping("email")
public ResponseEntity<Taxpayer> getTaxpayerByEmail(@RequestParam("email") String email){
return ResponseEntity.ok(searchTaxpayer.searchByEmail(email));
}
}
teremos como resultado:
```json
[
{
"document": "890.955.180-19",
"email": "[email protected]",
"name": "Sandra Nair Sueli Ribeiro",
"status": "DEFAULTED"
},
{
"document": "1234567890",
"email": "[email protected]",
"name": "Joao Alface",
"status": "COMPLAINT"
}
]