Leopoldadmin
b844859da3
feat(core): add attachment schemas
2026-07-04 00:29:11 +00:00
Leopoldadmin
b7dc05b7ee
feat(core): add Attachment model
2026-07-04 00:29:11 +00:00
Leopoldadmin
3eeb1f4102
feat(core): register system_settings router in main.py
2026-07-04 00:26:22 +00:00
Leopoldadmin
df623fde30
feat(core): register system_settings routes
2026-07-04 00:26:21 +00:00
Leopoldadmin
dda4b157c7
feat(core): register SystemSettings model
2026-07-04 00:26:21 +00:00
Leopoldadmin
207137feb2
feat(core): add system settings routes
2026-07-04 00:25:39 +00:00
Leopoldadmin
a7fdaf21dc
feat(core): add system settings service
2026-07-04 00:25:38 +00:00
Leopoldadmin
8b249b651f
feat(core): add system settings schemas
2026-07-04 00:25:38 +00:00
Leopoldadmin
3431b0afed
feat(core): add SystemSettings model
2026-07-04 00:25:37 +00:00
Leopoldadmin
4b8562f1c1
feat(core): register sequence router in main.py
2026-07-04 00:24:41 +00:00
Leopoldadmin
3a7156cdcd
feat(core): register sequence routes
2026-07-04 00:24:40 +00:00
Leopoldadmin
c65f515b61
feat(core): register Sequence model
2026-07-04 00:24:40 +00:00
Leopoldadmin
95bacb5810
feat(core): add sequence routes
2026-07-04 00:24:17 +00:00
Leopoldadmin
3677324c4d
feat(core): add sequence service with SELECT FOR UPDATE locking
2026-07-04 00:24:17 +00:00
Leopoldadmin
b540f16cf2
feat(core): add sequence schemas
2026-07-04 00:24:16 +00:00
Leopoldadmin
b43748d837
feat(core): add Sequence model
2026-07-04 00:24:16 +00:00
Leopoldadmin
f799d11950
feat(core): register tax router in main.py
2026-07-04 00:23:36 +00:00
Leopoldadmin
2a027a7f17
feat(core): register tax routes
2026-07-04 00:23:35 +00:00
Leopoldadmin
3d3133a7d0
feat(core): register TaxRate model
2026-07-04 00:23:35 +00:00
Leopoldadmin
ff5fa179e8
feat(core): add tax rate routes
2026-07-04 00:23:14 +00:00
Leopoldadmin
1c209371a8
feat(core): add tax rate service
2026-07-04 00:23:14 +00:00
Leopoldadmin
5fce677096
feat(core): add tax rate schemas
2026-07-04 00:23:14 +00:00
Leopoldadmin
1cb0b5ddfe
feat(core): add TaxRate model
2026-07-04 00:23:13 +00:00
Leopoldadmin
d3033056fd
feat(core): register currency router in main.py
2026-07-04 00:22:08 +00:00
Leopoldadmin
7d23815856
feat(core): register currency routes
2026-07-04 00:22:07 +00:00
Leopoldadmin
61a53ff794
feat(core): register Currency model
2026-07-04 00:22:07 +00:00
Leopoldadmin
592f890817
feat(core): add currency routes
2026-07-04 00:21:42 +00:00
Leopoldadmin
725c4413f5
feat(core): add currency service
2026-07-04 00:21:42 +00:00
Leopoldadmin
a7e8118549
feat(core): add currency schemas
2026-07-04 00:21:42 +00:00
Leopoldadmin
65c22f8066
feat(core): add Currency model
2026-07-04 00:21:41 +00:00
Leopoldadmin
ec0353f469
feat(core): add address fields to contact service serialization and CRUD
2026-07-04 00:19:23 +00:00
Leopoldadmin
11527c4c95
feat(core): add address fields to company service serialization and CRUD
2026-07-04 00:18:45 +00:00
Leopoldadmin
59c787ba66
feat(core): add address fields to contact schemas
2026-07-04 00:15:25 +00:00
Leopoldadmin
01556534f2
feat(core): add address fields to company schemas
2026-07-04 00:15:25 +00:00
Leopoldadmin
36fcb33d7e
feat(core): add address fields to Contact model
2026-07-04 00:15:23 +00:00
Leopoldadmin
74284b3359
feat(core): add address fields to Company model
2026-07-04 00:15:22 +00:00
Leopoldadmin
997d60138a
Fix route: use model_fields_set to pass _UNSET when role_id not sent, None when explicitly null
2026-07-03 20:43:55 +00:00
Leopoldadmin
d7691b3d70
Fix role_id sentinel bug: use _UNSET sentinel so None explicitly clears FK, missing param leaves unchanged
2026-07-03 20:43:00 +00:00
Leopoldadmin
792f0a464d
Problem 3/4: Add GET /api/v1/roles/permissions endpoint returning system + plugin permissions
2026-07-03 19:50:47 +00:00
Leopoldadmin
762aac832f
Problem 1: Pass role_id through users route create/update, include in responses
2026-07-03 19:49:48 +00:00
Leopoldadmin
8a2468ee7d
Problem 1: Add role_id support to user_service create/update/_user_to_dict
2026-07-03 19:49:03 +00:00
Leopoldadmin
6986fcfaae
Problem 1: Add role_id to UserCreate/UserUpdate/UserResponse schemas
2026-07-03 19:48:48 +00:00
Leopoldadmin
530cfd485f
Problem 1: Add role_id FK column to User model (references roles.id, nullable, ondelete SET NULL)
2026-07-03 19:48:39 +00:00
Leopoldadmin
5138590277
fix(plugin): add version comparison and migration run on version mismatch
...
Bug 6: install() and activate() now compare the plugin's manifest
version with the stored DB version. If they differ, migrations are
re-run to bring the schema up to date and the DB version field is
updated. This ensures that updating a plugin with a new manifest
version triggers the migration runner automatically.
2026-07-03 16:56:30 +00:00
Leopoldadmin
f9508d17de
fix(plugin): add GET and PATCH /api/v1/plugins/{name}/config endpoints
...
Bug 4: Plugin config field existed but had no API endpoints. Added
GET /api/v1/plugins/{name}/config to retrieve config as JSON and
PATCH /api/v1/plugins/{name}/config to update it. Uses PluginConfigUpdate
Pydantic model for request validation.
2026-07-03 16:49:57 +00:00
Leopoldadmin
cbeed4b26d
fix(plugin): convert dependency errors to HTTPException 400, add config API
...
Bug 3: install_plugin() and activate_plugin() now catch dependency-related
ValueErrors and raise HTTPException 400 with the error detail.
Bug 4: Added get_plugin_config() and update_plugin_config() methods to
the service layer for the plugin config API endpoints.
2026-07-03 16:48:10 +00:00
Leopoldadmin
826cf69c9a
fix(plugin): add dependency resolution and permission soft-check
...
Bug 3: install() and activate() now verify that declared dependencies
are installed/active before proceeding. Raises ValueError which the
service layer converts to HTTPException 400.
Bug 5: activate() now performs a soft permission check — logs warnings
for declared permissions not found in any discovered plugin.
2026-07-03 16:45:49 +00:00
Leopoldadmin
94a5bf105c
fix(plugin): track routes by object identity to prevent cross-plugin removal
...
Bug 2: deactivate() removed routes by path-matching, which caused
routes from other plugins sharing the same prefix (e.g. /api/v1/dms)
to be removed when deactivating one plugin. Now tracks actual route
objects by identity in _mounted_routes and removes only those specific
objects during deactivation.
2026-07-03 16:25:31 +00:00
Leopoldadmin
18a0861a96
fix(plugin): discover MailPlugin in builtins __init__
...
Bug 1: MailPlugin was missing from imports and __all__, preventing
the plugin registry from discovering the mail plugin at startup.
2026-07-03 16:19:04 +00:00
Leopoldadmin
812ccdeaf0
fix: add missing display_name to PluginModel creation in lifespan
...
The PluginModel.display_name column is NOT NULL but was not set when
auto-installing builtin plugins during app startup, causing IntegrityError.
Fix mirrors the pattern used in registry.install().
2026-07-03 00:12:43 +00:00