Skip to content

Commit 1abaebe

Browse files
committed
refactor: CrudAPI _crud_del_obj
1 parent a6fbee8 commit 1abaebe

File tree

2 files changed

+19
-20
lines changed

2 files changed

+19
-20
lines changed

easy/controller/meta.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,10 @@ async def del_obj(self, request: HttpRequest, id: int) -> Any:
4848
DELETE /{id}
4949
Delete a single Object
5050
"""
51-
return await self.service.del_obj(id)
51+
if await self.service.del_obj(id):
52+
return BaseApiResponse("Deleted.", errno=204)
53+
else:
54+
return BaseApiResponse("Not Found.", errno=404)
5255

5356
@paginate
5457
async def get_objs(
@@ -153,7 +156,7 @@ async def add_obj( # type: ignore
153156
if obj_id:
154157
return BaseApiResponse({"id": obj_id}, errno=201)
155158
else:
156-
return BaseApiResponse("Update failed", errno=204)
159+
return BaseApiResponse("Add failed", errno=204) # pragma: no cover
157160

158161
async def patch_obj( # type: ignore
159162
self, request: HttpRequest, id: int, data: DataSchema

easy/domain/orm.py

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from ninja_extra.shortcuts import get_object_or_none
77

88
from easy.exception import BaseAPIException
9-
from easy.response import BaseApiResponse
109

1110
logger = logging.getLogger(__name__)
1211

@@ -37,37 +36,35 @@ def _separate_payload(self, payload: Dict) -> Tuple[Dict, Dict]:
3736
return local_fields, m2m_fields
3837

3938
@staticmethod
40-
def _crud_set_m2m_obj(obj: models.Model, m2m_fields: Dict) -> bool:
39+
def _crud_set_m2m_obj(obj: models.Model, m2m_fields: Dict) -> None:
4140
if obj and m2m_fields:
4241
for _field, _value in m2m_fields.items():
4342
if _value and isinstance(_value, List):
4443
m2m_f = getattr(obj, _field)
4544
m2m_f.set(_value)
46-
return True
4745

4846
# Define BASE CRUD
4947
@transaction.atomic()
5048
def _crud_add_obj(self, **payload: Dict) -> Any:
5149
local_f_payload, m2m_f_payload = self._separate_payload(payload)
5250

53-
# Create obj with local_fields payload
54-
obj = self.model.objects.create(**local_f_payload)
55-
56-
# Save obj with m2m_fields payload
57-
set_m2m_status = self._crud_set_m2m_obj(obj, m2m_f_payload)
58-
59-
if obj and set_m2m_status:
51+
try:
52+
# Create obj with local_fields payload
53+
obj = self.model.objects.create(**local_f_payload)
54+
# Save obj with m2m_fields payload
55+
self._crud_set_m2m_obj(obj, m2m_f_payload)
56+
except Exception as e: # pragma: no cover
57+
raise BaseAPIException(f"Create Error - {e}")
58+
if obj:
6059
return obj.id
61-
else:
62-
return None
6360

64-
def _crud_del_obj(self, pk: int) -> "BaseApiResponse":
61+
def _crud_del_obj(self, pk: int) -> bool:
6562
obj = get_object_or_none(self.model, pk=pk)
6663
if obj:
6764
self.model.objects.filter(pk=pk).delete()
68-
return BaseApiResponse("Deleted.", errno=204)
65+
return True
6966
else:
70-
return BaseApiResponse("Not Found.", errno=404)
67+
return False
7168

7269
@transaction.atomic()
7370
def _crud_update_obj(self, pk: int, payload: Dict) -> bool:
@@ -76,11 +73,10 @@ def _crud_update_obj(self, pk: int, payload: Dict) -> bool:
7673
return False
7774
try:
7875
obj, _ = self.model.objects.update_or_create(pk=pk, defaults=local_fields)
76+
self._crud_set_m2m_obj(obj, m2m_fields)
7977
except Exception as e: # pragma: no cover
8078
raise BaseAPIException(f"Update Error - {e}")
81-
82-
set_m2m_status = self._crud_set_m2m_obj(obj, m2m_fields)
83-
return bool(set_m2m_status and obj)
79+
return bool(obj)
8480

8581
def _crud_get_obj(self, pk: int) -> Any:
8682
if self.m2m_fields_list:

0 commit comments

Comments
 (0)