Compare commits
No commits in common. "29be56394247c07bebcd5307e78c0f28e4356c5f" and "7a3a8a9d87d1746f9d2996365111f1323e2c7e37" have entirely different histories.
29be563942
...
7a3a8a9d87
13 changed files with 132 additions and 177 deletions
|
@ -1,7 +1,6 @@
|
||||||
export interface CreateCommunicationCommand {
|
export interface CreateCommunicationCommand {
|
||||||
preferred: boolean;
|
preferred: boolean;
|
||||||
isSMSAlarming: boolean;
|
isSMSAlarming: boolean;
|
||||||
isSendNewsletter: boolean;
|
|
||||||
mobile: string;
|
mobile: string;
|
||||||
email: string;
|
email: string;
|
||||||
postalCode: string;
|
postalCode: string;
|
||||||
|
@ -17,7 +16,6 @@ export interface UpdateCommunicationCommand {
|
||||||
id: number;
|
id: number;
|
||||||
preferred: boolean;
|
preferred: boolean;
|
||||||
isSMSAlarming: boolean;
|
isSMSAlarming: boolean;
|
||||||
isSendNewsletter: boolean;
|
|
||||||
mobile: string;
|
mobile: string;
|
||||||
email: string;
|
email: string;
|
||||||
postalCode: string;
|
postalCode: string;
|
||||||
|
|
|
@ -14,17 +14,13 @@ export default abstract class CommunicationCommandHandler {
|
||||||
* @returns {Promise<number>}
|
* @returns {Promise<number>}
|
||||||
*/
|
*/
|
||||||
static async create(createCommunication: CreateCommunicationCommand): Promise<number> {
|
static async create(createCommunication: CreateCommunicationCommand): Promise<number> {
|
||||||
let insertId = -1;
|
|
||||||
return await dataSource
|
return await dataSource
|
||||||
.transaction(async (manager) => {
|
|
||||||
await manager
|
|
||||||
.createQueryBuilder()
|
.createQueryBuilder()
|
||||||
.insert()
|
.insert()
|
||||||
.into(communication)
|
.into(communication)
|
||||||
.values({
|
.values({
|
||||||
preferred: createCommunication.preferred,
|
preferred: createCommunication.preferred,
|
||||||
isSMSAlarming: createCommunication.isSMSAlarming,
|
isSMSAlarming: createCommunication.isSMSAlarming,
|
||||||
isSendNewsletter: createCommunication.isSendNewsletter,
|
|
||||||
mobile: createCommunication.mobile,
|
mobile: createCommunication.mobile,
|
||||||
email: createCommunication.email,
|
email: createCommunication.email,
|
||||||
postalCode: createCommunication.postalCode,
|
postalCode: createCommunication.postalCode,
|
||||||
|
@ -37,21 +33,7 @@ export default abstract class CommunicationCommandHandler {
|
||||||
})
|
})
|
||||||
.execute()
|
.execute()
|
||||||
.then((result) => {
|
.then((result) => {
|
||||||
insertId = result.identifiers[0].id;
|
return result.identifiers[0].id;
|
||||||
});
|
|
||||||
|
|
||||||
await manager
|
|
||||||
.createQueryBuilder()
|
|
||||||
.update(communication)
|
|
||||||
.set({
|
|
||||||
isSendNewsletter: false,
|
|
||||||
})
|
|
||||||
.where("memberId = :memberId", { memberId: createCommunication.memberId })
|
|
||||||
.andWhere("id <> :id", { id: insertId })
|
|
||||||
.execute();
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
return insertId;
|
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
throw new InternalException("Failed creating communication", err);
|
throw new InternalException("Failed creating communication", err);
|
||||||
|
@ -65,14 +47,11 @@ export default abstract class CommunicationCommandHandler {
|
||||||
*/
|
*/
|
||||||
static async update(updateCommunication: UpdateCommunicationCommand): Promise<void> {
|
static async update(updateCommunication: UpdateCommunicationCommand): Promise<void> {
|
||||||
return await dataSource
|
return await dataSource
|
||||||
.transaction(async (manager) => {
|
|
||||||
await manager
|
|
||||||
.createQueryBuilder()
|
.createQueryBuilder()
|
||||||
.update(communication)
|
.update(communication)
|
||||||
.set({
|
.set({
|
||||||
preferred: updateCommunication.preferred,
|
preferred: updateCommunication.preferred,
|
||||||
isSMSAlarming: updateCommunication.isSMSAlarming,
|
isSMSAlarming: updateCommunication.isSMSAlarming,
|
||||||
isSendNewsletter: updateCommunication.isSendNewsletter,
|
|
||||||
mobile: updateCommunication.mobile,
|
mobile: updateCommunication.mobile,
|
||||||
email: updateCommunication.email,
|
email: updateCommunication.email,
|
||||||
postalCode: updateCommunication.postalCode,
|
postalCode: updateCommunication.postalCode,
|
||||||
|
@ -83,18 +62,7 @@ export default abstract class CommunicationCommandHandler {
|
||||||
})
|
})
|
||||||
.where("id = :id", { id: updateCommunication.id })
|
.where("id = :id", { id: updateCommunication.id })
|
||||||
.andWhere("memberId = :memberId", { memberId: updateCommunication.memberId })
|
.andWhere("memberId = :memberId", { memberId: updateCommunication.memberId })
|
||||||
.execute();
|
.execute()
|
||||||
|
|
||||||
await manager
|
|
||||||
.createQueryBuilder()
|
|
||||||
.update(communication)
|
|
||||||
.set({
|
|
||||||
isSendNewsletter: false,
|
|
||||||
})
|
|
||||||
.where("memberId = :memberId", { memberId: updateCommunication.memberId })
|
|
||||||
.andWhere("id <> :id", { id: updateCommunication.id })
|
|
||||||
.execute();
|
|
||||||
})
|
|
||||||
.then(() => {})
|
.then(() => {})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
throw new InternalException("Failed updating communication", err);
|
throw new InternalException("Failed updating communication", err);
|
||||||
|
|
|
@ -17,6 +17,11 @@ export interface UpdateMemberCommand {
|
||||||
internalId?: string;
|
internalId?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface UpdateMemberNewsletterCommand {
|
||||||
|
id: number;
|
||||||
|
communicationId: number;
|
||||||
|
}
|
||||||
|
|
||||||
export interface DeleteMemberCommand {
|
export interface DeleteMemberCommand {
|
||||||
id: number;
|
id: number;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,12 @@ import { dataSource } from "../../../data-source";
|
||||||
import { communication } from "../../../entity/club/member/communication";
|
import { communication } from "../../../entity/club/member/communication";
|
||||||
import { member } from "../../../entity/club/member/member";
|
import { member } from "../../../entity/club/member/member";
|
||||||
import InternalException from "../../../exceptions/internalException";
|
import InternalException from "../../../exceptions/internalException";
|
||||||
import { CreateMemberCommand, DeleteMemberCommand, UpdateMemberCommand } from "./memberCommand";
|
import {
|
||||||
|
CreateMemberCommand,
|
||||||
|
DeleteMemberCommand,
|
||||||
|
UpdateMemberCommand,
|
||||||
|
UpdateMemberNewsletterCommand,
|
||||||
|
} from "./memberCommand";
|
||||||
|
|
||||||
export default abstract class MemberCommandHandler {
|
export default abstract class MemberCommandHandler {
|
||||||
/**
|
/**
|
||||||
|
@ -63,6 +68,51 @@ export default abstract class MemberCommandHandler {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description update member newsletter
|
||||||
|
* @param {UpdateMemberCommand} updateMember
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
static async updateNewsletter(updateMember: UpdateMemberNewsletterCommand): Promise<void> {
|
||||||
|
return await dataSource
|
||||||
|
.createQueryBuilder()
|
||||||
|
.update(member)
|
||||||
|
.set({
|
||||||
|
sendNewsletter: await dataSource
|
||||||
|
.getRepository(communication)
|
||||||
|
.createQueryBuilder("communication")
|
||||||
|
.where("id = :id", { id: updateMember.communicationId })
|
||||||
|
.andWhere("memberId = :memberId", { memberId: updateMember.id })
|
||||||
|
.getOneOrFail(),
|
||||||
|
})
|
||||||
|
.where("id = :id", { id: updateMember.id })
|
||||||
|
.execute()
|
||||||
|
.then(() => {})
|
||||||
|
.catch((err) => {
|
||||||
|
throw new InternalException(`Failed updating member`, err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description update member newsletter to unset
|
||||||
|
* @param {number} memberId
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
static async unsetNewsletter(memberId: number): Promise<void> {
|
||||||
|
return await dataSource
|
||||||
|
.createQueryBuilder()
|
||||||
|
.update(member)
|
||||||
|
.set({
|
||||||
|
sendNewsletter: null,
|
||||||
|
})
|
||||||
|
.where("id = :id", { id: memberId })
|
||||||
|
.execute()
|
||||||
|
.then(() => {})
|
||||||
|
.catch((err) => {
|
||||||
|
throw new InternalException("Failed updating member", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description delete member
|
* @description delete member
|
||||||
* @param {DeleteMemberCommand} deleteMember
|
* @param {DeleteMemberCommand} deleteMember
|
||||||
|
|
|
@ -15,6 +15,7 @@ import {
|
||||||
CreateMemberCommand,
|
CreateMemberCommand,
|
||||||
DeleteMemberCommand,
|
DeleteMemberCommand,
|
||||||
UpdateMemberCommand,
|
UpdateMemberCommand,
|
||||||
|
UpdateMemberNewsletterCommand,
|
||||||
} from "../../../command/club/member/memberCommand";
|
} from "../../../command/club/member/memberCommand";
|
||||||
import MemberCommandHandler from "../../../command/club/member/memberCommandHandler";
|
import MemberCommandHandler from "../../../command/club/member/memberCommandHandler";
|
||||||
import {
|
import {
|
||||||
|
@ -289,7 +290,7 @@ export async function createMember(req: Request, res: Response): Promise<any> {
|
||||||
const lastname = req.body.lastname;
|
const lastname = req.body.lastname;
|
||||||
const nameaffix = req.body.nameaffix;
|
const nameaffix = req.body.nameaffix;
|
||||||
const birthdate = req.body.birthdate;
|
const birthdate = req.body.birthdate;
|
||||||
const internalId = req.body.internalId;
|
const internalId = req.body.internalId || null;
|
||||||
|
|
||||||
let createMember: CreateMemberCommand = {
|
let createMember: CreateMemberCommand = {
|
||||||
salutationId,
|
salutationId,
|
||||||
|
@ -408,7 +409,6 @@ export async function addCommunicationToMember(req: Request, res: Response): Pro
|
||||||
const memberId = parseInt(req.params.memberId);
|
const memberId = parseInt(req.params.memberId);
|
||||||
const preferred = req.body.preferred;
|
const preferred = req.body.preferred;
|
||||||
const isSMSAlarming = req.body.isSMSAlarming;
|
const isSMSAlarming = req.body.isSMSAlarming;
|
||||||
const isSendNewsletter = req.body.isNewsletterMain;
|
|
||||||
const mobile = req.body.mobile;
|
const mobile = req.body.mobile;
|
||||||
const email = req.body.email;
|
const email = req.body.email;
|
||||||
const postalCode = req.body.postalCode;
|
const postalCode = req.body.postalCode;
|
||||||
|
@ -417,11 +417,11 @@ export async function addCommunicationToMember(req: Request, res: Response): Pro
|
||||||
const streetNumber = req.body.streetNumber;
|
const streetNumber = req.body.streetNumber;
|
||||||
const streetNumberAddition = req.body.streetNumberAddition;
|
const streetNumberAddition = req.body.streetNumberAddition;
|
||||||
const typeId = req.body.typeId;
|
const typeId = req.body.typeId;
|
||||||
|
const isNewsletterMain = req.body.isNewsletterMain;
|
||||||
|
|
||||||
let createCommunication: CreateCommunicationCommand = {
|
let createCommunication: CreateCommunicationCommand = {
|
||||||
preferred,
|
preferred,
|
||||||
isSMSAlarming,
|
isSMSAlarming,
|
||||||
isSendNewsletter,
|
|
||||||
mobile,
|
mobile,
|
||||||
email,
|
email,
|
||||||
postalCode,
|
postalCode,
|
||||||
|
@ -434,6 +434,14 @@ export async function addCommunicationToMember(req: Request, res: Response): Pro
|
||||||
};
|
};
|
||||||
let id = await CommunicationCommandHandler.create(createCommunication);
|
let id = await CommunicationCommandHandler.create(createCommunication);
|
||||||
|
|
||||||
|
if (isNewsletterMain) {
|
||||||
|
let updateNewsletter: UpdateMemberNewsletterCommand = {
|
||||||
|
id: memberId,
|
||||||
|
communicationId: id,
|
||||||
|
};
|
||||||
|
await MemberCommandHandler.updateNewsletter(updateNewsletter);
|
||||||
|
}
|
||||||
|
|
||||||
res.sendStatus(204);
|
res.sendStatus(204);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -587,7 +595,6 @@ export async function updateCommunicationOfMember(req: Request, res: Response):
|
||||||
const recordId = parseInt(req.params.recordId);
|
const recordId = parseInt(req.params.recordId);
|
||||||
const preferred = req.body.preferred;
|
const preferred = req.body.preferred;
|
||||||
const isSMSAlarming = req.body.isSMSAlarming;
|
const isSMSAlarming = req.body.isSMSAlarming;
|
||||||
const isSendNewsletter = req.body.isNewsletterMain;
|
|
||||||
const mobile = req.body.mobile;
|
const mobile = req.body.mobile;
|
||||||
const email = req.body.email;
|
const email = req.body.email;
|
||||||
const postalCode = req.body.postalCode;
|
const postalCode = req.body.postalCode;
|
||||||
|
@ -595,12 +602,12 @@ export async function updateCommunicationOfMember(req: Request, res: Response):
|
||||||
const street = req.body.street;
|
const street = req.body.street;
|
||||||
const streetNumber = req.body.streetNumber;
|
const streetNumber = req.body.streetNumber;
|
||||||
const streetNumberAddition = req.body.streetNumberAddition;
|
const streetNumberAddition = req.body.streetNumberAddition;
|
||||||
|
const isNewsletterMain = req.body.isNewsletterMain;
|
||||||
|
|
||||||
let updateCommunication: UpdateCommunicationCommand = {
|
let updateCommunication: UpdateCommunicationCommand = {
|
||||||
id: recordId,
|
id: recordId,
|
||||||
preferred,
|
preferred,
|
||||||
isSMSAlarming,
|
isSMSAlarming,
|
||||||
isSendNewsletter,
|
|
||||||
mobile,
|
mobile,
|
||||||
email,
|
email,
|
||||||
postalCode,
|
postalCode,
|
||||||
|
@ -612,6 +619,18 @@ export async function updateCommunicationOfMember(req: Request, res: Response):
|
||||||
};
|
};
|
||||||
await CommunicationCommandHandler.update(updateCommunication);
|
await CommunicationCommandHandler.update(updateCommunication);
|
||||||
|
|
||||||
|
let currentUserNewsletterMain = await MemberService.getNewsletterById(memberId);
|
||||||
|
|
||||||
|
if (isNewsletterMain) {
|
||||||
|
let updateNewsletter: UpdateMemberNewsletterCommand = {
|
||||||
|
id: memberId,
|
||||||
|
communicationId: recordId,
|
||||||
|
};
|
||||||
|
await MemberCommandHandler.updateNewsletter(updateNewsletter);
|
||||||
|
} else if (currentUserNewsletterMain.sendNewsletter?.id == recordId) {
|
||||||
|
await MemberCommandHandler.unsetNewsletter(memberId);
|
||||||
|
}
|
||||||
|
|
||||||
res.sendStatus(204);
|
res.sendStatus(204);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,6 @@ import { AddWebapiTokens1737453096674 } from "./migrations/1737453096674-addweba
|
||||||
import { salutation } from "./entity/settings/salutation";
|
import { salutation } from "./entity/settings/salutation";
|
||||||
import { SalutationAsTable1737796878058 } from "./migrations/1737796878058-salutationAsTable";
|
import { SalutationAsTable1737796878058 } from "./migrations/1737796878058-salutationAsTable";
|
||||||
import { UpdateViews1737800468938 } from "./migrations/1737800468938-updateViews";
|
import { UpdateViews1737800468938 } from "./migrations/1737800468938-updateViews";
|
||||||
import { MoveSendNewsletterFlag1737816852011 } from "./migrations/1737816852011-moveSendNewsletterFlag";
|
|
||||||
|
|
||||||
const dataSource = new DataSource({
|
const dataSource = new DataSource({
|
||||||
type: DB_TYPE as any,
|
type: DB_TYPE as any,
|
||||||
|
@ -159,7 +158,6 @@ const dataSource = new DataSource({
|
||||||
AddWebapiTokens1737453096674,
|
AddWebapiTokens1737453096674,
|
||||||
SalutationAsTable1737796878058,
|
SalutationAsTable1737796878058,
|
||||||
UpdateViews1737800468938,
|
UpdateViews1737800468938,
|
||||||
MoveSendNewsletterFlag1737816852011,
|
|
||||||
],
|
],
|
||||||
migrationsRun: true,
|
migrationsRun: true,
|
||||||
migrationsTransactionMode: "each",
|
migrationsTransactionMode: "each",
|
||||||
|
|
|
@ -13,9 +13,6 @@ export class communication {
|
||||||
@Column({ type: "boolean", default: false })
|
@Column({ type: "boolean", default: false })
|
||||||
isSMSAlarming: boolean;
|
isSMSAlarming: boolean;
|
||||||
|
|
||||||
@Column({ type: "boolean", default: false })
|
|
||||||
isSendNewsletter: boolean;
|
|
||||||
|
|
||||||
@Column({ type: "varchar", length: 255, nullable: true })
|
@Column({ type: "varchar", length: 255, nullable: true })
|
||||||
mobile: string;
|
mobile: string;
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,14 @@ export class member {
|
||||||
@OneToMany(() => communication, (communications) => communications.member)
|
@OneToMany(() => communication, (communications) => communications.member)
|
||||||
communications: communication[];
|
communications: communication[];
|
||||||
|
|
||||||
|
@OneToOne(() => communication, {
|
||||||
|
nullable: true,
|
||||||
|
onDelete: "SET NULL",
|
||||||
|
onUpdate: "RESTRICT",
|
||||||
|
})
|
||||||
|
@JoinColumn()
|
||||||
|
sendNewsletter?: communication;
|
||||||
|
|
||||||
@ManyToOne(() => salutation, (salutation) => salutation.members)
|
@ManyToOne(() => salutation, (salutation) => salutation.members)
|
||||||
salutation: salutation;
|
salutation: salutation;
|
||||||
|
|
||||||
|
@ -51,5 +59,4 @@ export class member {
|
||||||
lastMembershipEntry?: membership;
|
lastMembershipEntry?: membership;
|
||||||
preferredCommunication?: Array<communication>;
|
preferredCommunication?: Array<communication>;
|
||||||
smsAlarming?: Array<communication>;
|
smsAlarming?: Array<communication>;
|
||||||
sendNewsletter?: communication;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ export default abstract class CommunicationFactory {
|
||||||
streetNumber: record.streetNumber,
|
streetNumber: record.streetNumber,
|
||||||
streetNumberAddition: record.streetNumberAddition,
|
streetNumberAddition: record.streetNumberAddition,
|
||||||
type: CommunicationTypeFactory.mapToSingle(record.type),
|
type: CommunicationTypeFactory.mapToSingle(record.type),
|
||||||
isNewsletterMain: record?.isSendNewsletter,
|
isNewsletterMain: isMain ? isMain : record?.member?.sendNewsletter?.id == record.id,
|
||||||
isSMSAlarming: record.isSMSAlarming,
|
isSMSAlarming: record.isSMSAlarming,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,10 +12,6 @@ export class UpdateViews1737800468938 implements MigrationInterface {
|
||||||
// await queryRunner.dropView("member_executive_positions_view");
|
// await queryRunner.dropView("member_executive_positions_view");
|
||||||
// await queryRunner.dropView("member_qualifications_view");
|
// await queryRunner.dropView("member_qualifications_view");
|
||||||
// await queryRunner.dropView("member_view");
|
// await queryRunner.dropView("member_view");
|
||||||
await queryRunner.query(`DROP VIEW IF EXISTS membership_view`);
|
|
||||||
await queryRunner.query(`DROP VIEW IF EXISTS member_executive_positions_view`);
|
|
||||||
await queryRunner.query(`DROP VIEW IF EXISTS member_qualifications_view`);
|
|
||||||
await queryRunner.query(`DROP VIEW IF EXISTS member_view`);
|
|
||||||
|
|
||||||
await queryRunner.createView(
|
await queryRunner.createView(
|
||||||
new View({
|
new View({
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
import { MigrationInterface, QueryRunner, TableColumn, TableForeignKey, TableIndex } from "typeorm";
|
|
||||||
import { communication } from "../entity/club/member/communication";
|
|
||||||
import { member } from "../entity/club/member/member";
|
|
||||||
|
|
||||||
export class MoveSendNewsletterFlag1737816852011 implements MigrationInterface {
|
|
||||||
name = "MoveSendNewsletterFlag1737816852011";
|
|
||||||
|
|
||||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
||||||
const table = await queryRunner.getTable("member");
|
|
||||||
const foreignKey = table.foreignKeys.find((fk) => fk.columnNames.indexOf("sendNewsletterId") !== -1);
|
|
||||||
await queryRunner.dropForeignKey("member", foreignKey);
|
|
||||||
|
|
||||||
await queryRunner.addColumn(
|
|
||||||
"communication",
|
|
||||||
new TableColumn({ name: "isSendNewsletter", type: "tinyint", isNullable: false, default: 0 })
|
|
||||||
);
|
|
||||||
|
|
||||||
// ! has to be sql. Else no data is returned.
|
|
||||||
const member_newsletter_send = await queryRunner.query("SELECT sendNewsletterId, id FROM `member` `member`");
|
|
||||||
|
|
||||||
for (let assigned of member_newsletter_send.map((mns: any) => ({
|
|
||||||
id: mns.id,
|
|
||||||
sendNewsletterId: mns.sendNewsletterId,
|
|
||||||
})) as Array<{ id: number; sendNewsletterId: number }>) {
|
|
||||||
await queryRunner.manager
|
|
||||||
.getRepository(communication)
|
|
||||||
.createQueryBuilder("communication")
|
|
||||||
.update({ isSendNewsletter: true })
|
|
||||||
.where({ memberId: assigned.id, id: assigned.sendNewsletterId })
|
|
||||||
.execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
await queryRunner.dropColumn("member", "sendNewsletterId");
|
|
||||||
}
|
|
||||||
|
|
||||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
||||||
await queryRunner.addColumn(
|
|
||||||
"member",
|
|
||||||
new TableColumn({ name: "sendNewsletterId", type: "int", isNullable: true, isUnique: true, default: null })
|
|
||||||
);
|
|
||||||
|
|
||||||
const member_newsletter_send = await queryRunner.manager
|
|
||||||
.getRepository(communication)
|
|
||||||
.createQueryBuilder("communication")
|
|
||||||
.where("communication.isSendNewsletter = :isSendNewsletter", { isSendNewsletter: true })
|
|
||||||
.getMany();
|
|
||||||
|
|
||||||
for (let assigned of member_newsletter_send.map((mns: any) => ({
|
|
||||||
id: mns.id,
|
|
||||||
memberId: mns.memberId,
|
|
||||||
})) as Array<{ id: number; memberId: number }>) {
|
|
||||||
await queryRunner.query("UPDATE `member` SET sendNewsletterId = ? WHERE id = ?", [
|
|
||||||
assigned.id,
|
|
||||||
assigned.memberId,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
await queryRunner.createForeignKey(
|
|
||||||
"member",
|
|
||||||
new TableForeignKey({
|
|
||||||
columnNames: ["sendNewsletterId"],
|
|
||||||
referencedColumnNames: ["id"],
|
|
||||||
referencedTableName: "communication",
|
|
||||||
onDelete: "SET NULL",
|
|
||||||
onUpdate: "RESTRICT",
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
await queryRunner.dropColumn("communication", "isSendNewsletter");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -14,6 +14,7 @@ export default abstract class CommunicationService {
|
||||||
.createQueryBuilder("communication")
|
.createQueryBuilder("communication")
|
||||||
.leftJoinAndSelect("communication.type", "communicationType")
|
.leftJoinAndSelect("communication.type", "communicationType")
|
||||||
.leftJoinAndSelect("communication.member", "member")
|
.leftJoinAndSelect("communication.member", "member")
|
||||||
|
.leftJoinAndSelect("member.sendNewsletter", "sendNewsletter")
|
||||||
.where("communication.memberId = :memberId", { memberId: memberId })
|
.where("communication.memberId = :memberId", { memberId: memberId })
|
||||||
.orderBy("communicationType.type", "ASC")
|
.orderBy("communicationType.type", "ASC")
|
||||||
.getMany()
|
.getMany()
|
||||||
|
@ -37,6 +38,7 @@ export default abstract class CommunicationService {
|
||||||
.createQueryBuilder("communication")
|
.createQueryBuilder("communication")
|
||||||
.leftJoinAndSelect("communication.type", "communicationType")
|
.leftJoinAndSelect("communication.type", "communicationType")
|
||||||
.leftJoinAndSelect("communication.member", "member")
|
.leftJoinAndSelect("communication.member", "member")
|
||||||
|
.leftJoinAndSelect("member.sendNewsletter", "sendNewsletter")
|
||||||
.where("communication.memberId = :memberId", { memberId: memberId })
|
.where("communication.memberId = :memberId", { memberId: memberId })
|
||||||
.andWhere("communication.id = :recordId", { recordId: recordId })
|
.andWhere("communication.id = :recordId", { recordId: recordId })
|
||||||
.getOneOrFail()
|
.getOneOrFail()
|
||||||
|
|
|
@ -39,6 +39,8 @@ export default abstract class MemberService {
|
||||||
)
|
)
|
||||||
.leftJoinAndSelect("membership_first.status", "status_first")
|
.leftJoinAndSelect("membership_first.status", "status_first")
|
||||||
.leftJoinAndSelect("membership_last.status", "status_last")
|
.leftJoinAndSelect("membership_last.status", "status_last")
|
||||||
|
.leftJoinAndSelect("member.sendNewsletter", "sendNewsletter")
|
||||||
|
.leftJoinAndSelect("sendNewsletter.type", "communicationtype")
|
||||||
.leftJoinAndMapMany(
|
.leftJoinAndMapMany(
|
||||||
"member.preferredCommunication",
|
"member.preferredCommunication",
|
||||||
"member.communications",
|
"member.communications",
|
||||||
|
@ -46,13 +48,6 @@ export default abstract class MemberService {
|
||||||
"preferredCommunication.preferred = 1"
|
"preferredCommunication.preferred = 1"
|
||||||
)
|
)
|
||||||
.leftJoinAndSelect("preferredCommunication.type", "communicationtype_preferred")
|
.leftJoinAndSelect("preferredCommunication.type", "communicationtype_preferred")
|
||||||
.leftJoinAndMapOne(
|
|
||||||
"member.sendNewsletter",
|
|
||||||
"member.communications",
|
|
||||||
"sendNewsletter",
|
|
||||||
"sendNewsletter.isSendNewsletter = 1"
|
|
||||||
)
|
|
||||||
.leftJoinAndSelect("sendNewsletter.type", "communicationtype")
|
|
||||||
.leftJoinAndMapMany("member.smsAlarming", "member.communications", "smsAlarming", "smsAlarming.isSMSAlarming = 1")
|
.leftJoinAndMapMany("member.smsAlarming", "member.communications", "smsAlarming", "smsAlarming.isSMSAlarming = 1")
|
||||||
.leftJoinAndSelect("smsAlarming.type", "communicationtype_smsAlarming")
|
.leftJoinAndSelect("smsAlarming.type", "communicationtype_smsAlarming")
|
||||||
.leftJoinAndSelect("member.salutation", "salutation");
|
.leftJoinAndSelect("member.salutation", "salutation");
|
||||||
|
@ -74,7 +69,7 @@ export default abstract class MemberService {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ids.length != 0) {
|
if (ids.length != 0) {
|
||||||
query = query.where({ id: ids });
|
query = query.where("member.id IN (:...ids)", { ids: ids });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!noLimit) {
|
if (!noLimit) {
|
||||||
|
@ -117,22 +112,18 @@ export default abstract class MemberService {
|
||||||
)
|
)
|
||||||
.leftJoinAndSelect("membership_first.status", "status_first")
|
.leftJoinAndSelect("membership_first.status", "status_first")
|
||||||
.leftJoinAndSelect("membership_last.status", "status_last")
|
.leftJoinAndSelect("membership_last.status", "status_last")
|
||||||
|
.leftJoinAndSelect("member.sendNewsletter", "sendNewsletter")
|
||||||
|
.leftJoinAndSelect("sendNewsletter.type", "communicationtype")
|
||||||
.leftJoinAndMapMany(
|
.leftJoinAndMapMany(
|
||||||
"member.preferredCommunication",
|
"member.preferredCommunication",
|
||||||
"member.communications",
|
"member.communications",
|
||||||
"preferredCommunication",
|
"preferredCommunication",
|
||||||
"preferredCommunication.preferred = 1"
|
"preferredCommunication.preferred = 1"
|
||||||
)
|
)
|
||||||
.leftJoinAndSelect("preferredCommunication.type", "communicationtype_preferred")
|
|
||||||
.leftJoinAndMapOne(
|
|
||||||
"member.sendNewsletter",
|
|
||||||
"member.communications",
|
|
||||||
"sendNewsletter",
|
|
||||||
"sendNewsletter.isSendNewsletter = 1"
|
|
||||||
)
|
|
||||||
.leftJoinAndSelect("sendNewsletter.type", "communicationtype")
|
|
||||||
.leftJoinAndMapMany("member.smsAlarming", "member.communications", "smsAlarming", "smsAlarming.isSMSAlarming = 1")
|
.leftJoinAndMapMany("member.smsAlarming", "member.communications", "smsAlarming", "smsAlarming.isSMSAlarming = 1")
|
||||||
.leftJoinAndSelect("smsAlarming.type", "communicationtype_smsAlarming")
|
.leftJoinAndSelect("smsAlarming.type", "communicationtype_smsAlarming")
|
||||||
|
.leftJoinAndSelect("preferredCommunication.type", "communicationtype_preferred")
|
||||||
.leftJoinAndSelect("member.salutation", "salutation")
|
.leftJoinAndSelect("member.salutation", "salutation")
|
||||||
.where("member.id = :id", { id: id })
|
.where("member.id = :id", { id: id })
|
||||||
.getOneOrFail()
|
.getOneOrFail()
|
||||||
|
@ -194,12 +185,7 @@ export default abstract class MemberService {
|
||||||
return await dataSource
|
return await dataSource
|
||||||
.getRepository(member)
|
.getRepository(member)
|
||||||
.createQueryBuilder("member")
|
.createQueryBuilder("member")
|
||||||
.leftJoinAndMapOne(
|
.leftJoinAndSelect("member.sendNewsletter", "sendNewsletter")
|
||||||
"member.sendNewsletter",
|
|
||||||
"member.communications",
|
|
||||||
"sendNewsletter",
|
|
||||||
"sendNewsletter.isSendNewsletter = 1"
|
|
||||||
)
|
|
||||||
.where("member.id = :id", { id: id })
|
.where("member.id = :id", { id: id })
|
||||||
.getOneOrFail()
|
.getOneOrFail()
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
|
|
Loading…
Add table
Reference in a new issue