-
Notifications
You must be signed in to change notification settings - Fork 38
/
api.go
273 lines (220 loc) · 12.7 KB
/
api.go
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
package internalapi
import (
"io"
"log"
"github.com/benbjohnson/clock"
"github.com/go-openapi/loads"
"github.com/go-openapi/runtime"
"github.com/pkg/errors"
"github.com/transcom/mymove/pkg/gen/internalapi"
internalops "github.com/transcom/mymove/pkg/gen/internalapi/internaloperations"
"github.com/transcom/mymove/pkg/handlers"
paperworkgenerator "github.com/transcom/mymove/pkg/paperwork"
paymentrequesthelper "github.com/transcom/mymove/pkg/payment_request"
"github.com/transcom/mymove/pkg/services/address"
"github.com/transcom/mymove/pkg/services/fetch"
"github.com/transcom/mymove/pkg/services/ghcrateengine"
move "github.com/transcom/mymove/pkg/services/move"
movetaskorder "github.com/transcom/mymove/pkg/services/move_task_order"
movingexpense "github.com/transcom/mymove/pkg/services/moving_expense"
mtoserviceitem "github.com/transcom/mymove/pkg/services/mto_service_item"
mtoshipment "github.com/transcom/mymove/pkg/services/mto_shipment"
officeuser "github.com/transcom/mymove/pkg/services/office_user"
"github.com/transcom/mymove/pkg/services/orchestrators/shipment"
"github.com/transcom/mymove/pkg/services/order"
"github.com/transcom/mymove/pkg/services/paperwork"
paymentrequest "github.com/transcom/mymove/pkg/services/payment_request"
postalcodeservice "github.com/transcom/mymove/pkg/services/postal_codes"
"github.com/transcom/mymove/pkg/services/ppmshipment"
progear "github.com/transcom/mymove/pkg/services/progear_weight_ticket"
"github.com/transcom/mymove/pkg/services/query"
shipmentsummaryworksheet "github.com/transcom/mymove/pkg/services/shipment_summary_worksheet"
signedcertification "github.com/transcom/mymove/pkg/services/signed_certification"
transportationoffice "github.com/transcom/mymove/pkg/services/transportation_office"
"github.com/transcom/mymove/pkg/services/upload"
weightticket "github.com/transcom/mymove/pkg/services/weight_ticket"
weightticketparser "github.com/transcom/mymove/pkg/services/weight_ticket_parser"
"github.com/transcom/mymove/pkg/uploader"
)
// NewInternalAPI returns the internal API
func NewInternalAPI(handlerConfig handlers.HandlerConfig) *internalops.MymoveAPI {
internalSpec, err := loads.Analyzed(internalapi.SwaggerJSON, "")
if err != nil {
log.Fatalln(err)
}
internalAPI := internalops.NewMymoveAPI(internalSpec)
internalAPI.ServeError = handlers.ServeCustomError
builder := query.NewQueryBuilder()
fetcher := fetch.NewFetcher(builder)
moveRouter := move.NewMoveRouter()
SSWPPMComputer := shipmentsummaryworksheet.NewSSWPPMComputer()
userUploader, err := uploader.NewUserUploader(handlerConfig.FileStorer(), uploader.MaxCustomerUserUploadFileSizeLimit)
if err != nil {
log.Fatalln(err)
}
pdfGenerator, err := paperworkgenerator.NewGenerator(userUploader.Uploader())
if err != nil {
log.Fatalln(err)
}
SSWPPMGenerator, err := shipmentsummaryworksheet.NewSSWPPMGenerator(pdfGenerator)
if err != nil {
log.Fatalln(err)
}
parserComputer := weightticketparser.NewWeightTicketComputer()
weightGenerator, err := weightticketparser.NewWeightTicketParserGenerator(pdfGenerator)
if err != nil {
log.Fatalln(err)
}
ppmEstimator := ppmshipment.NewEstimatePPM(handlerConfig.DTODPlanner(), &paymentrequesthelper.RequestPaymentHelper{})
signedCertificationCreator := signedcertification.NewSignedCertificationCreator()
signedCertificationUpdater := signedcertification.NewSignedCertificationUpdater()
mtoShipmentRouter := mtoshipment.NewShipmentRouter()
ppmShipmentRouter := ppmshipment.NewPPMShipmentRouter(mtoShipmentRouter)
transportationOfficeFetcher := transportationoffice.NewTransportationOfficesFetcher()
closeoutOfficeUpdater := move.NewCloseoutOfficeUpdater(move.NewMoveFetcher(), transportationOfficeFetcher)
addressCreator := address.NewAddressCreator()
addressUpdater := address.NewAddressUpdater()
ppmShipmentUpdater := ppmshipment.NewPPMShipmentUpdater(ppmEstimator, addressCreator, addressUpdater)
primeDownloadMoveUploadPDFGenerator, err := paperwork.NewMoveUserUploadToPDFDownloader(pdfGenerator)
if err != nil {
log.Fatalln(err)
}
ppmShipmentFetcher := ppmshipment.NewPPMShipmentFetcher()
AOAPacketCreator := ppmshipment.NewAOAPacketCreator(SSWPPMGenerator, SSWPPMComputer, primeDownloadMoveUploadPDFGenerator, userUploader, pdfGenerator)
if err != nil {
log.Fatalln(err)
}
internalAPI.FeatureFlagsBooleanFeatureFlagForUserHandler = BooleanFeatureFlagsForUserHandler{handlerConfig}
internalAPI.FeatureFlagsVariantFeatureFlagForUserHandler = VariantFeatureFlagsForUserHandler{handlerConfig}
internalAPI.UsersShowLoggedInUserHandler = ShowLoggedInUserHandler{handlerConfig, officeuser.NewOfficeUserFetcherPop()}
internalAPI.CertificationCreateSignedCertificationHandler = CreateSignedCertificationHandler{handlerConfig}
internalAPI.CertificationIndexSignedCertificationHandler = IndexSignedCertificationsHandler{handlerConfig}
internalAPI.DutyLocationsSearchDutyLocationsHandler = SearchDutyLocationsHandler{handlerConfig}
internalAPI.AddressesShowAddressHandler = ShowAddressHandler{handlerConfig}
internalAPI.TransportationOfficesShowDutyLocationTransportationOfficeHandler = ShowDutyLocationTransportationOfficeHandler{handlerConfig}
internalAPI.OrdersCreateOrdersHandler = CreateOrdersHandler{handlerConfig}
internalAPI.OrdersUpdateOrdersHandler = UpdateOrdersHandler{handlerConfig}
internalAPI.OrdersShowOrdersHandler = ShowOrdersHandler{handlerConfig}
internalAPI.OrdersUploadAmendedOrdersHandler = UploadAmendedOrdersHandler{
handlerConfig,
order.NewOrderUpdater(moveRouter),
}
internalAPI.MovesPatchMoveHandler = PatchMoveHandler{handlerConfig, closeoutOfficeUpdater}
internalAPI.MovesGetAllMovesHandler = GetAllMovesHandler{handlerConfig}
internalAPI.ApplicationParametersValidateHandler = ApplicationParametersValidateHandler{handlerConfig}
internalAPI.MovesShowMoveHandler = ShowMoveHandler{handlerConfig}
internalAPI.MovesSubmitMoveForApprovalHandler = SubmitMoveHandler{
handlerConfig,
moveRouter,
}
internalAPI.MovesSubmitAmendedOrdersHandler = SubmitAmendedOrdersHandler{
handlerConfig,
moveRouter,
}
internalAPI.OktaProfileShowOktaInfoHandler = GetOktaProfileHandler{handlerConfig}
internalAPI.OktaProfileUpdateOktaInfoHandler = UpdateOktaProfileHandler{handlerConfig}
internalAPI.ServiceMembersCreateServiceMemberHandler = CreateServiceMemberHandler{handlerConfig}
internalAPI.ServiceMembersPatchServiceMemberHandler = PatchServiceMemberHandler{handlerConfig}
internalAPI.ServiceMembersShowServiceMemberHandler = ShowServiceMemberHandler{handlerConfig}
internalAPI.ServiceMembersShowServiceMemberOrdersHandler = ShowServiceMemberOrdersHandler{handlerConfig}
internalAPI.BackupContactsIndexServiceMemberBackupContactsHandler = IndexBackupContactsHandler{handlerConfig}
internalAPI.BackupContactsCreateServiceMemberBackupContactHandler = CreateBackupContactHandler{handlerConfig}
internalAPI.BackupContactsUpdateServiceMemberBackupContactHandler = UpdateBackupContactHandler{handlerConfig}
internalAPI.BackupContactsShowServiceMemberBackupContactHandler = ShowBackupContactHandler{handlerConfig}
internalAPI.DocumentsCreateDocumentHandler = CreateDocumentHandler{handlerConfig}
internalAPI.DocumentsShowDocumentHandler = ShowDocumentHandler{handlerConfig}
internalAPI.UploadsCreateUploadHandler = CreateUploadHandler{handlerConfig}
internalAPI.UploadsDeleteUploadHandler = DeleteUploadHandler{handlerConfig, upload.NewUploadInformationFetcher()}
internalAPI.UploadsDeleteUploadsHandler = DeleteUploadsHandler{handlerConfig}
internalAPI.QueuesShowQueueHandler = ShowQueueHandler{handlerConfig}
internalAPI.OfficeApproveMoveHandler = ApproveMoveHandler{handlerConfig, moveRouter}
internalAPI.OfficeApproveReimbursementHandler = ApproveReimbursementHandler{handlerConfig}
internalAPI.OfficeCancelMoveHandler = CancelMoveHandler{handlerConfig, moveRouter}
internalAPI.EntitlementsIndexEntitlementsHandler = IndexEntitlementsHandler{handlerConfig}
internalAPI.CalendarShowAvailableMoveDatesHandler = ShowAvailableMoveDatesHandler{handlerConfig}
internalAPI.PpmShowAOAPacketHandler = showAOAPacketHandler{handlerConfig, SSWPPMComputer, SSWPPMGenerator, AOAPacketCreator}
internalAPI.RegisterProducer(uploader.FileTypePDF, PDFProducer())
internalAPI.PostalCodesValidatePostalCodeWithRateDataHandler = ValidatePostalCodeWithRateDataHandler{
handlerConfig,
postalcodeservice.NewPostalCodeValidator(clock.New()),
}
mtoShipmentCreator := mtoshipment.NewMTOShipmentCreatorV1(builder, fetcher, moveRouter, addressCreator)
shipmentRouter := mtoshipment.NewShipmentRouter()
moveTaskOrderUpdater := movetaskorder.NewMoveTaskOrderUpdater(
builder,
mtoserviceitem.NewMTOServiceItemCreator(handlerConfig.HHGPlanner(), builder, moveRouter),
moveRouter,
)
shipmentCreator := shipment.NewShipmentCreator(mtoShipmentCreator, ppmshipment.NewPPMShipmentCreator(ppmEstimator, addressCreator), shipmentRouter, moveTaskOrderUpdater)
internalAPI.MtoShipmentCreateMTOShipmentHandler = CreateMTOShipmentHandler{
handlerConfig,
shipmentCreator,
}
paymentRequestRecalculator := paymentrequest.NewPaymentRequestRecalculator(
paymentrequest.NewPaymentRequestCreator(
handlerConfig.HHGPlanner(),
ghcrateengine.NewServiceItemPricer(),
),
paymentrequest.NewPaymentRequestStatusUpdater(builder),
)
paymentRequestShipmentRecalculator := paymentrequest.NewPaymentRequestShipmentRecalculator(paymentRequestRecalculator)
shipmentUpdater := shipment.NewShipmentUpdater(
mtoshipment.NewCustomerMTOShipmentUpdater(
builder,
fetcher,
handlerConfig.DTODPlanner(),
moveRouter,
move.NewMoveWeights(mtoshipment.NewShipmentReweighRequester()),
handlerConfig.NotificationSender(),
paymentRequestShipmentRecalculator,
addressUpdater,
addressCreator,
),
ppmShipmentUpdater,
)
internalAPI.MtoShipmentUpdateMTOShipmentHandler = UpdateMTOShipmentHandler{
handlerConfig,
shipmentUpdater,
}
internalAPI.MtoShipmentListMTOShipmentsHandler = ListMTOShipmentsHandler{
handlerConfig,
mtoshipment.NewMTOShipmentFetcher(),
}
internalAPI.MtoShipmentDeleteShipmentHandler = DeleteShipmentHandler{
handlerConfig,
mtoshipment.NewShipmentDeleter(moveTaskOrderUpdater, moveRouter),
}
internalAPI.PpmCreateMovingExpenseHandler = CreateMovingExpenseHandler{handlerConfig, movingexpense.NewMovingExpenseCreator()}
internalAPI.PpmUpdateMovingExpenseHandler = UpdateMovingExpenseHandler{handlerConfig, movingexpense.NewCustomerMovingExpenseUpdater()}
internalAPI.PpmDeleteMovingExpenseHandler = DeleteMovingExpenseHandler{handlerConfig, movingexpense.NewMovingExpenseDeleter()}
internalAPI.PpmCreateWeightTicketHandler = CreateWeightTicketHandler{handlerConfig, weightticket.NewCustomerWeightTicketCreator()}
weightTicketFetcher := weightticket.NewWeightTicketFetcher()
internalAPI.PpmUpdateWeightTicketHandler = UpdateWeightTicketHandler{handlerConfig, weightticket.NewCustomerWeightTicketUpdater(weightTicketFetcher, ppmShipmentUpdater)}
internalAPI.PpmDeleteWeightTicketHandler = DeleteWeightTicketHandler{handlerConfig, weightticket.NewWeightTicketDeleter(weightTicketFetcher, ppmEstimator)}
internalAPI.PpmCreateProGearWeightTicketHandler = CreateProGearWeightTicketHandler{handlerConfig, progear.NewCustomerProgearWeightTicketCreator()}
internalAPI.PpmUpdateProGearWeightTicketHandler = UpdateProGearWeightTicketHandler{handlerConfig, progear.NewCustomerProgearWeightTicketUpdater()}
internalAPI.PpmDeleteProGearWeightTicketHandler = DeleteProGearWeightTicketHandler{handlerConfig, progear.NewProgearWeightTicketDeleter()}
internalAPI.PpmCreatePPMUploadHandler = CreatePPMUploadHandler{handlerConfig, weightGenerator, parserComputer, userUploader}
ppmShipmentNewSubmitter := ppmshipment.NewPPMShipmentNewSubmitter(ppmShipmentFetcher, signedCertificationCreator, ppmShipmentRouter)
internalAPI.PpmSubmitPPMShipmentDocumentationHandler = SubmitPPMShipmentDocumentationHandler{handlerConfig, ppmShipmentNewSubmitter}
ppmShipmentUpdatedSubmitter := ppmshipment.NewPPMShipmentUpdatedSubmitter(signedCertificationUpdater, ppmShipmentRouter)
internalAPI.PpmResubmitPPMShipmentDocumentationHandler = ResubmitPPMShipmentDocumentationHandler{handlerConfig, ppmShipmentUpdatedSubmitter}
internalAPI.TransportationOfficesGetTransportationOfficesHandler = GetTransportationOfficesHandler{
handlerConfig,
transportationOfficeFetcher,
}
paymentPacketCreator := ppmshipment.NewPaymentPacketCreator(ppmShipmentFetcher, pdfGenerator, AOAPacketCreator)
internalAPI.PpmShowPaymentPacketHandler = ShowPaymentPacketHandler{handlerConfig, paymentPacketCreator}
return internalAPI
}
// PDFProducer creates a new PDF producer
func PDFProducer() runtime.Producer {
return runtime.ProducerFunc(func(writer io.Writer, data interface{}) error {
rw, ok := data.(io.ReadCloser)
if !ok {
return errors.Errorf("could not convert %+v to io.ReadCloser", data)
}
_, err := io.Copy(writer, rw)
return err
})
}