Skip to content

Commit 6b6b777

Browse files
authored
Modify Order table (#2870) (patch)
### Added - Pipeline column to the order table. - Order-Customer relationship
1 parent 00e1626 commit 6b6b777

File tree

9 files changed

+81
-19
lines changed

9 files changed

+81
-19
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"""Add pipeline to order
2+
3+
Revision ID: d241d8c493fb
4+
Revises: de0f5b78dca4
5+
Create Date: 2024-01-25 16:18:35.740780
6+
7+
"""
8+
import sqlalchemy as sa
9+
10+
from alembic import op
11+
from cg.constants import Pipeline
12+
13+
# revision identifiers, used by Alembic.
14+
revision = "d241d8c493fb"
15+
down_revision = "de0f5b78dca4"
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
op.add_column(
22+
table_name="order",
23+
column=sa.Column("workflow", sa.Enum(*tuple(Pipeline)), nullable=False),
24+
)
25+
26+
27+
def downgrade():
28+
op.drop_column(
29+
table_name="order",
30+
column_name="workflow",
31+
)

cg/server/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ def get_orders():
476476
orders_request: OrdersRequest = OrdersRequest.model_validate(request.args.to_dict())
477477
order_service = OrderService(db)
478478
response: OrdersResponse = order_service.get_orders(orders_request)
479-
return jsonify(response.model_dump())
479+
return make_response(response.model_dump())
480480

481481

482482
@BLUEPRINT.route("/orderform", methods=["POST"])

cg/server/dto/orders/orders_response.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
from datetime import datetime
2-
31
from pydantic import BaseModel
42

3+
from cg.constants import Pipeline
4+
55

66
class Order(BaseModel):
7-
customer_id: int
7+
customer_id: str
88
ticket_id: int
9-
order_date: datetime
9+
order_date: str
10+
order_id: int
11+
workflow: Pipeline
1012

1113

1214
class OrdersResponse(BaseModel):

cg/services/orders/order_service.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from cg.server.dto.orders.orders_request import OrdersRequest
22
from cg.server.dto.orders.orders_response import OrdersResponse
3-
from cg.services.orders.utils import parse_order
3+
from cg.services.orders.utils import create_orders_response
44
from cg.store.models import Order
55
from cg.store.store import Store
66

@@ -11,4 +11,4 @@ def __init__(self, store: Store) -> None:
1111

1212
def get_orders(self, orders_request: OrdersRequest) -> OrdersResponse:
1313
orders: list[Order] = self.store.get_orders(orders_request.limit)
14-
return OrdersResponse(orders=[parse_order(order) for order in orders])
14+
return create_orders_response(orders)

cg/services/orders/utils.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1-
from cg.server.dto.orders.orders_response import Order as PydanticOrder
1+
from cg.server.dto.orders.orders_response import Order, OrdersResponse
22
from cg.store.models import Order as DatabaseOrder
33

44

5-
def parse_order(order: DatabaseOrder) -> PydanticOrder:
6-
return PydanticOrder(
7-
customer_id=order.customer_id, ticket_id=order.ticket_id, order_date=order.order_date
5+
def parse_order(order: DatabaseOrder) -> Order:
6+
return Order(
7+
customer_id=order.customer.internal_id,
8+
ticket_id=order.ticket_id,
9+
order_date=str(order.order_date.date()),
10+
order_id=order.id,
11+
workflow=order.workflow,
812
)
13+
14+
15+
def create_orders_response(database_orders: list[DatabaseOrder]) -> OrdersResponse:
16+
parsed_database_orders: list[Order] = [parse_order(order) for order in database_orders]
17+
return OrdersResponse(orders=parsed_database_orders)

cg/store/models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -882,9 +882,11 @@ class Order(Model):
882882
__tablename__ = "order"
883883

884884
id = Column(types.Integer, primary_key=True, unique=True)
885-
customer_id = Column(types.String(64), ForeignKey("customer.id"), nullable=False)
885+
customer_id = Column(ForeignKey("customer.id"), nullable=False)
886+
customer = orm.relationship("Customer", foreign_keys=[customer_id])
886887
order_date = Column(types.DateTime, nullable=False)
887888
ticket_id = Column(types.Integer, nullable=False, unique=True, index=True)
889+
workflow = Column(types.Enum(*tuple(Pipeline)), nullable=False)
888890

889891
def to_dict(self):
890892
return to_dict(model_instance=self)

tests/server/conftest.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from cg.constants import DataDelivery, Pipeline
1212
from cg.server.ext import db as store
1313
from cg.store.database import create_all_tables, drop_all_tables
14-
from cg.store.models import Case, Order
14+
from cg.store.models import Case, Customer, Order
1515
from tests.store_helpers import StoreHelpers
1616

1717
os.environ["CG_SQL_DATABASE_URI"] = "sqlite:///"
@@ -47,17 +47,32 @@ def case(helpers: StoreHelpers) -> Case:
4747

4848

4949
@pytest.fixture
50-
def order(helpers: StoreHelpers) -> Order:
50+
def customer(helpers: StoreHelpers) -> Customer:
51+
customer: Customer = helpers.ensure_customer(store=store, customer_id="test_customer")
52+
return customer
53+
54+
55+
@pytest.fixture
56+
def customer_another(helpers: StoreHelpers) -> Customer:
57+
customer: Customer = helpers.ensure_customer(store=store, customer_id="test_customer_2")
58+
return customer
59+
60+
61+
@pytest.fixture
62+
def order(helpers: StoreHelpers, customer: Customer) -> Order:
5163
order: Order = helpers.add_order(
52-
store=store, customer_id=1, ticket_id=1, order_date=datetime.now()
64+
store=store,
65+
customer_id=customer.id,
66+
ticket_id=1,
67+
order_date=datetime.now(),
5368
)
5469
return order
5570

5671

5772
@pytest.fixture
58-
def order_another(helpers: StoreHelpers) -> Order:
73+
def order_another(helpers: StoreHelpers, customer_another) -> Order:
5974
order: Order = helpers.add_order(
60-
store=store, customer_id=2, ticket_id=2, order_date=datetime.now()
75+
store=store, customer_id=customer_another.id, ticket_id=2, order_date=datetime.now()
6176
)
6277
return order
6378

tests/store/crud/read/test_read.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1539,7 +1539,7 @@ def test_get_orders_populated_store(store: Store, order: Order, order_another: O
15391539

15401540

15411541
def test_get_orders_limited(store: Store, order: Order, order_another: Order):
1542-
# GIVEN a store with two orders
1542+
# GIVEN a store with two orders and a customer
15431543

15441544
# WHEN fetching a limited amount of orders
15451545
# THEN only one should be returned

tests/store_helpers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,8 +486,11 @@ def add_order(
486486
customer_id: int,
487487
ticket_id: int,
488488
order_date: datetime = datetime(year=2023, month=12, day=24),
489+
workflow: Pipeline = Pipeline.MIP_DNA,
489490
) -> Order:
490-
order = Order(customer_id=customer_id, ticket_id=ticket_id, order_date=order_date)
491+
order = Order(
492+
customer_id=customer_id, ticket_id=ticket_id, order_date=order_date, workflow=workflow
493+
)
491494
store.session.add(order)
492495
store.session.commit()
493496
return order

0 commit comments

Comments
 (0)