Skip to content

Commit

Permalink
feat: update domains for civic center and practice for good and add b…
Browse files Browse the repository at this point in the history
…eneficiaries
  • Loading branch information
Birloi Florian authored and Birloi Florian committed May 24, 2024
1 parent 58561db commit 9eac44f
Show file tree
Hide file tree
Showing 24 changed files with 419 additions and 71 deletions.
172 changes: 172 additions & 0 deletions backend/src/migrations/1716531409199-Practice4GoodCCDomains.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
import { MigrationInterface, QueryRunner, Table } from 'typeorm';

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

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(
new Table({
name: '_domains_practice_programs',
columns: [
{
name: 'id',
type: 'int',
isPrimary: true,
isGenerated: true,
generationStrategy: 'increment',
},
{
name: 'name',
type: 'varchar',
},
{
name: 'group',
type: 'varchar',
isNullable: true,
},
],
}),
true,
);

await queryRunner.createTable(
new Table({
name: '_domains_civic_services',
columns: [
{
name: 'id',
type: 'int',
isPrimary: true,
isGenerated: true,
generationStrategy: 'increment',
},
{
name: 'name',
type: 'varchar',
},
{
name: 'group',
type: 'varchar',
isNullable: true,
},
],
}),
true,
);

await queryRunner.query(`
INSERT INTO _domains_practice_programs (name, "group") VALUES
('Advocacy', 'Advocacy'),
('Artă & Cultură', 'Artă & Cultură'),
('Tehnologie Civică', 'Tehnologie Civică'),
('Societatea Civilă - Participare Civică', 'Societatea Civilă'),
('Societatea Civilă - Comunitate', 'Societatea Civilă'),
('Societatea Civilă - Voluntariat', 'Societatea Civilă'),
('Dezvoltarea sectorului ONG', 'Dezvoltarea sectorului ONG'),
('Democrație', 'Democrație'),
('Democrație - Media', 'Democrație'),
('Democrație - Transparență', 'Democrație'),
('Intervenții În Caz De Dezastru', 'Intervenții în caz de dezastru'),
('Creștere Economică - Dezvoltare rurală', 'Creștere Economică'),
('Creștere Economică - Antreprenoriat social', 'Creștere Economică'),
('Creștere Economică - Dezvoltare urbană', 'Creștere Economică'),
('Educație', 'Educație'),
('Educație Digitală', 'Educație'),
('Educație - Învățare Continuă', 'Educație'),
('Educație Pentru Copiii cu CES', 'Educație'),
('Educație Incluzivă', 'Educație'),
('Mediu', 'Mediu'),
('Mediu - Animale și Faună sălbatică', 'Mediu'),
('Mediu - Combaterea Schimbărilor Climatice', 'Mediu'),
('Mediu - Agricultură Sustenabilă', 'Mediu'),
('Sănătate', 'Sănătate'),
('Sănătate - Intervenție de Urgență', 'Sănătate'),
('Sănătate - HIV/AIDS', 'Sănătate'),
('Sănătate Mentală', 'Sănătate'),
('Sănătate Fizică', 'Sănătate'),
('Sănătate Reproductivă', 'Sănătate'),
('Drepturile Omului', 'Drepturile Omului'),
('Drepturile Omului - Anti-Discriminare', 'Drepturile Omului'),
('Drepturile Omului - Copii', 'Drepturile Omului'),
('Drepturile Omului - Dizabilități', 'Drepturile Omului'),
('Drepturile Omului - Violență Domestică', 'Drepturile Omului'),
('Drepturile Omului - Egalitate de Gen', 'Drepturile Omului'),
('Drepturile Omului - LGBTQ+', 'Drepturile Omului'),
('Drepturile Omului - Minorități', 'Drepturile Omului'),
('Drepturile Omului - Refugiați', 'Drepturile Omului'),
('Drepturile Omului - Femei', 'Drepturile Omului'),
('Ajutor Umanitar', 'Ajutor umanitar'),
('Cooperare Internațională', 'Cooperare internațională'),
('Asistență Juridică', 'Asistență juridică'),
('Migrație', 'Asistență juridică'),
('Altceva/General', 'Altceva/General'),
('Filantropie', 'Filantropie'),
('Combaterea Sărăciei - Apă Curată', 'Combaterea sărăciei'),
('Combaterea Sărăciei - Securitate Alimentară', 'Combaterea sărăciei'),
('Combaterea Sărăciei - Locuințe Sigure', 'Combaterea sărăciei'),
('Cercetare', 'Cercetare'),
('Servicii Sociale', 'Servicii Sociale'),
('Sport', 'Sport');
`);

await queryRunner.query(`
INSERT INTO _domains_civic_services (name, "group") VALUES
('Advocacy', 'Advocacy'),
('Artă & Cultură', 'Artă & Cultură'),
('Tehnologie Civică', 'Tehnologie Civică'),
('Societatea Civilă - Participare Civică', 'Societatea Civilă'),
('Societatea Civilă - Comunitate', 'Societatea Civilă'),
('Societatea Civilă - Voluntariat', 'Societatea Civilă'),
('Dezvoltarea sectorului ONG', 'Dezvoltarea sectorului ONG'),
('Democrație', 'Democrație'),
('Democrație - Media', 'Democrație'),
('Democrație - Transparență', 'Democrație'),
('Intervenții În Caz De Dezastru', 'Intervenții în caz de dezastru'),
('Creștere Economică - Dezvoltare rurală', 'Creștere Economică'),
('Creștere Economică - Antreprenoriat social', 'Creștere Economică'),
('Creștere Economică - Dezvoltare urbană', 'Creștere Economică'),
('Educație', 'Educație'),
('Educație Digitală', 'Educație'),
('Educație - Învățare Continuă', 'Educație'),
('Educație Pentru Copiii cu CES', 'Educație'),
('Educație Incluzivă', 'Educație'),
('Mediu', 'Mediu'),
('Mediu - Animale și Faună sălbatică', 'Mediu'),
('Mediu - Combaterea Schimbărilor Climatice', 'Mediu'),
('Mediu - Agricultură Sustenabilă', 'Mediu'),
('Sănătate', 'Sănătate'),
('Sănătate - Intervenție de Urgență', 'Sănătate'),
('Sănătate - HIV/AIDS', 'Sănătate'),
('Sănătate Mentală', 'Sănătate'),
('Sănătate Fizică', 'Sănătate'),
('Sănătate Reproductivă', 'Sănătate'),
('Drepturile Omului', 'Drepturile Omului'),
('Drepturile Omului - Anti-Discriminare', 'Drepturile Omului'),
('Drepturile Omului - Copii', 'Drepturile Omului'),
('Drepturile Omului - Dizabilități', 'Drepturile Omului'),
('Drepturile Omului - Violență Domestică', 'Drepturile Omului'),
('Drepturile Omului - Egalitate de Gen', 'Drepturile Omului'),
('Drepturile Omului - LGBTQ+', 'Drepturile Omului'),
('Drepturile Omului - Minorități', 'Drepturile Omului'),
('Drepturile Omului - Refugiați', 'Drepturile Omului'),
('Drepturile Omului - Femei', 'Drepturile Omului'),
('Ajutor Umanitar', 'Ajutor umanitar'),
('Cooperare Internațională', 'Cooperare internațională'),
('Asistență Juridică', 'Asistență juridică'),
('Migrație', 'Asistență juridică'),
('Altceva/General', 'Altceva/General'),
('Filantropie', 'Filantropie'),
('Combaterea Sărăciei - Apă Curată', 'Combaterea sărăciei'),
('Combaterea Sărăciei - Securitate Alimentară', 'Combaterea sărăciei'),
('Combaterea Sărăciei - Locuințe Sigure', 'Combaterea sărăciei'),
('Cercetare', 'Cercetare'),
('Servicii Sociale', 'Servicii Sociale'),
('Sport', 'Sport');
`);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropTable('_domains_practice_programs');
await queryRunner.dropTable('_domains_civic_services');
}
}
39 changes: 39 additions & 0 deletions backend/src/migrations/1716541753299-UpdatePracticesAndServices.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { MigrationInterface, QueryRunner } from 'typeorm';

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

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TYPE "public"."civic_center_service_age_categories_enum" RENAME TO "civic_center_service_age_categories_enum_old"`,
);
await queryRunner.query(
`CREATE TYPE "public"."civic_center_service_age_categories_enum" AS ENUM('COPII', 'TINERI', 'ADULTI', 'VARSTNICI', 'FAMILIE', 'RISC_DE_SARACIE', 'ADICTII', 'AFECTIUNI_MEDICALE', 'AFECTIUNI_PSIHICE', 'DIZABILITATI', 'COMUNITATI_IZOLATE', 'FARA_ADAPOST', 'PRIVATE_DE_LIBERTATE', 'TRAFICULUI_DE_PERSOANE', 'VIOLENTEI_DOMESTICE', 'SOMERI', 'APARTINATORII_BENEFICIARILOR')`,
);
await queryRunner.query(
`ALTER TABLE "civic_center_service" ALTER COLUMN "age_categories" TYPE "public"."civic_center_service_age_categories_enum"[] USING "age_categories"::"text"::"public"."civic_center_service_age_categories_enum"[]`,
);
await queryRunner.query(
`DROP TYPE "public"."civic_center_service_age_categories_enum_old"`,
);
await queryRunner.query(`DELETE FROM "civic_center_service_to_domain"`);
await queryRunner.query(`DELETE FROM "practice_program_to_domain"`);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "public"."civic_center_service_age_categories_enum_old" AS ENUM('0-18', '18-25', '25-35', '35-60', '60+')`,
);
await queryRunner.query(
`ALTER TABLE "civic_center_service" ALTER COLUMN "age_categories" TYPE "public"."civic_center_service_age_categories_enum_old"[] USING "age_categories"::"text"::"public"."civic_center_service_age_categories_enum_old"[]`,
);
await queryRunner.query(
`DROP TYPE "public"."civic_center_service_age_categories_enum"`,
);
await queryRunner.query(
`ALTER TYPE "public"."civic_center_service_age_categories_enum_old" RENAME TO "civic_center_service_age_categories_enum"`,
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ export class CivicCenterServiceSearchFilterDto extends OmitType(BaseFilterDto, [

@IsArray()
@IsOptional()
ageCategories?: AgeCategory[];
ageCategories?: AgeCategory[]; //TODO: this needs to be renamed to beneficiaries
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
} from 'typeorm';
import { AgeCategory } from '../../practice-program/enums/age-category.enum';
import { Feedback } from './feedback.entity';
import { ServiceDomain } from './service-domain.entity';

@Entity()
export class CivicCenterService extends BaseEntity {
Expand Down Expand Up @@ -67,7 +68,7 @@ export class CivicCenterService extends BaseEntity {
},
inverseJoinColumn: { name: 'domain_id', referencedColumnName: 'id' },
})
domains: Domain[];
domains: ServiceDomain[];

@Column({
type: 'enum',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@Entity('_domains_civic_services')
export class ServiceDomain {
@PrimaryGeneratedColumn('increment')
id: number;

@Column({
type: 'varchar',
name: 'name',
})
name: string;

@Column({
type: 'varchar',
name: 'group',
nullable: true,
})
group: string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
ManyToMany,
ManyToOne,
} from 'typeorm';
import { PracticeDomain } from './practice_domain.entity';

@Entity()
export class PracticeProgram extends BaseEntity {
Expand Down Expand Up @@ -82,7 +83,7 @@ export class PracticeProgram extends BaseEntity {
},
inverseJoinColumn: { name: 'domain_id', referencedColumnName: 'id' },
})
domains: Domain[];
domains: PracticeDomain[];

@ManyToMany(() => Faculty, { cascade: true, onDelete: 'CASCADE' })
@JoinTable({
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@Entity('_domains_practice_programs')
export class PracticeDomain {
@PrimaryGeneratedColumn('increment')
id: number;

@Column({
type: 'varchar',
name: 'name',
})
name: string;

@Column({
type: 'varchar',
name: 'group',
nullable: true,
})
group: string;
}
22 changes: 17 additions & 5 deletions backend/src/modules/practice-program/enums/age-category.enum.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
export enum AgeCategory {
'0_18' = '0-18',
'18_25' = '18-25',
'25_35' = '25-35',
'35_60' = '35-60',
'OVER_60' = '60+',
COPII = 'COPII',
TINERI = 'TINERI',
ADULTI = 'ADULTI',
VARSTNICI = 'VARSTNICI',
FAMILIE = 'FAMILIE',
RISC_DE_SARACIE = 'RISC_DE_SARACIE',
ADICTII = 'ADICTII',
AFECTIUNI_MEDICALE = 'AFECTIUNI_MEDICALE',
AFECTIUNI_PSIHICE = 'AFECTIUNI_PSIHICE',
DIZABILITATI = 'DIZABILITATI',
COMUNITATI_IZOLATE = 'COMUNITATI_IZOLATE',
FARA_ADAPOST = 'FARA_ADAPOST',
PRIVATE_DE_LIBERTATE = 'PRIVATE_DE_LIBERTATE',
TRAFICULUI_DE_PERSOANE = 'TRAFICULUI_DE_PERSOANE',
VIOLENTEI_DOMESTICE = 'VIOLENTEI_DOMESTICE',
SOMERI = 'SOMERI',
APARTINATORII_BENEFICIARILOR = 'APARTINATORII_BENEFICIARILOR',
}
10 changes: 10 additions & 0 deletions backend/src/shared/controllers/nomenclatures.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,14 @@ export class NomenclaturesController {
getSkills() {
return this.nomenclaturesService.getSkills({});
}

@Get('practice-domains')
getPracticeDomains() {
return this.nomenclaturesService.getPracticeDomains({});
}

@Get('service-domains')
getServiceDomains() {
return this.nomenclaturesService.getServiceDomains({});
}
}
14 changes: 14 additions & 0 deletions backend/src/shared/services/nomenclatures.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import { CitySearchDto } from '../dto/city-search.dto';
import { NOMENCLATURE_ERRORS } from '../constants/nomenclature-error.constants';
import { Coalition } from '../entities/coalition.entity';
import { Federation } from '../entities/federation.entity';
import { PracticeDomain } from 'src/modules/practice-program/entities/practice_domain.entity';
import { ServiceDomain } from 'src/modules/civic-center-service/entities/service-domain.entity';

@Injectable()
export class NomenclaturesService {
Expand All @@ -33,6 +35,10 @@ export class NomenclaturesService {
private readonly facultiesRepository: Repository<Faculty>,
@InjectRepository(Skill)
private readonly skillsRepository: Repository<Skill>,
@InjectRepository(PracticeDomain)
private readonly practiceDomainRepository: Repository<PracticeDomain>,
@InjectRepository(ServiceDomain)
private readonly serviceDomainRepository: Repository<ServiceDomain>,
) {}

public getCity(conditions: FindOneOptions<City>) {
Expand Down Expand Up @@ -141,4 +147,12 @@ export class NomenclaturesService {
public createSkills(skills: Partial<Skill>[]): Promise<Skill[]> {
return this.skillsRepository.save(skills);
}

public getPracticeDomains(conditions: FindManyOptions<PracticeDomain>) {
return this.practiceDomainRepository.find(conditions);
}

public getServiceDomains(conditions: FindManyOptions<ServiceDomain>) {
return this.serviceDomainRepository.find(conditions);
}
}
4 changes: 4 additions & 0 deletions backend/src/shared/shared.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import { AnafService, NomenclaturesService } from './services';
import { HttpModule } from '@nestjs/axios';
import { S3FileManagerService } from './services/s3-file-manager.service';
import { FileManagerService } from './services/file-manager.service';
import { PracticeDomain } from 'src/modules/practice-program/entities/practice_domain.entity';
import { ServiceDomain } from 'src/modules/civic-center-service/entities/service-domain.entity';

@Global()
@Module({
Expand All @@ -29,6 +31,8 @@ import { FileManagerService } from './services/file-manager.service';
Coalition,
Faculty,
Skill,
PracticeDomain,
ServiceDomain,
]),
HttpModule,
],
Expand Down
Loading

0 comments on commit 9eac44f

Please sign in to comment.