초기화
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import List, Optional
|
||||
from .db_manager import (
|
||||
add_customer_to_db,
|
||||
update_customer_in_db,
|
||||
delete_customer_from_db,
|
||||
get_all_customers_from_db,
|
||||
get_customer_details_from_db,
|
||||
add_contact_to_db,
|
||||
update_contact_in_db,
|
||||
delete_contact_from_db,
|
||||
add_sales_activity_to_db,
|
||||
update_sales_activity_in_db,
|
||||
delete_sales_activity_from_db
|
||||
)
|
||||
|
||||
router = APIRouter(prefix="/customers", tags=["customers"])
|
||||
|
||||
# --- Pydantic Schemas ---
|
||||
class CustomerSchema(BaseModel):
|
||||
id: Optional[int] = None
|
||||
name_kr: str
|
||||
name_en: Optional[str] = None
|
||||
business_registration_number: Optional[str] = None
|
||||
contact_number: Optional[str] = None
|
||||
address: Optional[str] = None
|
||||
|
||||
class ContactSchema(BaseModel):
|
||||
id: Optional[int] = None
|
||||
customer_id: int
|
||||
name: str
|
||||
email: Optional[str] = None
|
||||
phone_number: Optional[str] = None
|
||||
position: Optional[str] = None
|
||||
work_location: Optional[str] = None
|
||||
|
||||
class SalesActivitySchema(BaseModel):
|
||||
id: Optional[int] = None
|
||||
customer_id: int
|
||||
contact_id: Optional[int] = None
|
||||
activity_date: str # YYYY-MM-DD
|
||||
activity_type: str
|
||||
memo: Optional[str] = None
|
||||
|
||||
# --- Customers APIs ---
|
||||
@router.post("/", response_model=dict)
|
||||
def create_customer(customer: CustomerSchema):
|
||||
result = add_customer_to_db(customer.dict())
|
||||
if result is None:
|
||||
raise HTTPException(status_code=500, detail="Failed to create customer")
|
||||
return {"id": result, "status": "success"}
|
||||
|
||||
@router.put("/{customer_id}", response_model=dict)
|
||||
def update_customer(customer_id: int, customer: CustomerSchema):
|
||||
data = customer.dict()
|
||||
data['id'] = customer_id
|
||||
success = update_customer_in_db(data)
|
||||
if not success:
|
||||
raise HTTPException(status_code=500, detail="Failed to update customer")
|
||||
return {"status": "success"}
|
||||
|
||||
@router.delete("/{customer_id}", response_model=dict)
|
||||
def delete_customer(customer_id: int):
|
||||
success = delete_customer_from_db(customer_id)
|
||||
if not success:
|
||||
raise HTTPException(status_code=500, detail="Failed to delete customer")
|
||||
return {"status": "success"}
|
||||
|
||||
@router.get("/", response_model=List[CustomerSchema])
|
||||
def list_customers():
|
||||
return get_all_customers_from_db()
|
||||
|
||||
@router.get("/{customer_id}", response_model=dict)
|
||||
def get_customer_details(customer_id: int):
|
||||
details = get_customer_details_from_db(customer_id)
|
||||
if not details:
|
||||
raise HTTPException(status_code=404, detail="Customer not found")
|
||||
return details
|
||||
|
||||
# --- Contacts APIs ---
|
||||
@router.post("/contacts", response_model=dict)
|
||||
def create_contact(contact: ContactSchema):
|
||||
result = add_contact_to_db(contact.dict())
|
||||
if result is None:
|
||||
raise HTTPException(status_code=500, detail="Failed to create contact")
|
||||
return {"id": result, "status": "success"}
|
||||
|
||||
@router.put("/contacts/{contact_id}", response_model=dict)
|
||||
def update_contact(contact_id: int, contact: ContactSchema):
|
||||
data = contact.dict()
|
||||
data['id'] = contact_id
|
||||
success = update_contact_in_db(data)
|
||||
if not success:
|
||||
raise HTTPException(status_code=500, detail="Failed to update contact")
|
||||
return {"status": "success"}
|
||||
|
||||
@router.delete("/contacts/{contact_id}", response_model=dict)
|
||||
def delete_contact(contact_id: int):
|
||||
success = delete_contact_from_db(contact_id)
|
||||
if not success:
|
||||
raise HTTPException(status_code=500, detail="Failed to delete contact")
|
||||
return {"status": "success"}
|
||||
|
||||
# --- Sales Activities APIs ---
|
||||
@router.post("/activities", response_model=dict)
|
||||
def create_sales_activity(activity: SalesActivitySchema):
|
||||
result = add_sales_activity_to_db(activity.dict())
|
||||
if result is None:
|
||||
raise HTTPException(status_code=500, detail="Failed to create sales activity")
|
||||
return {"id": result, "status": "success"}
|
||||
|
||||
@router.put("/activities/{activity_id}", response_model=dict)
|
||||
def update_sales_activity(activity_id: int, activity: SalesActivitySchema):
|
||||
data = activity.dict()
|
||||
data['id'] = activity_id
|
||||
success = update_sales_activity_in_db(data)
|
||||
if not success:
|
||||
raise HTTPException(status_code=500, detail="Failed to update sales activity")
|
||||
return {"status": "success"}
|
||||
|
||||
@router.delete("/activities/{activity_id}", response_model=dict)
|
||||
def delete_sales_activity(activity_id: int):
|
||||
success = delete_sales_activity_from_db(activity_id)
|
||||
if not success:
|
||||
raise HTTPException(status_code=500, detail="Failed to delete sales activity")
|
||||
return {"status": "success"}
|
||||
Reference in New Issue
Block a user