fixes
This commit is contained in:
parent
9bf715ee88
commit
2ab89d122d
File diff suppressed because it is too large
Load Diff
@ -134,6 +134,21 @@ export async function POST(request: NextRequest) {
|
||||
});
|
||||
}
|
||||
|
||||
case 'deleteAll': {
|
||||
// Get all members
|
||||
const members = getMemberCredentials();
|
||||
|
||||
// Delete each member
|
||||
for (const member of members) {
|
||||
deleteMember(member.memberNumber);
|
||||
}
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
message: 'Alle Mitglieder erfolgreich gelöscht'
|
||||
});
|
||||
}
|
||||
|
||||
default:
|
||||
return NextResponse.json(
|
||||
{ error: 'Ungültige Aktion' },
|
||||
|
@ -1,15 +1,13 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { checkAdminAuth } from '@/lib/auth';
|
||||
import { resetMemberVotingStatus } from '@/lib/server-auth';
|
||||
import fs from 'fs';
|
||||
import { NextResponse } from 'next/server';
|
||||
import path from 'path';
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
export async function POST() {
|
||||
try {
|
||||
const body = await request.json();
|
||||
// Check for admin auth
|
||||
const { password } = body;
|
||||
const isAuthenticated = await checkAdminAuth(password);
|
||||
// Check for admin auth using JWT cookie
|
||||
const isAuthenticated = await checkAdminAuth();
|
||||
if (!isAuthenticated) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Unauthorized' },
|
||||
|
@ -182,6 +182,45 @@ export default function MembersManager() {
|
||||
}
|
||||
};
|
||||
|
||||
// Delete all members
|
||||
const handleDeleteAllMembers = async () => {
|
||||
// Show confirmation dialog
|
||||
if (!confirm('Sind Sie sicher, dass Sie ALLE Mitglieder löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.')) {
|
||||
return;
|
||||
}
|
||||
|
||||
setIsLoading(true);
|
||||
setError(null);
|
||||
setSuccess(null);
|
||||
|
||||
try {
|
||||
const response = await fetch('/api/members', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
action: 'deleteAll'
|
||||
}),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(data.error || 'Fehler beim Löschen aller Mitglieder');
|
||||
}
|
||||
|
||||
setSuccess('Alle Mitglieder erfolgreich gelöscht');
|
||||
|
||||
// Refresh members list
|
||||
fetchMembers();
|
||||
} catch (err) {
|
||||
setError(err instanceof Error ? err.message : 'Ein Fehler ist aufgetreten');
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
// Toggle voting status
|
||||
const handleToggleVotingStatus = async (memberNumber: string, currentStatus: boolean) => {
|
||||
setIsLoading(true);
|
||||
@ -320,6 +359,13 @@ export default function MembersManager() {
|
||||
>
|
||||
{showUploadForm ? 'Abbrechen' : 'CSV importieren'}
|
||||
</button>
|
||||
|
||||
<button
|
||||
onClick={handleDeleteAllMembers}
|
||||
className="bg-red-600 hover:bg-red-700 text-white px-3 py-1 rounded"
|
||||
>
|
||||
Alle Mitglieder löschen
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Add Member Form */}
|
||||
@ -449,11 +495,10 @@ export default function MembersManager() {
|
||||
<td className="p-2">{member.memberNumber}</td>
|
||||
<td className="p-2 text-center">
|
||||
<span
|
||||
className={`inline-block px-2 py-1 rounded text-xs ${
|
||||
member.hasVoted
|
||||
? 'bg-green-100 text-green-800'
|
||||
: 'bg-yellow-100 text-yellow-800'
|
||||
}`}
|
||||
className={`inline-block px-2 py-1 rounded text-xs ${member.hasVoted
|
||||
? 'bg-green-100 text-green-800'
|
||||
: 'bg-yellow-100 text-yellow-800'
|
||||
}`}
|
||||
>
|
||||
{member.hasVoted ? 'Abgestimmt' : 'Nicht abgestimmt'}
|
||||
</span>
|
||||
@ -461,12 +506,12 @@ export default function MembersManager() {
|
||||
<td className="p-2 text-center text-sm text-gray-600">
|
||||
{member.lastLogin
|
||||
? new Date(member.lastLogin).toLocaleString('de-DE', {
|
||||
day: '2-digit',
|
||||
month: '2-digit',
|
||||
year: 'numeric',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
})
|
||||
day: '2-digit',
|
||||
month: '2-digit',
|
||||
year: 'numeric',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
})
|
||||
: '-'}
|
||||
</td>
|
||||
<td className="p-2 text-right">
|
||||
|
Loading…
x
Reference in New Issue
Block a user