Skip to content

Commit

Permalink
feat(structures): Can not add identifier to a structure if a same typ…
Browse files Browse the repository at this point in the history
…e and value already exist, see #115
  • Loading branch information
annelhote committed Oct 2, 2024
1 parent 77ad799 commit a45b2f0
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 2 deletions.
21 changes: 20 additions & 1 deletion src/api/structures/__tests__/identifiers.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import { structures as resource, identifiers as subresource } from '../../resources';
import {
structures as resource,
identifiers as subresource,
} from '../../resources';

let authorization;
let id;
Expand Down Expand Up @@ -77,6 +80,22 @@ describe('API > structures > identifiers > create', () => {
.send(rest)
.expect(400);
});

it('should return 204 if an identifier with same type and same value already exists', async () => {
const paylod = { type: 'siret', value: '12345678912346' };

await global.superapp
.post(`/${resource}/${resourceId}/${subresource}`)
.set('Authorization', authorization)
.send(paylod)
.expect(201);

await global.superapp
.post(`/${resource}/${resourceId}/${subresource}`)
.set('Authorization', authorization)
.send(paylod)
.expect(204);
});
});

describe('API > structures > identifiers > update', () => {
Expand Down
8 changes: 8 additions & 0 deletions src/api/structures/identifiers/identifiers.middlewares.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { identifiersRepository } from '../../commons/repositories';

export const validateStructureIdentifierCreatePayload = async (req, res, next) => {
const { type, value } = req.body;
const { resourceId } = req.params;
const check = await identifiersRepository.findOne({ resourceId, type, value });
return check ? res.status(204).json() : next();
};
4 changes: 3 additions & 1 deletion src/api/structures/identifiers/identifiers.routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,16 @@ import { saveInElastic, saveInStore } from '../../commons/middlewares/event.midd
import { readQuery, readQueryWithLookup } from '../../commons/queries/identifiers.query';
import elasticQuery from '../../commons/queries/structures.elastic';
import { identifiersRepository as repository, structuresRepository } from '../../commons/repositories';
import { identifiers as subresource, structures as resource } from '../../resources';
import { structures as resource, identifiers as subresource } from '../../resources';
import { validateStructureIdentifierCreatePayload } from './identifiers.middlewares';

const router = new express.Router();

router.route(`/${resource}/:resourceId/${subresource}`)
.get(controllers.list(repository, readQuery))
.post([
createContext,
validateStructureIdentifierCreatePayload,
setGeneratedInternalIdInContext(subresource),
controllers.create(repository, readQueryWithLookup),
saveInStore(subresource),
Expand Down
2 changes: 2 additions & 0 deletions src/openapi/paths/structures/identifiers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ collectionMethods:
application/json:
schema:
$ref: '../../api.yml#/components/schemas/StructureIdentifier'
'204':
description: 'No content'
'400':
$ref: '../../api.yml#/components/responses/BadRequest'
'401':
Expand Down

0 comments on commit a45b2f0

Please sign in to comment.