From d46f498b118e35267652e2927e9c0eea3da8ee50 Mon Sep 17 00:00:00 2001 From: lucaskmpz Date: Fri, 23 Jan 2026 22:26:51 -0300 Subject: [PATCH 1/4] feat: adding optional parameters to list_entities --- entities/services.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/entities/services.py b/entities/services.py index 68c6779..4755e93 100644 --- a/entities/services.py +++ b/entities/services.py @@ -2,8 +2,15 @@ from django.db import transaction from .models import Entity -def list_entities(): - return Entity.objects.all().order_by("-created_at") +def list_entities(name: str = None, description: str = None, type: str = None): + qs = Entity.objects.all() + if name: + qs = qs.filter(name__icontains=name) + if description: + qs = qs.filter(description__icontains=description) + if type: + qs = qs.filter(type__icontains=type) + return qs.order_by("-created_at") def get_entity(entity_id: int) -> Entity: return Entity.objects.get(pk=entity_id) From 0633c04c4ca599ad0fac8fe28402386b42304009 Mon Sep 17 00:00:00 2001 From: lucaskmpz Date: Fri, 23 Jan 2026 22:28:03 -0300 Subject: [PATCH 2/4] feat: updating handler to accept all the optional query parameters --- entities/api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/entities/api.py b/entities/api.py index c5e0553..94e149a 100644 --- a/entities/api.py +++ b/entities/api.py @@ -11,8 +11,8 @@ router = Router() @router.get("/entities", response=List[EntityOut]) -def list_entities(request): - qs = services.list_entities() +def list_entities(request, name: str = None, description: str = None, type: str = None): + qs = services.list_entities(name=name, description=description, type=type) return list(qs) @router.get("/entities/{entity_id}", response=EntityOut) From 6bcbafbe0ae1ebdfbe3c7753bcbd4d887f455687 Mon Sep 17 00:00:00 2001 From: lucaskmpz Date: Fri, 23 Jan 2026 22:32:21 -0300 Subject: [PATCH 3/4] feat: adding support to filter operators --- entities/services.py | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/entities/services.py b/entities/services.py index 4755e93..79745f6 100644 --- a/entities/services.py +++ b/entities/services.py @@ -2,14 +2,33 @@ from django.db import transaction from .models import Entity -def list_entities(name: str = None, description: str = None, type: str = None): +def list_entities( + name: str = None, + name_op: str = "contains", + description: str = None, + description_op: str = "contains", + type: str = None, + type_op: str = "contains", +): qs = Entity.objects.all() - if name: - qs = qs.filter(name__icontains=name) - if description: - qs = qs.filter(description__icontains=description) - if type: - qs = qs.filter(type__icontains=type) + op_map = { + "equals": "exact", + "contains": "icontains", + "startswith": "istartswith", + "endswith": "iendswith", + } + + def apply(qs, field, value, op): + if not value: + return qs + if op == "notcontains": + return qs.exclude(**{f"{field}__icontains": value}) + lookup = op_map.get(op, "icontains") + return qs.filter(**{f"{field}__{lookup}": value}) + + qs = apply(qs, "name", name, name_op) + qs = apply(qs, "description", description, description_op) + qs = apply(qs, "type", type, type_op) return qs.order_by("-created_at") def get_entity(entity_id: int) -> Entity: From e9a96b3f38865f50070fa5838a3ea50e19f234b0 Mon Sep 17 00:00:00 2001 From: lucaskmpz Date: Fri, 23 Jan 2026 22:33:26 -0300 Subject: [PATCH 4/4] feat: updating GET handler /entities to accept extra parameters --- entities/api.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/entities/api.py b/entities/api.py index 94e149a..fdef4ba 100644 --- a/entities/api.py +++ b/entities/api.py @@ -11,8 +11,23 @@ router = Router() @router.get("/entities", response=List[EntityOut]) -def list_entities(request, name: str = None, description: str = None, type: str = None): - qs = services.list_entities(name=name, description=description, type=type) +def list_entities( + request, + name: str = None, + name_op: str = "contains", + description: str = None, + description_op: str = "contains", + type: str = None, + type_op: str = "contains", +): + qs = services.list_entities( + name=name, + name_op=name_op, + description=description, + description_op=description_op, + type=type, + type_op=type_op, + ) return list(qs) @router.get("/entities/{entity_id}", response=EntityOut)