-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFilingResourceProcessorService.java
More file actions
119 lines (101 loc) · 5.17 KB
/
Copy pathFilingResourceProcessorService.java
File metadata and controls
119 lines (101 loc) · 5.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package uk.gov.companieshouse.filingresourcehandler.service;
import org.springframework.stereotype.Service;
import uk.gov.companieshouse.api.model.filinggenerator.FilingApi;
import uk.gov.companieshouse.api.model.transaction.Filing;
import uk.gov.companieshouse.api.model.transaction.Resource;
import uk.gov.companieshouse.api.model.transaction.Transaction;
import uk.gov.companieshouse.filingresourcehandler.apiclient.FilingClient;
import uk.gov.companieshouse.filingresourcehandler.exception.RetryableException;
import uk.gov.companieshouse.filingresourcehandler.logging.DataMapHolder;
import uk.gov.companieshouse.filingresourcehandler.model.FilingProcessingResult;
import uk.gov.companieshouse.logging.Logger;
import uk.gov.companieshouse.logging.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static uk.gov.companieshouse.filingresourcehandler.Application.NAMESPACE;
@Service
public class FilingResourceProcessorService {
private static final Logger LOGGER = LoggerFactory.getLogger(NAMESPACE);
private final FilingClient filingClient;
private final SubmissionIdService submissionIdService;
private final FilingPatchService filingPatchService;
private final ItemService itemService;
public FilingResourceProcessorService(FilingClient filingClient,
SubmissionIdService submissionIdService,
FilingPatchService filingPatchService,
ItemService itemService) {
this.filingClient = filingClient;
this.submissionIdService = submissionIdService;
this.filingPatchService = filingPatchService;
this.itemService = itemService;
}
public FilingProcessingResult processResources(Transaction transaction, Map<String, Resource> resources) {
Map<String, Filing> filingsToPatch = new HashMap<>();
List<uk.gov.companieshouse.filing.received.Transaction> items = new ArrayList<>();
Map<String, String> matcher = new HashMap<>();
int offset = submissionIdService.findSubmissionIDOffset(transaction, matcher);
if (resources == null) {
return new FilingProcessingResult(filingsToPatch, items);
}
for (Resource resource : resources.values()) {
if (resource == null) {
continue;
}
offset = processResource(resource, transaction, matcher, filingsToPatch, items, offset);
}
return new FilingProcessingResult(filingsToPatch, items);
}
private int processResource(Resource resource,
Transaction transaction,
Map<String, String> matcher,
Map<String, Filing> filingsToPatch,
List<uk.gov.companieshouse.filing.received.Transaction> items,
int offset) {
String link = resourceLink(resource);
LOGGER.info("Found resource of type %s".formatted(orEmpty(resource.getKind())), DataMapHolder.getLogMap());
FilingApi[] filings = filingClient
.getFilingApi(link, transaction.getCompanyName(), transaction.getCompanyNumber())
.orElseThrow(() -> emptyFilingsError(transaction.getId()));
for (FilingApi filing : filings) {
if (filing == null || filing.getKind() == null) {
continue;
}
offset = processFiling(filing, link, transaction, matcher, filingsToPatch, items, offset);
}
return offset;
}
private int processFiling(FilingApi filing,
String link,
Transaction transaction,
Map<String, String> matcher,
Map<String, Filing> filingsToPatch,
List<uk.gov.companieshouse.filing.received.Transaction> items,
int offset) {
String key = "%s:%s".formatted(filing.getKind(), link);
String submissionId = matcher.get(key);
if (submissionId == null) {
offset++;
submissionId = "%s-%d".formatted(transaction.getId(), offset);
LOGGER.info("Add filing to patch request with submissionId %s".formatted(submissionId),
DataMapHolder.getLogMap());
filingPatchService.addFilingToPatch(
filingsToPatch, filing, submissionId, link, transaction.getCompanyNumber());
}
itemService.addItems(filing, submissionId, items);
return offset;
}
private static String resourceLink(Resource resource) {
Map<String, String> links = resource.getLinks();
return links != null ? links.getOrDefault("resource", "") : "";
}
private static String orEmpty(String value) {
return value != null ? value : "";
}
private RetryableException emptyFilingsError(String transactionId) {
String message = "Empty Filings response for transactionId %s".formatted(transactionId);
LOGGER.error(message, DataMapHolder.getLogMap());
return new RetryableException(message);
}
}