Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_server
1 result
Show changes
...@@ -6,6 +6,7 @@ import { User, UserSchema } from './schemas/user.schema'; ...@@ -6,6 +6,7 @@ import { User, UserSchema } from './schemas/user.schema';
import { MailerModule } from '../mailer/mailer.module'; import { MailerModule } from '../mailer/mailer.module';
import { StructuresModule } from '../structures/structures.module'; import { StructuresModule } from '../structures/structures.module';
import { TempUserModule } from '../temp-user/temp-user.module'; import { TempUserModule } from '../temp-user/temp-user.module';
@Module({ @Module({
imports: [ imports: [
MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]), MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
......
...@@ -12,6 +12,7 @@ import { IUser } from './interfaces/user.interface'; ...@@ -12,6 +12,7 @@ import { IUser } from './interfaces/user.interface';
import { EmailChangeDto } from './dto/change-email.dto'; import { EmailChangeDto } from './dto/change-email.dto';
import { PendingStructureDto } from '../admin/dto/pending-structure.dto'; import { PendingStructureDto } from '../admin/dto/pending-structure.dto';
import { OwnerDto } from './dto/owner.dto'; import { OwnerDto } from './dto/owner.dto';
import { StructureDocument } from '../structures/schemas/structure.schema';
@Injectable() @Injectable()
export class UsersService { export class UsersService {
...@@ -157,6 +158,26 @@ export class UsersService { ...@@ -157,6 +158,26 @@ export class UsersService {
}); });
} }
/**
* Send to all admins mail for aptic duplicated data
*/
public async sendAdminApticNewStructureMail(structure: StructureDocument): Promise<any> {
const config = this.mailerService.config;
const ejsPath = this.mailerService.getTemplateLocation(config.templates.newApticStructure.ejs);
const jsonConfig = this.mailerService.loadJsonConfig(config.templates.newApticStructure.json);
const html = await ejs.renderFile(ejsPath, {
config,
name: structure.structureName,
address: `${structure.address.numero} ${structure.address.street} ${structure.address.commune}`,
description: structure.otherDescription,
});
const admins = await this.getAdmins();
admins.forEach((admin) => {
this.mailerService.send(admin.email, jsonConfig.subject, html);
});
}
/** /**
* Send approval email for user * Send approval email for user
* a new account. * a new account.
...@@ -317,13 +338,22 @@ export class UsersService { ...@@ -317,13 +338,22 @@ export class UsersService {
* Send to all admins validation email for structures * Send to all admins validation email for structures
* new account. * new account.
*/ */
private async sendAdminStructureValidationMail(): Promise<any> { private async sendAdminStructureValidationMail(userEmail: string, structure: StructureDocument): Promise<any> {
const config = this.mailerService.config; const config = this.mailerService.config;
const ejsPath = this.mailerService.getTemplateLocation(config.templates.adminStructureClaim.ejs); const ejsPath = this.mailerService.getTemplateLocation(config.templates.adminStructureClaim.ejs);
const jsonConfig = this.mailerService.loadJsonConfig(config.templates.adminStructureClaim.json); const jsonConfig = this.mailerService.loadJsonConfig(config.templates.adminStructureClaim.json);
const user = await this.findOne(userEmail);
const html = await ejs.renderFile(ejsPath, { const html = await ejs.renderFile(ejsPath, {
config, config,
id: structure ? structure._id : 0,
structureName: structure ? structure.structureName : '',
structureAdress: structure
? structure.address.numero
? `${structure.address.numero} ${structure.address.street} ${structure.address.commune}`
: `${structure.address.street} ${structure.address.commune}`
: '',
structureDescription: structure ? structure.otherDescription : '',
user: user,
}); });
const admins = await this.getAdmins(); const admins = await this.getAdmins();
admins.forEach((admin) => { admins.forEach((admin) => {
...@@ -331,9 +361,13 @@ export class UsersService { ...@@ -331,9 +361,13 @@ export class UsersService {
}); });
} }
public async updateStructureLinkedClaim(userEmail: string, idStructure: string): Promise<Types.ObjectId[]> { public async updateStructureLinkedClaim(
userEmail: string,
idStructure: string,
structure: StructureDocument
): Promise<Types.ObjectId[]> {
const stucturesLinked = this.updatePendingStructureLinked(userEmail, idStructure); const stucturesLinked = this.updatePendingStructureLinked(userEmail, idStructure);
this.sendAdminStructureValidationMail(); this.sendAdminStructureValidationMail(userEmail, structure);
return stucturesLinked; return stucturesLinked;
} }
......
...@@ -44,7 +44,7 @@ export class NewsletterServiceMock { ...@@ -44,7 +44,7 @@ export class NewsletterServiceMock {
}); });
} }
deleteOneEmail(email: string) { newsletterUnsubscribe(email: string) {
if (email === 'test@test.com') { if (email === 'test@test.com') {
throw new HttpException('Invalid email', HttpStatus.BAD_REQUEST); throw new HttpException('Invalid email', HttpStatus.BAD_REQUEST);
} }
......
...@@ -635,4 +635,234 @@ export class StructuresServiceMock { ...@@ -635,4 +635,234 @@ export class StructuresServiceMock {
}, },
]; ];
} }
findAllFormated() {
return [
{
_id: '6093ba0e2ab5775cfc01abcd',
coord: [4.8498155, 45.7514817],
equipmentsAndServices: ['wifiEnAccesLibre'],
digitalCultureSecurity: [],
parentingHelp: [],
socialAndProfessional: [],
accessRight: [],
baseSkills: [],
proceduresAccompaniment: [],
publicsAccompaniment: [],
publics: ['adultes'],
labelsQualifications: [],
accessModality: ['telephoneVisio'],
structureType: null,
structureName: 'a',
description: null,
lockdownActivity: null,
address: {
numero: null,
street: 'Rue Alphonse Daudet',
commune: 'Lyon 7ème Arrondissement',
},
contactMail: '',
contactPhone: '',
website: '',
facebook: null,
twitter: null,
instagram: null,
linkedin: null,
hours: {
monday: {
open: false,
time: [],
},
tuesday: {
open: false,
time: [],
},
wednesday: {
open: false,
time: [],
},
thursday: {
open: false,
time: [],
},
friday: {
open: false,
time: [],
},
saturday: {
open: false,
time: [],
},
sunday: {
open: false,
time: [],
},
},
pmrAccess: false,
exceptionalClosures: null,
otherDescription: null,
nbComputers: 1,
nbPrinters: 1,
nbTablets: 1,
nbNumericTerminal: 1,
nbScanners: 1,
freeWorkShop: false,
accountVerified: true,
createdAt: '2021-05-06T09:42:38.000Z',
updatedAt: '2021-05-06T09:42:50.000Z',
__v: 0,
},
{
_id: '6093ba0e2ab5775cfc01ffff',
coord: [4.8498155, 45.7514817],
equipmentsAndServices: ['wifiEnAccesLibre'],
digitalCultureSecurity: [],
parentingHelp: [],
socialAndProfessional: [],
accessRight: [],
baseSkills: [],
proceduresAccompaniment: [],
publicsAccompaniment: [],
publics: ['adultes'],
labelsQualifications: [],
accessModality: ['telephoneVisio'],
structureType: null,
structureName: 'a',
description: null,
lockdownActivity: null,
address: {
numero: null,
street: 'Rue Alphonse Daudet',
commune: 'Lyon 7ème Arrondissement',
},
contactMail: '',
contactPhone: '',
website: '',
facebook: null,
twitter: null,
instagram: null,
linkedin: null,
hours: {
monday: {
open: false,
time: [],
},
tuesday: {
open: false,
time: [],
},
wednesday: {
open: false,
time: [],
},
thursday: {
open: false,
time: [],
},
friday: {
open: false,
time: [],
},
saturday: {
open: false,
time: [],
},
sunday: {
open: false,
time: [],
},
},
pmrAccess: false,
exceptionalClosures: null,
otherDescription: null,
nbComputers: 1,
nbPrinters: 1,
nbTablets: 1,
nbNumericTerminal: 1,
nbScanners: 1,
freeWorkShop: false,
accountVerified: true,
createdAt: '2021-05-06T09:42:38.000Z',
updatedAt: '2021-05-06T09:42:50.000Z',
__v: 0,
},
];
}
update() {
return {
_id: '6093ba0e2ab5775cfc01ed3e',
coord: [4.8498155, 45.7514817],
equipmentsAndServices: ['wifiEnAccesLibre'],
digitalCultureSecurity: [],
parentingHelp: [],
socialAndProfessional: [],
accessRight: [],
baseSkills: [],
proceduresAccompaniment: [],
publicsAccompaniment: [],
publics: ['adultes'],
labelsQualifications: [],
accessModality: ['telephoneVisio'],
structureType: null,
structureName: 'a',
description: null,
lockdownActivity: null,
address: {
numero: null,
street: 'Rue Alphonse Daudet',
commune: 'Lyon 7ème Arrondissement',
},
contactMail: '',
contactPhone: '',
website: '',
facebook: null,
twitter: null,
instagram: null,
linkedin: null,
hours: {
monday: {
open: false,
time: [],
},
tuesday: {
open: false,
time: [],
},
wednesday: {
open: false,
time: [],
},
thursday: {
open: false,
time: [],
},
friday: {
open: false,
time: [],
},
saturday: {
open: false,
time: [],
},
sunday: {
open: false,
time: [],
},
},
pmrAccess: false,
exceptionalClosures: null,
otherDescription: null,
nbComputers: 1,
nbPrinters: 1,
nbTablets: 1,
nbNumericTerminal: 1,
nbScanners: 1,
freeWorkShop: false,
accountVerified: true,
createdAt: '2021-05-06T09:42:38.000Z',
updatedAt: '2021-05-06T09:42:50.000Z',
__v: 0,
};
}
} }
export class TempUserServiceMock {} export class TempUserServiceMock {
findOne(mail: string, passwordQuery?: boolean) {
if (mail === 'pauline.dupont@mii.com') {
return {
_id: 'tsfsf6296',
validationToken:
'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
emailVerified: true,
email: 'pauline.dupont@mii.com',
password: '$2a$12$vLQjJ9zAWyUwiFLeQDa6w.XzrlgPBhw.2GWrjog/yuEjIaZnQwmZu',
role: 0,
name: 'DUPONT',
surname: 'Pauline',
};
}
if (mail === 'jacques.dupont@mii.com') {
if (passwordQuery) {
return {
_id: 'tsfsf6296',
validationToken:
'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
emailVerified: false,
email: 'jacques.dupont@mii.com',
password: '$2a$12$vLQjJ9zAWyUwiFLeQDa6w.XzrlgPBhw.2GWrjog/yuEjIaZnQwmZu',
role: 0,
};
}
return {
_id: 'tsfsf6296',
validationToken:
'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
emailVerified: false,
email: 'jacques.dupont@mii.com',
role: 0,
};
}
return null;
}
}