|
1 | 1 | import graphene
|
2 |
| -from graphene import Node |
| 2 | +from graphene import relay, Node |
3 | 3 | from graphene_django import DjangoObjectType
|
4 | 4 | from django_filters import OrderingFilter
|
5 | 5 | from graphene_django.filter import DjangoFilterConnectionField
|
| 6 | +from graphql_relay import from_global_id |
6 | 7 | from .models import Product, InventoryItem, QuantitativeUnit
|
7 | 8 | from core.models import User
|
8 | 9 |
|
@@ -69,18 +70,28 @@ def resolve_inventory_items(self, info, **kwargs):
|
69 | 70 | return InventoryItem.objects.all().order_by('expiration_date')
|
70 | 71 |
|
71 | 72 |
|
72 |
| -class UpdateItemQuantity(graphene.Mutation): |
73 |
| - class Arguments: |
| 73 | +class UpdateItemQuantity(relay.ClientIDMutation): |
| 74 | + success = graphene.Boolean() |
| 75 | + message = graphene.String() |
| 76 | + inventory_item = graphene.Field(lambda: InventoryItemType) |
| 77 | + |
| 78 | + class Input: |
74 | 79 | id = graphene.String(required=True)
|
75 | 80 | quantity = graphene.Int(required=True)
|
76 | 81 |
|
77 |
| - inventory_item = graphene.Field(InventoryItemType) |
| 82 | + def mutate_and_get_payload(cls, info, id, quantity, **kwargs): |
| 83 | + try: |
| 84 | + item_id = from_global_id(id)[1] |
78 | 85 |
|
79 |
| - def mutate(self, info, id, quantity, **kwargs): |
80 |
| - inventory_item = InventoryItem.objects.get(id=id) |
81 |
| - inventory_item.quantity = quantity |
82 |
| - inventory_item.save() |
83 |
| - return UpdateItemQuantity(inventory_item=inventory_item) |
| 86 | + inventory_item = InventoryItem.objects.get(id=item_id) |
| 87 | + inventory_item.quantity = quantity |
| 88 | + inventory_item.save() |
| 89 | + |
| 90 | + return UpdateItemQuantity(success=True, inventory_item=inventory_item) |
| 91 | + except InventoryItem.DoesNotExist: |
| 92 | + return UpdateItemQuantity(success=False, message="Item not found.") |
| 93 | + except Exception as e: |
| 94 | + return UpdateItemQuantity(success=False, message=f"An error occurred: {str(e)}") |
84 | 95 |
|
85 | 96 |
|
86 | 97 | class QuantitativeUnitInput(graphene.InputObjectType):
|
@@ -113,18 +124,20 @@ def mutate(self, info, new_inventory_item):
|
113 | 124 | return CreateInventoryItem(inventory_item=inventory_item)
|
114 | 125 |
|
115 | 126 |
|
116 |
| -class DeleteInventoryItem(graphene.Mutation): |
| 127 | +class DeleteInventoryItem(relay.ClientIDMutation): |
117 | 128 | success = graphene.Boolean()
|
118 | 129 | message = graphene.String()
|
119 | 130 |
|
120 |
| - class Arguments: |
| 131 | + class Input: |
121 | 132 | id = graphene.ID(required=True)
|
122 | 133 |
|
123 |
| - def mutate(self, info, id): |
| 134 | + item = graphene.Field(InventoryItemType) |
| 135 | + |
| 136 | + def mutate_and_get_payload(cls, info, id): |
124 | 137 | try:
|
125 |
| - # Retrieve the item by ID |
126 |
| - item = InventoryItem.objects.get(id=id) |
127 |
| - # Delete the item |
| 138 | + item_id = from_global_id(id)[1] |
| 139 | + |
| 140 | + item = InventoryItem.objects.get(id=item_id) |
128 | 141 | item.delete()
|
129 | 142 | return DeleteInventoryItem(success=True, message="Item deleted successfully.")
|
130 | 143 | except InventoryItem.DoesNotExist:
|
|
0 commit comments