Phase 1 - JWT Auth Foundation: - Replace token auth with djangorestframework-simplejwt - POST /api/v1/admin/auth/login/ - returns access + refresh JWT - POST /api/v1/auth/refresh/ - JWT refresh - GET /api/v1/auth/me/ - current admin profile - GET /api/v1/health/ - DB health check - Add ledger app to INSTALLED_APPS Phase 2 - Dashboard Metrics API: - GET /api/v1/dashboard/metrics/ - revenue, partners, events, tickets - GET /api/v1/dashboard/revenue/ - 7-day revenue vs payouts chart data - GET /api/v1/dashboard/activity/ - last 10 platform events feed - GET /api/v1/dashboard/actions/ - KYC queue, flagged events, pending payouts DB Indexes (dashboard query optimisation): - RazorpayTransaction: status, captured_at - Partner: status, kyc_compliance_status - Event: event_status, start_date, created_date - Booking: created_date - PaymentTransaction: payment_type, payment_transaction_status, payment_transaction_date Infra: - Add Dockerfile for eventify-backend container - Add simplejwt to requirements.txt - All 4 dashboard views use IsAuthenticated permission class
50 lines
1.6 KiB
HTML
50 lines
1.6 KiB
HTML
{% extends 'base.html' %}
|
|
{% block content %}
|
|
<div class="container mt-4">
|
|
<h3>{% if object %}Edit{% else %}Add{% endif %} Event</h3>
|
|
|
|
<form method="post" novalidate>
|
|
{% csrf_token %}
|
|
{{ form.media }}
|
|
|
|
{% for field in form %}
|
|
<div class="mb-3">
|
|
{{ field.label_tag }}
|
|
{{ field }}
|
|
{% for error in field.errors %}
|
|
<div class="text-danger">{{ error }}</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% endfor %}
|
|
|
|
<button class="btn btn-primary">Save</button>
|
|
<a class="btn btn-secondary" href="{% url 'events:event_list' %}">Cancel</a>
|
|
</form>
|
|
</div>
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
const allYearEventCheckbox = document.getElementById('id_all_year_event');
|
|
const startDateField = document.getElementById('id_start_date');
|
|
const endDateField = document.getElementById('id_end_date');
|
|
const startTimeField = document.getElementById('id_start_time');
|
|
const endTimeField = document.getElementById('id_end_time');
|
|
|
|
function toggleDateTimeFields() {
|
|
const isDisabled = allYearEventCheckbox.checked;
|
|
startDateField.disabled = isDisabled;
|
|
endDateField.disabled = isDisabled;
|
|
startTimeField.disabled = isDisabled;
|
|
endTimeField.disabled = isDisabled;
|
|
}
|
|
|
|
// Set initial state
|
|
toggleDateTimeFields();
|
|
|
|
// Listen for checkbox changes
|
|
if (allYearEventCheckbox) {
|
|
allYearEventCheckbox.addEventListener('change', toggleDateTimeFields);
|
|
}
|
|
});
|
|
</script>
|
|
{% endblock %} |