Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
9c7295d
initial commit - conversation deletion implementation
lian-jung Jan 6, 2026
88849eb
added tests and documentation for conversation data retention for con…
lian-jung Jan 6, 2026
d633760
clean up comments
lian-jung Jan 6, 2026
3582d0e
test: add getByStates test coverage for ItemListingReadRepository
lian-jung Jan 6, 2026
a9947ba
test: add expiresAt getter/setter coverage for ConversationDomainAdapter
lian-jung Jan 6, 2026
1c9596e
refactor: remove unused scheduleDeletionByListing service
lian-jung Jan 6, 2026
fdb94c1
refactor: simplify conversation cleanup handler
lian-jung Jan 6, 2026
f9604c7
fix: correct expiresAt setter test in ConversationDomainAdapter
lian-jung Jan 6, 2026
54a99b9
fix: remove unnecessary Promise.all from synchronous toDomain calls
lian-jung Jan 6, 2026
35f9878
refactor: align error handling in getByStates with other repository m…
lian-jung Jan 6, 2026
c8c0aed
refactor: centralize 6-month retention period constant
lian-jung Jan 6, 2026
5178868
refactor: use shared ListingStateEnum for archived states
lian-jung Jan 6, 2026
125f589
perf: batch conversations per listing in single transaction
lian-jung Jan 6, 2026
5059136
fix: correct TypeScript type for ARCHIVED_LISTING_STATES
lian-jung Jan 6, 2026
e5a3c77
fixed error handling in getByStates method
lian-jung Jan 6, 2026
a2560c5
Merge main into conversation-deletion branch
lian-jung Jan 6, 2026
6cb663b
refactor cleanup conversation function and minor security requirement…
lian-jung Jan 7, 2026
9b49a2c
refactor cleanup function to remove HOF pattern
lian-jung Jan 7, 2026
241ae42
added error handling to timer handler and getByListingId method and r…
lian-jung Jan 7, 2026
03728ff
simplify getByListingId method
lian-jung Jan 7, 2026
07d13c3
reduce complexity of cleanup function
lian-jung Jan 7, 2026
3177394
minor sourcery comments
lian-jung Jan 7, 2026
3ea901f
fixed failing test
lian-jung Jan 7, 2026
b247860
fixed span status bug and performance improvement in cleanup function
lian-jung Jan 7, 2026
3bf88a9
added logic and tests for conversation deletion when reservation requ…
lian-jung Jan 7, 2026
a8fa706
fix failing build error
lian-jung Jan 8, 2026
2770931
Merge main into conversation-deletion and resolve conflicts
lian-jung Jan 8, 2026
6eb4595
extracted shared cleanup result type and cleanup helper
lian-jung Jan 8, 2026
745ea35
fixed anchor date for completed listings and updated .snyk file to @p…
lian-jung Jan 8, 2026
9de1f40
added test coverage and clean up sourcery comments
lian-jung Jan 8, 2026
264ddb5
added tests for reservation request getter and loader
lian-jung Jan 8, 2026
285bed9
improve test coverage in conversation domain adapter
lian-jung Jan 8, 2026
7952679
added vitest dependency in apps/api
lian-jung Jan 8, 2026
d51bd7b
minor copilot comments
lian-jung Jan 8, 2026
fe9b476
fixed conversation deletion functionality
lian-jung Jan 9, 2026
18a49e7
updated react router package for package vulnerability
lian-jung Jan 9, 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
9 changes: 9 additions & 0 deletions .snyk
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,12 @@ ignore:
reason: 'Transitive dependency in express, @docusaurus/core, @apollo/server, apollo-link-rest; not exploitable in current usage.'
expires: '2026-01-19T00:00:00.000Z'
created: '2026-01-05T09:39:00.000Z'
'SNYK-JS-PNPMNPMCONF-14897556':
- '@docusaurus/core@3.9.2 > update-notifier@6.0.2 > latest-version@7.0.0 > package-json@8.1.1 > registry-auth-token@5.1.0 > @pnpm/npm-conf@2.3.1':
reason: 'Deep transitive dependency in Docusaurus; command injection vulnerability not exploitable in docs build context (static site generator, no untrusted input). Upgrade path blocked until Docusaurus updates update-notifier. Will reassess when Docusaurus 3.10+ is available.'
expires: '2026-07-08T00:00:00.000Z'
created: '2026-01-08T00:00:00.000Z'
- '@docusaurus/preset-classic@3.9.2 > @docusaurus/core@3.9.2 > update-notifier@6.0.2 > latest-version@7.0.0 > package-json@8.1.1 > registry-auth-token@5.1.0 > @pnpm/npm-conf@2.3.1':
reason: 'Deep transitive dependency in Docusaurus; command injection vulnerability not exploitable in docs build context (static site generator, no untrusted input). Upgrade path blocked until Docusaurus updates update-notifier. Will reassess when Docusaurus 3.10+ is available.'
expires: '2026-07-08T00:00:00.000Z'
created: '2026-01-08T00:00:00.000Z'
6 changes: 5 additions & 1 deletion apps/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
"prebuild": "biome lint",
"build": "tsc --build",
"watch": "tsc -w",
"test": "vitest run --silent --reporter=dot",
"test:coverage": "vitest run --coverage --silent --reporter=dot",
"test:coverage:node": "vitest run --coverage",
"test:watch": "vitest",
"lint": "biome lint",
"clean": "rimraf dist",
Expand Down Expand Up @@ -45,6 +48,7 @@
"@cellix/typescript-config": "workspace:*",
"@cellix/vitest-config": "workspace:*",
"rimraf": "^6.0.1",
"typescript": "^5.8.3"
"typescript": "^5.8.3",
"vitest": "catalog:"
}
}
22 changes: 11 additions & 11 deletions apps/api/src/cellix.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ test.for(feature, ({ BeforeEachScenario, Scenario }) => {
});

When('application services factory is initialized', () => {
const result = cellixWithContext.initializeApplicationServices(() => ({ forRequest: vi.fn() }));
const result = cellixWithContext.initializeApplicationServices(() => ({ forRequest: vi.fn(), forSystemOperation: vi.fn() }));
expect(result.registerAzureFunctionHttpHandler).toBeDefined();
});

Expand Down Expand Up @@ -255,7 +255,7 @@ test.for(feature, ({ BeforeEachScenario, Scenario }) => {

When('initializeApplicationServices is called', () => {
expect(() => {
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn() }));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn(), forSystemOperation: vi.fn() }));
}).toThrow('Context creator must be set before initializing application services');
});

Expand All @@ -268,7 +268,7 @@ test.for(feature, ({ BeforeEachScenario, Scenario }) => {
Given('a Cellix instance in app-services phase', () => {
cellix = Cellix.initializeInfrastructureServices(() => { /* no op */ }) as Cellix<unknown, unknown>;
cellix.setContext(() => ({}));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn() }));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn(), forSystemOperation: vi.fn() }));
});

When('an Azure Function HTTP handler is registered', () => {
Expand Down Expand Up @@ -323,7 +323,7 @@ test.for(feature, ({ BeforeEachScenario, Scenario }) => {
registry.registerInfrastructureService(mockService);
}) as Cellix<unknown, unknown>;
cellix.setContext(() => ({}));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn() }));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn(), forSystemOperation: vi.fn() }));
cellix.registerAzureFunctionHttpHandler(
'test-handler',
{ authLevel: 'anonymous' },
Expand Down Expand Up @@ -368,7 +368,7 @@ test.for(feature, ({ BeforeEachScenario, Scenario }) => {
Given('a Cellix instance in handlers phase without context creator', () => {
cellix = Cellix.initializeInfrastructureServices(() => { /* no op */ }) as Cellix<unknown, unknown>;
cellix.setContext(() => ({}));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn() }));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn(), forSystemOperation: vi.fn() }));
cellix.registerAzureFunctionHttpHandler(
'test-handler',
{ authLevel: 'anonymous' },
Expand All @@ -395,7 +395,7 @@ test.for(feature, ({ BeforeEachScenario, Scenario }) => {
registry.registerInfrastructureService(mockService);
}) as Cellix<unknown, unknown>;
cellix.setContext(() => ({}));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn() }));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn(), forSystemOperation: vi.fn() }));
cellix.registerAzureFunctionHttpHandler(
'test-handler',
{ authLevel: 'anonymous' },
Expand All @@ -417,7 +417,7 @@ test.for(feature, ({ BeforeEachScenario, Scenario }) => {
Given('a started Cellix application with no registered services', async () => {
cellix = Cellix.initializeInfrastructureServices(() => { /* no op */ }) as Cellix<unknown, unknown>;
cellix.setContext(() => ({}));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn() }));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn(), forSystemOperation: vi.fn() }));
cellix.registerAzureFunctionHttpHandler(
'test-handler',
{ authLevel: 'anonymous' },
Expand Down Expand Up @@ -457,7 +457,7 @@ test.for(feature, ({ BeforeEachScenario, Scenario }) => {
registry.registerInfrastructureService(mockService);
}) as Cellix<unknown, unknown>;
cellix.setContext(() => ({}));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn() }));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn(), forSystemOperation: vi.fn() }));
cellix.registerAzureFunctionHttpHandler(
'test-handler',
{ authLevel: 'anonymous' },
Expand Down Expand Up @@ -500,7 +500,7 @@ test.for(feature, ({ BeforeEachScenario, Scenario }) => {
registry.registerInfrastructureService(mockService);
}) as Cellix<unknown, unknown>;
cellix.setContext(() => ({}));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn() }));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn(), forSystemOperation: vi.fn() }));
cellix.registerAzureFunctionHttpHandler(
'test-handler',
{ authLevel: 'anonymous' },
Expand Down Expand Up @@ -531,7 +531,7 @@ test.for(feature, ({ BeforeEachScenario, Scenario }) => {
registry.registerInfrastructureService(failingService);
}) as Cellix<unknown, unknown>;
cellix.setContext(() => ({}));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn() }));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn(), forSystemOperation: vi.fn() }));
cellix.registerAzureFunctionHttpHandler(
'test-handler',
{ authLevel: 'anonymous' },
Expand Down Expand Up @@ -568,7 +568,7 @@ test.for(feature, ({ BeforeEachScenario, Scenario }) => {
registry.registerInfrastructureService(failingService);
}) as Cellix<unknown, unknown>;
cellix.setContext(() => ({}));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn() }));
cellix.initializeApplicationServices(() => ({ forRequest: vi.fn(), forSystemOperation: vi.fn() }));
cellix.registerAzureFunctionHttpHandler(
'test-handler',
{ authLevel: 'anonymous' },
Expand Down
Loading
Loading