-
Notifications
You must be signed in to change notification settings - Fork 56
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[TECH] Remove Bookshelf from membership repository
- Loading branch information
Showing
3 changed files
with
172 additions
and
116 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
52 changes: 41 additions & 11 deletions
52
api/src/shared/infrastructure/repositories/membership-repository.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,46 @@ | ||
import { BookshelfMembership } from '../../../../src/shared/infrastructure/orm-models/Membership.js'; | ||
import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; | ||
import { DomainTransaction } from '../../domain/DomainTransaction.js'; | ||
import { Membership, Organization, User } from '../../domain/models/index.js'; | ||
|
||
const findByUserId = function ({ userId }) { | ||
return BookshelfMembership.where({ userId, disabledAt: null }) | ||
.fetchAll({ withRelated: ['organization'] }) | ||
.then((memberships) => bookshelfToDomainConverter.buildDomainObjects(BookshelfMembership, memberships)); | ||
const ORGANIZATION_TAGS_TABLE = 'organization-tags'; | ||
const ORGANIZATIONS_TABLE = 'organizations'; | ||
const MEMBERSHIPS_TABLE = 'memberships'; | ||
|
||
export const findByUserId = async function ({ userId }) { | ||
const knexConnection = DomainTransaction.getConnection(); | ||
|
||
const memberships = await knexConnection(MEMBERSHIPS_TABLE).where({ userId, disabledAt: null }); | ||
const membershipOrganizationIds = memberships.map(({ organizationId }) => organizationId); | ||
const relatedOrganizations = await knexConnection(ORGANIZATIONS_TABLE).whereIn('id', membershipOrganizationIds); | ||
|
||
return memberships.map((membership) => { | ||
const organization = relatedOrganizations.find(({ id }) => id === membership.organizationId); | ||
return toDomain(membership, null, organization); | ||
}); | ||
}; | ||
|
||
const findByUserIdAndOrganizationId = function ({ userId, organizationId, includeOrganization = false }) { | ||
return BookshelfMembership.where({ userId, organizationId, disabledAt: null }) | ||
.fetchAll({ withRelated: includeOrganization ? ['organization', 'organization.tags'] : [] }) | ||
.then((memberships) => bookshelfToDomainConverter.buildDomainObjects(BookshelfMembership, memberships)); | ||
export const findByUserIdAndOrganizationId = async ({ userId, organizationId, includeOrganization = false }) => { | ||
const knexConnection = DomainTransaction.getConnection(); | ||
const memberships = await knexConnection(MEMBERSHIPS_TABLE).where({ userId, organizationId, disabledAt: null }); | ||
|
||
if (!includeOrganization) { | ||
return memberships.map(toDomain); | ||
} | ||
const membershipOrganizationIds = memberships.map(({ organizationId }) => organizationId); | ||
const organizations = await knexConnection(ORGANIZATIONS_TABLE).whereIn('id', membershipOrganizationIds); | ||
const organizationIds = organizations.map(({ id }) => id); | ||
const organizationsTags = await knexConnection(ORGANIZATION_TAGS_TABLE).whereIn('organizationId', organizationIds); | ||
|
||
return memberships.map((membership) => { | ||
const organization = organizations.find(({ id }) => id === membership.organizationId); | ||
const organizationTags = organizationsTags.filter(({ organizationId }) => organizationId === organization.id); | ||
return toDomain(membership, null, organization, organizationTags); | ||
}); | ||
}; | ||
|
||
export { findByUserId, findByUserIdAndOrganizationId }; | ||
const toDomain = (membershipData, userData = null, organizationData = null, organizationTags = null) => { | ||
const membership = new Membership(membershipData); | ||
if (userData) membership.user = new User(userData); | ||
if (organizationData) membership.organization = new Organization(organizationData); | ||
if (organizationTags) membership.organization.tags = organizationTags; | ||
return membership; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters