We need to implement something equivalent to SQL constraints and triggers in DynamoDB layer to closely track the PayID server implementation
payid regex check
https://github.com/jxpug/payid/blob/master/src/db/schema/01_account.sql
-- CONSTRAINTS
CONSTRAINT pay_id_length_nonzero CHECK(length(pay_id) > 0),
CONSTRAINT pay_id_lowercase CHECK(lower(pay_id) = pay_id),
-- Regex discussion: https://github.com/payid-org/payid/issues/345
CONSTRAINT valid_pay_id CHECK(pay_id ~ '^[a-z0-9!#@%&*+/=?^_`{|}~-]+(?:\.[a-z0-9!#@%&*+/=?^_`{|}~-]+)*\$(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z-]*[a-z0-9])?|(?:[0-9]{1,3}\.){3}[0-9]{1,3})$')
https://github.com/jxpug/payid/blob/master/src/db/schema/02_address.sql
-- CONSTRAINTS
CONSTRAINT payment_network_length_nonzero CHECK(length(payment_network) > 0),
CONSTRAINT environment_length_nonzero CHECK(length(environment) > 0),
CONSTRAINT payment_network_uppercase CHECK (upper(payment_network) = payment_network),
CONSTRAINT environment_uppercase CHECK(upper(environment) = environment),
-- Note that the ordering here matters, since a SELECT with a WHERE clause on just `payment_network` will use the associated index,
-- as will one for `(payment_network, environment)`, but a SELECT with a WHERE clause on just `environment` WILL NOT use the index.
CONSTRAINT one_address_per_account_payment_network_environment_tuple UNIQUE (payment_network, environment, account_id)
We need to implement something equivalent to SQL constraints and triggers in DynamoDB layer to closely track the PayID server implementation
payid regex check
https://github.com/jxpug/payid/blob/master/src/db/schema/01_account.sql
https://github.com/jxpug/payid/blob/master/src/db/schema/02_address.sql