Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
ddc93d7
fix: eliminate 307 redirects on /dashboard and /products
antosubash Apr 17, 2026
4de942b
refactor: make Inertia auth.user projection module-owned
antosubash Apr 17, 2026
982ecf9
docs: add design for users module quality pass (sub-project 1/4)
antosubash Apr 17, 2026
04cc62b
docs: add implementation plan for users module quality pass
antosubash Apr 17, 2026
c896a7c
docs(users): remove stale Keycloak + Task 8 references
antosubash Apr 17, 2026
28da768
refactor(users): extract _roles_payload helper in views
antosubash Apr 17, 2026
edddd71
refactor(users): promote PasswordHelper import to module top
antosubash Apr 17, 2026
d4cea27
refactor(users): raise UserNotFoundError from service; endpoints tran…
antosubash Apr 17, 2026
0d1af29
refactor(users): service uses flush only; framework auto-commits
antosubash Apr 17, 2026
a93ddcd
refactor(users): rename services.py → state.py, UsersServices → Users…
antosubash Apr 17, 2026
8d629b2
docs: update framework-conventions example to UsersState
antosubash Apr 17, 2026
70652eb
refactor(users): split test_models.py by model
antosubash Apr 17, 2026
d600532
docs: add sub-project 2 (Admin UX) spec
antosubash Apr 17, 2026
b922870
Merge remote-tracking branch 'origin/main' into feature/goofy-ride-57…
antosubash Apr 20, 2026
45565a0
docs: revise admin UX spec for post-merge state
antosubash Apr 20, 2026
f6dfcbc
docs: add admin UX implementation plan
antosubash Apr 20, 2026
881332b
feat(users): expose created_at on UserListItem
antosubash Apr 20, 2026
30e1365
feat(users): add status/role/verified filters + sort to list_users
antosubash Apr 20, 2026
e8d735a
feat(users): admin list endpoint accepts status/role/verified/sort/order
antosubash Apr 20, 2026
927c332
feat(users): admin index view accepts + echoes filter params
antosubash Apr 20, 2026
a842e13
feat(users): PATCH /admin/{id}/verify (admin mark-verified)
antosubash Apr 20, 2026
a8685c0
feat(users): expose has_permissions_module flag on admin detail page
antosubash Apr 20, 2026
e965ca2
feat(users): filter + sort controls on admin list
antosubash Apr 20, 2026
7895b99
feat(users): metadata card, verify action, confirmations, permissions…
antosubash Apr 20, 2026
2748520
test(users): force Permissions absent for has_permissions_module=fals…
antosubash Apr 20, 2026
3f99fd6
test(users): split admin tests to respect 300-line cap
antosubash Apr 20, 2026
0a136b7
chore(users): apply lint/format polish and move helpers out of pages/
antosubash Apr 20, 2026
fc08591
refactor(users): simplify admin UX after review
antosubash Apr 20, 2026
a7df5f3
Merge remote-tracking branch 'origin/main' into feature/goofy-ride-57…
antosubash Apr 20, 2026
56e3ffe
chore: commit missing files referenced by tracked code
antosubash Apr 20, 2026
dd20284
Merge remote-tracking branch 'origin/main' into feature/goofy-ride-57…
antosubash Apr 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions docs/framework-conventions.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,10 +116,10 @@ Module settings should:
```python
class UsersModule(ModuleBase):
def register_settings(self, app: FastAPI) -> None:
from users.services import UsersServices
from users.settings import UsersSettings
from users.state import UsersState

app.state.users = UsersServices(settings=UsersSettings())
app.state.users = UsersState(settings=UsersSettings())
```

## Database
Expand Down Expand Up @@ -202,6 +202,8 @@ Service code should not call `session.commit()` directly. Flush for intermediate
- `menus` — grouped by `MenuSection` (sidebar, adminSidebar, navbar, userDropdown), role-filtered.
- `i18n` — active locale and translation bundle.

The framework does not know the shape of `auth.user`. A module (typically `users`) registers a `principal_serializer: Callable[[user], dict]` on `app.state` during `register_settings(app)`; the middleware calls it with `request.state.user` to build the `auth.user` payload. Without a registered serializer, `auth.user` is `None` even when a user is authenticated.

Use `InertiaDep` from `simple_module_hosting.inertia_deps` — it attaches the shared data automatically.

## Permissions
Expand Down
Loading