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
Select Git revision

Target

Select target project
  • web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_server
1 result
Select Git revision
Show changes
Showing
with 137 additions and 42 deletions
Bonjour,<br />
<br />
Une nouvelle fonction <%= jobName %> vient d'être créée,
<a href="<%= config.protocol %>://<%= config.host %><%= config.port ? ':' + config.port : '' %>/admin>"
>cliquez ici pour la valider.</a
>
{
"subject": "Nouvelle création de fonction"
}
Bonjour,<br />
<br />
Vous recevez ce message car <strong><%= surname %></strong> <strong><%= name %></strong> demande à rejoindre votre
stucture <strong><%= structureName %></strong> sur RES'in, le réseau des acteurs de l'inclusion numérique de la
Métropole de Lyon. Vous pouvez dès maintenant valider la demande en
<a
href="<%= config.protocol %>://<%= config.host %><%= config.port ? ':' + config.port : '' %>/join?id=<%= id %>&userId=<%= userId %>&status=true"
>cliquant ici</a
>
ou refuser la demande
<a
href="<%= config.protocol %>://<%= config.host %><%= config.port ? ':' + config.port : '' %>/join?id=<%= id %>&userId=<%= userId %>&status=false"
>cliquant ici</a
>.
<%= name %> <%= surname %> indique travailler au sein de votre structure <%= structureName %>.<br />
S'il s'agit d'une erreur, merci de nous le signaler en cliquant sur le lien ci-dessous.
<br />
<br />
<br />
<div style="text-align: center">
<a
href="<%= config.protocol %>://<%= config.host %><%= config.port ? ':' + config.port : '' %>/exclude?id=<%= id %>&userId=<%= userId %>"
>Signaler une erreur d'appartenance à cette structure</a
>
</div>
{
"subject": "Un acteur demande a rejoindre votre structure, Réseau des Acteurs de la Médiation Numérique de la Métropole de Lyon"
"subject": "Un acteur a rejoint votre structure, Réseau des Acteurs de la Médiation Numérique de la Métropole de Lyon"
}
......@@ -3,6 +3,7 @@ Bonjour,<br />
Vous recevez ce message car votre structure <strong><%= name %></strong> est référencée sur RES'in, le réseau des
acteurs de l'inclusion numérique de la Métropole de Lyon. Pouvez-vous nous aider en vérifiant que vos données sont bien
à jour en
<a href="<%= config.protocol %>://<%= config.host %><%= config.port ? ':' + config.port : '' %>/acteurs?id=<%= id %>"
<a
href="<%= config.protocol %>://<%= config.host %><%= config.port ? ':' + config.port : '' %>/profile/edit-structure/<%= id %>"
>cliquant ici</a
>.
{
"subject": "Votre fiche structure n'est plus a jour, Réseau des Acteurs de la Médiation Numérique de la Métropole de Lyon"
"subject": "Votre fiche structure n'est plus à jour, Réseau des Acteurs de l'Inclusion Numérique de la Métropole de Lyon"
}
......@@ -2,7 +2,7 @@ Bonjour,<br />
<br />
Vous recevez ce message car vous avez été relié à la stucture <strong><%= name %></strong> sur RES'in, le réseau des
acteurs de l'inclusion numérique de la Métropole de Lyon. Vous pouvez dès maitenant vous créer un compte sur la
plateforme pour accéder a votre structure en
<a href="<%= config.protocol %>://<%= config.host %><%= config.port ? ':' + config.port : '' %>/register?id=<%= id %>"
plateforme pour accéder à votre structure en
<a href="<%= config.protocol %>://<%= config.host %><%= config.port ? ':' + config.port : '' %>/form/register/<%= id %>"
>cliquant ici</a
>.
import { Module } from '@nestjs/common';
import { HttpModule } from '@nestjs/common/http/http.module';
import { HttpModule } from '@nestjs/axios';
import { ConfigurationService } from '../configuration/configuration.service';
import { MailerService } from './mailer.service';
......
import { HttpModule, HttpService } from '@nestjs/common';
import { HttpModule, HttpService } from '@nestjs/axios';
import { Test, TestingModule } from '@nestjs/testing';
import { of, throwError } from 'rxjs';
import { AxiosResponse } from 'axios';
......
import { HttpService, Injectable, Logger } from '@nestjs/common';
import { HttpService } from '@nestjs/axios';
import { Injectable, Logger } from '@nestjs/common';
import { AxiosResponse } from 'axios';
import * as fs from 'fs';
import * as path from 'path';
......
......@@ -15,9 +15,9 @@ async function bootstrap() {
.setVersion('1.0')
.addBearerAuth({ type: 'http', scheme: 'bearer', bearerFormat: 'JWT' }, 'JWT')
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup('doc', app, document);
app.setGlobalPrefix('api');
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup('api/doc', app, document);
await app.listen(3000);
}
bootstrap();
import { Db } from 'mongodb';
import { getDb } from '../migrations-utils/db';
export const up = async () => {
const db: Db = await getDb();
};
export const down = async () => {
const db: Db = await getDb();
/*
Code you downgrade script here!
*/
};
import { Db } from 'mongodb';
import { getDb } from '../migrations-utils/db';
export const up = async () => {
const db: Db = await getDb();
// Add employers
await db.collection('employers').insertMany([
{ name: 'CAF', validated: true },
{ name: 'CARSAT', validated: true },
{ name: 'Pôle emploi', validated: true },
{ name: 'CPAM', validated: true },
{ name: 'Métropole de Lyon', validated: true },
{ name: 'Médiathèque / Bibliothèque', validated: true },
{ name: 'Mairie', validated: true },
{ name: 'CCAS', validated: true },
{ name: 'Centre socio-culturel', validated: true },
{ name: 'Association', validated: true },
{ name: `Structure d'insertion`, validated: true },
{ name: 'Structure de formation', validated: true },
{ name: 'Structure information jeunesse (SIJ)', validated: true },
{ name: 'Cyberbase', validated: true },
{ name: 'Fablab', validated: true },
{ name: 'Missions locales', validated: true },
{ name: 'MJC', validated: true },
{ name: 'Espace de coworking', validated: true },
{ name: 'Pimms', validated: true },
{ name: 'Ressourcerie', validated: true },
{ name: 'Maison France Service', validated: true },
]);
// Add jobs
await db.collection('jobs').insertMany([
{ name: 'CNFS', validated: true, hasPersonalOffer: true },
{ name: 'Médiateur numérique', validated: true, hasPersonalOffer: true },
{ name: 'Formateur', validated: true, hasPersonalOffer: true },
{ name: 'Travailleur social', validated: true, hasPersonalOffer: false },
{ name: 'Conseiller', validated: true, hasPersonalOffer: false },
{ name: 'Chef de projet', validated: true, hasPersonalOffer: false },
{ name: 'Élu', validated: true, hasPersonalOffer: false },
]);
};
export const down = async () => {
const db: Db = await getDb();
db.collection('employers').drop();
db.collection('jobs').drop();
};
import { Db } from 'mongodb';
import { getDb } from '../migrations-utils/db';
export const up = async () => {
const db: Db = await getDb();
const cursor = db.collection('users').find({});
let document;
while ((document = await cursor.next())) {
await db.collection('users').updateOne({ _id: document._id }, [{ $set: { pendingStructuresLink: [] } }]);
}
console.log(`Update done : 'pendingStructuresLink' emptied in 'users' collection`);
};
export const down = async () => {
// Nothing can be done since 'pendingStructuresLink' cannot be filled again with previously deleted values
console.log(`Downgrade done`);
};
import { Db } from 'mongodb';
import { getDb } from '../migrations-utils/db';
export const up = async () => {
const db: Db = await getDb();
const cursor = db.collection('users').find({});
let document;
while ((document = await cursor.next())) {
await db.collection('users').updateOne({ _id: document._id }, [{ $set: { structureOutdatedMailSent: [] } }]);
}
console.log(`Update done : 'structureOutdatedMailSent' emptied in 'users' collection`);
};
export const down = async () => {
// Nothing can be done since 'structureOutdatedMailSent' cannot be filled again with previously deleted values
console.log(`Downgrade done`);
};
export interface IMailchimpSubscription {
id: string;
email_address: string;
status: string;
}
......@@ -2,4 +2,5 @@ import { Document } from 'mongoose';
export interface INewsletterSubscription extends Document {
email: string;
mailchimpId: string;
}
......@@ -7,6 +7,9 @@ export type NewsletterSubscriptionDocument = NewsletterSubscription & Document;
export class NewsletterSubscription {
@Prop({ required: true })
email: string;
@Prop({ required: true })
mailchimpId: string;
}
export const NewsletterSubscriptionSchema = SchemaFactory.createForClass(NewsletterSubscription);
import { HttpModule } from '@nestjs/common';
import { HttpModule } from '@nestjs/axios';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { ConfigurationModule } from '../configuration/configuration.module';
......@@ -29,16 +29,20 @@ describe('NewsletterController', () => {
});
it('should subscribe user', async () => {
const result = { email: 'email@test.com' };
jest.spyOn(controller, 'newsletterSubscribe').mockImplementation(async (): Promise<{ email }> => result);
const email = { email: 'email@test.com' };
const result = { email: 'email@test.com', mailchimpId: 'test' };
jest
.spyOn(controller, 'newsletterSubscribe')
.mockImplementation(async (): Promise<{ email; mailchimpId }> => result);
const email = { email: 'email@test.com', mailchimpId: 'test' };
expect(await controller.newsletterSubscribe(email)).toBe(result);
});
it('should unsubscribe user', async () => {
const result = { email: 'email@test.com' };
jest.spyOn(controller, 'newsletterUnsubscribe').mockImplementation(async (): Promise<{ email }> => result);
const email = { email: 'email@test.com' };
const result = { email: 'email@test.com', mailchimpId: 'test' };
jest
.spyOn(controller, 'newsletterUnsubscribe')
.mockImplementation(async (): Promise<{ email; mailchimpId }> => result);
const email = { email: 'email@test.com', mailchimpId: 'test' };
expect(await controller.newsletterUnsubscribe(email)).toBe(result);
});
});
import { Body, Controller, Post } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { NewsletterService } from './newsletter.service';
@ApiTags('newsletter')
@Controller('newsletter')
export class NewsletterController {
constructor(private newsletterService: NewsletterService) {}
......