This commit is contained in:
2026-03-27 15:51:10 +03:00
parent 15586f9a8c
commit 51378c5d66
1234 changed files with 95644 additions and 543076 deletions
@@ -0,0 +1,17 @@
"""Entrypoint: runs the orders API. Uses src layout (package order_app under src/)."""
import sys
from pathlib import Path
# Add src to path so "order_app" is importable from repo root
_root = Path(__file__).resolve().parent
_src = _root / "src"
if str(_src) not in sys.path:
sys.path.insert(0, str(_src))
from order_app.api.orders import create_app
app = create_app()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)
@@ -0,0 +1 @@
"""Fixture package for CODE_QA pipeline: orders domain, API, services."""
@@ -0,0 +1,3 @@
from order_app.api.orders import create_app
__all__ = ["create_app"]
@@ -0,0 +1,30 @@
"""Orders API handlers."""
from flask import Flask, request, jsonify
from order_app.services.order_service import OrderService
from order_app.repositories.order_repository import OrderRepository
def create_app() -> Flask:
app = Flask(__name__)
repo = OrderRepository()
service = OrderService(repo)
@app.route("/orders", methods=["POST"])
def create_order():
data = request.get_json() or {}
order = service.create_order(
product_id=data.get("product_id"),
quantity=data.get("quantity", 1),
)
return jsonify({"order_id": order.id, "status": order.status}), 201
@app.route("/orders/<order_id>", methods=["GET"])
def get_order(order_id: str):
order = service.get_order(order_id)
if order is None:
return jsonify({"error": "not found"}), 404
return jsonify({"id": order.id, "status": order.status})
return app
@@ -0,0 +1,3 @@
from order_app.domain.order import Order
__all__ = ["Order"]
@@ -0,0 +1,11 @@
"""Domain model for an order."""
import uuid
class Order:
def __init__(self, product_id: str = "", quantity: int = 1) -> None:
self.id = str(uuid.uuid4())
self.product_id = product_id
self.quantity = quantity
self.status = "pending"
@@ -0,0 +1,3 @@
from order_app.repositories.order_repository import OrderRepository
__all__ = ["OrderRepository"]
@@ -0,0 +1,14 @@
"""Persistence for Order entities."""
from order_app.domain.order import Order
class OrderRepository:
_store: dict[str, Order] = {}
def save(self, order: Order) -> Order:
self._store[order.id] = order
return order
def find_by_id(self, order_id: str) -> Order | None:
return self._store.get(order_id)
@@ -0,0 +1,3 @@
from order_app.services.order_service import OrderService
__all__ = ["OrderService"]
@@ -0,0 +1,16 @@
"""Order business logic: delegates to repository."""
from order_app.domain.order import Order
from order_app.repositories.order_repository import OrderRepository
class OrderService:
def __init__(self, repository: OrderRepository) -> None:
self._repo = repository
def create_order(self, product_id: str | None = None, quantity: int = 1) -> Order:
order = Order(product_id=product_id or "", quantity=quantity)
return self._repo.save(order)
def get_order(self, order_id: str) -> Order | None:
return self._repo.find_by_id(order_id)
@@ -0,0 +1,3 @@
from order_app.utils.helpers import format_order_id
__all__ = ["format_order_id"]
@@ -0,0 +1,6 @@
"""Shared utilities for the code_qa fixture repo."""
def format_order_id(raw: str) -> str:
"""Normalize order id for display."""
return raw.strip().lower() or "unknown"
@@ -0,0 +1,35 @@
"""Tests for OrderService. Repo uses src layout: add src to path for order_app."""
import sys
from pathlib import Path
import pytest
# Fixture repo root; parent of tests/
_repo_root = Path(__file__).resolve().parent.parent
_src = _repo_root / "src"
if str(_src) not in sys.path:
sys.path.insert(0, str(_src))
from order_app.domain.order import Order
from order_app.services.order_service import OrderService
from order_app.repositories.order_repository import OrderRepository
def test_create_order() -> None:
repo = OrderRepository()
service = OrderService(repo)
order = service.create_order(product_id="prod-1", quantity=2)
assert isinstance(order, Order)
assert order.product_id == "prod-1"
assert order.quantity == 2
assert order.status == "pending"
def test_get_order_returns_saved_order() -> None:
repo = OrderRepository()
service = OrderService(repo)
created = service.create_order(product_id="p1")
found = service.get_order(created.id)
assert found is not None
assert found.id == created.id