Files
JuridicBloc/server/routes/subscriptions.py
2026-06-13 21:46:37 +03:00

71 lines
2.5 KiB
Python

from flask import Blueprint, request, jsonify
from flask_jwt_extended import jwt_required, get_jwt_identity
from models.payments.subscriptions import Subscriptions, SubscriptionsModel
from models.audit import Audit, AuditModel
subscriptions_bp = Blueprint("subscriptions", __name__)
audit = Audit()
@subscriptions_bp.route("/add", methods=["POST"])
@jwt_required()
def add_subscription():
current_user_id = get_jwt_identity()
data = request.get_json()
name = data.get("name")
pay_and_subs_id = data.get("pay_and_subs_id")
mounts = data.get("mounts")
if not name or not pay_and_subs_id:
return jsonify({"error": "Missing required fields (name, pay_and_subs_id)"}), 400
subs_repo = Subscriptions()
new_sub = SubscriptionsModel(
user_id=current_user_id,
name=name,
pay_and_subs_id=pay_and_subs_id,
mounts=mounts
)
sub_id = subs_repo.add_subscription(new_sub)
if sub_id:
audit.new_entry(AuditModel(user_id=current_user_id, action=f"Added subscription: {name}", status="201 - Created"))
return jsonify({"message": "Subscription added successfully", "id": sub_id}), 201
return jsonify({"error": "Failed to add subscription"}), 500
@subscriptions_bp.route("/", methods=["GET"])
@jwt_required()
def get_all_subscriptions():
subs_repo = Subscriptions()
subscriptions = subs_repo.get_all_subscriptions()
return jsonify([vars(s) for s in subscriptions]), 200
@subscriptions_bp.route("/<int:subscription_id>", methods=["GET"])
@jwt_required()
def get_subscription(subscription_id):
subs_repo = Subscriptions()
subscription = subs_repo.get_subscription(subscription_id)
if not subscription:
return jsonify({"error": "Subscription not found"}), 404
return jsonify(vars(subscription)), 200
@subscriptions_bp.route("/update/<int:subscription_id>", methods=["PUT"])
@jwt_required()
def update_subscription(subscription_id):
current_user_id = get_jwt_identity()
data = request.get_json()
subs_repo = Subscriptions()
success = subs_repo.update_subscription(
subscription_id,
name=data.get("name"),
pay_and_subs_id=data.get("pay_and_subs_id"),
mounts=data.get("mounts")
)
if success:
audit.new_entry(AuditModel(user_id=current_user_id, action=f"Updated subscription ID: {subscription_id}", status="200 - OK"))
return jsonify({"message": "Subscription updated successfully"}), 200
return jsonify({"error": "Subscription not found or no valid fields to update"}), 404