style: apply black and isort formatting across entire codebase
- Standardize quote style (single to double quotes) - Reorder and group imports alphabetically - Fix line breaks and indentation for consistency - Apply PEP 8 formatting standards Also updated Makefile to exclude both venv and .venv from code quality checks. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -9,24 +9,21 @@ This module provides:
|
||||
"""
|
||||
|
||||
import logging
|
||||
from datetime import datetime, timezone
|
||||
from typing import List, Optional, Tuple
|
||||
import random
|
||||
import string
|
||||
from datetime import datetime, timezone
|
||||
from typing import List, Optional, Tuple
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy import and_, or_
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from models.database.order import Order, OrderItem
|
||||
from app.exceptions import (CustomerNotFoundException,
|
||||
InsufficientInventoryException,
|
||||
OrderNotFoundException, ValidationException)
|
||||
from models.database.customer import Customer, CustomerAddress
|
||||
from models.database.order import Order, OrderItem
|
||||
from models.database.product import Product
|
||||
from models.schema.order import OrderCreate, OrderUpdate, OrderAddressCreate
|
||||
from app.exceptions import (
|
||||
OrderNotFoundException,
|
||||
ValidationException,
|
||||
InsufficientInventoryException,
|
||||
CustomerNotFoundException
|
||||
)
|
||||
from models.schema.order import OrderAddressCreate, OrderCreate, OrderUpdate
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -42,23 +39,27 @@ class OrderService:
|
||||
Example: ORD-1-20250110-A1B2C3
|
||||
"""
|
||||
timestamp = datetime.now(timezone.utc).strftime("%Y%m%d")
|
||||
random_suffix = ''.join(random.choices(string.ascii_uppercase + string.digits, k=6))
|
||||
random_suffix = "".join(
|
||||
random.choices(string.ascii_uppercase + string.digits, k=6)
|
||||
)
|
||||
order_number = f"ORD-{vendor_id}-{timestamp}-{random_suffix}"
|
||||
|
||||
# Ensure uniqueness
|
||||
while db.query(Order).filter(Order.order_number == order_number).first():
|
||||
random_suffix = ''.join(random.choices(string.ascii_uppercase + string.digits, k=6))
|
||||
random_suffix = "".join(
|
||||
random.choices(string.ascii_uppercase + string.digits, k=6)
|
||||
)
|
||||
order_number = f"ORD-{vendor_id}-{timestamp}-{random_suffix}"
|
||||
|
||||
return order_number
|
||||
|
||||
def _create_customer_address(
|
||||
self,
|
||||
db: Session,
|
||||
vendor_id: int,
|
||||
customer_id: int,
|
||||
address_data: OrderAddressCreate,
|
||||
address_type: str
|
||||
self,
|
||||
db: Session,
|
||||
vendor_id: int,
|
||||
customer_id: int,
|
||||
address_data: OrderAddressCreate,
|
||||
address_type: str,
|
||||
) -> CustomerAddress:
|
||||
"""Create a customer address for order."""
|
||||
address = CustomerAddress(
|
||||
@@ -73,17 +74,14 @@ class OrderService:
|
||||
city=address_data.city,
|
||||
postal_code=address_data.postal_code,
|
||||
country=address_data.country,
|
||||
is_default=False
|
||||
is_default=False,
|
||||
)
|
||||
db.add(address)
|
||||
db.flush() # Get ID without committing
|
||||
return address
|
||||
|
||||
def create_order(
|
||||
self,
|
||||
db: Session,
|
||||
vendor_id: int,
|
||||
order_data: OrderCreate
|
||||
self, db: Session, vendor_id: int, order_data: OrderCreate
|
||||
) -> Order:
|
||||
"""
|
||||
Create a new order.
|
||||
@@ -104,12 +102,15 @@ class OrderService:
|
||||
# Validate customer exists if provided
|
||||
customer_id = order_data.customer_id
|
||||
if customer_id:
|
||||
customer = db.query(Customer).filter(
|
||||
and_(
|
||||
Customer.id == customer_id,
|
||||
Customer.vendor_id == vendor_id
|
||||
customer = (
|
||||
db.query(Customer)
|
||||
.filter(
|
||||
and_(
|
||||
Customer.id == customer_id, Customer.vendor_id == vendor_id
|
||||
)
|
||||
)
|
||||
).first()
|
||||
.first()
|
||||
)
|
||||
|
||||
if not customer:
|
||||
raise CustomerNotFoundException(str(customer_id))
|
||||
@@ -124,7 +125,7 @@ class OrderService:
|
||||
vendor_id=vendor_id,
|
||||
customer_id=customer_id,
|
||||
address_data=order_data.shipping_address,
|
||||
address_type="shipping"
|
||||
address_type="shipping",
|
||||
)
|
||||
|
||||
# Create billing address (use shipping if not provided)
|
||||
@@ -134,7 +135,7 @@ class OrderService:
|
||||
vendor_id=vendor_id,
|
||||
customer_id=customer_id,
|
||||
address_data=order_data.billing_address,
|
||||
address_type="billing"
|
||||
address_type="billing",
|
||||
)
|
||||
else:
|
||||
billing_address = shipping_address
|
||||
@@ -145,23 +146,29 @@ class OrderService:
|
||||
|
||||
for item_data in order_data.items:
|
||||
# Get product
|
||||
product = db.query(Product).filter(
|
||||
and_(
|
||||
Product.id == item_data.product_id,
|
||||
Product.vendor_id == vendor_id,
|
||||
Product.is_active == True
|
||||
product = (
|
||||
db.query(Product)
|
||||
.filter(
|
||||
and_(
|
||||
Product.id == item_data.product_id,
|
||||
Product.vendor_id == vendor_id,
|
||||
Product.is_active == True,
|
||||
)
|
||||
)
|
||||
).first()
|
||||
.first()
|
||||
)
|
||||
|
||||
if not product:
|
||||
raise ValidationException(f"Product {item_data.product_id} not found")
|
||||
raise ValidationException(
|
||||
f"Product {item_data.product_id} not found"
|
||||
)
|
||||
|
||||
# Check inventory
|
||||
if product.available_inventory < item_data.quantity:
|
||||
raise InsufficientInventoryException(
|
||||
product_id=product.id,
|
||||
requested=item_data.quantity,
|
||||
available=product.available_inventory
|
||||
available=product.available_inventory,
|
||||
)
|
||||
|
||||
# Calculate item total
|
||||
@@ -172,14 +179,16 @@ class OrderService:
|
||||
item_total = unit_price * item_data.quantity
|
||||
subtotal += item_total
|
||||
|
||||
order_items_data.append({
|
||||
"product_id": product.id,
|
||||
"product_name": product.marketplace_product.title,
|
||||
"product_sku": product.product_id,
|
||||
"quantity": item_data.quantity,
|
||||
"unit_price": unit_price,
|
||||
"total_price": item_total
|
||||
})
|
||||
order_items_data.append(
|
||||
{
|
||||
"product_id": product.id,
|
||||
"product_name": product.marketplace_product.title,
|
||||
"product_sku": product.product_id,
|
||||
"quantity": item_data.quantity,
|
||||
"unit_price": unit_price,
|
||||
"total_price": item_total,
|
||||
}
|
||||
)
|
||||
|
||||
# Calculate tax and shipping (simple implementation)
|
||||
tax_amount = 0.0 # TODO: Implement tax calculation
|
||||
@@ -205,7 +214,7 @@ class OrderService:
|
||||
shipping_address_id=shipping_address.id,
|
||||
billing_address_id=billing_address.id,
|
||||
shipping_method=order_data.shipping_method,
|
||||
customer_notes=order_data.customer_notes
|
||||
customer_notes=order_data.customer_notes,
|
||||
)
|
||||
|
||||
db.add(order)
|
||||
@@ -213,10 +222,7 @@ class OrderService:
|
||||
|
||||
# Create order items
|
||||
for item_data in order_items_data:
|
||||
order_item = OrderItem(
|
||||
order_id=order.id,
|
||||
**item_data
|
||||
)
|
||||
order_item = OrderItem(order_id=order.id, **item_data)
|
||||
db.add(order_item)
|
||||
|
||||
db.commit()
|
||||
@@ -229,7 +235,11 @@ class OrderService:
|
||||
|
||||
return order
|
||||
|
||||
except (ValidationException, InsufficientInventoryException, CustomerNotFoundException):
|
||||
except (
|
||||
ValidationException,
|
||||
InsufficientInventoryException,
|
||||
CustomerNotFoundException,
|
||||
):
|
||||
db.rollback()
|
||||
raise
|
||||
except Exception as e:
|
||||
@@ -237,19 +247,13 @@ class OrderService:
|
||||
logger.error(f"Error creating order: {str(e)}")
|
||||
raise ValidationException(f"Failed to create order: {str(e)}")
|
||||
|
||||
def get_order(
|
||||
self,
|
||||
db: Session,
|
||||
vendor_id: int,
|
||||
order_id: int
|
||||
) -> Order:
|
||||
def get_order(self, db: Session, vendor_id: int, order_id: int) -> Order:
|
||||
"""Get order by ID."""
|
||||
order = db.query(Order).filter(
|
||||
and_(
|
||||
Order.id == order_id,
|
||||
Order.vendor_id == vendor_id
|
||||
)
|
||||
).first()
|
||||
order = (
|
||||
db.query(Order)
|
||||
.filter(and_(Order.id == order_id, Order.vendor_id == vendor_id))
|
||||
.first()
|
||||
)
|
||||
|
||||
if not order:
|
||||
raise OrderNotFoundException(str(order_id))
|
||||
@@ -257,13 +261,13 @@ class OrderService:
|
||||
return order
|
||||
|
||||
def get_vendor_orders(
|
||||
self,
|
||||
db: Session,
|
||||
vendor_id: int,
|
||||
skip: int = 0,
|
||||
limit: int = 100,
|
||||
status: Optional[str] = None,
|
||||
customer_id: Optional[int] = None
|
||||
self,
|
||||
db: Session,
|
||||
vendor_id: int,
|
||||
skip: int = 0,
|
||||
limit: int = 100,
|
||||
status: Optional[str] = None,
|
||||
customer_id: Optional[int] = None,
|
||||
) -> Tuple[List[Order], int]:
|
||||
"""
|
||||
Get orders for vendor with filtering.
|
||||
@@ -296,28 +300,20 @@ class OrderService:
|
||||
return orders, total
|
||||
|
||||
def get_customer_orders(
|
||||
self,
|
||||
db: Session,
|
||||
vendor_id: int,
|
||||
customer_id: int,
|
||||
skip: int = 0,
|
||||
limit: int = 100
|
||||
self,
|
||||
db: Session,
|
||||
vendor_id: int,
|
||||
customer_id: int,
|
||||
skip: int = 0,
|
||||
limit: int = 100,
|
||||
) -> Tuple[List[Order], int]:
|
||||
"""Get orders for a specific customer."""
|
||||
return self.get_vendor_orders(
|
||||
db=db,
|
||||
vendor_id=vendor_id,
|
||||
skip=skip,
|
||||
limit=limit,
|
||||
customer_id=customer_id
|
||||
db=db, vendor_id=vendor_id, skip=skip, limit=limit, customer_id=customer_id
|
||||
)
|
||||
|
||||
def update_order_status(
|
||||
self,
|
||||
db: Session,
|
||||
vendor_id: int,
|
||||
order_id: int,
|
||||
order_update: OrderUpdate
|
||||
self, db: Session, vendor_id: int, order_id: int, order_update: OrderUpdate
|
||||
) -> Order:
|
||||
"""
|
||||
Update order status and tracking information.
|
||||
|
||||
Reference in New Issue
Block a user