education controller, service, command

This commit is contained in:
Julian Krauser 2025-06-03 15:20:46 +02:00
parent 5368a96d0f
commit fded8a663a
29 changed files with 884 additions and 5 deletions

View file

@ -0,0 +1,34 @@
import { MigrationInterface, QueryRunner, TableColumn } from "typeorm";
import {
education_table,
member_educations_table,
member_view_mysql,
member_view_postgres,
member_view_sqlite,
} from "./baseSchemaTables/member";
import { getDefaultByORM, getTypeByORM } from "./ormHelper";
import { DB_TYPE } from "../env.defaults";
export class MemberExtendData1748953828644 implements MigrationInterface {
name = "MemberExtendData1748953828644";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(education_table, true, true, true);
await queryRunner.createTable(member_educations_table, true, true, true);
await queryRunner.addColumn(
"member",
new TableColumn({ name: "note", ...getTypeByORM("varchar", true), default: getDefaultByORM("null") })
);
await queryRunner.dropView("member_view");
if (DB_TYPE == "postgres") await queryRunner.createView(member_view_postgres, true);
else if (DB_TYPE == "mysql") await queryRunner.createView(member_view_mysql, true);
else if (DB_TYPE == "sqlite") await queryRunner.createView(member_view_sqlite, true);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropTable(member_educations_table, true, true, true);
await queryRunner.dropTable(education_table, true, true, true);
await queryRunner.dropColumn("member", "note");
}
}

View file

@ -51,6 +51,15 @@ export const qualification_table = new Table({
],
});
export const education_table = new Table({
name: "education",
columns: [
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
{ name: "education", ...getTypeByORM("varchar"), isUnique: true },
{ name: "description", ...getTypeByORM("varchar"), isNullable: true },
],
});
/** member and relations */
export const member_table = new Table({
name: "member",
@ -222,6 +231,35 @@ export const member_communication_table = new Table({
],
});
export const member_educations_table = new Table({
name: "member_educations",
columns: [
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
{ name: "start", ...getTypeByORM("date") },
{ name: "end", ...getTypeByORM("date", true), default: getDefaultByORM("null") },
{ name: "note", ...getTypeByORM("varchar"), isNullable: true },
{ name: "place", ...getTypeByORM("varchar"), isNullable: true },
{ name: "memberId", ...getTypeByORM("uuid") },
{ name: "educationId", ...getTypeByORM("int") },
],
foreignKeys: [
new TableForeignKey({
columnNames: ["memberId"],
referencedTableName: "member",
referencedColumnNames: ["id"],
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
new TableForeignKey({
columnNames: ["educationId"],
referencedTableName: "education",
referencedColumnNames: ["id"],
onDelete: "RESTRICT",
onUpdate: "RESTRICT",
}),
],
});
/** views */
export const member_view_mysql = new View({
name: "member_view",
@ -229,6 +267,7 @@ export const member_view_mysql = new View({
SELECT
\`member\`.\`id\` AS \`id\`,
\`member\`.\`internalId\` AS \`internalId\`,
\`member\`.\`note\` AS \`note\`,
\`member\`.\`firstname\` AS \`firstname\`,
\`member\`.\`lastname\` AS \`lastname\`,
\`member\`.\`nameaffix\` AS \`nameaffix\`,
@ -258,6 +297,7 @@ export const member_view_postgres = new View({
SELECT
"member"."id" AS "id",
"member"."internalId" AS "internalId",
"member"."note" AS "note",
"member"."firstname" AS "firstname",
"member"."lastname" AS "lastname",
"member"."nameaffix" AS "nameaffix",
@ -277,6 +317,7 @@ export const member_view_sqlite = new View({
SELECT
member.id AS id,
member.internalId AS internalId,
member.note AS note,
member.firstname AS firstname,
member.lastname AS lastname,
member.nameaffix AS nameaffix,