diff --git a/clItest.py b/clItest.py
new file mode 100644
index 0000000000000000000000000000000000000000..5e12ea1c29de864fb2be410a6575a7f9b640508e
--- /dev/null
+++ b/clItest.py
@@ -0,0 +1,16 @@
+import requests
+
+url = "http://127.0.0.1:8000/users/"
+
+data = {
+    "username": "john_doe",
+    "password": "password123",
+    "email": "john@example.com",
+    "phone_number": "1234567890"
+    # Add other fields as needed
+}
+
+response = requests.post(url, json=data)
+
+print(response.status_code)
+print(response.json())
\ No newline at end of file
diff --git a/poc/__pycache__/main.cpython-39.pyc b/poc/__pycache__/main.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..952f55b0c01a03e18015d6ff1111086f75b5f698
Binary files /dev/null and b/poc/__pycache__/main.cpython-39.pyc differ
diff --git a/poc/main.py b/poc/main.py
new file mode 100644
index 0000000000000000000000000000000000000000..1c6fb748381869466bad8e9810727b26acee6270
--- /dev/null
+++ b/poc/main.py
@@ -0,0 +1,119 @@
+from enum import Enum
+
+from pydantic import BaseModel
+
+from fastapi import FastAPI, HTTPException, Path, Query
+from typing import Union
+
+app = FastAPI()
+
+
+class Category(Enum):
+    TOOLS = "tools"
+    CONSUMABLES = "consumables"
+
+
+class Item(BaseModel):
+    name: str
+    price: float
+    count: int
+    id: int
+    category: Category
+
+
+items = {
+    0: Item(name="Hammer", price=9.99, count=20, id=0, category=Category.TOOLS),
+    1: Item(name="Pliers", price=5.99, count=20, id=1, category=Category.TOOLS),
+    2: Item(name="Nails", price=1.99, count=100, id=2, category=Category.CONSUMABLES),
+}
+
+
+@app.get("/")
+def index() -> dict[str, dict[int, Item]]:
+    return {"items": items}
+
+
+@app.get("/items/{item_id}")
+def query_item_by_id(item_id: int) -> Item:
+    if item_id not in items:
+        HTTPException(status_code=404, detail=f"Item with {item_id=} does not exist.")
+
+    return items[item_id]
+
+
+# Selection = dict[
+#     str, str | int | float | Category | None
+# ]  # dictionary containing the user's query arguments
+Selection = dict[str, Union[str, int, float, Category, None]]
+
+@app.get("/items/")
+def query_item_by_parameters(
+    name: Union[str, None] = None,    
+    price: Union[float, None] = None,
+    count: Union[int, None] = None,
+    category: Union[Category, None] = None,
+) -> dict[str, Union[Selection, list[Item]]]:
+    def check_item(item: Item):
+        """Check if the item matches the query arguments from the outer scope."""
+        return all(
+            (
+                name is None or item.name == name,
+                price is None or item.price == price,
+                count is None or item.count != count,
+                category is None or item.category is category,
+            )
+        )
+
+    selection = [item for item in items.values() if check_item(item)]
+    return {
+        "query": {"name": name, "price": price, "count": count, "category": category},
+        "selection": selection,
+    }
+
+
+@app.post("/")
+def add_item(item: Item) -> dict[str, Item]:
+    if item.id in items:
+        HTTPException(status_code=400, detail=f"Item with {item.id=} already exists.")
+
+    items[item.id] = item
+    return {"added": item}
+
+
+# We can place further restrictions on allowed arguments by using the Query and Path classes.
+# In this case we are setting a lower bound for valid values and a minimal and maximal length for the name.
+@app.put("/update/{item_id}")
+def update(
+    item_id: int = Path(ge=0),
+    name: Union[str , None] = Query(defaut=None, min_length=1, max_length=8),
+    price: Union[float,  None] = Query(default=None, gt=0.0),
+    count: Union[int, None] = Query(default=None, ge=0),
+):
+    if item_id not in items:
+        HTTPException(status_code=404, detail=f"Item with {item_id=} does not exist.")
+    if all(info is None for info in (name, price, count)):
+        raise HTTPException(
+            status_code=400, detail="No parameters provided for update."
+        )
+
+    item = items[item_id]
+    if name is not None:
+        item.name = name
+    if price is not None:
+        item.price = price
+    if count is not None:
+        item.count = count
+
+    return {"updated": item}
+
+
+@app.delete("/delete/{item_id}")
+def delete_item(item_id: int) -> dict[str, Item]:
+
+    if item_id not in items:
+        raise HTTPException(
+            status_code=404, detail=f"Item with {item_id=} does not exist."
+        )
+
+    item = items.pop(item_id)
+    return {"deleted": item}
\ No newline at end of file