* fix: migrate cart service to typescript
* fix: jsdoc inventory service
* fix: revert route unit test change
* fix: typo
* fix: revert integration test packages
* fix: cleanup
* fix: tests
* fix: integration tests
* fix: create props type guards
* fix: move total field to common types
* testing for deletes of variants when a product is deleted
* remove variants with products
* test using direct db query
* formatting
* removed unused imports
add: composite unique constraint for shipping_option_id and cart_id
fix: fetchCartOptions to format custom shipping options like normal shipping options
fix: addShippingMethod should throw when custom shipping options is not empty and no optionId corresponds to custom shipping options
* auth tests
* customer auth tests
* user auth test
* store auth snapshot
* auth snapshot
* auth with deleted password hashes
* manual field input for test scripts
* fix circleci with double retrieve of user and customer
* add email validation to user
* fix: cleanup
Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
* discount expiration validation and testing
* integration testing
* double quotes
* add iso8601 package
* api testing
* add joi validation of start and end dates as well as valid_duration
* valid_duration column
* service testing
* discount validation in services
* integration test with invalid date interval
* include valid_duration when fetching a discount
* rename variable for clarity
* add test for dynamic discount with expiration date
* remove debug code
* adjust tests to reflect valid_duration being included in default fields
* additional discount update validation
* fixed failing test
* set ends_at on dynamic discount creation
* discount integration tests
* removed unused console.log
* removed validation of dynamic discounts by duration and added ends_at to dynamic discount creation
* integration tests for dynamic discount with and without duration
* optional valid duration for dynamic discounts
* allow nullable dynamic discount durations
* expect assertions
* fix unit test after change to dynamic discounts without duration
* change to date instead of string
* add assertions
* error handling
* addressed feedback