Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow external references to be used instead of Saleor-assigned IDs #11410

Merged
merged 3 commits into from
Dec 19, 2022

Conversation

zedzior
Copy link
Member

@zedzior zedzior commented Dec 7, 2022

#10820

I want to merge this change because I want to select, update and delete records by external IDs. The new filed is called external_reference and will be applied to following models:
a. Orders
b. Products
c. Product Variants
d. Attributes
e. Attribute Values
f. Warehouses (only for the purpose of Stock update)
g. Customers

Impact

  • New migrations
  • New/Updated API fields or mutations
  • Deprecated API fields or mutations
  • Removed API types, fields, or mutations
  • Documentation needs to be updated

Pull Request Checklist

  • Privileged queries and mutations are guarded by proper permission checks
  • Database queries are optimized and the number of queries is constant
  • Database migration files are up to date
  • The changes are tested
  • GraphQL schema and type definitions are up to date
  • Changes are mentioned in the changelog

@zedzior zedzior self-assigned this Dec 7, 2022
@zedzior zedzior linked an issue Dec 7, 2022 that may be closed by this pull request
@db-queries
Copy link

db-queries bot commented Dec 7, 2022

Here is the report for 69aca9d (saleor:add-external-references)
Base comparison is 10356eb.

No differences were found.

# saleor.graphql.accountbenchmark account
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  addresses for federation query count                                    	          9	          9	              2
  customers query                                                         	         48	         48	              0
  delete staff members                                                    	         37	         37	              1
  query staff user                                                        	         18	         18	              3
  staff create                                                            	         23	         23	              3
  staff update groups and permissions                                     	         36	         36	              5
  users for federation query count                                        	          8	          8	              3

# saleor.graphql.accountbenchmark permission group
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  groups for federation query count                                       	          5	          5	              2
  permission group create                                                 	         21	         21	              2
  permission group delete                                                 	         22	         22	              3
  permission group query                                                  	          7	          7	              0
  permission group update                                                 	         37	         37	              1
  permission group update remove users with manage staff                  	         31	         31	              3

# saleor.graphql.appbenchmarks app extensions
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  app extensions                                                          	         15	         15	              0
  app extensions with filter[filter0]                                     	         14	         14	              0
  app extensions with filter[filter1]                                     	         10	         10	              0
  app extensions with filter[filter2]                                     	         14	         14	              0
  app extensions with filter[filter3]                                     	         10	         10	              0

# saleor.graphql.appbenchmarks apps
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  apps for federation query count                                         	          9	          9	              3

# saleor.graphql.attributebenchmark attribute
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  attribute translation                                                   	          6	          6	              0
  attribute value translation                                             	         26	         26	              0
  query attribute                                                         	          6	          6	              0
  query attributes                                                        	          8	          8	              0

# saleor.graphql.channelbenchmark channel
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  channels query                                                          	          5	          5	              0

# saleor.graphql.channelmutations channel update
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  channel update mutation remove warehouse                                	         38	         38	              6

# saleor.graphql.checkoutbenchmark checkout mutations
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  add billing address to checkout                                         	         68	         68	             10
  add checkout lines                                                      	         69	         69	             11
  add checkout lines with external shipping                               	        171	        171	             68
  add checkout lines with reservations                                    	        146	        146	             54
  add delivery to checkout                                                	         68	         68	             10
  add shipping to checkout                                                	         78	         78	             15
  checkout email update                                                   	         35	         35	              1
  checkout payment charge                                                 	         47	         47	             16
  checkout shipping address update                                        	         72	         72	              9
  checkout voucher code                                                   	         86	         86	             16
  complete checkout                                                       	        180	        180	             37
  complete checkout preorder                                              	        199	        199	             48
  complete checkout with digital line                                     	        240	        240	             63
  complete checkout with out of stock webhook                             	        182	        182	             37
  complete checkout with single line                                      	        182	        182	             37
  create checkout                                                         	         80	         80	             11
  create checkout with reservations                                       	        143	        143	             30
  customer complete checkout                                              	        201	        201	             47
  customer complete checkout for cc                                       	        182	        182	             36
  update checkout lines                                                   	         62	         62	             11
  update checkout lines with reservations                                 	        153	        153	             61

# saleor.graphql.checkoutbenchmark homepage
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  user checkout details                                                   	         53	         53	              6
  user checkout details with tax app                                      	         47	         47	              3

# saleor.graphql.discountbenchmark sales
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  sales query with channel slug                                           	         19	         19	              0
  sales query withot channel slug                                         	         18	         18	              0

# saleor.graphql.discountbenchmark vouchers
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  vouchers query with channel slug                                        	         19	         19	              0
  vouchers query withot channel slug                                      	         18	         18	              0

# saleor.graphql.giftcardbenchmark gift card mutations
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  create never expiry gift card                                           	         26	         26	              4
  gift card bulk activate by staff                                        	         16	         16	              3
  update gift card                                                        	         36	         36	              4

# saleor.graphql.giftcardbenchmark gift card queries
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  filter gift cards by products                                           	         14	         14	              3
  filter gift cards by tags                                               	         12	         12	              3
  filter gift cards by used by user                                       	         13	         13	              3
  query gift card details                                                 	         14	         14	              3
  query gift cards                                                        	         12	         12	              3

# saleor.graphql.orderbenchmark fulfillment
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  fulfillment query                                                       	          9	          9	              0

# saleor.graphql.orderbenchmark fulfillment refund and return products
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  fulfillment refund products order lines                                 	         54	         54	              2
  fulfillment return products order lines                                 	         98	         98	              9

# saleor.graphql.orderbenchmark order
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  staff multiple draft orders                                             	        720	        720	            570
  staff multiple orders                                                   	        220	        220	            125
  staff order details                                                     	         58	         58	              9
  user order details                                                      	         56	         56	             10

# saleor.graphql.orderbenchmark order fulfill
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  order fulfill                                                           	         17	         17	              3
  order fulfill with gift cards                                           	         17	         17	              3

# saleor.graphql.pagebenchmark page type
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  page types for federation query count                                   	          3	          3	              0
  query page type                                                         	         18	         18	              6
  query page types                                                        	         25	         25	             12

# saleor.graphql.paymentbenchmark payment transactions
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  payment transactions                                                    	         49	         49	             20

# saleor.graphql.productbenchmark category
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  categories children                                                     	          3	          3	              0
  categories for federation query count                                   	          3	          3	              0
  category delete                                                         	         82	         82	             17
  category view                                                           	         36	         36	              1

# saleor.graphql.productbenchmark collection
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  collection add products                                                 	         36	         36	              6
  collection bulk delete                                                  	         48	         48	              8
  collection view                                                         	          6	          6	              0
  collections for federation query count                                  	          7	          7	              2
  create collection                                                       	         36	         36	              5
  delete collection                                                       	         40	         40	              7
  remove products from collection                                         	         33	         33	              6
  retrieve collection channel listings                                    	          5	          5	              0

# saleor.graphql.productbenchmark homepage
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  report product sales                                                    	         10	         10	              3
  retrieve product list                                                   	          4	          4	              0

# saleor.graphql.productbenchmark product
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  filter products by attributes                                           	          9	          9	              0
  filter products by boolean attributes                                   	         19	         19	              0
  filter products by gift card                                            	         11	         11	              1
  filter products by numeric attributes                                   	         18	         18	              0
  product create                                                          	         73	         73	              8
  product details                                                         	         45	         45	              2
  product translations                                                    	          5	          5	              0
  products for federation query count                                     	          6	          6	              2
  products media for federation query count                               	          5	          5	              0
  products types for federation query count                               	          2	          2	              0
  retrieve channel listings                                               	         21	         21	              0
  retrieve product attributes                                             	          9	          9	              0
  retrieve product images                                                 	          4	          4	              0
  retrieve product media                                                  	          4	          4	              0
  retrive products with product types and attributes                      	          7	          7	              0
  update product                                                          	         51	         51	             11

# saleor.graphql.productbenchmark product variant channel listing update
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  variant channel listing update                                          	         45	         45	              3

# saleor.graphql.productbenchmark variant
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  product variant bulk create                                             	         68	         68	              3
  product variant create                                                  	         76	         76	              5
  products variants for federation query count                            	          6	          6	              2
  retrieve variant list                                                   	         39	         39	              3
  update product variant                                                  	         76	         76	              9

# saleor.graphql.productbenchmark variant stocks
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  product variants stocks create                                          	         26	         26	              4
  product variants stocks create with single webhook called               	         25	         25	              4
  product variants stocks delete by id                                    	         27	         27	              4
  product variants stocks delete by sku                                   	         27	         27	              4
  product variants stocks delete with out of stock webhook many calls     	         23	         23	              3
  product variants stocks update by sku                                   	         28	         28	              4
  product variants stocks update byid                                     	         28	         28	              4
  query product variants stocks                                           	         10	         10	              0

# saleor.graphql.producttest product sorting attributes
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  sort product not having attribute data                                  	         23	         23	              0

# saleor.graphql.shippingbenchmark shipping methods
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  vouchers query with channel slug                                        	          7	          7	              0
  vouchers query without channel slug                                     	          7	          7	              0

# saleor.graphql.shopbenchmark homepage
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  retrieve shop                                                           	          4	          4	              0

# saleor.graphql.warehousebenchmark stocks
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  stocks query                                                            	          5	          5	              0

# saleor.graphql.webhookbenchmark webhook events
  test name                                                               	left count 	right count	duplicate count
  ------------------------------------------------------------------------	-----------	-----------	---------------
  webhooks                                                                	          9	          9	              0

@zedzior zedzior requested a review from a team December 7, 2022 09:38
Copy link
Member

@korycins korycins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, but how we want to update the externalReference? As far as I see, we don't have any fields to save the externalReference. Shouldn't we have such possibility in case of create & update objects?

@korycins korycins requested a review from a team December 7, 2022 09:57
saleor/graphql/product/resolvers.py Outdated Show resolved Hide resolved
saleor/graphql/product/resolvers.py Outdated Show resolved Hide resolved
saleor/graphql/core/utils/resolvers.py Outdated Show resolved Hide resolved
@codecov
Copy link

codecov bot commented Dec 7, 2022

Codecov Report

Merging #11410 (69aca9d) into main (884db7e) will decrease coverage by 0.02%.
The diff coverage is 97.03%.

@@            Coverage Diff             @@
##             main   #11410      +/-   ##
==========================================
- Coverage   93.61%   93.59%   -0.03%     
==========================================
  Files         721      722       +1     
  Lines       53132    53303     +171     
  Branches     5990     6012      +22     
==========================================
+ Hits        49738    49887     +149     
- Misses       2208     2230      +22     
  Partials     1186     1186              
Impacted Files Coverage Δ
saleor/graphql/attribute/resolvers.py 100.00% <ø> (ø)
saleor/graphql/warehouse/resolvers.py 100.00% <ø> (ø)
...raphql/product/mutations/product/product_update.py 93.47% <75.00%> (-6.53%) ⬇️
...utations/product_variant/product_variant_update.py 94.73% <88.00%> (-3.42%) ⬇️
saleor/graphql/core/mutations.py 93.47% <95.45%> (+0.66%) ⬆️
saleor/account/models.py 94.28% <100.00%> (ø)
saleor/attribute/models/base.py 87.65% <100.00%> (ø)
saleor/core/error_codes.py 100.00% <100.00%> (ø)
saleor/core/models.py 98.09% <100.00%> (+0.07%) ⬆️
saleor/graphql/account/mutations/base.py 95.95% <100.00%> (+0.02%) ⬆️
... and 51 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

Copy link
Member

@korycins korycins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@zedzior @timuric
What about order-create-from-checkout and checkout-complete mutations? Do we want to also have the possibility to assign external references there?

Personally, I would say, that it would be worth to extend order-create-from-checkout mutation as this mutation is called by app. The app can already have the reference recieved from external system.

@korycins korycins requested a review from a team December 8, 2022 08:09
@maarcingebala
Copy link
Member

@korycins Do you mean allowing to pass external reference for a future order from the checkout flow? Make sense to me. Also, @timuric what do you think about renaming the field to externalId? It's shorter and looks more pretty in the schema. Then you would have id: ID and externalId: String and it looks to me more easy to guess about the purpose. But I'm fine with externalReference too if that's what was agreed earlier :)

@timuric
Copy link
Member

timuric commented Dec 8, 2022

@korycins do you have any use case in mind for having external keys in checkout?

@maarcingebala
Copy link
Member

@timuric It's more about external reference of orders, not checkouts. As I understand it, if you knew your external order ID upfront and passed it to Saleor during checkout, it would be assigned to the newly created order.

@korycins
Copy link
Member

@timuric I just thought that you could already have an externalReference, at the moment of creating the order on Saleor side. 🤔

@maarcingebala
Copy link
Member

@korycins We discussed with Timur that for now we are good with the mutations that this PR adds and we can extend it later, if there is a clear use-case for that.

… and delete by external_reference; cover changes with tests

Handle ProductVariant

Handle Order

Handle Attribute

Handle Warehouse query only

Refactor resolvers

Handle Account

Code rafctor, fix tests

Allow updating external_reference field; rename ext_ref in resolvers;
Copy link
Member

@korycins korycins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@zedzior external_reference is set as a unique in the abstract model. Can you confirm that we also handle the case when external_reference is already attached to different object? Maybe I am missing something, but I think that we will raise unhandled exception: IntegrityError

@zedzior
Copy link
Member Author

zedzior commented Dec 13, 2022

Can you confirm that we also handle the case when external_reference is already attached to different object? Maybe I am missing something, but I think that we will raise unhandled exception: IntegrityError

@korycins You are right, the case is not handled, let me correct this. It is already handled.

@szczecha szczecha added the test deployment Deploy test environment for pull request label Dec 14, 2022
@github-actions github-actions bot temporarily deployed to add-external-references December 14, 2022 13:39 Inactive
@github-actions github-actions bot temporarily deployed to add-external-references December 14, 2022 15:35 Inactive
@github-actions github-actions bot temporarily deployed to add-external-references December 14, 2022 16:08 Inactive
@maarcingebala maarcingebala merged commit db7e91a into main Dec 19, 2022
@maarcingebala maarcingebala deleted the add-external-references branch December 19, 2022 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
test deployment Deploy test environment for pull request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add external keys to objects
5 participants