Snapshot commit bringing the uncommitted phase-2 work into version control
together with four new features and the 0.2.22 version bump.
New features:
- Investor capital-over-time chart (value, paid-in, distributions per
quarter), rendered from existing capital-account history.
- Admin Investor View: read-only reconstruction of an investor's portal
(GET /api/users/{id}/investor-view), reusing the investor portal UI.
- Document upload scoped to the selected fund's own investors, with an
explicit upload-target confirmation to prevent mis-attaching.
- GP/mgmt entities gain an Assets tab listing their stakes in the funds
they manage (new entity_stakes table + /api/entities/{id}/stakes).
- Edit-entity form (change type/status/etc.), so GP entities can be
categorized correctly.
Verified: 11/11 backend tests pass; alembic upgrades to head b8c9d0e1f2a3;
frontend tsc + vite build clean; s9pk packs at 0.2.22:0 (x86_64).
Also: ignore .DS_Store and *.s9pk artifacts.
41 lines
1001 B
TypeScript
41 lines
1001 B
TypeScript
import { sdk } from './sdk'
|
|
|
|
const appPort = 8000
|
|
|
|
export const main = sdk.setupMain(async ({ effects }) => {
|
|
console.info('Starting Ten31Portal')
|
|
|
|
const subcontainer = await sdk.SubContainer.of(
|
|
effects,
|
|
{ imageId: 'main' },
|
|
sdk.Mounts.of().mountVolume({
|
|
volumeId: 'main',
|
|
subpath: null,
|
|
mountpoint: '/data',
|
|
readonly: false,
|
|
}),
|
|
'ten31portal-sub',
|
|
)
|
|
|
|
return sdk.Daemons.of(effects).addDaemon('primary', {
|
|
subcontainer,
|
|
exec: {
|
|
command: ['sh', '-c', '/app/start.sh'],
|
|
env: {
|
|
TEN31_DB_PATH: '/data/portal.db',
|
|
TEN31_DOCS_DIR: '/data/documents',
|
|
TEN31_SESSION_SECRET: process.env.TEN31_SESSION_SECRET || 'change-me',
|
|
},
|
|
},
|
|
ready: {
|
|
display: 'Web Interface',
|
|
fn: () =>
|
|
sdk.healthCheck.checkPortListening(effects, appPort, {
|
|
successMessage: 'Ten31Portal is ready',
|
|
errorMessage: 'Ten31Portal is starting...',
|
|
}),
|
|
},
|
|
requires: [],
|
|
})
|
|
})
|