feat: Enhance admin dashboard layout and add model management link
This commit is contained in:
@@ -9,7 +9,12 @@
|
||||
|
||||
{% block content %}
|
||||
<div class="container mx-auto px-4">
|
||||
<h1 class="text-3xl font-garamond text-irish-green font-bold mb-6">Admin Dashboard</h1>
|
||||
<div class="flex justify-between items-center mb-6">
|
||||
<h1 class="text-3xl font-garamond text-irish-green font-bold">Admin Dashboard</h1>
|
||||
<a href="/admin/models" class="bg-golden-ale hover:bg-opacity-90 text-black-stout px-4 py-2 rounded-md transition flex items-center">
|
||||
<i class="fas fa-database mr-2"></i> Manage All Models
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Dashboard Overview -->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-8">
|
||||
|
||||
@@ -539,6 +539,85 @@ async def delete_record(
|
||||
if not record:
|
||||
raise HTTPException(status_code=404, detail=f"Record not found")
|
||||
|
||||
# Special handling for different models due to foreign key constraints
|
||||
if model_name == 'team':
|
||||
# First clear any QR code references to this team
|
||||
db.query(QRCode).filter(QRCode.redeemed_at_team == record_id).update(
|
||||
{"redeemed_at_team": None}, synchronize_session=False
|
||||
)
|
||||
|
||||
# Clear any team achievements
|
||||
db.query(TeamAchievement).filter(TeamAchievement.team_id == record_id).delete(
|
||||
synchronize_session=False
|
||||
)
|
||||
|
||||
# Handle team memberships (should be auto-deleted via cascade, but just to be safe)
|
||||
db.query(TeamMembership).filter(TeamMembership.team_id == record_id).delete(
|
||||
synchronize_session=False
|
||||
)
|
||||
|
||||
# Handle pending join requests
|
||||
db.query(TeamJoinRequest).filter(TeamJoinRequest.team_id == record_id).delete(
|
||||
synchronize_session=False
|
||||
)
|
||||
|
||||
elif model_name == 'user':
|
||||
# Clear QR code references to this user
|
||||
db.query(QRCode).filter(QRCode.redeemed_by == record_id).update(
|
||||
{"redeemed_by": None}, synchronize_session=False
|
||||
)
|
||||
|
||||
# Handle QR sets created by this user - set created_by to NULL
|
||||
db.query(QRSet).filter(QRSet.created_by == record_id).update(
|
||||
{"created_by": None}, synchronize_session=False
|
||||
)
|
||||
|
||||
# Handle team ownerships - could set to None or reassign
|
||||
db.query(Team).filter(Team.owner_id == record_id).update(
|
||||
{"owner_id": None}, synchronize_session=False
|
||||
)
|
||||
|
||||
# Remove team memberships
|
||||
db.query(TeamMembership).filter(TeamMembership.user_id == record_id).delete(
|
||||
synchronize_session=False
|
||||
)
|
||||
|
||||
# Remove team join requests
|
||||
db.query(TeamJoinRequest).filter(TeamJoinRequest.user_id == record_id).delete(
|
||||
synchronize_session=False
|
||||
)
|
||||
|
||||
# Remove OAuth accounts
|
||||
db.query(OAuthAccount).filter(OAuthAccount.user_id == record_id).delete(
|
||||
synchronize_session=False
|
||||
)
|
||||
|
||||
# Remove event attendance records
|
||||
db.query(EventAttendee).filter(EventAttendee.user_id == record_id).delete(
|
||||
synchronize_session=False
|
||||
)
|
||||
|
||||
# Remove user points
|
||||
db.query(UserPoints).filter(UserPoints.user_id == record_id).delete(
|
||||
synchronize_session=False
|
||||
)
|
||||
|
||||
elif model_name == 'event':
|
||||
# Clear QR code references to this event
|
||||
db.query(QRCode).filter(QRCode.event_id == record_id).update(
|
||||
{"event_id": None}, synchronize_session=False
|
||||
)
|
||||
|
||||
# Clear team achievements associated with this event
|
||||
db.query(TeamAchievement).filter(TeamAchievement.event_id == record_id).update(
|
||||
{"event_id": None}, synchronize_session=False
|
||||
)
|
||||
|
||||
# Remove event attendees
|
||||
db.query(EventAttendee).filter(EventAttendee.event_id == record_id).delete(
|
||||
synchronize_session=False
|
||||
)
|
||||
|
||||
# Delete record
|
||||
db.delete(record)
|
||||
db.commit()
|
||||
|
||||
Reference in New Issue
Block a user