Skip to content

Commit

Permalink
Merge pull request #636 from code4romania/develop
Browse files Browse the repository at this point in the history
Production release
  • Loading branch information
radulescuandrew authored Oct 24, 2024
2 parents 132ef2a + 64721e9 commit 383a4e7
Show file tree
Hide file tree
Showing 109 changed files with 2,953 additions and 755 deletions.
40 changes: 40 additions & 0 deletions backend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion backend/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "backend",
"version": "0.0.1",
"version": "1.1.0",
"description": "",
"author": "",
"private": true,
Expand Down Expand Up @@ -44,6 +44,7 @@
"@nestjs/event-emitter": "2.0.4",
"@nestjs/passport": "10.0.3",
"@nestjs/platform-express": "10.3.10",
"@nestjs/schedule": "^4.1.0",
"@nestjs/swagger": "7.3.1",
"@nestjs/throttler": "5.2.0",
"@nestjs/typeorm": "10.0.2",
Expand Down
2 changes: 2 additions & 0 deletions backend/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import { PracticeProgramModule } from './modules/practice-program/practice-progr
import { CivicCenterModule } from './modules/civic-center-service/civic-center.module';
import { EventEmitterModule } from '@nestjs/event-emitter';
import { NotificationsModule } from './modules/notifications/notifications.module';
import { ScheduleModule } from '@nestjs/schedule';

@Module({
imports: [
Expand All @@ -37,6 +38,7 @@ import { NotificationsModule } from './modules/notifications/notifications.modul
useClass: RateLimiterConfigService,
}),
EventEmitterModule.forRoot(),
ScheduleModule.forRoot(),

// Providers
DatabaseProviderModule,
Expand Down
2 changes: 1 addition & 1 deletion backend/src/common/config/email-config.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export class EmailConfigService {
defaults: {
from: '"No Reply" <no-reply@localhost>',
},
preview: true,
preview: false,
template: {
dir: __dirname + '/../../mail/templates',
adapter: new HandlebarsAdapter({ asset_url: this.createAssetUrl }),
Expand Down
105 changes: 100 additions & 5 deletions backend/src/mail/constants/template.constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ export const MAIL_OPTIONS: Record<string, IMailOptions> = {
template: ORGANIZATION_REQUEST,
subject: 'NGO Hub - Solicitare creare cont organizație',
context: {
title:
'Ești doar la un pas de a primi accesul în NGO Hub.',
title: 'Ești doar la un pas de a primi accesul în NGO Hub.',
subtitle: () =>
`Solicitarea de a crea un cont pentru organizația ta în NGO Hub a fost trimisă cu succes. Echipa NGO Hub va verifica informațiile primite și imediat ce este aprobată vei primi o notificare cu detalii despre accesarea ecosistemului de soluții NGO Hub. Dacă ai întrebări, ne poți contacta la ${process.env.MAIL_CONTACT}`,
},
Expand Down Expand Up @@ -97,10 +96,106 @@ export const MAIL_OPTIONS: Record<string, IMailOptions> = {
subtitle: (organizationName, applicationName) =>
`O nouă cerere de instalare a aplicației ${applicationName} a fost creată în ONG Hub pentru organizația ${organizationName}.`,
cta: {
link: () =>
`${process.env.ONGHUB_URL}/applications/requests`,
link: () => `${process.env.ONGHUB_URL}/applications/requests`,
label: 'Vezi cererea',
},
},
},
};
REMIND_TO_UPDATE_ORGANIZATION_REPORTS: {
template: ORGANIZATION_REQUEST,
subject:
'Actualizați profilul organizației până pe 30 iunie pentru a evita suspendarea contului',
context: {
title:
'Actualizați profilul organizației până pe 30 iunie pentru a evita suspendarea contului',
subtitle: () => `
<p>Bună,</p>
<p>Ne bucurăm că ești parte din comunitatea NGO Hub!</p>
<p>Vrem să îți reamintim că este important să îți actualizezi datele din profilul tău din NGO Hub până la data de <b>30 iunie ${new Date().getFullYear()}</b>.</p>
<p>Dacă nu reușești să faci această actualizare până la termenul limită, contul tău va fi suspendat temporar.</p>
<p>Aceștia sunt pașii pe care trebuie să îi urmezi pentru actualizare:</p>
<ol>
<li>Conectează-te la contul tău NGO Hub</li>
<li>Mergi la secțiunea „Organizația mea"</li>
<li>Verifică și actualizează toate informațiile din secțiunea „Informații financiare" și „ONG-ul în numere".</li>
<li>Salvează modificările</li>
</ol>
<p>Dacă ai nevoie de ajutor sau ai orice fel de întrebare, ne poți contacta oricând la <a href="mailto:[email protected]">[email protected]</a> sau poți programa o sesiune Civic Tech 911 direct din contul NGO Hub al organizației.</p>
`,
cta: {
link: () => `${process.env.ONGHUB_URL}/organization`,
label: 'Intra in cont',
},
},
},
WEEKLY_REMINDER_TO_UPDATE_ORGANIZATION_REPORTS: {
template: ORGANIZATION_REQUEST,
subject:
'Reminder: Actualizați profilul organizației până pe 30 iunie pentru a evita suspendarea contului',
context: {
title:
'Actualizați profilul organizației până pe 30 iunie pentru a evita suspendarea contului',
subtitle: () => `
<p>Bună,</p>
<p>Ne bucurăm că ești parte din comunitatea NGO Hub!</p>
<p>Îți reamintim că termenul limită pentru actualizarea datelor din profilul tău este 30 iunie ${new Date().getFullYear()}. Pentru a-ți păstra contul activ, te rugăm să îți actualizezi informațiile cât mai curând posibil.</p>
<p>Aceștia sunt pașii pe care trebuie să îi urmezi pentru actualizare:</p>
<ol>
<li>Conectează-te la contul tău NGO Hub</li>
<li>Mergi la secțiunea „Organizația mea"</li>
<li>Verifică și actualizează toate informațiile din secțiunea „Informații financiare" și „ONG-ul în numere".</li>
<li>Salvează modificările</li>
</ol>
<p>Dacă ai nevoie de ajutor sau ai orice fel de întrebare, ne poți contacta oricând la <a href="mailto:[email protected]">[email protected]</a> sau poți programa o sesiune Civic Tech 911 direct din contul NGO Hub al organizației.</p>
`,
cta: {
link: () => `${process.env.ONGHUB_URL}/organization`,
label: 'Intra in cont',
},
},
},
NOTIFY_FOR_UNAVAILABLE_OR_INVALID_FINANCIAL_INFORMATION: {
template: ORGANIZATION_REQUEST,
subject:
'Acțiune necesară: Te rugăm să corectezi datele din profilul organizației din NGO Hub',
context: {
title:
'Acțiune necesară: Te rugăm să corectezi datele din profilul organizației din NGO Hub',
subtitle: () => `
<p>Bună,</p>
<p>Ne bucurăm că ești parte din comunitatea NGO Hub!</p>
<p>Am observat că unele dintre informațiile recent actualizate din profilul tău de pe NGO Hub par a fi invalide sau incomplete. Pentru a ne asigura că ai acces neîntrerupt la contul tău, te rugăm să îți actualizezi și corectezi datele cât mai curând posibil.</p>
<p>Aceștia sunt pașii pe care trebuie să îi urmezi pentru actualizare:</p>
<ol>
<li>Conectează-te la contul tău NGO Hub</li>
<li>Mergi la secțiunea „Organizația mea"</li>
<li>Verifică și actualizează toate informațiile din secțiunea „Informații financiare" și „ONG-ul în numere".</li>
<li>Salvează modificările</li>
</ol>
<p>Este important să faci aceste actualizări pentru a evita suspendarea contului tău NGO Hub.</p>
<p>Dacă ai nevoie de ajutor sau ai orice fel de întrebare, ne poți contacta oricând la <a href="mailto:[email protected]">[email protected]</a> sau poți programa o sesiune Civic Tech 911 direct din contul NGO Hub al organizației.</p>
`,
cta: {
link: () => `${process.env.ONGHUB_URL}/organization`,
label: 'Intra in cont',
},
},
},
};
5 changes: 4 additions & 1 deletion backend/src/mail/templates/mail-template.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,15 @@
{{> header}}
<div id="content">
<h1>{{title}}</h1>
<p class="p1">{{subtitle}}</p>
<p class="p1">{{{subtitle}}}</p>
{{#if cta}}
<a href={{cta.link}} target="_blank">
<button type="button">{{cta.label}}</button>
</a>
{{/if}}

<p class="p1">Cu drag, </p>
<p class="p1">Echipa NGO Hub</p>
</div>
{{> footer}}
</div>
Expand Down
33 changes: 33 additions & 0 deletions backend/src/migrations/1723119327053-ApplicationLabel.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { MigrationInterface, QueryRunner } from 'typeorm';

export class ApplicationLabel1723119327053 implements MigrationInterface {
name = 'ApplicationLabel1723119327053';

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "_application-label" ("id" SERIAL NOT NULL, "deleted_on" TIMESTAMP WITH TIME ZONE, "created_on" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updated_on" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "name" text NOT NULL, CONSTRAINT "PK_c0aaf1127ad3beeaf0d3ad70096" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE INDEX "IDX_e4a4e4b1582c4e665cff9be33e" ON "_application-label" ("created_on") `,
);
await queryRunner.query(
`ALTER TABLE "application" ADD "application_label_id" integer`,
);
await queryRunner.query(
`ALTER TABLE "application" ADD CONSTRAINT "FK_318029631a770782ba1c66721fd" FOREIGN KEY ("application_label_id") REFERENCES "_application-label"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "application" DROP CONSTRAINT "FK_318029631a770782ba1c66721fd"`,
);
await queryRunner.query(
`ALTER TABLE "application" DROP COLUMN "application_label_id"`,
);
await queryRunner.query(
`DROP INDEX "public"."IDX_e4a4e4b1582c4e665cff9be33e"`,
);
await queryRunner.query(`DROP TABLE "_application-label"`);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { MigrationInterface, QueryRunner } from 'typeorm';

export class AddNewFinancialReportStatus1724056332367
implements MigrationInterface
{
name = 'AddNewFinancialReportStatus1724056332367';

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "public"."organization_financial_status_enum" AS ENUM('Not Completed', 'Pending', 'Completed', 'Invalid')`,
);
await queryRunner.query(
`ALTER TABLE "organization_financial" ADD "status" "public"."organization_financial_status_enum" NOT NULL DEFAULT 'Not Completed'`,
);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "organization_financial" DROP COLUMN "status"`,
);
await queryRunner.query(
`DROP TYPE "public"."organization_financial_status_enum"`,
);
}
}
Loading

0 comments on commit 383a4e7

Please sign in to comment.