Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import requests | |
| import pandas as pd | |
| from typing import Dict, Any | |
| # Configure the page | |
| st.set_page_config( | |
| page_title="Customer Management System", | |
| page_icon="👥", | |
| layout="wide" | |
| ) | |
| # Constants | |
| API_BASE_URL = "https://ryanpereira-enrollmentapi.hf.space" # Update this if your FastAPI server runs on a different port | |
| # Helper functions | |
| def get_all_customers() -> list: | |
| try: | |
| response = requests.get(f"{API_BASE_URL}/customers") | |
| return response.json() | |
| except Exception as e: | |
| st.error(f"Error fetching customers: {str(e)}") | |
| return [] | |
| def create_customer(customer_data: Dict[str, Any]) -> bool: | |
| try: | |
| response = requests.post(f"{API_BASE_URL}/customers", json=customer_data) | |
| if response.status_code == 200: | |
| return True | |
| st.error(f"Error creating customer: {response.json().get('detail', 'Unknown error')}") | |
| return False | |
| except Exception as e: | |
| st.error(f"Error creating customer: {str(e)}") | |
| return False | |
| def update_customer(customer_id: int, customer_data: Dict[str, Any]) -> bool: | |
| try: | |
| response = requests.put(f"{API_BASE_URL}/customers/{customer_id}", json=customer_data) | |
| if response.status_code == 200: | |
| return True | |
| st.error(f"Error updating customer: {response.json().get('detail', 'Unknown error')}") | |
| return False | |
| except Exception as e: | |
| st.error(f"Error updating customer: {str(e)}") | |
| return False | |
| def delete_customer(customer_id: int) -> bool: | |
| try: | |
| response = requests.delete(f"{API_BASE_URL}/customers/{customer_id}") | |
| if response.status_code == 200: | |
| return True | |
| st.error(f"Error deleting customer: {response.json().get('detail', 'Unknown error')}") | |
| return False | |
| except Exception as e: | |
| st.error(f"Error deleting customer: {str(e)}") | |
| return False | |
| # Main app | |
| def main(): | |
| st.title("Customer Management System") | |
| # Sidebar for navigation | |
| st.sidebar.title("Navigation") | |
| page = st.sidebar.radio("Go to", ["View Customers", "Add Customer"]) | |
| if page == "View Customers": | |
| view_customers_page() | |
| else: | |
| add_customer_page() | |
| def view_customers_page(): | |
| st.header("Customer List") | |
| # Add search functionality | |
| search_term = st.text_input("Search customers", "") | |
| # Fetch and display customers | |
| customers = get_all_customers() | |
| if customers: | |
| # Convert to DataFrame for better display | |
| df = pd.DataFrame(customers) | |
| # Filter based on search term | |
| if search_term: | |
| mask = df.apply(lambda x: x.astype(str).str.contains(search_term, case=False).any(), axis=1) | |
| df = df[mask] | |
| # Display the table | |
| st.dataframe(df, use_container_width=True) | |
| # Add edit and delete buttons for each customer | |
| for idx, customer in df.iterrows(): | |
| col1, col2 = st.columns([1, 1]) | |
| with col1: | |
| if st.button(f"Edit {customer['name']}", key=f"edit_{customer['id']}"): | |
| st.session_state.edit_customer = customer.to_dict() | |
| st.session_state.show_edit_form = True | |
| with col2: | |
| if st.button(f"Delete {customer['name']}", key=f"delete_{customer['id']}"): | |
| if st.confirm(f"Are you sure you want to delete {customer['name']}?"): | |
| if delete_customer(customer['id']): | |
| st.success(f"Successfully deleted {customer['name']}") | |
| st.rerun() | |
| # Edit form | |
| if st.session_state.get('show_edit_form', False): | |
| st.subheader("Edit Customer") | |
| edit_customer_form(st.session_state.edit_customer) | |
| else: | |
| st.info("No customers found. Add some customers to get started!") | |
| def add_customer_page(): | |
| st.header("Add New Customer") | |
| with st.form("add_customer_form"): | |
| customer_data = { | |
| "id": st.number_input("ID", min_value=1, step=1), | |
| "name": st.text_input("Name"), | |
| "age": st.number_input("Age", min_value=0, max_value=120, step=1), | |
| "email": st.text_input("Email"), | |
| "phone": st.text_input("Phone"), | |
| "address": st.text_input("Address"), | |
| "city": st.text_input("City"), | |
| "state": st.text_input("State"), | |
| "zip": st.text_input("ZIP Code") | |
| } | |
| submitted = st.form_submit_button("Add Customer") | |
| if submitted: | |
| if create_customer(customer_data): | |
| st.success("Customer added successfully!") | |
| st.rerun() | |
| def edit_customer_form(customer_data: Dict[str, Any]): | |
| with st.form("edit_customer_form"): | |
| edited_data = { | |
| "id": st.number_input("ID", value=customer_data["id"], disabled=True), | |
| "name": st.text_input("Name", value=customer_data["name"]), | |
| "age": st.number_input("Age", value=customer_data["age"], min_value=0, max_value=120, step=1), | |
| "email": st.text_input("Email", value=customer_data["email"]), | |
| "phone": st.text_input("Phone", value=customer_data["phone"]), | |
| "address": st.text_input("Address", value=customer_data["address"]), | |
| "city": st.text_input("City", value=customer_data["city"]), | |
| "state": st.text_input("State", value=customer_data["state"]), | |
| "zip": st.text_input("ZIP Code", value=customer_data["zip"]) | |
| } | |
| submitted = st.form_submit_button("Update Customer") | |
| if submitted: | |
| if update_customer(edited_data["id"], edited_data): | |
| st.success("Customer updated successfully!") | |
| st.session_state.show_edit_form = False | |
| st.rerun() | |
| if __name__ == "__main__": | |
| main() |