Skip to content

Commit

Permalink
[TECH] Migrer la création d'un compte Pix dans le dossier src (PIX-11940
Browse files Browse the repository at this point in the history
  • Loading branch information
pix-service-auto-merge authored Apr 11, 2024
2 parents d73d012 + 77ff2d0 commit a19bd8b
Show file tree
Hide file tree
Showing 81 changed files with 840 additions and 522 deletions.
6 changes: 6 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,10 @@
/api/src/authorization/ @1024pix/team-acces
/api/src/organizational-entities/ @1024pix/team-acces
/api/src/team/ @1024pix/team-acces
/api/src/user-account/ @1024pix/team-acces

/api/tests/authentication/ @1024pix/team-acces
/api/tests/authorization/ @1024pix/team-acces
/api/tests/organizational-entities/ @1024pix/team-acces
/api/tests/team/ @1024pix/team-acces
/api/tests/user-account/ @1024pix/team-acces
2 changes: 1 addition & 1 deletion api/lib/application/passwords/password-controller.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as userSerializer from '../../../src/shared/infrastructure/serializers/jsonapi/user-serializer.js';
import { usecases } from '../../domain/usecases/index.js';
import * as passwordResetSerializer from '../../infrastructure/serializers/jsonapi/password-reset-serializer.js';
import * as userSerializer from '../../infrastructure/serializers/jsonapi/user-serializer.js';
import { extractLocaleFromRequest } from '../../infrastructure/utils/request-response-utils.js';

const createResetDemand = async function (
Expand Down
22 changes: 0 additions & 22 deletions api/lib/application/users/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -909,28 +909,6 @@ const register = async function (server) {
},
},

{
method: 'POST',
path: '/api/users',
config: {
auth: false,
validate: {
payload: Joi.object({
data: Joi.object({
type: Joi.string(),
attributes: Joi.object().required(),
relationships: Joi.object(),
}).required(),
meta: Joi.object(),
}).required(),
options: {
allowUnknown: true,
},
},
handler: userController.save,
tags: ['api'],
},
},
{
method: 'POST',
path: '/api/users/{id}/update-email',
Expand Down
71 changes: 24 additions & 47 deletions api/lib/application/users/user-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ import * as trainingSerializer from '../../../src/devcomp/infrastructure/seriali
import { evaluationUsecases } from '../../../src/evaluation/domain/usecases/index.js';
import * as scorecardSerializer from '../../../src/evaluation/infrastructure/serializers/jsonapi/scorecard-serializer.js';
import * as campaignParticipationSerializer from '../../../src/prescription/campaign-participation/infrastructure/serializers/jsonapi/campaign-participation-serializer.js';
import * as userSerializer from '../../../src/shared/infrastructure/serializers/jsonapi/user-serializer.js';
import * as queryParamsUtils from '../../../src/shared/infrastructure/utils/query-params-utils.js';
import { eventBus } from '../../domain/events/index.js';
import * as localeService from '../../domain/services/locale-service.js';
import { usecases } from '../../domain/usecases/index.js';
import { DomainTransaction } from '../../infrastructure/DomainTransaction.js';
import * as authenticationMethodsSerializer from '../../infrastructure/serializers/jsonapi/authentication-methods-serializer.js';
Expand All @@ -23,31 +23,9 @@ import * as userDetailsForAdminSerializer from '../../infrastructure/serializers
import * as userForAdminSerializer from '../../infrastructure/serializers/jsonapi/user-for-admin-serializer.js';
import * as userLoginSerializer from '../../infrastructure/serializers/jsonapi/user-login-serializer.js';
import * as userOrganizationForAdminSerializer from '../../infrastructure/serializers/jsonapi/user-organization-for-admin-serializer.js';
import * as userSerializer from '../../infrastructure/serializers/jsonapi/user-serializer.js';
import * as userWithActivitySerializer from '../../infrastructure/serializers/jsonapi/user-with-activity-serializer.js';
import * as requestResponseUtils from '../../infrastructure/utils/request-response-utils.js';

const save = async function (request, h, dependencies = { userSerializer, requestResponseUtils, localeService }) {
const localeFromCookie = request.state?.locale;
const canonicalLocaleFromCookie = localeFromCookie
? dependencies.localeService.getCanonicalLocale(localeFromCookie)
: undefined;
const campaignCode = request.payload.meta ? request.payload.meta['campaign-code'] : null;
const user = { ...dependencies.userSerializer.deserialize(request.payload), locale: canonicalLocaleFromCookie };
const localeFromHeader = dependencies.requestResponseUtils.extractLocaleFromRequest(request);

const password = request.payload.data.attributes.password;

const savedUser = await usecases.createUser({
user,
password,
campaignCode,
localeFromHeader,
});

return h.response(dependencies.userSerializer.serialize(savedUser)).created();
};

const getCurrentUser = function (request, h, dependencies = { userWithActivitySerializer }) {
const authenticatedUserId = request.auth.credentials.userId;
return usecases.getCurrentUser({ authenticatedUserId }).then(dependencies.userWithActivitySerializer.serialize);
Expand Down Expand Up @@ -459,42 +437,41 @@ const rememberUserHasSeenLastDataProtectionPolicyInformation = async function (
};

const userController = {
save,
getCurrentUser,
getUserDetailsForAdmin,
updatePassword,
updateUserDetailsForAdministration,
acceptPixCertifTermsOfService,
acceptPixLastTermsOfService,
changeLang,
acceptPixOrgaTermsOfService,
acceptPixCertifTermsOfService,
rememberUserHasSeenAssessmentInstructions,
rememberUserHasSeenNewDashboardInfo,
rememberUserHasSeenLevelSevenInfo,
rememberUserHasSeenChallengeTooltip,
addPixAuthenticationMethodByEmail,
anonymizeUser,
changeLang,
findCampaignParticipationsForUserManagement,
findCertificationCenterMembershipsByUser,
findPaginatedFilteredUsers,
findPaginatedUserRecommendedTrainings,
getCampaignParticipations,
findUserOrganizationsForAdmin,
getCampaignParticipationOverviews,
isCertifiable,
getCampaignParticipations,
getCurrentUser,
getProfile,
getProfileForAdmin,
resetScorecard,
getUserAuthenticationMethods,
getUserCampaignAssessmentResult,
getUserCampaignParticipationToCampaign,
getUserDetailsForAdmin,
getUserProfileSharedForCampaign,
getUserCampaignAssessmentResult,
anonymizeUser,
unblockUserAccount,
isCertifiable,
reassignAuthenticationMethods,
rememberUserHasSeenAssessmentInstructions,
rememberUserHasSeenChallengeTooltip,
rememberUserHasSeenLastDataProtectionPolicyInformation,
rememberUserHasSeenLevelSevenInfo,
rememberUserHasSeenNewDashboardInfo,
removeAuthenticationMethod,
resetScorecard,
sendVerificationCode,
unblockUserAccount,
updatePassword,
updateUserDetailsForAdministration,
updateUserEmailWithValidation,
getUserAuthenticationMethods,
addPixAuthenticationMethodByEmail,
reassignAuthenticationMethods,
findCampaignParticipationsForUserManagement,
findUserOrganizationsForAdmin,
findCertificationCenterMembershipsByUser,
rememberUserHasSeenLastDataProtectionPolicyInformation,
};

export { userController };
2 changes: 1 addition & 1 deletion api/lib/domain/events/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import * as certificationIssueReportRepository from '../../../src/certification/
import * as answerRepository from '../../../src/shared/infrastructure/repositories/answer-repository.js';
import * as assessmentRepository from '../../../src/shared/infrastructure/repositories/assessment-repository.js';
import * as assessmentResultRepository from '../../../src/shared/infrastructure/repositories/assessment-result-repository.js';
import * as authenticationMethodRepository from '../../../src/shared/infrastructure/repositories/authentication-method-repository.js';
import * as challengeRepository from '../../../src/shared/infrastructure/repositories/challenge-repository.js';
import * as competenceRepository from '../../../src/shared/infrastructure/repositories/competence-repository.js';
import * as organizationRepository from '../../../src/shared/infrastructure/repositories/organization-repository.js';
Expand All @@ -29,7 +30,6 @@ import { EventDispatcherLogger } from '../../infrastructure/events/EventDispatch
import * as disabledPoleEmploiNotifier from '../../infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier.js';
import * as poleEmploiNotifier from '../../infrastructure/externals/pole-emploi/pole-emploi-notifier.js';
import { monitoringTools as MonitoringTools } from '../../infrastructure/monitoring-tools.js';
import * as authenticationMethodRepository from '../../infrastructure/repositories/authentication-method-repository.js';
import * as badgeAcquisitionRepository from '../../infrastructure/repositories/badge-acquisition-repository.js';
import * as campaignParticipationRepository from '../../infrastructure/repositories/campaign-participation-repository.js';
import * as campaignParticipationResultRepository from '../../infrastructure/repositories/campaign-participation-result-repository.js';
Expand Down
2 changes: 1 addition & 1 deletion api/lib/domain/models/UserDetailsForAdmin.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import * as localeService from '../services/locale-service.js';
import * as localeService from '../../../src/shared/domain/services/locale-service.js';

class UserDetailsForAdmin {
constructor(
Expand Down
2 changes: 1 addition & 1 deletion api/lib/domain/models/UserToCreate.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import _ from 'lodash';

import * as localeService from '../services/locale-service.js';
import * as localeService from '../../../src/shared/domain/services/locale-service.js';

class UserToCreate {
constructor({
Expand Down
2 changes: 1 addition & 1 deletion api/lib/domain/models/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import { AssessmentResult } from '../../../src/shared/domain/models/AssessmentRe
import { Challenge } from '../../../src/shared/domain/models/Challenge.js';
import { Competence } from '../../../src/shared/domain/models/Competence.js';
import { Examiner } from '../../../src/shared/domain/models/Examiner.js';
import { User } from '../../../src/shared/domain/models/User.js';
import { CampaignParticipant } from './../../../src/prescription/campaign-participation/domain/models/CampaignParticipant.js';
import { CampaignParticipation } from './../../../src/prescription/campaign-participation/domain/models/CampaignParticipation.js';
import { AccountRecoveryDemand } from './AccountRecoveryDemand.js';
Expand Down Expand Up @@ -125,7 +126,6 @@ import { Thematic } from './Thematic.js';
import { Tube } from './Tube.js';
import { Tutorial } from './Tutorial.js';
import { TutorialEvaluation } from './TutorialEvaluation.js';
import { User } from './User.js';
import { UserCompetence } from './UserCompetence.js';
import { UserDetailsForAdmin } from './UserDetailsForAdmin.js';
import { UserOrgaSettings } from './UserOrgaSettings.js';
Expand Down
2 changes: 1 addition & 1 deletion api/lib/domain/services/obfuscation-service.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import _ from 'lodash';

import * as authenticationMethodRepository from '../../infrastructure/repositories/authentication-method-repository.js';
import * as authenticationMethodRepository from '../../../src/shared/infrastructure/repositories/authentication-method-repository.js';
import { NON_OIDC_IDENTITY_PROVIDERS } from '../constants/identity-providers.js';
import { NotFoundError } from '../errors.js';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import lodash from 'lodash';
const { isNil } = lodash;

import { EntityValidationError } from '../../../src/shared/domain/errors.js';
import { User } from '../../../src/shared/domain/models/User.js';
import { getCampaignUrl } from '../../infrastructure/utils/url-builder.js';
import { STUDENT_RECONCILIATION_ERRORS } from '../constants.js';
import {
Expand All @@ -10,7 +11,6 @@ import {
CampaignCodeError,
OrganizationLearnerAlreadyLinkedToUserError,
} from '../errors.js';
import { User } from '../models/User.js';

const createAndReconcileUserToOrganizationLearner = async function ({
campaignCode,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { User } from '../../../src/shared/domain/models/User.js';
import { DomainTransaction } from '../../infrastructure/DomainTransaction.js';
import { STUDENT_RECONCILIATION_ERRORS } from '../constants.js';
import { NON_OIDC_IDENTITY_PROVIDERS } from '../constants/identity-providers.js';
import { CampaignCodeError, ObjectValidationError } from '../errors.js';
import { AuthenticationMethod } from '../models/AuthenticationMethod.js';
import { User } from '../models/User.js';

const existingUserReconciliationErrors = [
STUDENT_RECONCILIATION_ERRORS.RECONCILIATION.IN_SAME_ORGANIZATION.samlId.code,
Expand Down
12 changes: 6 additions & 6 deletions api/lib/domain/usecases/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,19 +53,25 @@ import * as schoolRepository from '../../../src/school/infrastructure/repositori
import * as codeGenerator from '../../../src/shared/domain/services/code-generator.js';
import * as cryptoService from '../../../src/shared/domain/services/crypto-service.js';
import * as languageService from '../../../src/shared/domain/services/language-service.js';
import * as localeService from '../../../src/shared/domain/services/locale-service.js';
import { tokenService } from '../../../src/shared/domain/services/token-service.js';
import * as userService from '../../../src/shared/domain/services/user-service.js';
import * as passwordValidator from '../../../src/shared/domain/validators/password-validator.js';
import * as userValidator from '../../../src/shared/domain/validators/user-validator.js';
import * as adminMemberRepository from '../../../src/shared/infrastructure/repositories/admin-member-repository.js';
import * as answerRepository from '../../../src/shared/infrastructure/repositories/answer-repository.js';
import * as areaRepository from '../../../src/shared/infrastructure/repositories/area-repository.js';
import * as assessmentRepository from '../../../src/shared/infrastructure/repositories/assessment-repository.js';
import * as assessmentResultRepository from '../../../src/shared/infrastructure/repositories/assessment-result-repository.js';
import * as authenticationMethodRepository from '../../../src/shared/infrastructure/repositories/authentication-method-repository.js';
import * as badgeRepository from '../../../src/shared/infrastructure/repositories/badge-repository.js';
import * as challengeRepository from '../../../src/shared/infrastructure/repositories/challenge-repository.js';
import * as competenceRepository from '../../../src/shared/infrastructure/repositories/competence-repository.js';
import * as organizationRepository from '../../../src/shared/infrastructure/repositories/organization-repository.js';
import * as targetProfileForAdminRepository from '../../../src/shared/infrastructure/repositories/target-profile-for-admin-repository.js';
import * as userLoginRepository from '../../../src/shared/infrastructure/repositories/user-login-repository.js';
import * as userRepository from '../../../src/shared/infrastructure/repositories/user-repository.js';
import * as userToCreateRepository from '../../../src/shared/infrastructure/repositories/user-to-create-repository.js';
import * as dateUtils from '../../../src/shared/infrastructure/utils/date-utils.js';
import { injectDependencies } from '../../../src/shared/infrastructure/utils/dependency-injection.js';
import { importNamedExportsFromDirectory } from '../../../src/shared/infrastructure/utils/import-named-exports-from-directory.js';
Expand All @@ -80,21 +86,18 @@ import * as certificationBadgesService from '../../domain/services/certification
import * as certificationCandidatesOdsService from '../../domain/services/certification-candidates-ods-service.js';
import * as certificationChallengesService from '../../domain/services/certification-challenges-service.js';
import * as improvementService from '../../domain/services/improvement-service.js';
import * as localeService from '../../domain/services/locale-service.js';
import * as mailService from '../../domain/services/mail-service.js';
import * as obfuscationService from '../../domain/services/obfuscation-service.js';
import * as passwordGenerator from '../../domain/services/password-generator.js';
import * as placementProfileService from '../../domain/services/placement-profile-service.js';
import * as resetPasswordService from '../../domain/services/reset-password-service.js';
import * as scoringCertificationService from '../../domain/services/scoring/scoring-certification-service.js';
import * as sessionPublicationService from '../../domain/services/session-publication-service.js';
import * as userService from '../../domain/services/user-service.js';
import * as verifyCertificateCodeService from '../../domain/services/verify-certificate-code-service.js';
import * as disabledPoleEmploiNotifier from '../../infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier.js';
import * as poleEmploiNotifier from '../../infrastructure/externals/pole-emploi/pole-emploi-notifier.js';
import * as accountRecoveryDemandRepository from '../../infrastructure/repositories/account-recovery-demand-repository.js';
import * as attachableTargetProfileRepository from '../../infrastructure/repositories/attachable-target-profiles-repository.js';
import * as authenticationMethodRepository from '../../infrastructure/repositories/authentication-method-repository.js';
import * as badgeAcquisitionRepository from '../../infrastructure/repositories/badge-acquisition-repository.js';
import * as badgeForCalculationRepository from '../../infrastructure/repositories/badge-for-calculation-repository.js';
import * as campaignAnalysisRepository from '../../infrastructure/repositories/campaign-analysis-repository.js';
Expand Down Expand Up @@ -164,7 +167,6 @@ import * as stageCollectionRepository from '../../infrastructure/repositories/us
import * as userEmailRepository from '../../infrastructure/repositories/user-email-repository.js';
import * as userOrganizationsForAdminRepository from '../../infrastructure/repositories/user-organizations-for-admin-repository.js';
import * as userSavedTutorialRepository from '../../infrastructure/repositories/user-saved-tutorial-repository.js';
import * as userToCreateRepository from '../../infrastructure/repositories/user-to-create-repository.js';
import * as codeUtils from '../../infrastructure/utils/code-utils.js';
import * as writeCsvUtils from '../../infrastructure/utils/csv/write-csv-utils.js';
import * as writeOdsUtils from '../../infrastructure/utils/ods/write-ods-utils.js';
Expand All @@ -175,8 +177,6 @@ import * as scoAccountRecoveryService from '../services/sco-account-recovery-ser
import * as userReconciliationService from '../services/user-reconciliation-service.js';
import * as organizationCreationValidator from '../validators/organization-creation-validator.js';
import * as organizationValidator from '../validators/organization-with-tags-and-target-profiles-script.js';
import * as passwordValidator from '../validators/password-validator.js';
import * as userValidator from '../validators/user-validator.js';
import { findTargetProfileOrganizations as findPaginatedFilteredTargetProfileOrganizations } from './find-paginated-filtered-target-profile-organizations.js';

function requirePoleEmploiNotifier() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import _ from 'lodash';

import { knex } from '../../../db/knex-database-connection.js';
import { User } from '../../../src/shared/domain/models/User.js';
import {
AlreadyExistingMembershipError,
CertificationCenterMembershipCreationError,
Expand All @@ -9,7 +10,6 @@ import {
} from '../../domain/errors.js';
import { CertificationCenter } from '../../domain/models/CertificationCenter.js';
import { CertificationCenterMembership } from '../../domain/models/CertificationCenterMembership.js';
import { User } from '../../domain/models/User.js';
import * as bookshelfToDomainConverter from '../../infrastructure/utils/bookshelf-to-domain-converter.js';
import { DomainTransaction } from '../DomainTransaction.js';
import { BookshelfCertificationCenterMembership } from '../orm-models/CertificationCenterMembership.js';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { knex } from '../../../db/knex-database-connection.js';
import { User } from '../../../src/shared/domain/models/User.js';
import { MembershipCreationError, MembershipUpdateError, NotFoundError } from '../../domain/errors.js';
import { Membership } from '../../domain/models/Membership.js';
import { Organization } from '../../domain/models/Organization.js';
import { User } from '../../domain/models/User.js';
import { DomainTransaction } from '../DomainTransaction.js';
import { BookshelfMembership } from '../orm-models/Membership.js';
import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js';
Expand Down
Loading

0 comments on commit a19bd8b

Please sign in to comment.