CrimeManagementSystem / backend.py
Chaitanya895's picture
Upload 15 files
27de439 verified
from flask import Flask, request, jsonify
import sqlite3
import logging
import os
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = Flask(__name__)
# Database connection
DB_PATH = "crime_records.db"
def get_db_connection():
if not os.path.exists(DB_PATH):
logger.error(f"Database file {DB_PATH} does not exist")
raise Exception(f"Database file {DB_PATH} not found")
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
return conn
# Add FIR
@app.route("/api/firs", methods=["POST"])
def add_fir():
try:
data = request.get_json()
conn = get_db_connection()
cursor = conn.cursor()
query = "INSERT INTO FIRs (crime_id, complainant_name, complainant_contact, filing_date) VALUES (?, ?, ?, ?)"
cursor.execute(query, (
data["crime_id"],
data["complainant_name"].lower(),
data["complainant_contact"].lower(),
data["filing_date"]
))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "FIR added successfully"}), 200
except Exception as e:
logger.error(f"Error adding FIR: {e}")
return jsonify({"error": str(e)}), 500
# Add Crime
@app.route("/api/crimes", methods=["POST"])
def add_crime():
try:
data = request.get_json()
conn = get_db_connection()
cursor = conn.cursor()
query = "INSERT INTO Crimes (crime_type, description, location, date, officer_in_charge, status) VALUES (?, ?, ?, ?, ?, ?)"
cursor.execute(query, (
data["crime_type"].lower(),
data["description"].lower(),
data["location"].lower(),
data["date"],
data["officer_in_charge"].lower(),
"Open"
))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "Crime added successfully"}), 200
except Exception as e:
logger.error(f"Error adding crime: {e}")
return jsonify({"error": str(e)}), 500
# Sign Up
@app.route("/api/users", methods=["POST"])
def signup():
try:
data = request.get_json()
conn = get_db_connection()
cursor = conn.cursor()
query = "INSERT INTO Users (username, password, role) VALUES (?, ?, ?)"
cursor.execute(query, (
data["username"].lower(),
data["password"],
data.get("role", "police").lower()
))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "User signed up successfully"}), 200
except Exception as e:
logger.error(f"Error signing up user: {e}")
return jsonify({"error": str(e)}), 500
# Login
@app.route("/api/login", methods=["POST"])
def login():
try:
data = request.get_json()
username = data.get("username")
password = data.get("password")
conn = get_db_connection()
cursor = conn.cursor()
query = "SELECT * FROM Users WHERE LOWER(username) = ? AND password = ?"
cursor.execute(query, (username.lower(), password))
result = cursor.fetchone()
cursor.close()
conn.close()
if result:
return jsonify({"message": "Login successful", "username": result["username"], "role": result["role"]}), 200
else:
return jsonify({"error": "Invalid credentials"}), 401
except Exception as e:
logger.error(f"Error during login: {e}")
return jsonify({"error": str(e)}), 500
# Get Crimes
@app.route("/api/crimes", methods=["GET"])
def get_crimes():
try:
search = request.args.get("search", "").lower()
conn = get_db_connection()
cursor = conn.cursor()
if search:
query = "SELECT * FROM Crimes WHERE LOWER(crime_type) LIKE ? OR LOWER(location) LIKE ?"
cursor.execute(query, (f"%{search}%", f"%{search}%"))
else:
query = "SELECT * FROM Crimes"
cursor.execute(query)
crimes = [dict(row) for row in cursor.fetchall()]
cursor.close()
conn.close()
return jsonify(crimes), 200
except Exception as e:
logger.error(f"Error fetching crimes: {e}")
return jsonify({"error": str(e)}), 500
# Get FIRs
@app.route("/api/firs", methods=["GET"])
def get_firs():
try:
search = request.args.get("search", "").lower()
conn = get_db_connection()
cursor = conn.cursor()
if search:
query = "SELECT * FROM FIRs WHERE LOWER(complainant_name) LIKE ? OR LOWER(complainant_contact) LIKE ?"
cursor.execute(query, (f"%{search}%", f"%{search}%"))
else:
query = "SELECT * FROM FIRs"
cursor.execute(query)
firs = [dict(row) for row in cursor.fetchall()]
cursor.close()
conn.close()
return jsonify(firs), 200
except Exception as e:
logger.error(f"Error fetching FIRs: {e}")
return jsonify({"error": str(e)}), 500
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=True)