import streamlit as st import requests import json from typing import Optional # Configure Streamlit page st.set_page_config( page_title="Customer Management System", layout="wide" ) # FastAPI base URL BASE_URL = "https://ritesh1035-cms-apis.hf.space" # Helper functions def make_request(method, endpoint, data=None): """Make HTTP request to FastAPI backend""" url = f"{BASE_URL}{endpoint}" try: if method == "GET": response = requests.get(url) elif method == "POST": response = requests.post(url, json=data) elif method == "PUT": response = requests.put(url, json=data) elif method == "DELETE": response = requests.delete(url) return response except requests.exceptions.ConnectionError: st.error("Cannot connect to FastAPI server. Make sure it's running on https://ritesh1035-cms-apis.hf.space") return None # Main title st.title("Customer Management System") # Sidebar for operation selection st.sidebar.header("Choose An Operations") operation = st.sidebar.selectbox( "Select Operation:", ["View All Customers", "Add Customer", "Update Customer", "Delete Customer"] ) # Main content area if operation == "View All Customers": st.header("Customer List") if st.button("Refresh List"): response = make_request("GET", "/Customer") if response and response.status_code == 200: customers = response.json() if customers: st.success(f"Found {len(customers)} customers") # Simple table display for customer in customers: st.write("---") col1, col2 = st.columns(2) with col1: st.write(f"**ID:** {customer['id']}") st.write(f"**Name:** {customer['name']}") st.write(f"**Email:** {customer['email']}") with col2: st.write(f"**Phone:** {customer.get('phone', 'Not provided')}") st.write(f"**Address:** {customer.get('address', 'Not provided')}") else: st.info("No customers found") elif response: st.error(f"Failed to fetch customers: {response.status_code}") elif operation == "Add Customer": st.header("Add New Customer") with st.form("add_customer"): customer_name = st.text_input("Name (required)") customer_email = st.text_input("Email (required)") customer_phone = st.text_input("Phone (optional)") customer_address = st.text_area("Address (optional)") if st.form_submit_button("Add Customer"): if not customer_name or not customer_email: st.error("Name and Email are required") else: # Auto-generate ID based on existing customers count try: existing_customers = requests.get("https://ritesh1035-cms-apis.hf.space/Customer").json() if existing_customers: max_id = max(customer.get('id', 0) for customer in existing_customers) customer_id = max_id + 1 else: customer_id = 1 except: customer_id = 1 customer_data = { "id": customer_id, "name": customer_name, "email": customer_email, "phone": customer_phone if customer_phone else None, "address": customer_address if customer_address else None } response = make_request("POST", "/Customer", customer_data) if response and response.status_code == 200: st.success(f"Customer '{customer_name}' added successfully") elif response: st.error(f"Failed to add customer: {response.status_code}") elif operation == "Update Customer": st.header("Update Customer") update_id = st.number_input("Customer ID to Update", min_value=1, step=1) if st.button("Load Customer"): response = make_request("GET", "/Customer") if response and response.status_code == 200: customers = response.json() customer = next((c for c in customers if c['id'] == update_id), None) if customer: st.session_state.update_customer = customer st.success(f"Loaded: {customer['name']}") else: st.error(f"Customer with ID {update_id} not found") if 'update_customer' in st.session_state: customer = st.session_state.update_customer with st.form("update_customer_form"): new_name = st.text_input("Name", value=customer['name']) new_email = st.text_input("Email", value=customer['email']) new_phone = st.text_input("Phone", value=customer.get('phone', '')) new_address = st.text_area("Address", value=customer.get('address', '')) if st.form_submit_button("Update Customer"): if not new_name or not new_email: st.error("Name and Email are required") else: updated_data = { "id": update_id, "name": new_name, "email": new_email, "phone": new_phone if new_phone else None, "address": new_address if new_address else None } response = make_request("PUT", f"/Customer/{update_id}", updated_data) if response and response.status_code == 200: st.success(f"Customer updated successfully") del st.session_state.update_customer st.rerun() elif response: st.error(f"Failed to update customer: {response.status_code}") elif operation == "Delete Customer": st.header("Delete Customer") st.warning("Warning: This action cannot be undone") delete_id = st.number_input("Customer ID to Delete", min_value=1, step=1) if st.button("Preview Customer"): response = make_request("GET", "/Customer") if response and response.status_code == 200: customers = response.json() customer = next((c for c in customers if c['id'] == delete_id), None) if customer: st.info(f"Customer to delete: {customer['name']} ({customer['email']})") st.session_state.delete_customer = customer else: st.error(f"Customer with ID {delete_id} not found") if 'delete_customer' in st.session_state: customer = st.session_state.delete_customer st.error(f"Are you sure you want to delete {customer['name']}?") col1, col2 = st.columns(2) with col1: if st.button("Yes, Delete"): response = make_request("DELETE", f"/Customer/{delete_id}") if response and response.status_code == 200: st.success(f"Customer deleted successfully") del st.session_state.delete_customer st.rerun() elif response: st.error(f"Failed to delete customer: {response.status_code}") with col2: if st.button("Cancel"): del st.session_state.delete_customer st.rerun() # Footer #st.sidebar.markdown("---") #st.sidebar.write("Server: http://localhost:8000") #st.sidebar.write("Make sure FastAPI is running")