323 lines
13 KiB
TypeScript
323 lines
13 KiB
TypeScript
|
import { Table, TableForeignKey, View } from "typeorm";
|
||
|
import { getTypeByORM } from "../ormHelper";
|
||
|
|
||
|
export const salutation_table = new Table({
|
||
|
name: "salutation",
|
||
|
columns: [
|
||
|
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||
|
{ name: "salutation", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
||
|
],
|
||
|
});
|
||
|
|
||
|
export const award_table = new Table({
|
||
|
name: "award",
|
||
|
columns: [
|
||
|
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||
|
{ name: "award", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
||
|
],
|
||
|
});
|
||
|
|
||
|
export const communication_type_table = new Table({
|
||
|
name: "communication_type",
|
||
|
columns: [
|
||
|
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||
|
{ name: "type", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
||
|
{ name: "useColumns", type: getTypeByORM("varchar"), length: "255", isNullable: false, default: "''" },
|
||
|
],
|
||
|
});
|
||
|
|
||
|
export const executive_position_table = new Table({
|
||
|
name: "executive_position",
|
||
|
columns: [
|
||
|
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||
|
{ name: "position", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
||
|
],
|
||
|
});
|
||
|
|
||
|
export const membership_status_table = new Table({
|
||
|
name: "membership_status",
|
||
|
columns: [
|
||
|
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||
|
{ name: "status", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
||
|
],
|
||
|
});
|
||
|
|
||
|
export const qualification_table = new Table({
|
||
|
name: "qualification",
|
||
|
columns: [
|
||
|
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||
|
{ name: "qualification", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
||
|
{ name: "description", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
||
|
],
|
||
|
});
|
||
|
|
||
|
/** member and relations */
|
||
|
export const member_table = new Table({
|
||
|
name: "member",
|
||
|
columns: [
|
||
|
{
|
||
|
name: "id",
|
||
|
type: getTypeByORM("varchar"),
|
||
|
length: "36",
|
||
|
isPrimary: true,
|
||
|
isGenerated: true,
|
||
|
generationStrategy: "uuid",
|
||
|
},
|
||
|
{ name: "salutationId", type: getTypeByORM("int"), isNullable: false },
|
||
|
{
|
||
|
name: "internalId",
|
||
|
type: getTypeByORM("varchar"),
|
||
|
length: "255",
|
||
|
default: null,
|
||
|
isNullable: true,
|
||
|
isUnique: true,
|
||
|
},
|
||
|
{ name: "firstname", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
||
|
{ name: "lastname", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
||
|
{ name: "nameaffix", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
||
|
{ name: "birthdate", type: getTypeByORM("date"), isNullable: false },
|
||
|
],
|
||
|
foreignKeys: [
|
||
|
new TableForeignKey({
|
||
|
columnNames: ["salutationId"],
|
||
|
referencedColumnNames: ["id"],
|
||
|
referencedTableName: "salutation",
|
||
|
onDelete: "RESTRICT",
|
||
|
onUpdate: "RESTRICT",
|
||
|
}),
|
||
|
],
|
||
|
});
|
||
|
|
||
|
export const membership_table = new Table({
|
||
|
name: "membership",
|
||
|
columns: [
|
||
|
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||
|
{ name: "start", type: getTypeByORM("date"), isNullable: false },
|
||
|
{ name: "end", type: getTypeByORM("date"), isNullable: true },
|
||
|
{ name: "terminationReason", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
||
|
{ name: "memberId", type: getTypeByORM("varchar"), isNullable: false },
|
||
|
{ name: "statusId", type: getTypeByORM("int"), isNullable: false },
|
||
|
],
|
||
|
foreignKeys: [
|
||
|
new TableForeignKey({
|
||
|
columnNames: ["memberId"],
|
||
|
referencedTableName: "member",
|
||
|
referencedColumnNames: ["id"],
|
||
|
onDelete: "CASCADE",
|
||
|
onUpdate: "RESTRICT",
|
||
|
}),
|
||
|
new TableForeignKey({
|
||
|
columnNames: ["statusId"],
|
||
|
referencedTableName: "membership_status",
|
||
|
referencedColumnNames: ["id"],
|
||
|
onDelete: "RESTRICT",
|
||
|
onUpdate: "RESTRICT",
|
||
|
}),
|
||
|
],
|
||
|
});
|
||
|
|
||
|
export const member_qualifications_table = new Table({
|
||
|
name: "member_qualifications",
|
||
|
columns: [
|
||
|
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||
|
{ name: "note", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
||
|
{ name: "start", type: getTypeByORM("date"), isNullable: false },
|
||
|
{ name: "end", type: getTypeByORM("date"), isNullable: true },
|
||
|
{ name: "terminationReason", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
||
|
{ name: "memberId", type: getTypeByORM("varchar"), isNullable: false },
|
||
|
{ name: "qualificationId", type: getTypeByORM("int"), isNullable: false },
|
||
|
],
|
||
|
foreignKeys: [
|
||
|
new TableForeignKey({
|
||
|
columnNames: ["memberId"],
|
||
|
referencedTableName: "member",
|
||
|
referencedColumnNames: ["id"],
|
||
|
onDelete: "CASCADE",
|
||
|
onUpdate: "RESTRICT",
|
||
|
}),
|
||
|
new TableForeignKey({
|
||
|
columnNames: ["qualificationId"],
|
||
|
referencedTableName: "qualification",
|
||
|
referencedColumnNames: ["id"],
|
||
|
onDelete: "RESTRICT",
|
||
|
onUpdate: "RESTRICT",
|
||
|
}),
|
||
|
],
|
||
|
});
|
||
|
|
||
|
export const member_executive_positions_table = new Table({
|
||
|
name: "member_executive_positions",
|
||
|
columns: [
|
||
|
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||
|
{ name: "note", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
||
|
{ name: "start", type: getTypeByORM("date"), isNullable: false },
|
||
|
{ name: "end", type: getTypeByORM("date"), isNullable: true },
|
||
|
{ name: "memberId", type: getTypeByORM("varchar"), isNullable: false },
|
||
|
{ name: "executivePositionId", type: getTypeByORM("int"), isNullable: false },
|
||
|
],
|
||
|
foreignKeys: [
|
||
|
new TableForeignKey({
|
||
|
columnNames: ["memberId"],
|
||
|
referencedTableName: "member",
|
||
|
referencedColumnNames: ["id"],
|
||
|
onDelete: "CASCADE",
|
||
|
onUpdate: "RESTRICT",
|
||
|
}),
|
||
|
new TableForeignKey({
|
||
|
columnNames: ["executivePositionId"],
|
||
|
referencedTableName: "executive_position",
|
||
|
referencedColumnNames: ["id"],
|
||
|
onDelete: "RESTRICT",
|
||
|
onUpdate: "RESTRICT",
|
||
|
}),
|
||
|
],
|
||
|
});
|
||
|
|
||
|
export const member_awards_table = new Table({
|
||
|
name: "member_awards",
|
||
|
columns: [
|
||
|
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||
|
{ name: "given", type: getTypeByORM("boolean"), default: false, isNullable: false },
|
||
|
{ name: "note", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
||
|
{ name: "date", type: getTypeByORM("date"), isNullable: false },
|
||
|
{ name: "memberId", type: getTypeByORM("varchar"), isNullable: false },
|
||
|
{ name: "awardId", type: getTypeByORM("int"), isNullable: false },
|
||
|
],
|
||
|
foreignKeys: [
|
||
|
new TableForeignKey({
|
||
|
columnNames: ["memberId"],
|
||
|
referencedTableName: "member",
|
||
|
referencedColumnNames: ["id"],
|
||
|
onDelete: "CASCADE",
|
||
|
onUpdate: "RESTRICT",
|
||
|
}),
|
||
|
new TableForeignKey({
|
||
|
columnNames: ["awardId"],
|
||
|
referencedTableName: "award",
|
||
|
referencedColumnNames: ["id"],
|
||
|
onDelete: "RESTRICT",
|
||
|
onUpdate: "RESTRICT",
|
||
|
}),
|
||
|
],
|
||
|
});
|
||
|
|
||
|
export const member_communication_table = new Table({
|
||
|
name: "communication",
|
||
|
columns: [
|
||
|
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||
|
{ name: "preferred", type: getTypeByORM("boolean"), isNullable: false, default: false },
|
||
|
{ name: "isSendNewsletter", type: getTypeByORM("boolean"), isNullable: false, default: false },
|
||
|
{ name: "isSMSAlarming", type: getTypeByORM("boolean"), isNullable: false, default: false },
|
||
|
{ name: "mobile", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
||
|
{ name: "email", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
||
|
{ name: "postalCode", type: getTypeByORM("varchar"), length: "255", default: null, isNullable: true },
|
||
|
{ name: "city", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
||
|
{ name: "street", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
||
|
{ name: "streetNumber", type: getTypeByORM("int"), isNullable: true },
|
||
|
{ name: "streetNumberAddition", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
||
|
{ name: "memberId", type: getTypeByORM("varchar"), isNullable: false },
|
||
|
{ name: "typeId", type: getTypeByORM("int"), isNullable: false },
|
||
|
],
|
||
|
foreignKeys: [
|
||
|
new TableForeignKey({
|
||
|
columnNames: ["memberId"],
|
||
|
referencedTableName: "member",
|
||
|
referencedColumnNames: ["id"],
|
||
|
onDelete: "CASCADE",
|
||
|
onUpdate: "RESTRICT",
|
||
|
}),
|
||
|
new TableForeignKey({
|
||
|
columnNames: ["typeId"],
|
||
|
referencedColumnNames: ["id"],
|
||
|
referencedTableName: "communication_type",
|
||
|
onDelete: "RESTRICT",
|
||
|
onUpdate: "RESTRICT",
|
||
|
}),
|
||
|
],
|
||
|
});
|
||
|
|
||
|
/** views */
|
||
|
export const member_view = new View({
|
||
|
name: "member_view",
|
||
|
expression: `
|
||
|
SELECT
|
||
|
\`member\`.\`id\` AS \`id\`,
|
||
|
\`member\`.\`firstname\` AS \`firstname\`,
|
||
|
\`member\`.\`lastname\` AS \`lastname\`,
|
||
|
\`member\`.\`nameaffix\` AS \`nameaffix\`,
|
||
|
\`member\`.\`birthdate\` AS \`birthdate\`,
|
||
|
\`salutation\`.\`salutation\` AS \`salutation\`,
|
||
|
TIMESTAMPDIFF(YEAR, \`member\`.\`birthdate\`, CURDATE()) AS \`todayAge\`, YEAR(CURDATE()) - YEAR(\`member\`.\`birthdate\`) AS \`ageThisYear\`,
|
||
|
CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, \`member\`.\`birthdate\`, CURDATE()))) AS \`exactAge\`
|
||
|
FROM \`member\` \`member\`
|
||
|
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
||
|
`,
|
||
|
});
|
||
|
|
||
|
export const member_executive_positions_view = new View({
|
||
|
name: "member_executive_positions_view",
|
||
|
expression: `
|
||
|
SELECT
|
||
|
\`executivePosition\`.\`id\` AS \`positionId\`,
|
||
|
\`executivePosition\`.\`position\` AS \`position\`,
|
||
|
\`member\`.\`id\` AS \`memberId\`,
|
||
|
\`member\`.\`firstname\` AS \`memberFirstname\`,
|
||
|
\`member\`.\`lastname\` AS \`memberLastname\`,
|
||
|
\`member\`.\`nameaffix\` AS \`memberNameaffix\`,
|
||
|
\`member\`.\`birthdate\` AS \`memberBirthdate\`,
|
||
|
\`salutation\`.\`salutation\` AS \`memberSalutation\`,
|
||
|
SUM(TIMESTAMPDIFF(DAY, \`memberExecutivePositions\`.\`start\`,
|
||
|
COALESCE(\`memberExecutivePositions\`.\`end\`, CURRENT_DATE))) AS \`durationInDays\`
|
||
|
FROM \`member_executive_positions\` \`memberExecutivePositions\`
|
||
|
LEFT JOIN \`executive_position\` \`executivePosition\` ON \`executivePosition\`.\`id\`=\`memberExecutivePositions\`.\`executivePositionId\`
|
||
|
LEFT JOIN \`member\` \`member\` ON \`member\`.\`id\`=\`memberExecutivePositions\`.\`memberId\`
|
||
|
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
||
|
GROUP BY \`executivePosition\`.\`id\`, \`member\`.\`id\`
|
||
|
`,
|
||
|
});
|
||
|
|
||
|
export const member_qualifications_view = new View({
|
||
|
name: "member_qualifications_view",
|
||
|
expression: `
|
||
|
SELECT
|
||
|
\`qualification\`.\`id\` AS \`qualificationId\`,
|
||
|
\`qualification\`.\`qualification\` AS \`qualification\`,
|
||
|
\`member\`.\`id\` AS \`memberId\`,
|
||
|
\`member\`.\`firstname\` AS \`memberFirstname\`,
|
||
|
\`member\`.\`lastname\` AS \`memberLastname\`,
|
||
|
\`member\`.\`nameaffix\` AS \`memberNameaffix\`,
|
||
|
\`member\`.\`birthdate\` AS \`memberBirthdate\`,
|
||
|
\`salutation\`.\`salutation\` AS \`memberSalutation\`,
|
||
|
SUM(TIMESTAMPDIFF(DAY, \`memberQualifications\`.\`start\`,
|
||
|
COALESCE(\`memberQualifications\`.\`end\`, CURRENT_DATE))) AS \`durationInDays\`
|
||
|
FROM \`member_qualifications\` \`memberQualifications\`
|
||
|
LEFT JOIN \`qualification\` \`qualification\` ON \`qualification\`.\`id\`=\`memberQualifications\`.\`qualificationId\`
|
||
|
LEFT JOIN \`member\` \`member\` ON \`member\`.\`id\`=\`memberQualifications\`.\`memberId\`
|
||
|
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
||
|
GROUP BY \`qualification\`.\`id\`, \`member\`.\`id\`
|
||
|
`,
|
||
|
});
|
||
|
|
||
|
export const membership_view = new View({
|
||
|
name: "membership_view",
|
||
|
expression: `
|
||
|
SELECT
|
||
|
\`status\`.\`id\` AS \`statusId\`,
|
||
|
\`status\`.\`status\` AS \`status\`,
|
||
|
\`member\`.\`id\` AS \`memberId\`,
|
||
|
\`member\`.\`firstname\` AS \`memberFirstname\`,
|
||
|
\`member\`.\`lastname\` AS \`memberLastname\`,
|
||
|
\`member\`.\`nameaffix\` AS \`memberNameaffix\`,
|
||
|
\`member\`.\`birthdate\` AS \`memberBirthdate\`,
|
||
|
\`salutation\`.\`salutation\` AS \`memberSalutation\`,
|
||
|
SUM(TIMESTAMPDIFF(DAY, \`membership\`.\`start\`,
|
||
|
COALESCE(\`membership\`.\`end\`, CURRENT_DATE))) AS \`durationInDays\`,
|
||
|
CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, \`membership\`.\`start\`, COALESCE(\`membership\`.\`end\`, CURRENT_DATE))))) AS \`durationInYears\`
|
||
|
FROM \`membership\` \`membership\`
|
||
|
LEFT JOIN \`membership_status\` \`status\` ON \`status\`.\`id\`=\`membership\`.\`statusId\`
|
||
|
LEFT JOIN \`member\` \`member\` ON \`member\`.\`id\`=\`membership\`.\`memberId\`
|
||
|
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
||
|
GROUP BY \`status\`.\`id\`, \`member\`.\`id\`
|
||
|
`,
|
||
|
});
|