Skip to content

Commit

Permalink
feat(api): add http controllet to get dataViz collection
Browse files Browse the repository at this point in the history
  • Loading branch information
gcarra committed Jan 28, 2025
1 parent da36f5c commit 3ccfa4d
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@ import AmountsVsProgrammeRegionAdapter from "./amountsVsProgrammeRegion.adapter"

export class AmountsVsProgrammeRegionPort extends MongoPort<amountsVsProgrammeRegionDbo> {
collectionName = "dv-montantVsProgrammeRegion";

public async createIndexes(): Promise<void> {
await this.collection.createIndex({ regionAttachementComptable: 1 });
await this.collection.createIndex({ programme: 1 });
await this.collection.createIndex({ exerciceBudgetaire: 1 });
await this.collection.createIndex({ regionAttachementComptable: 1, programme: 1, exerciceBudgetaire: 1 }, { unique: true });
await this.collection.createIndex(
{ regionAttachementComptable: 1, programme: 1, exerciceBudgetaire: 1 },
{ unique: true },
);
}

public async hasBeenInitialized() {
Expand All @@ -25,29 +28,34 @@ export class AmountsVsProgrammeRegionPort extends MongoPort<amountsVsProgrammeRe
public upsertOne(entity: amountsVsProgrammeRegionEntity) {
const updateDbo = AmountsVsProgrammeRegionAdapter.toDbo(entity);
const { _id, ...DboWithoutId } = updateDbo;
return this.collection.updateOne({
regionAttachementComptable: updateDbo.regionAttachementComptable,
programme: updateDbo.programme,
exerciceBudgetaire: updateDbo.exerciceBudgetaire
}, { $set: DboWithoutId }, { upsert: true });
return this.collection.updateOne(
{
regionAttachementComptable: updateDbo.regionAttachementComptable,
programme: updateDbo.programme,
exerciceBudgetaire: updateDbo.exerciceBudgetaire,
},
{ $set: DboWithoutId },
{ upsert: true },
);
}

public insertMany(entities: amountsVsProgrammeRegionEntity[]) {
return this.collection.insertMany(entities.map(entity => AmountsVsProgrammeRegionAdapter.toDbo(entity), { ordered: false }));
return this.collection.insertMany(
entities.map(entity => AmountsVsProgrammeRegionAdapter.toDbo(entity), { ordered: false }),
);
}

public upsertMany(entities: amountsVsProgrammeRegionEntity[]) {

const bulkWriteArray = entities.map(entity => {
const updateDbo = AmountsVsProgrammeRegionAdapter.toDbo(entity);
const { _id, ...DboWithoutId } = updateDbo;
return {
updateOne: {
filter: {
filter: {
regionAttachementComptable: updateDbo.regionAttachementComptable,
programme: updateDbo.programme,
exerciceBudgetaire: updateDbo.exerciceBudgetaire
},
exerciceBudgetaire: updateDbo.exerciceBudgetaire,
},
update: { $set: DboWithoutId },
upsert: true,
},
Expand All @@ -57,15 +65,14 @@ export class AmountsVsProgrammeRegionPort extends MongoPort<amountsVsProgrammeRe
return this.collection.bulkWrite(bulkWriteArray, { ordered: false });
}

public async findAll() {
return (await this.collection.find({})).toArray();
public findAll() {
return this.collection.find({}).toArray();
}

public async deleteAll() {
await this.collection.deleteMany({});
}

}

const amountsVsProgrammeRegionPort = new AmountsVsProgrammeRegionPort();
export default amountsVsProgrammeRegionPort;
export default amountsVsProgrammeRegionPort;
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import {
AMOUNTS_VS_PROGRAMME_REGION_DBOS,
AMOUNTS_VS_PROGRAMME_REGION_ENTITIES,
} from "../../../modules/dataViz/amountsVsProgrammeRegion/__fixtures__/amountsVSProgrammeRegion.fixture";
import amountsVsProgrammeRegionService from "../../../modules/dataViz/amountsVsProgrammeRegion/amountsVsProgrammeRegion.service";
import { AmountsVsProgrammeRegionHttp } from "./amountsVsProgrammeRegion.http";

const controller = new AmountsVsProgrammeRegionHttp();

const AMOUNTS_VS_PROGRAMME_REGION_DATA = AMOUNTS_VS_PROGRAMME_REGION_DBOS.map(({ _id, ...rest }) => rest);

describe("AmountsVsProgrammeRegionHttp", () => {
let getAmountsVsProgrammeRegionSpy: jest.SpyInstance;
beforeAll(() => {
getAmountsVsProgrammeRegionSpy = jest
.spyOn(amountsVsProgrammeRegionService, "getAmountsVsProgrammeRegion")
.mockResolvedValue(AMOUNTS_VS_PROGRAMME_REGION_DATA);
});

afterAll(() => {
getAmountsVsProgrammeRegionSpy.mockRestore();
});

describe("getAmountsVsProgrammeRegion", () => {
it("should call service", async () => {
await controller.getAmountsVsProgrammeRegion();
expect(getAmountsVsProgrammeRegionSpy).toHaveBeenCalledTimes(1);
});

it("should return data", async () => {
const expected = { montantVsProgrammeRegionData: AMOUNTS_VS_PROGRAMME_REGION_ENTITIES };
const actual = await controller.getAmountsVsProgrammeRegion();
expect(actual).toEqual(expected);
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { Controller, Get, Route, Security, Response, Tags } from "tsoa";
import { GetMontantsVsProgrammeRegionResponseDto } from "dto";
import { HttpErrorInterface } from "../../../shared/errors/httpErrors/HttpError";

import amountsVsProgrammeRegionService from "../../../modules/dataViz/amountsVsProgrammeRegion/amountsVsProgrammeRegion.service";

// ici je dois mettre plutôt /dataviz/amount-vs-programme-region ?
@Route("montant-vs-programme-region")
@Security("jwt")
@Tags("dv-montantVsProgrammeRegion Controller")
export class AmountsVsProgrammeRegionHttp extends Controller {
/**
* Get information about dv-montantVsProgrammeRegion collection
* No parameters
*/

@Get("/")
@Response<HttpErrorInterface>("404")
public async getAmountsVsProgrammeRegion(): Promise<GetMontantsVsProgrammeRegionResponseDto> {
const montantVsProgrammeRegionData = await amountsVsProgrammeRegionService.getAmountsVsProgrammeRegion();
return { montantVsProgrammeRegionData };
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ export class AmountsVsProgrammeRegionService {
public isCollectionInitialized() {
return amountsVsProgrammeRegionPort.hasBeenInitialized();
}

public async getAmountsVsProgrammeRegion() {
const data = await amountsVsProgrammeRegionPort.findAll();
return data.map(({ _id, ...rest }) => rest);
}
}

const amountsVsProgrammeRegionService = new AmountsVsProgrammeRegionService();
Expand Down

0 comments on commit 3ccfa4d

Please sign in to comment.