@page "/account/club-setup" @using Koogle.Application.DTOs @using Koogle.Application.Interfaces @using Koogle.Domain.Enums @inject IUserService UserService @inject IClubService ClubService @inject IClubRequestService ClubRequestService @inject NavigationManager NavigationManager @attribute [Microsoft.AspNetCore.Authorization.Authorize] Club-Einrichtung Du bist noch keinem Club zugeordnet. Wähle eine Option: Suche einen bestehenden Club und stelle eine Beitrittsanfrage. @if (_isLoading) { } Mitgliedschaft anfragen @if (!string.IsNullOrEmpty(_joinMessage)) { @_joinMessage } Beantrage einen neuen Club. Die Freigabe erfolgt durch einen Administrator. @if (_isLoading) { } Club beantragen @if (!string.IsNullOrEmpty(_createMessage)) { @_createMessage } @if (_pendingMemberships.Count > 0 || _pendingClubRequests.Count > 0) { Offene Anfragen @foreach (var membership in _pendingMemberships) { Beitrittsanfrage für @membership.ClubName wartet auf Freigabe } @foreach (var request in _pendingClubRequests) { Club-Antrag für @request.Name wartet auf Freigabe } } @code { private ClubDto? _selectedClub; private string _newClubName = ""; private string _newClubLoginName = ""; private bool _isLoading; private string? _joinMessage; private Severity _joinSeverity; private string? _createMessage; private Severity _createSeverity; private List _pendingMemberships = []; private List _pendingClubRequests = []; private UserDto? _currentUser; protected override async Task OnInitializedAsync() { _currentUser = await UserService.GetCurrentUserAsync(); if (_currentUser != null) { // Load pending memberships _pendingMemberships = _currentUser.ClubMemberships .Where(m => m.Status == MembershipStatus.Pending) .ToList(); // Load pending club requests _pendingClubRequests = (await ClubRequestService.GetRequestsByUserAsync(_currentUser.ProfileId)) .Where(r => r.Status == ClubRequestStatus.Pending) .ToList(); } } private async Task> SearchClubsAsync(string value, CancellationToken ct) { if (string.IsNullOrWhiteSpace(value)) return []; var clubs = await ClubService.GetAllAsync(ct); return clubs.Where(c => c.Name.Contains(value, StringComparison.OrdinalIgnoreCase)) .Take(10); } private async Task RequestMembershipAsync() { if (_selectedClub == null || _currentUser == null) return; _isLoading = true; _joinMessage = null; try { var success = await UserService.RequestClubMembershipAsync(_currentUser.ProfileId, _selectedClub.Id); if (success) { _joinMessage = "Beitrittsanfrage wurde gestellt. Du wirst per E-Mail benachrichtigt."; _joinSeverity = Severity.Success; _selectedClub = null; // Reload pending memberships _currentUser = await UserService.GetCurrentUserAsync(); if (_currentUser != null) { _pendingMemberships = _currentUser.ClubMemberships .Where(m => m.Status == MembershipStatus.Pending) .ToList(); } } else { _joinMessage = "Anfrage fehlgeschlagen. Möglicherweise besteht bereits eine Mitgliedschaft."; _joinSeverity = Severity.Error; } } catch (Exception ex) { _joinMessage = $"Fehler: {ex.Message}"; _joinSeverity = Severity.Error; } finally { _isLoading = false; } } private async Task CreateClubRequestAsync() { if (string.IsNullOrWhiteSpace(_newClubName) || string.IsNullOrWhiteSpace(_newClubLoginName) || _currentUser == null) return; _isLoading = true; _createMessage = null; try { // Check if login name is taken if (await ClubRequestService.IsLoginNameTakenAsync(_newClubLoginName)) { _createMessage = "Der Login-Name ist bereits vergeben."; _createSeverity = Severity.Error; return; } var dto = new CreateClubRequestDto { Name = _newClubName, LoginName = _newClubLoginName.ToLowerInvariant() }; var request = await ClubRequestService.CreateRequestAsync(dto, _currentUser.ProfileId); _createMessage = "Club-Antrag wurde gestellt. Du wirst per E-Mail benachrichtigt."; _createSeverity = Severity.Success; _newClubName = ""; _newClubLoginName = ""; // Reload pending requests _pendingClubRequests = (await ClubRequestService.GetRequestsByUserAsync(_currentUser.ProfileId)) .Where(r => r.Status == ClubRequestStatus.Pending) .ToList(); } catch (Exception ex) { _createMessage = $"Fehler: {ex.Message}"; _createSeverity = Severity.Error; } finally { _isLoading = false; } } }