SQLite and JSON toggle support added
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
+113
-2
@@ -2,8 +2,9 @@
|
||||
Product Finder Blueprint
|
||||
Handles the product quiz and recommendations
|
||||
"""
|
||||
from flask import Blueprint, render_template, send_from_directory, session, jsonify, redirect, url_for
|
||||
from flask import Blueprint, render_template, send_from_directory, session, jsonify, redirect, url_for, request
|
||||
from blueprints.auth import login_required, get_current_user, can_user
|
||||
import data_access as da
|
||||
import os
|
||||
|
||||
products_bp = Blueprint('products', __name__, url_prefix='/quiz')
|
||||
@@ -47,13 +48,123 @@ def get_user_session():
|
||||
|
||||
return jsonify({
|
||||
'username': session.get('username'),
|
||||
'userId': session.get('user_id'),
|
||||
'userId': None, # Not needed with username-based sessions
|
||||
'currentLocation': session.get('currentLocation'),
|
||||
'accessibleLocations': session.get('accessibleLocations', []),
|
||||
'role': session.get('role', 'user'),
|
||||
'permissions': permissions
|
||||
})
|
||||
|
||||
# Product API Endpoints
|
||||
@products_bp.route('/api/products', methods=['GET'])
|
||||
@login_required
|
||||
def get_products():
|
||||
"""Get all products or filter by location"""
|
||||
location = request.args.get('location')
|
||||
products = da.get_all_products(location=location)
|
||||
return jsonify({
|
||||
'status': 'success',
|
||||
'products': products
|
||||
})
|
||||
|
||||
@products_bp.route('/api/products/<product_code>', methods=['GET'])
|
||||
@login_required
|
||||
def get_product(product_code):
|
||||
"""Get a specific product by code"""
|
||||
product = da.get_product_by_code(product_code)
|
||||
|
||||
if not product:
|
||||
return jsonify({
|
||||
'status': 'error',
|
||||
'message': 'Product not found'
|
||||
}), 404
|
||||
|
||||
return jsonify({
|
||||
'status': 'success',
|
||||
'product': product
|
||||
})
|
||||
|
||||
@products_bp.route('/api/products', methods=['POST'])
|
||||
@login_required
|
||||
def create_product():
|
||||
"""Create a new product"""
|
||||
if not can_user('manage_products'):
|
||||
return jsonify({
|
||||
'status': 'error',
|
||||
'message': 'Permission denied'
|
||||
}), 403
|
||||
|
||||
try:
|
||||
data = request.json
|
||||
|
||||
# Create product via data access layer
|
||||
product = da.create_product(data)
|
||||
|
||||
if not product:
|
||||
return jsonify({
|
||||
'status': 'error',
|
||||
'message': 'Product code already exists'
|
||||
}), 400
|
||||
|
||||
return jsonify({
|
||||
'status': 'success',
|
||||
'message': 'Product created successfully',
|
||||
'product': product
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
da.rollback()
|
||||
return jsonify({
|
||||
'status': 'error',
|
||||
'message': str(e)
|
||||
}), 500
|
||||
|
||||
@products_bp.route('/api/products/<product_code>', methods=['PUT'])
|
||||
@login_required
|
||||
def update_product(product_code):
|
||||
"""Update an existing product"""
|
||||
if not can_user('manage_products'):
|
||||
return jsonify({
|
||||
'status': 'error',
|
||||
'message': 'Permission denied'
|
||||
}), 403
|
||||
|
||||
try:
|
||||
data = request.json
|
||||
|
||||
# Update product via data access layer
|
||||
product = da.update_product(product_code, data)
|
||||
|
||||
if not product:
|
||||
return jsonify({
|
||||
'status': 'error',
|
||||
'message': 'Product not found'
|
||||
}), 404
|
||||
|
||||
return jsonify({
|
||||
'status': 'success',
|
||||
'message': 'Product updated successfully',
|
||||
'product': product
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
da.rollback()
|
||||
return jsonify({
|
||||
'status': 'error',
|
||||
'message': str(e)
|
||||
}), 500
|
||||
|
||||
@products_bp.route('/api/product-attributes', methods=['GET'])
|
||||
@login_required
|
||||
def get_product_attributes():
|
||||
"""Get product attributes configuration"""
|
||||
attributes = da.get_product_attributes()
|
||||
|
||||
return jsonify({
|
||||
'status': 'success',
|
||||
'attributes': attributes
|
||||
})
|
||||
|
||||
@products_bp.route('/css/<path:filename>')
|
||||
def serve_css(filename):
|
||||
"""Serve CSS files"""
|
||||
|
||||
Reference in New Issue
Block a user