Skip to content

Commit e58da4b

Browse files
committed
graphql: Added graphql support for deworming
1 parent cdbdc72 commit e58da4b

File tree

9 files changed

+138
-28
lines changed

9 files changed

+138
-28
lines changed

api/src/graphql/resolvers.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,23 @@ const {
1010
query: animalQueries,
1111
mutation: animalMutation,
1212
} = require('./resolvers/animal/index');
13+
const {
14+
query: dewormingQueries,
15+
mutation: dewormingMutation,
16+
} = require('./resolvers/deworming/index');
1317

1418
const resolvers = {
1519
Query: {
1620
hello: () => 'Hello world!',
1721

1822
...userQueries,
1923
...animalQueries,
24+
...dewormingQueries,
2025
},
2126
Mutation: {
2227
...userMutations,
2328
...animalMutation,
29+
...dewormingMutation,
2430
},
2531

2632
NameType,
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
const {
2+
getAllDeworming,
3+
getDeworming,
4+
createDeworming,
5+
updateDeworming,
6+
deleteDeworming,
7+
} = require('../../../modules/deworming/deworming.service');
8+
const {
9+
validateGraphQLSession,
10+
} = require('../../../middlewares/authentication');
11+
12+
const getAll = async (_, { query = {} }, context) => {
13+
const user = await validateGraphQLSession(context.req);
14+
15+
return getAllDeworming(user.id, query);
16+
};
17+
18+
const getById = async (_, { id: dewormingId }, context) => {
19+
const user = await validateGraphQLSession(context.req);
20+
21+
return getDeworming(user.id, dewormingId);
22+
};
23+
24+
const create = async (_, { input }, context) => {
25+
const user = await validateGraphQLSession(context.req);
26+
27+
return createDeworming(user.id, input);
28+
};
29+
30+
const update = async (_, { id: dewormingId, changes }, context) => {
31+
const user = await validateGraphQLSession(context.req);
32+
33+
return updateDeworming(user.id, dewormingId, changes);
34+
};
35+
36+
const destroy = async (_, { id: dewormingId }, context) => {
37+
const user = await validateGraphQLSession(context.req);
38+
39+
return deleteDeworming(user.id, dewormingId);
40+
};
41+
42+
module.exports = {
43+
getAll,
44+
getById,
45+
create,
46+
update,
47+
destroy,
48+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const {
2+
getAll: getAllDewormings,
3+
getById: getDewormingById,
4+
create: createDeworming,
5+
update: updateDeworming,
6+
destroy: deleteDeworming,
7+
} = require('./deworming.resolvers');
8+
9+
const query = {
10+
dewormings: getAllDewormings,
11+
deworming: getDewormingById,
12+
};
13+
14+
const mutation = {
15+
createDeworming,
16+
updateDeworming,
17+
deleteDeworming,
18+
};
19+
20+
module.exports = { query, mutation };

api/src/graphql/schemas/animal.schema.graphql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ type Animal {
2323
registeredAt: Date!
2424
}
2525

26+
type AnimalSummaryResponse {
27+
id: UUID!
28+
code: String!
29+
}
30+
2631
input AnimalFilter {
2732
animalId: ID
2833
code: String
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
type Query {
2+
dewormings(query: queryDeworming): [Deworming!]!
3+
deworming(id: UUID!): Deworming!
4+
}
5+
6+
type Mutation {
7+
createDeworming(input: CreateDeworming!): Deworming!
8+
updateDeworming(id: UUID!, changes: UpdateDeworming!): Deworming!
9+
deleteDeworming(id: UUID!): Int!
10+
}
11+
12+
type Deworming {
13+
id: UUID!
14+
dewormer: String!
15+
description: String
16+
animal: AnimalSummaryResponse!
17+
registeredAt: Date!
18+
}
19+
20+
input queryDeworming {
21+
animalId: UUID
22+
dewormer: String
23+
limit: Int
24+
offset: Int
25+
}
26+
27+
input CreateDeworming {
28+
dewormer: String!
29+
description: String
30+
animalId: UUID!
31+
}
32+
33+
input UpdateDeworming {
34+
dewormer: String
35+
description: String
36+
}

api/src/modules/deworming/deworming.controllers.js

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
const Boom = require('@hapi/boom');
2-
31
const dewormingService = require('./deworming.service');
42

53
const getAllDeworming = async (req, res, next) => {
@@ -26,18 +24,9 @@ const createDeworming = async (req, res, next) => {
2624
animalId,
2725
});
2826

29-
if (!newDeworming?.id) {
30-
throw Boom.badRequest('Create animal operation returns null');
31-
}
32-
33-
const formattedDewormingData = await dewormingService.getDeworming(
34-
userId,
35-
newDeworming.id,
36-
);
37-
3827
res.status(201).json({
3928
message: 'Deworming was successfully created',
40-
deworming: formattedDewormingData,
29+
deworming: newDeworming,
4130
});
4231
} catch (error) {
4332
next(error);
@@ -55,17 +44,10 @@ const updateDeworming = async (req, res, next) => {
5544
dewormingId,
5645
dewormingData,
5746
);
58-
if (!updatedDeworming?.id)
59-
throw Boom.badRequest('Update animal operation returns null');
60-
61-
const formattedDewormingData = await dewormingService.getDeworming(
62-
userId,
63-
updatedDeworming.id,
64-
);
6547

6648
res.status(200).json({
6749
message: 'Deworming was successfully updated',
68-
deworming: formattedDewormingData,
50+
deworming: updatedDeworming,
6951
});
7052
} catch (error) {
7153
next(error);

api/src/modules/deworming/deworming.repository.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
const sequelize = require('../../store/db/sequelize');
22

3-
const findAllDewormings = async (userId, filters) => {
3+
const findAllDewormings = async (userId, { where, limit, offset }) => {
44
return sequelize.models.Deworming.findAll({
5-
where: filters,
5+
where,
6+
limit,
7+
offset,
68
include: [
79
{
810
model: sequelize.models.Animal,

api/src/modules/deworming/deworming.service.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,18 @@ const formatDeworming = (dewormer) => {
2020
};
2121

2222
const buildFilters = (query) => {
23-
const { dewormer, animalId } = query;
23+
const { dewormer, animalId, limit = 10, offset = 0 } = query;
2424

25-
return {
25+
const where = {
2626
...(dewormer && { dewormer: { [Op.iLike]: `%${dewormer}%` } }),
2727
...(animalId && { animalId }),
2828
};
29+
30+
return {
31+
where,
32+
limit: limit ?? parseInt(limit, 10),
33+
offset: offset ?? parseInt(offset, 10),
34+
};
2935
};
3036

3137
const getAllDeworming = async (userId, query) => {
@@ -80,7 +86,7 @@ const createDeworming = async (userId, dewormingData) => {
8086
throw Boom.badRequest('Something went wrong creating the deworming');
8187
}
8288

83-
return newdeworming;
89+
return getDeworming(userId, newdeworming.id);
8490
};
8591

8692
const updateDeworming = async (userId, dewormingId, dewormingData) => {
@@ -110,7 +116,7 @@ const updateDeworming = async (userId, dewormingId, dewormingData) => {
110116
if (updatedRows === 0) {
111117
throw Boom.badRequest('Something went wrong creating the deworming');
112118
}
113-
return updatedDeworming;
119+
return getDeworming(userId, updatedDeworming.id);
114120
};
115121

116122
const deleteDeworming = async (userId, dewormingId) => {

tests/unit/deworming-service.test.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ describe('Deworming service', () => {
9898
expect(dewormingRepository.findAllDewormings).toHaveBeenCalledTimes(1);
9999
expect(dewormingRepository.findAllDewormings).toHaveBeenCalledWith(
100100
userId,
101-
{ animalId: query.animalId },
101+
{ where: { animalId: query.animalId }, limit: 10, offset: 0 },
102102
);
103103
});
104104

@@ -193,6 +193,10 @@ describe('Deworming service', () => {
193193
id: fakeUuid,
194194
});
195195
animalRepository.findOne.mockResolvedValue(animal1());
196+
dewormingRepository.findOne.mockResolvedValueOnce({
197+
...dbReponse,
198+
id: fakeUuid,
199+
});
196200

197201
const result = await createDeworming(userId, dewormingData);
198202

@@ -272,8 +276,9 @@ describe('Deworming service', () => {
272276
});
273277

274278
test('It should return an updated deworming', async () => {
275-
dewormingRepository.findOne.mockResolvedValue(deworming1());
279+
dewormingRepository.findOne.mockResolvedValueOnce(deworming1());
276280
dewormingRepository.update.mockResolvedValue([1, [dbReponse]]);
281+
dewormingRepository.findOne.mockResolvedValueOnce(dbReponse);
277282

278283
const result = await updateDeworming(userId, dewormingId, dewormingData);
279284

0 commit comments

Comments
 (0)