Skip to content

Commit

Permalink
Merge branch 'main' into MAIN-B-22661
Browse files Browse the repository at this point in the history
  • Loading branch information
danieljordan-caci authored Feb 25, 2025
2 parents 5a8893e + 810fb35 commit 200c2c5
Show file tree
Hide file tree
Showing 86 changed files with 3,860 additions and 248 deletions.
14 changes: 12 additions & 2 deletions .envrc
Original file line number Diff line number Diff line change
Expand Up @@ -248,19 +248,22 @@ export TZ="UTC"

# AWS development access
#
# To use S3/SES for local builds, you'll need to uncomment the following.
# To use S3/SES or SNS & SQS for local builds, you'll need to uncomment the following.
# Do not commit the change:
#
# export STORAGE_BACKEND=s3
# export EMAIL_BACKEND=ses
# export RECEIVER_BACKEND=sns_sqs
#
# Instructions for using S3 storage backend here: https://dp3.atlassian.net/wiki/spaces/MT/pages/1470955567/How+to+test+storing+data+in+S3+locally
# Instructions for using SES email backend here: https://dp3.atlassian.net/wiki/spaces/MT/pages/1467973894/How+to+test+sending+email+locally
# Instructions for using SNS&SQS backend here: https://dp3.atlassian.net/wiki/spaces/MT/pages/2793242625/How+to+test+notifications+receiver+locally
#
# The default and equivalent to not being set is:
#
# export STORAGE_BACKEND=local
# export EMAIL_BACKEND=local
# export RECEIVER_BACKEND=local
#
# Setting region and profile conditionally while we migrate from com to govcloud.
if [ "$STORAGE_BACKEND" == "s3" ]; then
Expand All @@ -274,6 +277,13 @@ export AWS_S3_KEY_NAMESPACE=$USER
export AWS_SES_DOMAIN="devlocal.dp3.us"
export AWS_SES_REGION="us-gov-west-1"

if [ "$RECEIVER_BACKEND" == "sns_sqs" ]; then
export SNS_TAGS_UPDATED_TOPIC="app_s3_tag_events"
export SNS_REGION="us-gov-west-1"
# cleanup flag false by default, only used at server startup to wipe receiver artifacts from previous runs
# export RECEIVER_CLEANUP_ON_START=false
fi

# To use s3 links aws-bucketname/xx/user/ for local builds,
# you'll need to add the following to your .envrc.local:
#
Expand Down Expand Up @@ -460,4 +470,4 @@ then
fi

# Check that all required environment variables are set
check_required_variables
check_required_variables
8 changes: 8 additions & 0 deletions cmd/milmove/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -478,6 +478,13 @@ func buildRoutingConfig(appCtx appcontext.AppContext, v *viper.Viper, redisPool
appCtx.Logger().Fatal("notification sender sending not enabled", zap.Error(err))
}

// Notification Receiver
runReceiverCleanup := v.GetBool(cli.ReceiverCleanupOnStartFlag) // Cleanup aws artifacts left over from previous runs
notificationReceiver, err := notifications.InitReceiver(v, appCtx.Logger(), runReceiverCleanup)
if err != nil {
appCtx.Logger().Fatal("notification receiver not enabled", zap.Error(err))
}

routingConfig.BuildRoot = v.GetString(cli.BuildRootFlag)
sendProductionInvoice := v.GetBool(cli.GEXSendProdInvoiceFlag)

Expand Down Expand Up @@ -567,6 +574,7 @@ func buildRoutingConfig(appCtx appcontext.AppContext, v *viper.Viper, redisPool
dtodRoutePlanner,
fileStorer,
notificationSender,
notificationReceiver,
iwsPersonLookup,
sendProductionInvoice,
gexSender,
Expand Down
4 changes: 3 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ require (
github.com/aws/aws-sdk-go-v2/service/rds v1.78.2
github.com/aws/aws-sdk-go-v2/service/s3 v1.59.0
github.com/aws/aws-sdk-go-v2/service/ses v1.25.3
github.com/aws/aws-sdk-go-v2/service/sns v1.31.8
github.com/aws/aws-sdk-go-v2/service/sqs v1.34.6
github.com/aws/aws-sdk-go-v2/service/ssm v1.52.8
github.com/aws/aws-sdk-go-v2/service/sts v1.30.7
github.com/aws/smithy-go v1.20.4
Expand Down Expand Up @@ -278,4 +280,4 @@ require (
pault.ag/go/piv v0.0.0-20190320181422-d9d61c70919c // indirect
)

replace github.com/pdfcpu/pdfcpu => github.com/transcom/pdfcpu v0.0.0-20250131173611-4b416bd62126
replace github.com/pdfcpu/pdfcpu => github.com/transcom/pdfcpu v0.0.0-20250225161110-ce2f81788248
8 changes: 6 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,10 @@ github.com/aws/aws-sdk-go-v2/service/s3 v1.59.0 h1:Cso4Ev/XauMVsbwdhYEoxg8rxZWw4
github.com/aws/aws-sdk-go-v2/service/s3 v1.59.0/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI=
github.com/aws/aws-sdk-go-v2/service/ses v1.25.3 h1:wcfUsE2nqsXhEj68gxr7MnGXNPcBPKx0RW2DzBVgVlM=
github.com/aws/aws-sdk-go-v2/service/ses v1.25.3/go.mod h1:6Ul/Ir8oOCsI3dFN0prULK9fvpxP+WTYmlHDkFzaAVA=
github.com/aws/aws-sdk-go-v2/service/sns v1.31.8 h1:vRSk062d1SmaEVbiqFePkvYuhCTnW2JnPkUdt19nqeY=
github.com/aws/aws-sdk-go-v2/service/sns v1.31.8/go.mod h1:wjhxA9hlVu75dCL/5Wcx8Cwmszvu6t0i8WEDypcB4+s=
github.com/aws/aws-sdk-go-v2/service/sqs v1.34.6 h1:DbjODDHumQBdJ3T+EO7AXVoFUeUhAsJYOdjStH5Ws4A=
github.com/aws/aws-sdk-go-v2/service/sqs v1.34.6/go.mod h1:7idt3XszF6sE9WPS1GqZRiDJOxw4oPtlRBXodWnCGjU=
github.com/aws/aws-sdk-go-v2/service/ssm v1.52.8 h1:7cjN4Wp3U3cud17TsnUxSomTwKzKQGUWdq/N1aWqgMk=
github.com/aws/aws-sdk-go-v2/service/ssm v1.52.8/go.mod h1:nUSNPaG8mv5rIu7EclHnFqZOjhreEUwRKENtKTtJ9aw=
github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 h1:pIaGg+08llrP7Q5aiz9ICWbY8cqhTkyy+0SHvfzQpTc=
Expand Down Expand Up @@ -629,8 +633,8 @@ github.com/tiaguinho/gosoap v1.4.4 h1:4XZlaqf/y2UAbCPFGcZS4uLKrEvnMr+5pccIyQAUVg
github.com/tiaguinho/gosoap v1.4.4/go.mod h1:4vv86Jl19UkOeoJW/aawihXYNJ/Iy2NHkhgmBUJ2Ibk=
github.com/toqueteos/webbrowser v1.2.0 h1:tVP/gpK69Fx+qMJKsLE7TD8LuGWPnEV71wBN9rrstGQ=
github.com/toqueteos/webbrowser v1.2.0/go.mod h1:XWoZq4cyp9WeUeak7w7LXRUQf1F1ATJMir8RTqb4ayM=
github.com/transcom/pdfcpu v0.0.0-20250131173611-4b416bd62126 h1:XbLtbZvPTc5bY6DuXF2ZHPLPmE3GVe3T/o8PzfmITCA=
github.com/transcom/pdfcpu v0.0.0-20250131173611-4b416bd62126/go.mod h1:8EAma3IBIS7ssMiPlcNIPWwISTuP31WToXfGvc327vI=
github.com/transcom/pdfcpu v0.0.0-20250225161110-ce2f81788248 h1:G1EenmQJPQ5EO1U2iOi3olQxpM0bW+AsPWFpJhnfL1w=
github.com/transcom/pdfcpu v0.0.0-20250225161110-ce2f81788248/go.mod h1:8EAma3IBIS7ssMiPlcNIPWwISTuP31WToXfGvc327vI=
github.com/urfave/cli v1.22.10 h1:p8Fspmz3iTctJstry1PYS3HVdllxnEzTEsgIgtxTrCk=
github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/vektra/mockery/v2 v2.45.1 h1:6HpdnKiLCjVtzlRLQPUNIM0u7yrvAoZ7VWF1TltJvTM=
Expand Down
3 changes: 3 additions & 0 deletions migrations/app/migrations_manifest.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1091,7 +1091,10 @@
20250121153007_update_pricing_proc_to_handle_international_shuttle.up.sql
20250121184450_upd_duty_loc_B-22242.up.sql
20250123173216_add_destination_queue_db_func_and_gbloc_view.up.sql
20250123210535_update_re_intl_transit_times_for_ak_hhg.up.sql
20250204162411_updating_create_accessorial_service_item_proc_for_crating.up.sql
20250206173204_add_hawaii_data.up.sql
20250207153450_add_fetch_documents_func.up.sql
20250210175754_B22451_update_dest_queue_to_consider_sit_extensions.up.sql
20250213151815_fix_spacing_fetch_documents.up.sql
# nothing should be added below this line this file is archived and only needed for rebuilding db Locally to be run prior to new migrations process to keep the current state
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
UPDATE re_intl_transit_times
SET hhg_transit_time = 10
WHERE origin_rate_area_id IN ('b80a00d4-f829-4051-961a-b8945c62c37d','5a27e806-21d4-4672-aa5e-29518f10c0aa')
OR destination_rate_area_id IN ('b80a00d4-f829-4051-961a-b8945c62c37d','5a27e806-21d4-4672-aa5e-29518f10c0aa');

update re_intl_transit_times
SET hhg_transit_time = 20
WHERE origin_rate_area_id IN ('9bb87311-1b29-4f29-8561-8a4c795654d4','635e4b79-342c-4cfc-8069-39c408a2decd')
OR destination_rate_area_id IN ('9bb87311-1b29-4f29-8561-8a4c795654d4','635e4b79-342c-4cfc-8069-39c408a2decd');
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
CREATE OR REPLACE FUNCTION public.fetch_documents(docCursor refcursor, useruploadCursor refcursor, uploadCursor refcursor, _docID uuid) RETURNS setof refcursor AS $$
BEGIN
OPEN $1 FOR
SELECT documents.created_at, documents.deleted_at, documents.id, documents.service_member_id, documents.updated_at
FROM documents AS documents
WHERE documents.id = _docID and documents.deleted_at is null
LIMIT 1;
RETURN NEXT $1;
OPEN $2 FOR
SELECT user_uploads.created_at, user_uploads.deleted_at, user_uploads.document_id, user_uploads.id, user_uploads.updated_at,
user_uploads.upload_id, user_uploads.uploader_id
FROM user_uploads AS user_uploads
WHERE user_uploads.deleted_at is null and user_uploads.document_id = _docID
ORDER BY created_at asc;
RETURN NEXT $2;
OPEN $3 FOR
SELECT uploads.id, uploads.bytes, uploads.checksum, uploads.content_type, uploads.created_at, uploads.deleted_at, uploads.filename,
uploads.rotation, uploads.storage_key, uploads.updated_at, uploads.upload_type
FROM uploads AS uploads, user_uploads
WHERE uploads.deleted_at is null
and uploads.id = user_uploads.upload_id
and user_uploads.deleted_at is null and user_uploads.document_id = _docID;
RETURN NEXT $3;
END;
$$ LANGUAGE plpgsql;
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
CREATE OR REPLACE FUNCTION public.fetch_documents(docCursor refcursor, useruploadCursor refcursor, uploadCursor refcursor, _docID uuid) RETURNS setof refcursor AS $$
BEGIN
OPEN $1 FOR
SELECT documents.created_at, documents.deleted_at, documents.id, documents.service_member_id, documents.updated_at
FROM documents AS documents
WHERE documents.id = _docID and documents.deleted_at is null
LIMIT 1;
RETURN NEXT $1;
OPEN $2 FOR
SELECT user_uploads.created_at, user_uploads.deleted_at, user_uploads.document_id, user_uploads.id, user_uploads.updated_at,
user_uploads.upload_id, user_uploads.uploader_id
FROM user_uploads AS user_uploads
WHERE user_uploads.deleted_at is null and user_uploads.document_id = _docID
ORDER BY created_at asc;
RETURN NEXT $2;
OPEN $3 FOR
SELECT uploads.id, uploads.bytes, uploads.checksum, uploads.content_type, uploads.created_at, uploads.deleted_at, uploads.filename,
uploads.rotation, uploads.storage_key, uploads.updated_at, uploads.upload_type FROM uploads AS uploads , user_uploads
WHERE uploads.deleted_at is null and uploads.id = user_uploads.upload_id and user_uploads.deleted_at is null and user_uploads.document_id = _docID;
RETURN NEXT $3;
END;
$$ LANGUAGE plpgsql;
61 changes: 61 additions & 0 deletions pkg/cli/receiver.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package cli

import (
"fmt"

"github.com/spf13/pflag"
"github.com/spf13/viper"
)

const (
// ReceiverBackendFlag is the Receiver Backend Flag
ReceiverBackendFlag string = "receiver-backend"
// SNSTagsUpdatedTopicFlag is the SNS Tags Updated Topic Flag
SNSTagsUpdatedTopicFlag string = "sns-tags-updated-topic"
// SNSRegionFlag is the SNS Region flag
SNSRegionFlag string = "sns-region"
// SNSAccountId is the application's AWS account id
SNSAccountId string = "aws-account-id"
// ReceiverCleanupOnStartFlag is the Receiver Cleanup On Start Flag
ReceiverCleanupOnStartFlag string = "receiver-cleanup-on-start"
)

// InitReceiverFlags initializes Storage command line flags
func InitReceiverFlags(flag *pflag.FlagSet) {
flag.String(ReceiverBackendFlag, "local", "Receiver backend to use, either local or sns_sqs.")
flag.String(SNSTagsUpdatedTopicFlag, "", "SNS Topic for receiving event messages")
flag.String(SNSRegionFlag, "", "Region used for SNS and SQS")
flag.String(SNSAccountId, "", "SNS account Id")
flag.Bool(ReceiverCleanupOnStartFlag, false, "Receiver will cleanup previous aws artifacts on start.")
}

// CheckReceiver validates Storage command line flags
func CheckReceiver(v *viper.Viper) error {

receiverBackend := v.GetString(ReceiverBackendFlag)
if !stringSliceContains([]string{"local", "sns_sqs"}, receiverBackend) {
return fmt.Errorf("invalid receiver_backend %s, expecting local or sns_sqs", receiverBackend)
}

receiverCleanupOnStart := v.GetString(ReceiverCleanupOnStartFlag)
if !stringSliceContains([]string{"true", "false"}, receiverCleanupOnStart) {
return fmt.Errorf("invalid receiver_cleanup_on_start %s, expecting true or false", receiverCleanupOnStart)
}

if receiverBackend == "sns_sqs" {
r := v.GetString(SNSRegionFlag)
if r == "" {
return fmt.Errorf("invalid value for %s: %s", SNSRegionFlag, r)
}
topic := v.GetString(SNSTagsUpdatedTopicFlag)
if topic == "" {
return fmt.Errorf("invalid value for %s: %s", SNSTagsUpdatedTopicFlag, topic)
}
accountId := v.GetString(SNSAccountId)
if topic == "" {
return fmt.Errorf("invalid value for %s: %s", SNSAccountId, accountId)
}
}

return nil
}
6 changes: 6 additions & 0 deletions pkg/cli/receiver_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package cli

func (suite *cliTestSuite) TestConfigReceiver() {
suite.Setup(InitReceiverFlags, []string{})
suite.NoError(CheckReceiver(suite.viper))
}
72 changes: 72 additions & 0 deletions pkg/factory/address_factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -201,3 +201,75 @@ func GetTraitAddress4() []Customization {
},
}
}

// GetTraitAddressAKZone1 is an address in Zone 1 of AK
func GetTraitAddressAKZone1() []Customization {

return []Customization{
{
Model: models.Address{
StreetAddress1: "82 Joe Gibbs Rd",
StreetAddress2: models.StringPointer("P.O. Box 1234"),
StreetAddress3: models.StringPointer("c/o Another Person"),
City: "ANCHORAGE",
State: "AK",
PostalCode: "99695",
IsOconus: models.BoolPointer(true),
},
},
}
}

// GetTraitAddressAKZone2 is an address in Zone 2 of Alaska
func GetTraitAddressAKZone2() []Customization {

return []Customization{
{
Model: models.Address{
StreetAddress1: "44 John Riggins Rd",
StreetAddress2: models.StringPointer("P.O. Box 1234"),
StreetAddress3: models.StringPointer("c/o Another Person"),
City: "FAIRBANKS",
State: "AK",
PostalCode: "99703",
IsOconus: models.BoolPointer(true),
},
},
}
}

// GetTraitAddressAKZone3 is an address in Zone 3 of Alaska
func GetTraitAddressAKZone3() []Customization {

return []Customization{
{
Model: models.Address{
StreetAddress1: "26 Clinton Portis Rd",
StreetAddress2: models.StringPointer("P.O. Box 1234"),
StreetAddress3: models.StringPointer("c/o Another Person"),
City: "KODIAK",
State: "AK",
PostalCode: "99697",
IsOconus: models.BoolPointer(true),
},
},
}
}

// GetTraitAddressAKZone4 is an address in Zone 4 of Alaska
func GetTraitAddressAKZone4() []Customization {

return []Customization{
{
Model: models.Address{
StreetAddress1: "8 Alex Ovechkin Rd",
StreetAddress2: models.StringPointer("P.O. Box 1234"),
StreetAddress3: models.StringPointer("c/o Another Person"),
City: "JUNEAU",
State: "AK",
PostalCode: "99801",
IsOconus: models.BoolPointer(true),
},
},
}
}
9 changes: 9 additions & 0 deletions pkg/gen/ghcapi/configure_mymove.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package ghcapi

import (
"crypto/tls"
"io"
"net/http"

"github.com/go-openapi/errors"
Expand Down Expand Up @@ -64,6 +65,9 @@ func configureAPI(api *ghcoperations.MymoveAPI) http.Handler {

api.BinProducer = runtime.ByteStreamProducer()
api.JSONProducer = runtime.JSONProducer()
api.TextEventStreamProducer = runtime.ProducerFunc(func(w io.Writer, data interface{}) error {
return errors.NotImplemented("textEventStream producer has not yet been implemented")
})

// You may change here the memory limit for this multipart form parser. Below is the default (32 MB).
// uploads.CreateUploadMaxParseMemory = 32 << 20
Expand Down Expand Up @@ -402,6 +406,11 @@ func configureAPI(api *ghcoperations.MymoveAPI) http.Handler {
return middleware.NotImplemented("operation uploads.GetUpload has not yet been implemented")
})
}
if api.UploadsGetUploadStatusHandler == nil {
api.UploadsGetUploadStatusHandler = uploads.GetUploadStatusHandlerFunc(func(params uploads.GetUploadStatusParams) middleware.Responder {
return middleware.NotImplemented("operation uploads.GetUploadStatus has not yet been implemented")
})
}
if api.CalendarIsDateWeekendHolidayHandler == nil {
api.CalendarIsDateWeekendHolidayHandler = calendar.IsDateWeekendHolidayHandlerFunc(func(params calendar.IsDateWeekendHolidayParams) middleware.Responder {
return middleware.NotImplemented("operation calendar.IsDateWeekendHoliday has not yet been implemented")
Expand Down
1 change: 1 addition & 0 deletions pkg/gen/ghcapi/doc.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 200c2c5

Please sign in to comment.