@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;
}
}
}