# Board Game Rental App - Backend in Flask (Python)
# This code outlines a basic API for a board game rental service.
from flask import Flask, jsonify, request
app = Flask(__name__)
# Sample data to simulate a database
games = [
{"id": 1, "name": "Catan", "genre": "Strategy", "available": True, "price": 50,
"popularity": 8},
{"id": 2, "name": "Monopoly", "genre": "Family", "available": True, "price":
30, "popularity": 7},
{"id": 3, "name": "Codenames", "genre": "Party", "available": True, "price":
20, "popularity": 9},
]
customers = [
{"name": "Alice", "preferred_genres": ["Strategy", "Party"], "rental_history":
[1, 3]},
{"name": "Bob", "preferred_genres": ["Family"], "rental_history": [2]},
]
rentals = []
# Route to list all games
@[Link]('/games', methods=['GET'])
def get_games():
return jsonify(games)
# Route to view details of a specific game
@[Link]('/games/<int:game_id>', methods=['GET'])
def get_game(game_id):
game = next((game for game in games if game['id'] == game_id), None)
if game:
return jsonify(game)
return jsonify({"error": "Game not found"}), 404
# Route to rent a game
@[Link]('/rent', methods=['POST'])
def rent_game():
data = [Link]
game_id = [Link]('game_id')
customer_name = [Link]('customer_name')
game = next((game for game in games if game['id'] == game_id), None)
customer = next((customer for customer in customers if customer['name'] ==
customer_name), None)
if not game:
return jsonify({"error": "Game not found"}), 404
if not customer:
return jsonify({"error": "Customer not found"}), 404
if not game['available']:
return jsonify({"error": "Game is currently unavailable"}), 400
game['available'] = False
rental = {"game_id": game_id, "customer_name": customer_name}
[Link](rental)
# Update customer's rental history
customer['rental_history'].append(game_id)
return jsonify({"message": "Game rented successfully", "rental": rental})
# Route to return a game
@[Link]('/return', methods=['POST'])
def return_game():
data = [Link]
game_id = [Link]('game_id')
game = next((game for game in games if game['id'] == game_id), None)
if not game:
return jsonify({"error": "Game not found"}), 404
if game['available']:
return jsonify({"error": "Game is already marked as available"}), 400
game['available'] = True
rentals[:] = [rental for rental in rentals if rental['game_id'] != game_id]
return jsonify({"message": "Game returned successfully"})
# Route to view all active rentals
@[Link]('/rentals', methods=['GET'])
def get_rentals():
return jsonify(rentals)
# Route to recommend games based on customer preferences
@[Link]('/recommend/<customer_name>', methods=['GET'])
def recommend_games(customer_name):
customer = next((customer for customer in customers if customer['name'] ==
customer_name), None)
if not customer:
return jsonify({"error": "Customer not found"}), 404
preferred_genres = customer['preferred_genres']
rented_games = customer['rental_history']
recommended_games = [
game for game in games
if game['genre'] in preferred_genres and game['id'] not in rented_games and
game['available']
]
# Sort recommendations by popularity
recommended_games.sort(key=lambda x: x['popularity'], reverse=True)
return jsonify({"recommended_games": recommended_games})
if __name__ == '__main__':
[Link](debug=True)