Basic_CRM / src /streamlit_app.py
vishnugupta's picture
Update src/streamlit_app.py
49277dc verified
import streamlit as st
import requests
from pydantic import BaseModel
from typing import Optional, List
# Define the Customer model, mirroring the one in main.py
class Customer(BaseModel):
name: str
email: str
phone: Optional[int] = None
address: Optional[str] = None
id: int
# FastAPI backend URL
BASE_URL = "https://vishnugupta-enrollmentapi.hf.space"
def get_customers():
"""Fetches all customers from the backend."""
try:
response = requests.get(f"{BASE_URL}/customers")
response.raise_for_status() # Raise an exception for bad status codes
return response.json()
except requests.exceptions.RequestException as e:
st.error(f"Error fetching customers: {e}")
return []
def create_customer(customer: Customer):
"""Creates a new customer."""
try:
response = requests.post(f"{BASE_URL}/customers", json=customer.dict())
response.raise_for_status()
st.success("Customer created successfully!")
return response.json()
except requests.exceptions.RequestException as e:
st.error(f"Error creating customer: {e}")
return None
def update_customer(customer_id: int, customer: Customer):
"""Updates an existing customer."""
try:
response = requests.put(f"{BASE_URL}/customer/{customer_id}", json=customer.dict())
response.raise_for_status()
st.success("Customer updated successfully!")
return response.json()
except requests.exceptions.RequestException as e:
st.error(f"Error updating customer: {e}")
return None
def delete_customer(customer_id: int):
"""Deletes a customer."""
try:
response = requests.delete(f"{BASE_URL}/customer/{customer_id}")
response.raise_for_status()
st.success("Customer deleted successfully!")
return response.json()
except requests.exceptions.RequestException as e:
st.error(f"Error deleting customer: {e}")
return None
def main():
"""Main function to run the Streamlit app."""
st.set_page_config(page_title="CRM Dashboard", layout="wide")
st.title("Customer Relationship Management (CRM)")
menu = ["View Customers", "Add Customer", "Update Customer", "Delete Customer"]
choice = st.sidebar.selectbox("Menu", menu)
if choice == "View Customers":
st.subheader("All Customers")
customers = get_customers()
if customers:
st.table(customers)
else:
st.info("No customers found.")
elif choice == "Add Customer":
st.subheader("Add a New Customer")
with st.form("add_customer_form"):
name = st.text_input("Name")
email = st.text_input("Email")
phone = st.number_input("Phone", value=0, format="%d")
address = st.text_area("Address")
customer_id = len(requests.get(f"{BASE_URL}/customers").json())+1
submitted = st.form_submit_button("Add Customer")
if submitted:
new_customer = Customer(name=name, email=email, phone=phone, address=address, id=customer_id)
create_customer(new_customer)
elif choice == "Update Customer":
st.subheader("Update a Customer")
customers = get_customers()
if customers:
customer_ids = [c["id"] for c in customers]
selected_id = st.selectbox("Select Customer ID to Update", customer_ids)
selected_customer = next((c for c in customers if c["id"] == selected_id), None)
if selected_customer:
with st.form("update_customer_form"):
name = st.text_input("Name", value=selected_customer["name"])
email = st.text_input("Email", value=selected_customer["email"])
phone = st.number_input("Phone", value=selected_customer.get("phone") or 0, format="%d")
address = st.text_area("Address", value=selected_customer.get("address", ""))
updated = st.form_submit_button("Update Customer")
if updated:
updated_customer = Customer(name=name, email=email, phone=phone, address=address, id=selected_id)
update_customer(selected_id, updated_customer)
else:
st.warning("Selected customer not found.")
else:
st.info("No customers to update.")
elif choice == "Delete Customer":
st.subheader("Delete a Customer")
customers = get_customers()
if customers:
customer_ids = [c["id"] for c in customers]
selected_id = st.selectbox("Select Customer ID to Delete", customer_ids)
selected_customer = next((c for c in customers if c["id"] == selected_id), None)
if st.button("Delete Customer"):
delete_customer(selected_id)
else:
st.info("No customers to delete.")
if __name__ == "__main__":
main()