From c849b8eb182367cf11fa7bf180714ec7c0c3956e Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Fri, 6 Jun 2025 09:33:06 +0200 Subject: [PATCH] fix: full fun of migrations from start --- .../1744351418751-newsletterColumnType.ts | 8 +- .../1748953828644-memberExtendData.ts | 12 +-- src/migrations/baseSchemaTables/member.ts | 74 ++++++++++++++++++- 3 files changed, 84 insertions(+), 10 deletions(-) diff --git a/src/migrations/1744351418751-newsletterColumnType.ts b/src/migrations/1744351418751-newsletterColumnType.ts index 6efacfa..686869e 100644 --- a/src/migrations/1744351418751-newsletterColumnType.ts +++ b/src/migrations/1744351418751-newsletterColumnType.ts @@ -6,7 +6,9 @@ export class NewsletterColumnType1744351418751 implements MigrationInterface { name = "NewsletterColumnType1744351418751"; public async up(queryRunner: QueryRunner): Promise { - let newsletters = await queryRunner.manager.getRepository("newsletter").find(); + let newsletters = await queryRunner.manager + .getRepository("newsletter") + .find({ select: { id: true, newsletterTitle: true, newsletterSignatur: true } }); await queryRunner.dropColumn("newsletter", "newsletterTitle"); await queryRunner.dropColumn("newsletter", "newsletterSignatur"); @@ -24,7 +26,9 @@ export class NewsletterColumnType1744351418751 implements MigrationInterface { } public async down(queryRunner: QueryRunner): Promise { - let newsletters = await queryRunner.manager.getRepository("newsletter").find(); + let newsletters = await queryRunner.manager + .getRepository("newsletter") + .find({ select: { id: true, newsletterTitle: true, newsletterSignatur: true } }); await queryRunner.dropColumn("newsletter", "newsletterTitle"); await queryRunner.dropColumn("newsletter", "newsletterSignatur"); diff --git a/src/migrations/1748953828644-memberExtendData.ts b/src/migrations/1748953828644-memberExtendData.ts index 4e53466..a2ccb44 100644 --- a/src/migrations/1748953828644-memberExtendData.ts +++ b/src/migrations/1748953828644-memberExtendData.ts @@ -2,9 +2,9 @@ import { MigrationInterface, QueryRunner, TableColumn } from "typeorm"; import { education_table, member_educations_table, - member_view_mysql, - member_view_postgres, - member_view_sqlite, + member_view2_mysql, + member_view2_postgres, + member_view2_sqlite, } from "./baseSchemaTables/member"; import { getDefaultByORM, getTypeByORM } from "./ormHelper"; import { DB_TYPE } from "../env.defaults"; @@ -21,9 +21,9 @@ export class MemberExtendData1748953828644 implements MigrationInterface { ); 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); + if (DB_TYPE == "postgres") await queryRunner.createView(member_view2_postgres, true); + else if (DB_TYPE == "mysql") await queryRunner.createView(member_view2_mysql, true); + else if (DB_TYPE == "sqlite") await queryRunner.createView(member_view2_sqlite, true); } public async down(queryRunner: QueryRunner): Promise { diff --git a/src/migrations/baseSchemaTables/member.ts b/src/migrations/baseSchemaTables/member.ts index 4eacb7e..663da51 100644 --- a/src/migrations/baseSchemaTables/member.ts +++ b/src/migrations/baseSchemaTables/member.ts @@ -267,7 +267,6 @@ 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\`, @@ -297,7 +296,6 @@ 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", @@ -312,6 +310,78 @@ export const member_view_postgres = new View({ }); export const member_view_sqlite = new View({ + name: "member_view", + expression: ` + SELECT + member.id AS id, + member.internalId AS internalId, + member.firstname AS firstname, + member.lastname AS lastname, + member.nameaffix AS nameaffix, + member.birthdate AS birthdate, + salutation.salutation AS salutation, + (strftime('%Y', 'now') - strftime('%Y', member.birthdate) - (strftime('%m-%d', 'now') < strftime('%m-%d', member.birthdate))) AS todayAge, + FLOOR(strftime('%Y', 'now') - strftime('%Y', member.birthdate)) AS ageThisYear, + (strftime('%Y', 'now') - strftime('%Y', member.birthdate)) || ' years ' || + (strftime('%m', 'now') - strftime('%m', member.birthdate)) || ' months ' || + (strftime('%d', 'now') - strftime('%d', member.birthdate)) || ' days' + AS exactAge + FROM member member + LEFT JOIN salutation salutation ON salutation.id=member.salutationId + `, +}); + +export const member_view2_mysql = new View({ + name: "member_view", + expression: ` + 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\`, + \`member\`.\`birthdate\` AS \`birthdate\`, + \`salutation\`.\`salutation\` AS \`salutation\`, + TIMESTAMPDIFF(YEAR, \`member\`.\`birthdate\`, CURDATE()) AS \`todayAge\`, + YEAR(CURDATE()) - YEAR(\`member\`.\`birthdate\`) AS \`ageThisYear\`, + CONCAT( + TIMESTAMPDIFF(YEAR, \`member\`.\`birthdate\`, CURDATE()), ' years ', + TIMESTAMPDIFF(MONTH, \`member\`.\`birthdate\`, CURDATE()) % 12, ' months ', + TIMESTAMPDIFF(DAY, + DATE_ADD( + \`member\`.\`birthdate\`, + INTERVAL TIMESTAMPDIFF(MONTH, \`member\`.\`birthdate\`, CURDATE()) MONTH + ), + CURDATE() + ), ' days' + ) AS \`exactAge\` + FROM \`member\` \`member\` + LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\` + `, +}); + +export const member_view2_postgres = new View({ + name: "member_view", + expression: ` + 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", + "member"."birthdate" AS "birthdate", + "salutation"."salutation" AS "salutation", + DATE_PART('year', AGE(CURRENT_DATE, member.birthdate)) AS "todayAge", + EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM member.birthdate) AS "ageThisYear", + AGE(CURRENT_DATE, member.birthdate) AS "exactAge" + FROM "member" "member" + LEFT JOIN "salutation" "salutation" ON "salutation"."id"="member"."salutationId" + `, +}); + +export const member_view2_sqlite = new View({ name: "member_view", expression: ` SELECT