KolektivComputer / KolektivComputer/kalendee
Organizations follow-ups: avatars, admin moderation, directory pagination
- Dominant language
- Kotlin
- Stars
- 0
- Forks
- 0
- Avg merge
- 11h 20m
- Merged PRs (30d)
- 23
Description
## Context
Organizations landed with `V16__organizations.sql` and `OrganizationService` (memberships, invitations, roles), and the public directory renders orgs/users/calendars. Remaining follow-ups: org avatar upload/serve with object-storage quota, instance-admin moderation (list/delete orgs), and pagination/sectioning for the public directory as it grows. These are small, independent slices that make orgs usable at instance scale.
## Tasks
- [ ] Org avatar upload/serve: storage key + quota accounting, `OrganizationService` avatar fields wired end to end, `AvatarRoutes`-style serving with cache headers
- [ ] Instance-admin org list: search + detail, member counts, deletion with a clear cascade/transfer story
- [ ] Admin delete revokes pending invitations and cleans up storage keys
- [ ] Public directory: paginate users/orgs/calendars (cursor or page params), keep existing sections and search
- [ ] Keep `/directory` renders cheap (indexes/limits); no N+1 for member counts
- [ ] Tests: avatar quota enforcement, admin delete cascade, directory pagination boundaries
- [ ] Pack updates for avatar display and paged directory (`server/pack/src/pages/kalendee/directory/+page.svelte`)
## References
- `server/src/main/resources/db/migration/V16__organizations.sql`
- `server/src/main/kotlin/dev/kolektiv/kalendee/organizations/OrganizationService.kt` — avatar fields already exist in the model
- `server/src/main/kotlin/dev/kolektiv/kalendee/api/AvatarRoutes.kt` — user avatar pattern to generalize
- `server/src/main/kotlin/dev/kolektiv/kalendee/web/Pages.kt:1212` — `DirectoryOrgSummary` / `PublicDirectoryPage`
- `server/pack/src/pages/kalendee/admin/+page.svelte`, `directory/+page.svelte`, `orgSettings/+page.svelte`
- `GOALS.md` — media storage (S3-compatible, proxied through the server)
## Dependencies
- None on OAuth/LDAP; can land independently.
- Avatar storage should follow the existing abstraction in `server/src/main/kotlin/dev/kolektiv/kalendee/storage/`.
Contributor guide
Assessment
This issue has not been assessed yet.