-
Notifications
You must be signed in to change notification settings - Fork 58
/
Copy pathcomplementary-certification-badge-repository.js
63 lines (54 loc) · 2.37 KB
/
complementary-certification-badge-repository.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import { knex } from '../../../../../db/knex-database-connection.js';
import { Badge } from '../../../../evaluation/domain/models/Badge.js';
import { DomainTransaction } from '../../../../shared/domain/DomainTransaction.js';
const getAllIdsByTargetProfileId = async function ({ targetProfileId }) {
const knexConn = DomainTransaction.getConnection();
const complementaryCertificationBadgesIds = await knexConn('badges')
.select('complementary-certification-badges')
.leftJoin('complementary-certification-badges', 'complementary-certification-badges.badgeId', 'badges.id')
.leftJoin('target-profiles', 'target-profiles.id', 'badges.targetProfileId')
.where({ targetProfileId })
.andWhere('complementary-certification-badges.detachedAt', null)
.pluck('complementary-certification-badges.id');
return complementaryCertificationBadgesIds;
};
const detachByIds = async function ({ complementaryCertificationBadgeIds }) {
const knexConn = DomainTransaction.getConnection();
const now = new Date();
return knexConn('complementary-certification-badges')
.whereIn('id', complementaryCertificationBadgeIds)
.update({ detachedAt: now });
};
const attach = async function ({ complementaryCertificationBadges }) {
const knexConn = DomainTransaction.getConnection();
const createdAt = new Date();
for (const complementaryCertificationBadge of complementaryCertificationBadges) {
await knexConn('complementary-certification-badges').insert({
...complementaryCertificationBadge,
createdAt,
});
}
};
const findAttachableBadgesByIds = async function ({ ids }) {
const badges = await knex
.from('badges')
.whereIn('badges.id', ids)
.andWhere('badges.isCertifiable', true)
.whereNotExists(
knex
.select(1)
.from('complementary-certification-badges')
.whereRaw('"complementary-certification-badges"."badgeId" = "badges"."id"'),
);
return badges.map((badge) => {
return new Badge(badge);
});
};
const isRelatedToCertification = async function (badgeId) {
const knexConn = DomainTransaction.getConnection();
const complementaryCertificationBadge = await knexConn('complementary-certification-badges')
.where({ badgeId })
.first();
return !!complementaryCertificationBadge;
};
export { attach, detachByIds, findAttachableBadgesByIds, getAllIdsByTargetProfileId, isRelatedToCertification };