Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
15ec2a4
[TM-2581] Remove unused method.
roguenet Nov 5, 2025
a94ae96
[TM-2581] Sketch out the form data controller and DTO response.
roguenet Nov 5, 2025
3c4fec6
[TM-2581] Move translateFields to the localization service.
roguenet Nov 5, 2025
4ed39b6
[TM-2581] Break the form data processing into its own service.
roguenet Nov 5, 2025
346daaa
[TM-2581] WIP partial form answers implementation.
roguenet Nov 6, 2025
f315b61
[TM-2581] Implement project boundary in form data answers.
roguenet Nov 6, 2025
b39cf1e
[TM-2581] Implement media get in form answers.
roguenet Nov 6, 2025
819838d
[TM-2581] Do an audit to make sure all entities that have linked fiel…
roguenet Nov 6, 2025
456fbf9
[TM-2581] Merge branch 'epic/TM-2411-forms' into feat/TM-2581-view-fo…
roguenet Nov 7, 2025
58f4a33
[TM-2581] WIP improved structure for accumulating form answers with f…
roguenet Nov 7, 2025
5036f9b
[TM-2581] Solve a circular dependency.
roguenet Nov 7, 2025
30b7c02
[TM-2581] Clean up the collector pattern and add tree species.
roguenet Nov 7, 2025
ad048e6
[TM-2581] Lay out the pattern for the resources that only have one pr…
roguenet Nov 7, 2025
acc8f7e
[TM-2581] Added invasives, seedings and stratas
roguenet Nov 7, 2025
d6778f7
[TM-2581] Finished all resources aside from disturbance report entries.
roguenet Nov 7, 2025
d4116d3
[TM-2581] Implement disturbance report entries.
roguenet Nov 8, 2025
4e7df53
[TM-2581] Files use collection instead of property in v3.
roguenet Nov 8, 2025
721b666
[TM-2581] Relations don't need property definitions in v3.
roguenet Nov 8, 2025
8affec7
[TM-2581] Use a more appropriate name.
roguenet Nov 8, 2025
4920a4d
[TM-2581] Include framework key in the form data response.
roguenet Nov 10, 2025
db0008c
[TM-2581] Fix some compile errors.
roguenet Nov 10, 2025
89cc435
[TM-2581] Strongly type status / updateRequestStatus and get feedback…
roguenet Nov 10, 2025
70b1cb2
[TM-2581] Get feedback and answers from the current update request if…
roguenet Nov 10, 2025
8f56017
[TM-2581] Implement an admin-only update requests endpoint.
roguenet Nov 10, 2025
e11ff9e
[TM-2581] Update snake case properties in update request content.
roguenet Nov 11, 2025
d4bb32b
[TM-2581] Fix build error.
roguenet Nov 11, 2025
dde6eef
[TM-2624] Change this endpoint to a singular name since this is a sin…
roguenet Nov 11, 2025
d963796
[TM-2624] Define update entity answers endpoint and new updateAnswers…
roguenet Nov 11, 2025
e6afa0e
[TM-2624] Implement tree species relation sync with an upsert.
roguenet Nov 12, 2025
141fdee
[TM-2624] Upsert doesn't quite work how I need, so back to individual…
roguenet Nov 12, 2025
1db772c
[TM-2624] Further improvements to the collector pattern.
roguenet Nov 12, 2025
aa4f50f
[TM-2624] Unify the single / collection collectors.
roguenet Nov 13, 2025
61cfb3b
Merge pull request #399 from wri/feat/TM-2581-view-form-answers
roguenet Nov 13, 2025
81fc731
[TM-2624] Most resource linked fields can use the default implementat…
roguenet Nov 13, 2025
55de300
[TM-2624] Implemented demographics sync.
roguenet Nov 13, 2025
c3df75d
[TM-2624] Implement sync for disturbance report entries.
roguenet Nov 14, 2025
6229a7e
[TM-2624] Implement sync for funding types
roguenet Nov 14, 2025
aa2cef1
[TM-2624] Implement sync for financial indicators.
roguenet Nov 14, 2025
ce84318
[TM-2624] Clean up the default sync implementation.
roguenet Nov 14, 2025
0fa389c
[TM-2624] Resolve some build errors.
roguenet Nov 14, 2025
94f9c08
[TM-2624] Fix runtime errors.
roguenet Nov 15, 2025
596e328
[TM-2624] Allow undefined for the entry dto.
roguenet Nov 15, 2025
b1ba755
[TM-2624] Fix localization key entity name.
roguenet Nov 15, 2025
adaacf6
[TM-2625] Implement update request status state after transition hooks.
roguenet Nov 17, 2025
e4383bc
[TM-2625] Implement audit status creation in the update request flow.
roguenet Nov 18, 2025
9bcb8ea
[TM-2625] Implement the project manager update email.
roguenet Nov 18, 2025
e67f9d0
Merge pull request #408 from wri/feat/TM-2624-update-form-answers
roguenet Nov 18, 2025
91d07b2
[TM-2626] Clean up disturbance report creation.
roguenet Nov 18, 2025
c2ea582
[TM-2626] Clean up access to the sequelize instance.
roguenet Nov 18, 2025
4aaf678
[TM-2626] Authorize creation of disturbance reports.
roguenet Nov 18, 2025
3bc6c08
[TM-2626] Move the authorized creation pattern to the base entity pro…
roguenet Nov 18, 2025
9009a96
[TM-2626] Support site and nursery creation via entities controller.
roguenet Nov 18, 2025
76fd25b
[TM-2626] Implement the "create blank project" pattern.
roguenet Nov 18, 2025
5187c44
[TM-2626] Implement project creation in the entities controller.
roguenet Nov 18, 2025
cf92d65
[TM-2626] Provide org UUID in all entity full DTOs
roguenet Nov 19, 2025
e9a38d5
[TM-2626] Implement update request update.
roguenet Nov 19, 2025
61a4e8a
[TM-2626] Make sure to save the model after applying answers.
roguenet Nov 19, 2025
8c3e522
Merge pull request #410 from wri/feat/TM-2625-feedback-approval
roguenet Nov 19, 2025
83e4980
[TM-2626] Fold the file upload service into the media service.
roguenet Nov 20, 2025
55dc8e0
[TM-2626] Support media duplication.
roguenet Nov 21, 2025
c43357d
[TM-2626] Implement post approval processing for financial indicator …
roguenet Nov 21, 2025
4eef478
[TM-2626] Implement post approval processing for disturbance reports.
roguenet Nov 21, 2025
b1146b0
[TM-2626] Fix type error.
roguenet Nov 21, 2025
6f9c2fe
[TM-2626] Remove hidden demographics when the entity is approved.
roguenet Nov 21, 2025
64ccfcd
[TM-2626] Make the hooks on status save return a promise to let all p…
roguenet Nov 21, 2025
c95544f
[TM-2626] Implement calculation of report progress.
roguenet Nov 24, 2025
8aaf27a
[TM-2626] Implement cleanup of data in hidden questions.
roguenet Nov 24, 2025
e701a89
[TM-2626] Unify common and database lib build configs with the app b…
roguenet Nov 24, 2025
bf4dfca
[TM-2626] Add a scope to FormQuestion based on the form UUID.
roguenet Nov 25, 2025
7547719
[TM-2626] Event processors can't be request scoped, so they also can'…
roguenet Nov 25, 2025
b8bfda8
[TM-2626] Record an audit status when the user closes the form
roguenet Nov 25, 2025
0300dbb
[TM-2626] Provide a better way to access the currently authenticated …
roguenet Nov 25, 2025
5b17471
[TM-2626] Get all existing tests passing.
roguenet Nov 26, 2025
700cc41
[TM-2626] Move the mockUserId and mockPermissions utilities to the te…
roguenet Nov 26, 2025
ef28fe0
[TM-2626] Specs for the two new controllers.
roguenet Nov 26, 2025
75e0b07
[TM-2626] Fully spec the media service.
roguenet Nov 26, 2025
daa4eac
[TM-2626] Fully spec storeEntityAnswers in form data service.
roguenet Nov 27, 2025
dd10ebc
[TM-2626] Specs for getDtoForEntity and getAnswers.
roguenet Dec 1, 2025
834467e
[TM-2626] Some driveby cleanup in the bounding box service and projec…
roguenet Dec 2, 2025
467df88
[TM-2626] Specs for field and file collectors.
roguenet Dec 2, 2025
5c2ab2e
[TM-2626] Specs for field and file collectors.
roguenet Dec 2, 2025
928fbf3
[TM-2626] linked field definitions are required to reference a define…
roguenet Dec 2, 2025
fc4fc80
[TM-2626] Implement and test virtual fields.
roguenet Dec 3, 2025
2bb19c6
[TM-2626] Move the linked answer collector to common so it can be use…
roguenet Dec 3, 2025
a55e978
[TM-2626] Specs for demographics collector.
roguenet Dec 3, 2025
a5ffed8
[TM-2626] Specs for disturbance report entries collector.
roguenet Dec 3, 2025
39a7cdd
[TM-2626] Specs for all non-custom collectors.
roguenet Dec 4, 2025
e03b1f0
[TM-2626] Specs for leaderships collector.
roguenet Dec 4, 2025
b03cdd1
[TM-2626] specs for financial indicator and funding type collectors.
roguenet Dec 4, 2025
a3d5231
[TM-2626] Fix up some broken specs.
roguenet Dec 4, 2025
88d5e62
[TM-2626] Specs for ownership stake collector.
roguenet Dec 4, 2025
51ed834
[TM-2626] All tests passing.
roguenet Dec 4, 2025
d385c3c
[TM-2626] Specs for project / site / nursery creation.
roguenet Dec 5, 2025
4a764ae
[TM-2626] Coverage for update request scenarios in entity status upda…
roguenet Dec 5, 2025
163d1d0
[TM-2626] Soft delete all hidden relations when an entity is approved.
roguenet Dec 5, 2025
ddb01ae
[TM-2626] Specs for the entity approval processors.
roguenet Dec 5, 2025
6583818
[TM-2652] Create a form submission policy.
roguenet Dec 5, 2025
b0d10c4
[TM-2652] Wire up initial application GET.
roguenet Dec 6, 2025
bca1a69
[TM-2652] Form submission get and application current submission side…
roguenet Dec 7, 2025
0e62137
[TM-2652] Implement funding programme get and index endpoints.
roguenet Dec 8, 2025
476984b
[TM-2652] Add stages to the funding programme DTO as embedded data.
roguenet Dec 8, 2025
3b64aea
[TM-2652] Add funding programme sideload to the application get endpo…
roguenet Dec 8, 2025
a3bc231
[TM-2652] Add index info to the funding programme index
roguenet Dec 8, 2025
eaa39c8
[TM-2652] Simplify some service paths.
roguenet Dec 9, 2025
8632be5
[TM-2652] Add a minimal orgs index endpoint.
roguenet Dec 9, 2025
3c9872d
[TM-2652] Support current submission status as a filter field on appl…
roguenet Dec 9, 2025
2901919
[TM-2652] Support all necessary filters and sorting columns for appli…
roguenet Dec 9, 2025
0caba75
[TM-2652] Support search in the applications index.
roguenet Dec 9, 2025
778e677
[TM-2652] For non-admins limit applications to those relevant to the …
roguenet Dec 9, 2025
8eec812
[TM-2652] Document the submission get endpoint.
roguenet Dec 9, 2025
61ce66d
[TM-2652] Include the stage name in submission DTOs.
roguenet Dec 9, 2025
5df6b1c
[TM-2652] Include uuid and status for all application submissions.
roguenet Dec 10, 2025
5c2bdfa
[TM-2652] Include stage name on the submission reference dto.
roguenet Dec 10, 2025
c2f1d2f
[TM-2652] Include create / update timestamps.
roguenet Dec 10, 2025
51e667b
[TM-2652] Fix pagination.
roguenet Dec 10, 2025
4576da5
Merge pull request #444 from wri/feat/TM-2626-create-entity
roguenet Dec 10, 2025
ddbe404
[TM-2652] Include timestamps and updated by username on submission DTOs.
roguenet Dec 10, 2025
e399cbc
[TM-2652] Include stage UUIDs in DTO responses
roguenet Dec 11, 2025
db12516
[TM-2652] Add support for form submissions to the audit statuses table.
roguenet Dec 11, 2025
e4c46ee
[TM-2652] Add audit model.
roguenet Dec 11, 2025
226d9ad
[TM-2652] Calculate application history from submission audits on the…
roguenet Dec 11, 2025
2afa832
[TM-2652] Make the funding programmes index available to PDs.
roguenet Dec 12, 2025
c6eb10e
[TM-2652] Test coverage for new controllers and service methods.
roguenet Dec 12, 2025
93d6997
Merge pull request #451 from wri/feat/TM-2652-view-submission
roguenet Dec 15, 2025
1704b40
[TM-2655] Implement application delete endpoint.
roguenet Dec 15, 2025
bbbd850
[TM-2655] Implement funding programme delete in v3.
roguenet Dec 15, 2025
350df4b
[TM-2655] Implement create funding programme endpoint.
roguenet Dec 16, 2025
bbc6a2c
[TM-2655] Implement update funding programme endpoint.
roguenet Dec 16, 2025
a891b1d
[TM-2655] Implement submission creation in v3.
roguenet Dec 16, 2025
0d39109
[TM-2655] Address some lingering spec problems.
roguenet Dec 16, 2025
20968d3
Merge pull request #456 from wri/feat/TM-2655-submission-creation
roguenet Dec 18, 2025
74cb54f
[TM-2653] Implement submission update endpoint.
roguenet Dec 18, 2025
8093e99
[TM-2653] Implement status updates in form submission controller update.
roguenet Dec 18, 2025
2fa7857
[TM-2653] Handle feedback emails when admin statuses are set on form …
roguenet Dec 19, 2025
71a0827
[TM-2653] Implement the next stage flow for submission creation.
roguenet Dec 20, 2025
77fc91e
[TM-2653] Be a little smarter with updated audit statuses.
roguenet Dec 20, 2025
2f9b04f
Merge pull request #462 from wri/feat/TM-2653-submission-update
roguenet Dec 22, 2025
f60ae5c
[TM-2411] Merge remote-tracking branch 'origin/staging' into epic/TM-…
roguenet Dec 22, 2025
180342d
[TM-2411] The convension for hybrid IDs is to use | instead of : as t…
roguenet Dec 22, 2025
28d402c
[TM-2411] Update requests and form data submissions use a non-UUID id.
roguenet Dec 23, 2025
d22a6b7
[TM-2411] don't try to fetch the project report name (column doesn't …
roguenet Dec 23, 2025
eb5b0ec
[TM-2411] Fix hybrid key for update requests.
roguenet Dec 23, 2025
6a1448f
[TM-2411] Since the update request is still active we have to go stra…
roguenet Dec 23, 2025
4736466
[TM-2411] Fix the update form submission path.
roguenet Dec 23, 2025
7fbfb1f
[TM-2411] Include documentation in financial indicators answers.
roguenet Dec 24, 2025
3c3c36e
[TM-2411] Fix sync of start month and currency.
roguenet Dec 24, 2025
42605b9
[TM-2411] Include CTA for submission approved email.
roguenet Dec 24, 2025
58ba44c
[TM-2411] Merge remote-tracking branch 'origin/staging' into epic/TM-…
roguenet Dec 24, 2025
9f8e583
[TM-2411] Try removing the trailing slash from v3 services so the pro…
roguenet Dec 24, 2025
377896a
[TM-2411] You can't GET on a root {namespace}/v3 path behind the API …
roguenet Dec 24, 2025
da563b3
[TM-2411] Fix index paths.
roguenet Dec 24, 2025
ca3330f
[TM-2411] Merge remote-tracking branch 'origin/staging' into epic/TM-…
roguenet Dec 26, 2025
463ce70
[TM-2411] This approval processing was implemented at the entity stat…
roguenet Dec 26, 2025
fdef057
[TM-2411] Merge remote-tracking branch 'origin/staging' into epic/TM-…
roguenet Dec 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { Project } from "@terramatch-microservices/database/entities";
import { mapLandscapeCodesToNames } from "@terramatch-microservices/database/constants";
import { InternalServerErrorException } from "@nestjs/common";

export class DashboardProjectsQueryBuilder<T extends Model<T> = Project> {
export class DashboardProjectsQueryBuilder<T extends Model = Project> {
protected findOptions: FindOptions<Attributes<T>> = {
order: ["id"]
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ describe("TotalSectionHeaderService - filters", () => {

it("should apply basic filters in DashboardProjectsQueryBuilder", async () => {
const filters: DashboardQueryDto = {
organisationType: ["org-uuid-1"],
organisationType: ["non-profit-organization"],
country: "BJ",
programmes: ["terrafund"],
projectUuid: "uuid",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,4 @@ describe("DashboardEntityProcessor", () => {
expect(result[1].id).toBe("uuid-2");
expect(result[1].dto).toBeInstanceOf(MockLightDto);
});

it("should process multiple models into full DTOs", async () => {
const models: TestModel[] = [{ uuid: "uuid-1" }, { uuid: "uuid-2" }];

const result = await processor.getFullDtos(models);

expect(result).toHaveLength(2);
expect(result[0].id).toBe("uuid-1");
expect(result[0].dto).toBeInstanceOf(MockFullDto);
expect(result[1].id).toBe("uuid-2");
expect(result[1].dto).toBeInstanceOf(MockFullDto);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,6 @@ export abstract class DashboardEntityProcessor<ModelType, LightDto, FullDto> {
return results;
}

async getFullDtos(models: ModelType[]): Promise<DtoResult<FullDto>[]> {
const results: DtoResult<FullDto>[] = [];
for (const model of models) {
results.push(await this.getFullDto(model));
}
return results;
}

protected getCacheService(): CacheService {
return this.cacheService;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,18 @@ import { CacheService } from "./dto/cache.service";
import { DashboardQueryDto } from "./dto/dashboard-query.dto";
import { serialize } from "@terramatch-microservices/common/util/testing";

jest.mock("@terramatch-microservices/database/entities", () => ({
DelayedJob: {
create: jest.fn().mockResolvedValue({
id: 1,
uuid: "fake-uuid"
})
}
}));
jest.mock("@terramatch-microservices/database/entities", () => {
const original = jest.requireActual("@terramatch-microservices/database/entities");
return {
...original,
DelayedJob: {
create: jest.fn().mockResolvedValue({
id: 1,
uuid: "fake-uuid"
})
}
};
});

describe("TotalSectionHeaderController", () => {
let controller: TotalSectionHeaderController;
Expand Down
22 changes: 16 additions & 6 deletions apps/entity-service/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import { EntitiesController } from "./entities/entities.controller";
import { EntityAssociationsController } from "./entities/entity-associations.controller";
import { HealthModule } from "@terramatch-microservices/common/health/health.module";
import { FilesController } from "./entities/files.controller";
import { FileUploadService } from "./file/file-upload.service";
import { ProjectPitchesController } from "./entities/project-pitches.controller";
import { ProjectPitchService } from "./entities/project-pitch.service";
import { TasksController } from "./entities/tasks.controller";
Expand All @@ -24,6 +23,12 @@ import { OptionLabelsController } from "./forms/option-labels.controller";
import { LinkedFieldsController } from "./forms/linked-fields.controller";
import { FormsController } from "./forms/forms.controller";
import { FormsService } from "./forms/forms.service";
import { FormDataController } from "./entities/form-data.controller";
import { FormDataService } from "./entities/form-data.service";
import { UpdateRequestsController } from "./entities/update-requests.controller";
import { ApplicationsController } from "./applications/applications.controller";
import { SubmissionsController } from "./forms/submissions.controller";
import { FundingProgrammesController } from "./fundingProgrammes/funding-programmes.controller";

@Module({
imports: [SentryModule.forRoot(), CommonModule, HealthModule],
Expand All @@ -39,10 +44,15 @@ import { FormsService } from "./forms/forms.service";
DemographicsController,
DisturbancesController,
EntitiesController,
FormDataController, // must be before entity association controller.
UpdateRequestsController, // must be before entity association controller.
EntityAssociationsController,
OptionLabelsController,
LinkedFieldsController,
FormsController
OptionLabelsController, // must be before forms controller
LinkedFieldsController, // must be before forms controller
SubmissionsController, // must be before forms controller
FormsController,
ApplicationsController,
FundingProgrammesController
],
providers: [
{
Expand All @@ -51,13 +61,13 @@ import { FormsService } from "./forms/forms.service";
},
EntitiesService,
TreeService,
FileUploadService,
ProjectPitchService,
ImpactStoryService,
TasksService,
DemographicService,
DisturbanceService,
FormsService
FormsService,
FormDataService
]
})
export class AppModule {}
Loading
Loading