Commit Graph

164 Commits

Author SHA1 Message Date
beo3000 e2fe8b723a added Game->Club Relation 2025-12-26 10:17:22 +01:00
beo3000 bef4309e0e mod: multiselect participants 2025-12-25 22:00:06 +01:00
beo3000 1e9cf520f6 mod Expense-Table, show time and chg order 2025-12-25 21:48:39 +01:00
beo3000 8d2222de8f select Person and Quick-Assign expenses 2025-12-25 21:36:43 +01:00
beo3000 033a3ebd4e mark phase G8 complete 2025-12-25 21:17:42 +01:00
beo3000 0911236a0d feat(G8): add invite link handling for club membership 2025-12-25 21:17:00 +01:00
beo3000 637a3b120c mark phase G7 complete 2025-12-25 21:08:06 +01:00
beo3000 97ea3b35ca feat(G7): add JoinClub page and no-club dashboard message 2025-12-25 21:07:40 +01:00
beo3000 e8b2154f69 mark phase G6 complete
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 20:59:51 +01:00
beo3000 e62bea77d8 feat(G6): add pending memberships tab to Admin Users
- Add tabs: "Alle Benutzer" + "Ausstehende Anträge"
- Show pending membership requests with approve/reject buttons
- Add RejectMembershipDialog with optional rejection reason

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 20:59:27 +01:00
beo3000 c48a518dda mark phase G5 complete
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 20:54:04 +01:00
beo3000 ec50e971a9 feat(G5): add PendingMembershipsWidget
- new PendingMembershipsWidget.razor shows pending membership count
- only visible to club admins/super admins
- integrated into Dashboard.razor
- click navigates to admin users page

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 20:53:41 +01:00
beo3000 8e2342fd74 avoid duplicate person names 2025-12-25 19:00:42 +01:00
beo3000 60c74da842 added prompt for later 2025-12-25 18:53:16 +01:00
beo3000 1a7e596abd mod Sie-Form -> Du-Form 2025-12-25 18:44:26 +01:00
beo3000 12fcac3d83 mod impl-plan 2025-12-25 18:40:06 +01:00
beo3000 baa3fe7c1e upd Claude anweisungen 2025-12-25 18:36:36 +01:00
beo3000 0a9205a2f3 Complete phase G4: Membership Services
- UserService: RequestClubMembership (by ID, name, invite token),
  ApproveMembership, RejectMembership, GetPendingMemberships
- ClubService: CreateInvitation, GetInvitationByToken, ValidateInvitation,
  IncrementInvitationUsage, GetInvitationsByClub, GetByName
- Add PendingMembershipDto, ClubInvitationDto, CreateClubInvitationDto
- Update tests to pass AppDbContext to ClubService

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 18:27:40 +01:00
beo3000 32c48d2bc3 fix namespaces
add AccessDenied Page
2025-12-25 18:15:21 +01:00
beo3000 1484550939 Complete phase G3: IEmailService Stub
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 17:57:41 +01:00
beo3000 a1bad43d88 Add IEmailService interface + StubEmailService
- IEmailService in Domain/Interfaces for membership notifications
- StubEmailService in Infrastructure/Services logs instead of sending
- TODO comments for future SMTP implementation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 17:57:16 +01:00
beo3000 264119695f Complete phase G2: ClubInvitation Entity
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 17:50:22 +01:00
beo3000 68c6c30a2a Add ClubInvitation entity for invitation links
- ClubInvitation: Token, ExpiresAt, MaxUses, UsedCount
- Unique index on Token
- DbSet + EF Configuration
- Migration applied

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 17:49:50 +01:00
beo3000 aae41d42a0 Complete phase G1: MembershipStatus + UserProfileClub
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 17:41:54 +01:00
beo3000 b70ddcc6ef Add MembershipStatus enum + extend UserProfileClub
- MembershipStatus: Pending, Approved, Rejected
- UserProfileClub: Status, RejectionReason, ApprovedAt/ById, RejectedAt/ById
- Migration for new columns

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 17:41:26 +01:00
beo3000 61bd41576a show name of selected club 2025-12-25 17:34:58 +01:00
beo3000 bb00aa8a11 fix AuthState 2025-12-25 17:18:00 +01:00
beo3000 08b4edd1a5 Complete phase F3: Navigation finalisieren
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 16:43:36 +01:00
beo3000 245940b40e Add finalized navigation menu (F3)
- Dashboard link (all authenticated users)
- Spieltage, Personen (club-specific, require selected club)
- Stammdaten with Kostenvorlagen (ClubEditor+)
- Administration section with Vereine/Benutzer (SuperAdmin)
- Profile link for authenticated users

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 16:43:12 +01:00
beo3000 579db4640b mod claude permissions 2025-12-25 16:34:59 +01:00
beo3000 f71ff46d13 Complete phase F2: Evaluation Components
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 16:33:22 +01:00
beo3000 bc99bc25db Add evaluation components (F2)
- DayEvaluationComponent: shows day expense summary per person
- PersonEvaluationComponent: shows person expense summary + details

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 16:32:49 +01:00
beo3000 1cbd4c17e7 Complete phase F1: Dashboard Page
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 15:27:24 +01:00
beo3000 7c9f3c36d9 Add Dashboard page (F1)
- DashboardDto, IDashboardService, DashboardService
- Summary cards: members, guests, days, open expenses
- Recent days list with navigation
- Top penalty recipients list
- Home redirects to /dashboard
- Updated HomePageTests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 15:26:35 +01:00
beo3000 005bfebe6d Complete phase E4: PersonExpense Management
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 15:15:01 +01:00
beo3000 343ad931d1 Add PersonExpense management to DayDetails (E4)
- Extend DayState with SelectedDayExpenses, AvailableExpenses
- Add Fluxor actions for load/create/update/delete expenses
- Add reducers + effects for PersonExpense operations
- Create AddPersonExpenseDialog with inverse expense support
- Update DayDetails with expense table, summary, status toggle

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 15:14:34 +01:00
beo3000 27be43fe53 merge day detils 2025-12-25 15:04:24 +01:00
beo3000 705f8a0da8 Complete phase E3: Day Details Page
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 13:55:32 +01:00
beo3000 26378afdbd Add Day Details Page (E3)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 13:54:39 +01:00
beo3000 616543eaee Complete phase E2: Days List Page
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 09:42:23 +01:00
beo3000 642c4d11bf Add Days List Page (E2)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 09:41:54 +01:00
beo3000 e1a0969d6e Complete phase E1: DayState Fluxor
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 09:31:23 +01:00
beo3000 9a8d435f09 Add DayState Fluxor (E1)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 09:30:55 +01:00
beo3000 01f1145698 update implementationplan 2025-12-24 17:24:49 +01:00
beo3000 51600596c2 Add Expense Pages (D4) 2025-12-24 17:23:31 +01:00
beo3000 69f0f404a6 Complete phase D3: ExpenseState Fluxor 2025-12-24 15:53:59 +01:00
beo3000 479bfe4ba5 Add ExpenseState Fluxor (D3)
- ExpenseState.cs: state record with Expenses, SelectedExpense, IsLoading, Error
- ExpenseActions.cs: Load/Create/Update/Delete actions + Select/ClearError
- ExpenseReducers.cs: pure state transformations
- ExpenseEffects.cs: async service calls with logging

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 15:53:39 +01:00
beo3000 c3839d2363 fix permissions;
Summary of all fixes

  3 files changed:

  1. src/Koogle.Application/Services/UserService.cs:140-171
    - GetByIdentityUserIdAsync now includes .Include(p => p.Clubs) and maps ClubMemberships
  2. src/Koogle.Web/Store/AuthState/AuthEffects.cs:53-73
    - Merges club-specific roles from ClubMemberships into AuthState roles
  3. src/Koogle.Infrastructure/Security/ClubRoleRequirement.cs:17-114
    - Changed ClubRoleHandler to extend AuthorizationHandler<ClubRoleRequirement> (no resource)
    - Reads current_club_id from claims to determine club context
    - Added ClubRoleResourceHandler for resource-based auth (explicit clubId)
  4. src/Koogle.Infrastructure/DependencyInjection.cs:72
    - Registered ClubRoleResourceHandler

  The [Authorize(Policy = "ClubViewer")] attribute now uses current_club_id claim set during login to check club roles.
2025-12-24 15:44:52 +01:00
beo3000 d74cdb678d mod AuthTest 2025-12-24 15:15:33 +01:00
beo3000 1186764cba Complete phase D2: Person Pages
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-24 15:07:02 +01:00