transform migrations to work with mysql, postgres and sqlite
sqlite currently fails syntax of views
This commit is contained in:
parent
2cee8b5119
commit
a73c712626
29 changed files with 1626 additions and 382 deletions
16
.env.example
16
.env.example
|
@ -1,10 +1,22 @@
|
||||||
DB_TYPE = (mysql|sqlite|...)
|
DB_TYPE = (mysql|sqlite|postgres)
|
||||||
DB_PORT = number
|
|
||||||
|
## BSP für mysql
|
||||||
|
DB_PORT = 3306
|
||||||
DB_HOST = database_host
|
DB_HOST = database_host
|
||||||
DB_NAME = database_name
|
DB_NAME = database_name
|
||||||
DB_USERNAME = database_username
|
DB_USERNAME = database_username
|
||||||
DB_PASSWORD = database_password
|
DB_PASSWORD = database_password
|
||||||
|
|
||||||
|
## BSP für postgres
|
||||||
|
DB_PORT = 5432
|
||||||
|
DB_HOST = database_host
|
||||||
|
DB_NAME = database_name
|
||||||
|
DB_USERNAME = database_username
|
||||||
|
DB_PASSWORD = database_password
|
||||||
|
|
||||||
|
## BSP für sqlite
|
||||||
|
DB_HOST = filename.db
|
||||||
|
|
||||||
SERVER_PORT = portnumber
|
SERVER_PORT = portnumber
|
||||||
|
|
||||||
JWT_SECRET = ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
|
JWT_SECRET = ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
|
||||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -132,4 +132,5 @@ dist
|
||||||
|
|
||||||
files
|
files
|
||||||
|
|
||||||
.idea
|
.idea
|
||||||
|
*.db
|
20
README.md
20
README.md
|
@ -25,7 +25,7 @@ services:
|
||||||
container_name: ff_member_administration_server
|
container_name: ff_member_administration_server
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
- DB_TYPE=<mysql|sqlite> # default ist auf mysql gesetzt
|
- DB_TYPE=<mysql|sqlite|postgres> # default ist auf mysql gesetzt
|
||||||
- DB_HOST=ff-db
|
- DB_HOST=ff-db
|
||||||
- DB_PORT=<number> # default ist auf 3306 gesetzt
|
- DB_PORT=<number> # default ist auf 3306 gesetzt
|
||||||
- DB_NAME=ffadmin
|
- DB_NAME=ffadmin
|
||||||
|
@ -44,7 +44,7 @@ services:
|
||||||
- CLUB_WEBSITE=<tobemodified>
|
- CLUB_WEBSITE=<tobemodified>
|
||||||
- BACKUP_INTERVAL=<number of days (min. 1)> # alle x Tage, sonst keine
|
- BACKUP_INTERVAL=<number of days (min. 1)> # alle x Tage, sonst keine
|
||||||
- BACKUP_COPIES=<number of parallel copies> # Anzahl parallel bestehender Backups
|
- BACKUP_COPIES=<number of parallel copies> # Anzahl parallel bestehender Backups
|
||||||
- BACKUP_AUTO_RESTORE=<boolean> # default ist auf false gesetzt
|
- BACKUP_AUTO_RESTORE=<boolean> # default ist auf true gesetzt
|
||||||
volumes:
|
volumes:
|
||||||
- <volume|local path>:/app/files
|
- <volume|local path>:/app/files
|
||||||
networks:
|
networks:
|
||||||
|
@ -65,11 +65,27 @@ services:
|
||||||
- <volume|local path>:/var/lib/mysql
|
- <volume|local path>:/var/lib/mysql
|
||||||
networks:
|
networks:
|
||||||
- ff_internal
|
- ff_internal
|
||||||
|
# OR
|
||||||
|
image: postgres:16
|
||||||
|
container_name: ff_db
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=ffadmin
|
||||||
|
- POSTGRES_USER=administration_backend
|
||||||
|
- POSTGRES_PASSWORD=<dbuserpasswd>
|
||||||
|
volumes:
|
||||||
|
- <volume|local path>:/var/lib/postgresql/data
|
||||||
|
networks:
|
||||||
|
- ff_internal
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
ff_internal:
|
ff_internal:
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Die Verwendung von postgres wird aufgrund des Verhaltens bei Struktur-Update-Fehlern und genauerer Datum-Berechnungen empfohlen.
|
||||||
|
|
||||||
|
Die Verwendung von SQLite wird nur für die Entwicklung oder lokale Tests empfohlen.
|
||||||
|
|
||||||
Führen Sie dann den folgenden Befehl im Verzeichnis der compose-Datei aus, um den Container zu starten:
|
Führen Sie dann den folgenden Befehl im Verzeichnis der compose-Datei aus, um den Container zu starten:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
|
1170
package-lock.json
generated
1170
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -43,6 +43,7 @@
|
||||||
"rss-parser": "^3.13.0",
|
"rss-parser": "^3.13.0",
|
||||||
"socket.io": "^4.7.5",
|
"socket.io": "^4.7.5",
|
||||||
"speakeasy": "^2.0.0",
|
"speakeasy": "^2.0.0",
|
||||||
|
"sqlite3": "^5.1.7",
|
||||||
"typeorm": "^0.3.20",
|
"typeorm": "^0.3.20",
|
||||||
"uuid": "^10.0.0"
|
"uuid": "^10.0.0"
|
||||||
},
|
},
|
||||||
|
|
|
@ -50,7 +50,7 @@ import { CreateSchema1738166167472 } from "./migrations/1738166167472-CreateSche
|
||||||
|
|
||||||
const dataSource = new DataSource({
|
const dataSource = new DataSource({
|
||||||
type: DB_TYPE as any,
|
type: DB_TYPE as any,
|
||||||
host: process.env.NODE_ENV || process.env.DBMODE ? "localhost" : DB_HOST,
|
host: DB_HOST,
|
||||||
port: DB_PORT,
|
port: DB_PORT,
|
||||||
username: DB_USERNAME,
|
username: DB_USERNAME,
|
||||||
password: DB_PASSWORD,
|
password: DB_PASSWORD,
|
||||||
|
|
|
@ -8,18 +8,20 @@ import {
|
||||||
UpdateDateColumn,
|
UpdateDateColumn,
|
||||||
AfterUpdate,
|
AfterUpdate,
|
||||||
BeforeUpdate,
|
BeforeUpdate,
|
||||||
|
ColumnType,
|
||||||
} from "typeorm";
|
} from "typeorm";
|
||||||
import { calendarType } from "../settings/calendarType";
|
import { calendarType } from "../settings/calendarType";
|
||||||
|
import { getTypeByORM } from "../../migrations/ormHelper";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class calendar {
|
export class calendar {
|
||||||
@PrimaryGeneratedColumn("uuid")
|
@PrimaryGeneratedColumn("uuid")
|
||||||
id: string;
|
id: string;
|
||||||
|
|
||||||
@Column({ type: "datetime", nullable: false })
|
@Column({ type: getTypeByORM("datetime").type as ColumnType })
|
||||||
starttime: Date;
|
starttime: Date;
|
||||||
|
|
||||||
@Column({ type: "datetime", nullable: false })
|
@Column({ type: getTypeByORM("datetime").type as ColumnType })
|
||||||
endtime: Date;
|
endtime: Date;
|
||||||
|
|
||||||
@Column({ type: "varchar", length: 255, nullable: false })
|
@Column({ type: "varchar", length: 255, nullable: false })
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
import { Column, Entity, JoinColumn, ManyToOne, OneToMany, OneToOne, PrimaryColumn } from "typeorm";
|
import { Column, ColumnType, Entity, JoinColumn, ManyToOne, OneToMany, OneToOne, PrimaryColumn } from "typeorm";
|
||||||
import { membership } from "./membership";
|
import { membership } from "./membership";
|
||||||
import { memberAwards } from "./memberAwards";
|
import { memberAwards } from "./memberAwards";
|
||||||
import { memberQualifications } from "./memberQualifications";
|
import { memberQualifications } from "./memberQualifications";
|
||||||
import { memberExecutivePositions } from "./memberExecutivePositions";
|
import { memberExecutivePositions } from "./memberExecutivePositions";
|
||||||
import { communication } from "./communication";
|
import { communication } from "./communication";
|
||||||
import { salutation } from "../../settings/salutation";
|
import { salutation } from "../../settings/salutation";
|
||||||
|
import { getTypeByORM } from "../../../migrations/ormHelper";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class member {
|
export class member {
|
||||||
|
@ -20,7 +21,7 @@ export class member {
|
||||||
@Column({ type: "varchar", length: 255 })
|
@Column({ type: "varchar", length: 255 })
|
||||||
nameaffix: string;
|
nameaffix: string;
|
||||||
|
|
||||||
@Column({ type: "date" })
|
@Column({ type: getTypeByORM("date").type as ColumnType })
|
||||||
birthdate: Date;
|
birthdate: Date;
|
||||||
|
|
||||||
@Column({ type: "varchar", length: 255, unique: true, nullable: true })
|
@Column({ type: "varchar", length: 255, unique: true, nullable: true })
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Column, Entity, ManyToOne, PrimaryColumn } from "typeorm";
|
import { Column, ColumnType, Entity, ManyToOne, PrimaryColumn } from "typeorm";
|
||||||
import { member } from "./member";
|
import { member } from "./member";
|
||||||
import { award } from "../../settings/award";
|
import { award } from "../../settings/award";
|
||||||
|
import { getTypeByORM } from "../../../migrations/ormHelper";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class memberAwards {
|
export class memberAwards {
|
||||||
|
@ -13,7 +14,7 @@ export class memberAwards {
|
||||||
@Column({ type: "varchar", length: 255, nullable: true })
|
@Column({ type: "varchar", length: 255, nullable: true })
|
||||||
note?: string;
|
note?: string;
|
||||||
|
|
||||||
@Column({ type: "date" })
|
@Column({ type: getTypeByORM("date").type as ColumnType })
|
||||||
date: Date;
|
date: Date;
|
||||||
|
|
||||||
@Column()
|
@Column()
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Column, Entity, ManyToOne, PrimaryColumn } from "typeorm";
|
import { Column, ColumnType, Entity, ManyToOne, PrimaryColumn } from "typeorm";
|
||||||
import { member } from "./member";
|
import { member } from "./member";
|
||||||
import { executivePosition } from "../../settings/executivePosition";
|
import { executivePosition } from "../../settings/executivePosition";
|
||||||
|
import { getTypeByORM } from "../../../migrations/ormHelper";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class memberExecutivePositions {
|
export class memberExecutivePositions {
|
||||||
|
@ -10,10 +11,10 @@ export class memberExecutivePositions {
|
||||||
@Column({ type: "varchar", length: 255, nullable: true })
|
@Column({ type: "varchar", length: 255, nullable: true })
|
||||||
note?: string;
|
note?: string;
|
||||||
|
|
||||||
@Column({ type: "date" })
|
@Column({ type: getTypeByORM("date").type as ColumnType })
|
||||||
start: Date;
|
start: Date;
|
||||||
|
|
||||||
@Column({ type: "date", nullable: true })
|
@Column({ type: getTypeByORM("date").type as ColumnType, nullable: true })
|
||||||
end?: Date;
|
end?: Date;
|
||||||
|
|
||||||
@Column()
|
@Column()
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Column, Entity, ManyToOne, PrimaryColumn } from "typeorm";
|
import { Column, ColumnType, Entity, ManyToOne, PrimaryColumn } from "typeorm";
|
||||||
import { member } from "./member";
|
import { member } from "./member";
|
||||||
import { qualification } from "../../settings/qualification";
|
import { qualification } from "../../settings/qualification";
|
||||||
|
import { getTypeByORM } from "../../../migrations/ormHelper";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class memberQualifications {
|
export class memberQualifications {
|
||||||
|
@ -10,10 +11,10 @@ export class memberQualifications {
|
||||||
@Column({ type: "varchar", length: 255, nullable: true })
|
@Column({ type: "varchar", length: 255, nullable: true })
|
||||||
note?: string;
|
note?: string;
|
||||||
|
|
||||||
@Column({ type: "date" })
|
@Column({ type: getTypeByORM("date").type as ColumnType })
|
||||||
start: Date;
|
start: Date;
|
||||||
|
|
||||||
@Column({ type: "date", nullable: true })
|
@Column({ type: getTypeByORM("date").type as ColumnType, nullable: true })
|
||||||
end?: Date;
|
end?: Date;
|
||||||
|
|
||||||
@Column({ type: "varchar", length: 255, nullable: true })
|
@Column({ type: "varchar", length: 255, nullable: true })
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm";
|
import { Column, ColumnType, Entity, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm";
|
||||||
import { member } from "./member";
|
import { member } from "./member";
|
||||||
import { membershipStatus } from "../../settings/membershipStatus";
|
import { membershipStatus } from "../../settings/membershipStatus";
|
||||||
|
import { getTypeByORM } from "../../../migrations/ormHelper";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class membership {
|
export class membership {
|
||||||
@PrimaryColumn({ generated: "increment", type: "int" })
|
@PrimaryColumn({ generated: "increment", type: "int" })
|
||||||
id: number;
|
id: number;
|
||||||
|
|
||||||
@Column({ type: "date" })
|
@Column({ type: getTypeByORM("date").type as ColumnType })
|
||||||
start: Date;
|
start: Date;
|
||||||
|
|
||||||
@Column({ type: "date", nullable: true })
|
@Column({ type: getTypeByORM("date").type as ColumnType, nullable: true })
|
||||||
end?: Date;
|
end?: Date;
|
||||||
|
|
||||||
@Column({ type: "varchar", length: 255, nullable: true })
|
@Column({ type: "varchar", length: 255, nullable: true })
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import { Column, Entity, OneToMany, PrimaryColumn } from "typeorm";
|
import { Column, ColumnType, Entity, OneToMany, PrimaryColumn } from "typeorm";
|
||||||
import { protocolAgenda } from "./protocolAgenda";
|
import { protocolAgenda } from "./protocolAgenda";
|
||||||
import { protocolDecision } from "./protocolDecision";
|
import { protocolDecision } from "./protocolDecision";
|
||||||
import { protocolPresence } from "./protocolPresence";
|
import { protocolPresence } from "./protocolPresence";
|
||||||
import { protocolPrintout } from "./protocolPrintout";
|
import { protocolPrintout } from "./protocolPrintout";
|
||||||
import { protocolVoting } from "./protocolVoting";
|
import { protocolVoting } from "./protocolVoting";
|
||||||
|
import { getTypeByORM } from "../../../migrations/ormHelper";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class protocol {
|
export class protocol {
|
||||||
|
@ -13,13 +14,13 @@ export class protocol {
|
||||||
@Column({ type: "varchar", length: 255, unique: true })
|
@Column({ type: "varchar", length: 255, unique: true })
|
||||||
title: string;
|
title: string;
|
||||||
|
|
||||||
@Column({ type: "date" })
|
@Column({ type: getTypeByORM("date").type as ColumnType })
|
||||||
date: Date;
|
date: Date;
|
||||||
|
|
||||||
@Column({ type: "time", nullable: true })
|
@Column({ type: getTypeByORM("time").type as ColumnType, nullable: true })
|
||||||
starttime: Date;
|
starttime: Date;
|
||||||
|
|
||||||
@Column({ type: "time", nullable: true })
|
@Column({ type: getTypeByORM("time").type as ColumnType, nullable: true })
|
||||||
endtime: Date;
|
endtime: Date;
|
||||||
|
|
||||||
@Column({ type: "text", nullable: true })
|
@Column({ type: "text", nullable: true })
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { Column, Entity, ManyToOne, PrimaryColumn } from "typeorm";
|
import { Column, ColumnType, Entity, ManyToOne, PrimaryColumn } from "typeorm";
|
||||||
import { user } from "./user/user";
|
import { user } from "./user/user";
|
||||||
|
import { getTypeByORM } from "../migrations/ormHelper";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class refresh {
|
export class refresh {
|
||||||
|
@ -9,7 +10,7 @@ export class refresh {
|
||||||
@PrimaryColumn()
|
@PrimaryColumn()
|
||||||
userId: string;
|
userId: string;
|
||||||
|
|
||||||
@Column({ type: "datetime" })
|
@Column({ type: getTypeByORM("datetime").type as ColumnType })
|
||||||
expiry: Date;
|
expiry: Date;
|
||||||
|
|
||||||
@ManyToOne(() => user, {
|
@ManyToOne(() => user, {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { Column, CreateDateColumn, Entity, OneToMany, PrimaryColumn } from "typeorm";
|
import { Column, ColumnType, CreateDateColumn, Entity, OneToMany, PrimaryColumn } from "typeorm";
|
||||||
import { webapiPermission } from "./webapi_permission";
|
import { webapiPermission } from "./webapi_permission";
|
||||||
|
import { getTypeByORM } from "../../migrations/ormHelper";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class webapi {
|
export class webapi {
|
||||||
|
@ -15,10 +16,10 @@ export class webapi {
|
||||||
@CreateDateColumn()
|
@CreateDateColumn()
|
||||||
createdAt: Date;
|
createdAt: Date;
|
||||||
|
|
||||||
@Column({ type: "datetime", nullable: true })
|
@Column({ type: getTypeByORM("datetime").type as ColumnType, nullable: true })
|
||||||
lastUsage?: Date;
|
lastUsage?: Date;
|
||||||
|
|
||||||
@Column({ type: "date", nullable: true })
|
@Column({ type: getTypeByORM("date").type as ColumnType, nullable: true })
|
||||||
expiry?: Date;
|
expiry?: Date;
|
||||||
|
|
||||||
@OneToMany(() => webapiPermission, (apiPermission) => apiPermission.webapi, { cascade: ["insert"] })
|
@OneToMany(() => webapiPermission, (apiPermission) => apiPermission.webapi, { cascade: ["insert"] })
|
||||||
|
|
|
@ -26,14 +26,18 @@ export const CLUB_WEBSITE = process.env.CLUB_WEBSITE ?? "";
|
||||||
|
|
||||||
export const BACKUP_INTERVAL = Number(process.env.BACKUP_INTERVAL ?? "0");
|
export const BACKUP_INTERVAL = Number(process.env.BACKUP_INTERVAL ?? "0");
|
||||||
export const BACKUP_COPIES = Number(process.env.BACKUP_COPIES ?? "0");
|
export const BACKUP_COPIES = Number(process.env.BACKUP_COPIES ?? "0");
|
||||||
export const BACKUP_AUTO_RESTORE = process.env.BACKUP_AUTO_RESTORE ?? "false";
|
export const BACKUP_AUTO_RESTORE = process.env.BACKUP_AUTO_RESTORE ?? "true";
|
||||||
|
|
||||||
export function configCheck() {
|
export function configCheck() {
|
||||||
if (DB_TYPE != "mysql" && DB_TYPE != "sqlite") throw new Error("set valid value to DB_TYPE (mysql|sqlite)");
|
if (DB_TYPE != "mysql" && DB_TYPE != "sqlite" && DB_TYPE != "postgres")
|
||||||
if (DB_HOST == "" || typeof DB_HOST != "string") throw new Error("set valid value to DB_HOST");
|
throw new Error("set valid value to DB_TYPE (mysql|sqlite|postgres)");
|
||||||
|
if ((DB_HOST == "" || typeof DB_HOST != "string") && DB_TYPE != "sqlite")
|
||||||
|
throw new Error("set valid value to DB_HOST");
|
||||||
if (DB_NAME == "" || typeof DB_NAME != "string") throw new Error("set valid value to DB_NAME");
|
if (DB_NAME == "" || typeof DB_NAME != "string") throw new Error("set valid value to DB_NAME");
|
||||||
if (DB_USERNAME == "" || typeof DB_USERNAME != "string") throw new Error("set valid value to DB_USERNAME");
|
if ((DB_USERNAME == "" || typeof DB_USERNAME != "string") && DB_TYPE != "sqlite")
|
||||||
if (DB_PASSWORD == "" || typeof DB_PASSWORD != "string") throw new Error("set valid value to DB_PASSWORD");
|
throw new Error("set valid value to DB_USERNAME");
|
||||||
|
if ((DB_PASSWORD == "" || typeof DB_PASSWORD != "string") && DB_TYPE != "sqlite")
|
||||||
|
throw new Error("set valid value to DB_PASSWORD");
|
||||||
|
|
||||||
if (typeof SERVER_PORT != "number") throw new Error("set valid numeric value to SERVER_PORT");
|
if (typeof SERVER_PORT != "number") throw new Error("set valid numeric value to SERVER_PORT");
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
import { MigrationInterface, QueryRunner, Table } from "typeorm";
|
import { MigrationInterface, QueryRunner, Table } from "typeorm";
|
||||||
import BackupHelper from "../helpers/backupHelper";
|
import BackupHelper from "../helpers/backupHelper";
|
||||||
import { getTypeByORM } from "./ormHelper";
|
import { getDefaultByORM, getTypeByORM, isIncrementPrimary } from "./ormHelper";
|
||||||
import InternalException from "../exceptions/internalException";
|
import InternalException from "../exceptions/internalException";
|
||||||
|
import { DB_TYPE } from "../env.defaults";
|
||||||
|
|
||||||
export class BackupAndResetDatabase1738166124200 implements MigrationInterface {
|
export class BackupAndResetDatabase1738166124200 implements MigrationInterface {
|
||||||
name = "BackupAndResetDatabase1738166124200";
|
name = "BackupAndResetDatabase1738166124200";
|
||||||
|
|
||||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
let migrations = await queryRunner.query("SELECT `name` FROM `migrations`");
|
let query = DB_TYPE == "postgres" ? "SELECT name FROM migrations" : "SELECT `name` FROM `migrations`";
|
||||||
|
let migrations = await queryRunner.query(query);
|
||||||
if (
|
if (
|
||||||
(await queryRunner.hasTable("user")) &&
|
(await queryRunner.hasTable("user")) &&
|
||||||
migrations.findIndex((m: any) => m.name == "MoveSendNewsletterFlag1737816852011") == -1
|
migrations.findIndex((m: any) => m.name == "MoveSendNewsletterFlag1737816852011") == -1
|
||||||
|
@ -26,15 +28,9 @@ export class BackupAndResetDatabase1738166124200 implements MigrationInterface {
|
||||||
new Table({
|
new Table({
|
||||||
name: "migrations",
|
name: "migrations",
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
name: "id",
|
{ name: "timestamp", ...getTypeByORM("bigint") },
|
||||||
type: getTypeByORM("int"),
|
{ name: "name", ...getTypeByORM("varchar") },
|
||||||
isPrimary: true,
|
|
||||||
isGenerated: true,
|
|
||||||
generationStrategy: "increment",
|
|
||||||
},
|
|
||||||
{ name: "timestamp", type: getTypeByORM("bigint"), isNullable: false },
|
|
||||||
{ name: "name", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
|
||||||
],
|
],
|
||||||
}),
|
}),
|
||||||
true
|
true
|
||||||
|
@ -44,12 +40,12 @@ export class BackupAndResetDatabase1738166124200 implements MigrationInterface {
|
||||||
new Table({
|
new Table({
|
||||||
name: "typeorm_metadata",
|
name: "typeorm_metadata",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "type", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "type", ...getTypeByORM("varchar") },
|
||||||
{ name: "database", type: getTypeByORM("varchar"), length: "255", isNullable: true, default: null },
|
{ name: "database", ...getTypeByORM("varchar", true), default: getDefaultByORM("null") },
|
||||||
{ name: "schema", type: getTypeByORM("varchar"), length: "255", isNullable: true, default: null },
|
{ name: "schema", ...getTypeByORM("varchar", true), default: getDefaultByORM("null") },
|
||||||
{ name: "table", type: getTypeByORM("varchar"), length: "255", isNullable: true, default: null },
|
{ name: "table", ...getTypeByORM("varchar", true), default: getDefaultByORM("null") },
|
||||||
{ name: "name", type: getTypeByORM("varchar"), length: "255", isNullable: true, default: null },
|
{ name: "name", ...getTypeByORM("varchar", true), default: getDefaultByORM("null") },
|
||||||
{ name: "value", type: getTypeByORM("text"), length: "255", isNullable: true, default: null },
|
{ name: "value", ...getTypeByORM("text", true), default: getDefaultByORM("null") },
|
||||||
],
|
],
|
||||||
}),
|
}),
|
||||||
true
|
true
|
||||||
|
|
|
@ -20,13 +20,17 @@ import {
|
||||||
member_communication_table,
|
member_communication_table,
|
||||||
member_executive_positions_table,
|
member_executive_positions_table,
|
||||||
member_executive_positions_view,
|
member_executive_positions_view,
|
||||||
|
member_executive_positions_view_postgres,
|
||||||
member_qualifications_table,
|
member_qualifications_table,
|
||||||
member_qualifications_view,
|
member_qualifications_view,
|
||||||
|
member_qualifications_view_postgres,
|
||||||
member_table,
|
member_table,
|
||||||
member_view,
|
member_view,
|
||||||
|
member_view_postgres,
|
||||||
membership_status_table,
|
membership_status_table,
|
||||||
membership_table,
|
membership_table,
|
||||||
membership_view,
|
membership_view,
|
||||||
|
membership_view_postgres,
|
||||||
qualification_table,
|
qualification_table,
|
||||||
salutation_table,
|
salutation_table,
|
||||||
} from "./baseSchemaTables/member";
|
} from "./baseSchemaTables/member";
|
||||||
|
@ -46,6 +50,7 @@ import {
|
||||||
newsletter_recipients_table,
|
newsletter_recipients_table,
|
||||||
newsletter_table,
|
newsletter_table,
|
||||||
} from "./baseSchemaTables/newsletter";
|
} from "./baseSchemaTables/newsletter";
|
||||||
|
import { DB_TYPE } from "../env.defaults";
|
||||||
|
|
||||||
export class CreateSchema1738166167472 implements MigrationInterface {
|
export class CreateSchema1738166167472 implements MigrationInterface {
|
||||||
name = "CreateSchema1738166167472";
|
name = "CreateSchema1738166167472";
|
||||||
|
@ -75,10 +80,14 @@ export class CreateSchema1738166167472 implements MigrationInterface {
|
||||||
await queryRunner.createTable(member_executive_positions_table, true, true, true);
|
await queryRunner.createTable(member_executive_positions_table, true, true, true);
|
||||||
await queryRunner.createTable(member_qualifications_table, true, true, true);
|
await queryRunner.createTable(member_qualifications_table, true, true, true);
|
||||||
|
|
||||||
await queryRunner.createView(member_view, true);
|
if (DB_TYPE == "postgres") await queryRunner.createView(member_view_postgres, true);
|
||||||
await queryRunner.createView(membership_view, true);
|
else await queryRunner.createView(member_view, true);
|
||||||
await queryRunner.createView(member_qualifications_view, true);
|
if (DB_TYPE == "postgres") await queryRunner.createView(membership_view_postgres, true);
|
||||||
await queryRunner.createView(member_executive_positions_view, true);
|
else await queryRunner.createView(membership_view, true);
|
||||||
|
if (DB_TYPE == "postgres") await queryRunner.createView(member_qualifications_view_postgres, true);
|
||||||
|
else await queryRunner.createView(member_qualifications_view, true);
|
||||||
|
if (DB_TYPE == "postgres") await queryRunner.createView(member_executive_positions_view_postgres, true);
|
||||||
|
else await queryRunner.createView(member_executive_positions_view, true);
|
||||||
|
|
||||||
await queryRunner.createTable(query_table, true, true, true);
|
await queryRunner.createTable(query_table, true, true, true);
|
||||||
await queryRunner.createTable(template_table, true, true, true);
|
await queryRunner.createTable(template_table, true, true, true);
|
||||||
|
|
|
@ -1,36 +1,30 @@
|
||||||
import { Table, TableForeignKey } from "typeorm";
|
import { Table, TableForeignKey } from "typeorm";
|
||||||
import { getTypeByORM } from "../ormHelper";
|
import { getDefaultByORM, getTypeByORM, isIncrementPrimary, isUUIDPrimary } from "../ormHelper";
|
||||||
|
|
||||||
export const invite_table = new Table({
|
export const invite_table = new Table({
|
||||||
name: "invite",
|
name: "invite",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "mail", type: getTypeByORM("varchar"), length: "255", isPrimary: true },
|
{ name: "mail", ...getTypeByORM("varchar"), isPrimary: true },
|
||||||
{ name: "token", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "token", ...getTypeByORM("varchar") },
|
||||||
{ name: "username", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "username", ...getTypeByORM("varchar") },
|
||||||
{ name: "firstname", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "firstname", ...getTypeByORM("varchar") },
|
||||||
{ name: "lastname", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "lastname", ...getTypeByORM("varchar") },
|
||||||
{ name: "secret", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "secret", ...getTypeByORM("varchar") },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
export const role_table = new Table({
|
export const role_table = new Table({
|
||||||
name: "role",
|
name: "role",
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
name: "id",
|
{ name: "role", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
type: getTypeByORM("int"),
|
|
||||||
isPrimary: true,
|
|
||||||
isGenerated: true,
|
|
||||||
generationStrategy: "increment",
|
|
||||||
},
|
|
||||||
{ name: "role", type: getTypeByORM("varchar"), length: "255", isNullable: false, isUnique: true },
|
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const role_permission_table = new Table({
|
export const role_permission_table = new Table({
|
||||||
name: "role_permission",
|
name: "role_permission",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "roleId", type: getTypeByORM("int"), isPrimary: true },
|
{ name: "roleId", ...getTypeByORM("int"), isPrimary: true },
|
||||||
{ name: "permission", type: getTypeByORM("varchar"), length: "255", isPrimary: true },
|
{ name: "permission", ...getTypeByORM("varchar"), isPrimary: true },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -46,29 +40,22 @@ export const role_permission_table = new Table({
|
||||||
export const user_table = new Table({
|
export const user_table = new Table({
|
||||||
name: "user",
|
name: "user",
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
|
||||||
name: "id",
|
{ name: "mail", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
type: getTypeByORM("varchar"),
|
{ name: "username", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
length: "36",
|
{ name: "firstname", ...getTypeByORM("varchar") },
|
||||||
isPrimary: true,
|
{ name: "lastname", ...getTypeByORM("varchar") },
|
||||||
isGenerated: true,
|
{ name: "secret", ...getTypeByORM("varchar") },
|
||||||
generationStrategy: "uuid",
|
{ name: "static", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
|
||||||
},
|
{ name: "isOwner", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
|
||||||
{ name: "mail", type: getTypeByORM("varchar"), length: "255", isNullable: false, isUnique: true },
|
|
||||||
{ name: "username", type: getTypeByORM("varchar"), length: "255", isNullable: false, isUnique: true },
|
|
||||||
{ name: "firstname", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
|
||||||
{ name: "lastname", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
|
||||||
{ name: "secret", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
|
||||||
{ name: "static", type: getTypeByORM("boolean"), isNullable: false, default: false },
|
|
||||||
{ name: "isOwner", type: getTypeByORM("boolean"), isNullable: false, default: false },
|
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const user_roles_table = new Table({
|
export const user_roles_table = new Table({
|
||||||
name: "user_roles",
|
name: "user_roles",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "userId", type: getTypeByORM("varchar"), isPrimary: true },
|
{ name: "userId", ...getTypeByORM("uuid"), isPrimary: true },
|
||||||
{ name: "roleId", type: getTypeByORM("int"), isPrimary: true },
|
{ name: "roleId", ...getTypeByORM("int"), isPrimary: true },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -91,8 +78,8 @@ export const user_roles_table = new Table({
|
||||||
export const user_permission_table = new Table({
|
export const user_permission_table = new Table({
|
||||||
name: "user_permission",
|
name: "user_permission",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "userId", type: getTypeByORM("varchar"), isPrimary: true },
|
{ name: "userId", ...getTypeByORM("uuid"), isPrimary: true },
|
||||||
{ name: "permission", type: getTypeByORM("varchar"), length: "255", isPrimary: true },
|
{ name: "permission", ...getTypeByORM("varchar"), isPrimary: true },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -108,9 +95,9 @@ export const user_permission_table = new Table({
|
||||||
export const refresh_table = new Table({
|
export const refresh_table = new Table({
|
||||||
name: "refresh",
|
name: "refresh",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "token", type: getTypeByORM("varchar"), length: "255", isPrimary: true, isNullable: false },
|
{ name: "token", ...getTypeByORM("varchar"), isPrimary: true },
|
||||||
{ name: "expiry", type: getTypeByORM("datetime"), isNullable: false },
|
{ name: "expiry", ...getTypeByORM("datetime", false, 6) },
|
||||||
{ name: "userId", type: getTypeByORM("varchar"), isPrimary: true, isNullable: false },
|
{ name: "userId", ...getTypeByORM("uuid"), isPrimary: true },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -126,26 +113,20 @@ export const refresh_table = new Table({
|
||||||
export const webapi_table = new Table({
|
export const webapi_table = new Table({
|
||||||
name: "webapi",
|
name: "webapi",
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
name: "id",
|
{ name: "token", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
type: getTypeByORM("int"),
|
{ name: "title", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
isPrimary: true,
|
{ name: "createdAt", ...getTypeByORM("datetime", false, 6), default: getDefaultByORM("currentTimestamp", 6) },
|
||||||
isGenerated: true,
|
{ name: "lastUsage", ...getTypeByORM("datetime", true, 6), default: getDefaultByORM("null") },
|
||||||
generationStrategy: "increment",
|
{ name: "expiry", ...getTypeByORM("date", true), default: getDefaultByORM("null") },
|
||||||
},
|
|
||||||
{ name: "token", type: getTypeByORM("varchar"), length: "255", isNullable: false, isUnique: true },
|
|
||||||
{ name: "title", type: getTypeByORM("varchar"), length: "255", isNullable: false, isUnique: true },
|
|
||||||
{ name: "createdAt", type: getTypeByORM("datetime"), isNullable: false, default: "CURRENT_TIMESTAMP(6)" },
|
|
||||||
{ name: "lastUsage", type: getTypeByORM("datetime"), isNullable: true, default: null },
|
|
||||||
{ name: "expiry", type: getTypeByORM("date"), isNullable: true, default: null },
|
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const webapi_permission_table = new Table({
|
export const webapi_permission_table = new Table({
|
||||||
name: "webapi_permission",
|
name: "webapi_permission",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "webapiId", type: getTypeByORM("int"), isPrimary: true },
|
{ name: "webapiId", ...getTypeByORM("int"), isPrimary: true },
|
||||||
{ name: "permission", type: getTypeByORM("varchar"), length: "255", isPrimary: true },
|
{ name: "permission", ...getTypeByORM("varchar"), isPrimary: true },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -161,9 +142,9 @@ export const webapi_permission_table = new Table({
|
||||||
export const reset_table = new Table({
|
export const reset_table = new Table({
|
||||||
name: "reset",
|
name: "reset",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "mail", type: getTypeByORM("varchar"), length: "255", isPrimary: true },
|
{ name: "mail", ...getTypeByORM("varchar"), isPrimary: true },
|
||||||
{ name: "token", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "token", ...getTypeByORM("varchar") },
|
||||||
{ name: "username", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "username", ...getTypeByORM("varchar") },
|
||||||
{ name: "secret", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "secret", ...getTypeByORM("varchar") },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,61 +1,39 @@
|
||||||
import { Table, TableForeignKey } from "typeorm";
|
import { Table, TableForeignKey } from "typeorm";
|
||||||
import { getTypeByORM } from "../ormHelper";
|
import { getDefaultByORM, getTypeByORM, isIncrementPrimary, isUUIDPrimary } from "../ormHelper";
|
||||||
|
|
||||||
export const calendar_type_table = new Table({
|
export const calendar_type_table = new Table({
|
||||||
name: "calendar_type",
|
name: "calendar_type",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "type", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
{ name: "type", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
{ name: "nscdr", type: getTypeByORM("boolean"), isNullable: false, default: false },
|
{ name: "nscdr", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
|
||||||
{ name: "color", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "color", ...getTypeByORM("varchar") },
|
||||||
{ name: "passphrase", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "passphrase", ...getTypeByORM("varchar", true) },
|
||||||
{ name: "externalPrefix", type: getTypeByORM("varchar"), length: "255", isNullable: false, default: "''" },
|
{ name: "externalPrefix", ...getTypeByORM("varchar"), default: getDefaultByORM("string") },
|
||||||
{ name: "sendToWebpage", type: getTypeByORM("boolean"), isNullable: false, default: false },
|
{ name: "sendToWebpage", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const calendar_table = new Table({
|
export const calendar_table = new Table({
|
||||||
name: "calendar",
|
name: "calendar",
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
|
||||||
name: "id",
|
{ name: "starttime", ...getTypeByORM("datetime", false, 6) },
|
||||||
type: getTypeByORM("varchar"),
|
{ name: "endtime", ...getTypeByORM("datetime", false, 6) },
|
||||||
length: "36",
|
{ name: "title", ...getTypeByORM("varchar") },
|
||||||
isPrimary: true,
|
{ name: "content", ...getTypeByORM("text", true) },
|
||||||
isGenerated: true,
|
{ name: "allDay", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
|
||||||
generationStrategy: "uuid",
|
{ name: "location", ...getTypeByORM("text", true) },
|
||||||
},
|
{ name: "sequence", ...getTypeByORM("int"), default: getDefaultByORM("number", 1) },
|
||||||
{ name: "starttime", type: getTypeByORM("datetime"), isNullable: false },
|
{ name: "createdAt", ...getTypeByORM("datetime", false, 6), default: getDefaultByORM("currentTimestamp", 6) },
|
||||||
{ name: "endtime", type: getTypeByORM("datetime"), isNullable: false },
|
|
||||||
{ name: "title", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
|
||||||
{ name: "content", type: getTypeByORM("text"), isNullable: true },
|
|
||||||
{ name: "allDay", type: getTypeByORM("boolean"), isNullable: false, default: false },
|
|
||||||
{ name: "location", type: getTypeByORM("text"), isNullable: true },
|
|
||||||
{ name: "sequence", type: getTypeByORM("int"), default: 1 },
|
|
||||||
{
|
|
||||||
name: "createdAt",
|
|
||||||
type: getTypeByORM("datetime"),
|
|
||||||
precision: 6,
|
|
||||||
isNullable: false,
|
|
||||||
default: "CURRENT_TIMESTAMP(6)",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "updatedAt",
|
name: "updatedAt",
|
||||||
type: getTypeByORM("datetime"),
|
...getTypeByORM("datetime", false, 6),
|
||||||
precision: 6,
|
default: getDefaultByORM("currentTimestamp", 6),
|
||||||
isNullable: false,
|
onUpdate: getDefaultByORM<string>("currentTimestamp", 6),
|
||||||
default: "CURRENT_TIMESTAMP(6)",
|
|
||||||
onUpdate: "CURRENT_TIMESTAMP(6)",
|
|
||||||
},
|
},
|
||||||
{
|
{ name: "webpageId", ...getTypeByORM("varchar", true), default: getDefaultByORM("null"), isUnique: true },
|
||||||
name: "webpageId",
|
{ name: "typeId", ...getTypeByORM("int") },
|
||||||
type: getTypeByORM("varchar"),
|
|
||||||
length: "255",
|
|
||||||
isNullable: true,
|
|
||||||
default: null,
|
|
||||||
isUnique: true,
|
|
||||||
},
|
|
||||||
{ name: "typeId", type: getTypeByORM("int"), isNullable: false },
|
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
|
|
@ -1,53 +1,53 @@
|
||||||
import { Table, TableForeignKey, View } from "typeorm";
|
import { Table, TableForeignKey, View } from "typeorm";
|
||||||
import { getTypeByORM } from "../ormHelper";
|
import { getDefaultByORM, getTypeByORM, isIncrementPrimary, isUUIDPrimary } from "../ormHelper";
|
||||||
|
|
||||||
export const salutation_table = new Table({
|
export const salutation_table = new Table({
|
||||||
name: "salutation",
|
name: "salutation",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "salutation", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
{ name: "salutation", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const award_table = new Table({
|
export const award_table = new Table({
|
||||||
name: "award",
|
name: "award",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "award", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
{ name: "award", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const communication_type_table = new Table({
|
export const communication_type_table = new Table({
|
||||||
name: "communication_type",
|
name: "communication_type",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "type", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
{ name: "type", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
{ name: "useColumns", type: getTypeByORM("varchar"), length: "255", isNullable: false, default: "''" },
|
{ name: "useColumns", ...getTypeByORM("varchar"), default: getDefaultByORM("string") },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const executive_position_table = new Table({
|
export const executive_position_table = new Table({
|
||||||
name: "executive_position",
|
name: "executive_position",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "position", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
{ name: "position", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const membership_status_table = new Table({
|
export const membership_status_table = new Table({
|
||||||
name: "membership_status",
|
name: "membership_status",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "status", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
{ name: "status", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const qualification_table = new Table({
|
export const qualification_table = new Table({
|
||||||
name: "qualification",
|
name: "qualification",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "qualification", type: getTypeByORM("varchar"), length: "255", isUnique: true, isNullable: false },
|
{ name: "qualification", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
{ name: "description", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "description", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -55,27 +55,13 @@ export const qualification_table = new Table({
|
||||||
export const member_table = new Table({
|
export const member_table = new Table({
|
||||||
name: "member",
|
name: "member",
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
|
||||||
name: "id",
|
{ name: "salutationId", ...getTypeByORM("int") },
|
||||||
type: getTypeByORM("varchar"),
|
{ name: "internalId", ...getTypeByORM("varchar", true), default: getDefaultByORM("null"), isUnique: true },
|
||||||
length: "36",
|
{ name: "firstname", ...getTypeByORM("varchar") },
|
||||||
isPrimary: true,
|
{ name: "lastname", ...getTypeByORM("varchar") },
|
||||||
isGenerated: true,
|
{ name: "nameaffix", ...getTypeByORM("varchar") },
|
||||||
generationStrategy: "uuid",
|
{ name: "birthdate", ...getTypeByORM("date") },
|
||||||
},
|
|
||||||
{ 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: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -91,12 +77,12 @@ export const member_table = new Table({
|
||||||
export const membership_table = new Table({
|
export const membership_table = new Table({
|
||||||
name: "membership",
|
name: "membership",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "start", type: getTypeByORM("date"), isNullable: false },
|
{ name: "start", ...getTypeByORM("date") },
|
||||||
{ name: "end", type: getTypeByORM("date"), isNullable: true },
|
{ name: "end", ...getTypeByORM("date", true) },
|
||||||
{ name: "terminationReason", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "terminationReason", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
{ name: "memberId", type: getTypeByORM("varchar"), isNullable: false },
|
{ name: "memberId", ...getTypeByORM("uuid") },
|
||||||
{ name: "statusId", type: getTypeByORM("int"), isNullable: false },
|
{ name: "statusId", ...getTypeByORM("int") },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -119,13 +105,13 @@ export const membership_table = new Table({
|
||||||
export const member_qualifications_table = new Table({
|
export const member_qualifications_table = new Table({
|
||||||
name: "member_qualifications",
|
name: "member_qualifications",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "note", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "note", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
{ name: "start", type: getTypeByORM("date"), isNullable: false },
|
{ name: "start", ...getTypeByORM("date") },
|
||||||
{ name: "end", type: getTypeByORM("date"), isNullable: true },
|
{ name: "end", ...getTypeByORM("date", true) },
|
||||||
{ name: "terminationReason", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "terminationReason", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
{ name: "memberId", type: getTypeByORM("varchar"), isNullable: false },
|
{ name: "memberId", ...getTypeByORM("uuid") },
|
||||||
{ name: "qualificationId", type: getTypeByORM("int"), isNullable: false },
|
{ name: "qualificationId", ...getTypeByORM("int") },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -148,12 +134,12 @@ export const member_qualifications_table = new Table({
|
||||||
export const member_executive_positions_table = new Table({
|
export const member_executive_positions_table = new Table({
|
||||||
name: "member_executive_positions",
|
name: "member_executive_positions",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "note", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "note", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
{ name: "start", type: getTypeByORM("date"), isNullable: false },
|
{ name: "start", ...getTypeByORM("date") },
|
||||||
{ name: "end", type: getTypeByORM("date"), isNullable: true },
|
{ name: "end", ...getTypeByORM("date", true) },
|
||||||
{ name: "memberId", type: getTypeByORM("varchar"), isNullable: false },
|
{ name: "memberId", ...getTypeByORM("uuid") },
|
||||||
{ name: "executivePositionId", type: getTypeByORM("int"), isNullable: false },
|
{ name: "executivePositionId", ...getTypeByORM("int") },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -176,12 +162,12 @@ export const member_executive_positions_table = new Table({
|
||||||
export const member_awards_table = new Table({
|
export const member_awards_table = new Table({
|
||||||
name: "member_awards",
|
name: "member_awards",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "given", type: getTypeByORM("boolean"), default: false, isNullable: false },
|
{ name: "given", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
|
||||||
{ name: "note", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "note", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
{ name: "date", type: getTypeByORM("date"), isNullable: false },
|
{ name: "date", ...getTypeByORM("date") },
|
||||||
{ name: "memberId", type: getTypeByORM("varchar"), isNullable: false },
|
{ name: "memberId", ...getTypeByORM("uuid") },
|
||||||
{ name: "awardId", type: getTypeByORM("int"), isNullable: false },
|
{ name: "awardId", ...getTypeByORM("int") },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -204,19 +190,19 @@ export const member_awards_table = new Table({
|
||||||
export const member_communication_table = new Table({
|
export const member_communication_table = new Table({
|
||||||
name: "communication",
|
name: "communication",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "preferred", type: getTypeByORM("boolean"), isNullable: false, default: false },
|
{ name: "preferred", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
|
||||||
{ name: "isSendNewsletter", type: getTypeByORM("boolean"), isNullable: false, default: false },
|
{ name: "isSendNewsletter", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
|
||||||
{ name: "isSMSAlarming", type: getTypeByORM("boolean"), isNullable: false, default: false },
|
{ name: "isSMSAlarming", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
|
||||||
{ name: "mobile", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "mobile", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
{ name: "email", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "email", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
{ name: "postalCode", type: getTypeByORM("varchar"), length: "255", default: null, isNullable: true },
|
{ name: "postalCode", ...getTypeByORM("varchar"), default: getDefaultByORM("null"), isNullable: true },
|
||||||
{ name: "city", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "city", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
{ name: "street", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "street", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
{ name: "streetNumber", type: getTypeByORM("int"), isNullable: true },
|
{ name: "streetNumber", ...getTypeByORM("int", true) },
|
||||||
{ name: "streetNumberAddition", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "streetNumberAddition", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
{ name: "memberId", type: getTypeByORM("varchar"), isNullable: false },
|
{ name: "memberId", ...getTypeByORM("uuid") },
|
||||||
{ name: "typeId", type: getTypeByORM("int"), isNullable: false },
|
{ name: "typeId", ...getTypeByORM("int") },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -247,13 +233,32 @@ export const member_view = new View({
|
||||||
\`member\`.\`nameaffix\` AS \`nameaffix\`,
|
\`member\`.\`nameaffix\` AS \`nameaffix\`,
|
||||||
\`member\`.\`birthdate\` AS \`birthdate\`,
|
\`member\`.\`birthdate\` AS \`birthdate\`,
|
||||||
\`salutation\`.\`salutation\` AS \`salutation\`,
|
\`salutation\`.\`salutation\` AS \`salutation\`,
|
||||||
TIMESTAMPDIFF(YEAR, \`member\`.\`birthdate\`, CURDATE()) AS \`todayAge\`, YEAR(CURDATE()) - YEAR(\`member\`.\`birthdate\`) AS \`ageThisYear\`,
|
TIMESTAMPDIFF(YEAR, \`member\`.\`birthdate\`, CURDATE()) AS \`todayAge\`,
|
||||||
|
YEAR(CURDATE()) - YEAR(\`member\`.\`birthdate\`) AS \`ageThisYear\`,
|
||||||
CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, \`member\`.\`birthdate\`, CURDATE()))) AS \`exactAge\`
|
CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, \`member\`.\`birthdate\`, CURDATE()))) AS \`exactAge\`
|
||||||
FROM \`member\` \`member\`
|
FROM \`member\` \`member\`
|
||||||
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
||||||
`,
|
`,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const member_view_postgres = 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",
|
||||||
|
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_executive_positions_view = new View({
|
export const member_executive_positions_view = new View({
|
||||||
name: "member_executive_positions_view",
|
name: "member_executive_positions_view",
|
||||||
expression: `
|
expression: `
|
||||||
|
@ -266,13 +271,35 @@ export const member_executive_positions_view = new View({
|
||||||
\`member\`.\`nameaffix\` AS \`memberNameaffix\`,
|
\`member\`.\`nameaffix\` AS \`memberNameaffix\`,
|
||||||
\`member\`.\`birthdate\` AS \`memberBirthdate\`,
|
\`member\`.\`birthdate\` AS \`memberBirthdate\`,
|
||||||
\`salutation\`.\`salutation\` AS \`memberSalutation\`,
|
\`salutation\`.\`salutation\` AS \`memberSalutation\`,
|
||||||
SUM(TIMESTAMPDIFF(DAY, \`memberExecutivePositions\`.\`start\`,
|
SUM(TIMESTAMPDIFF(DAY, \`memberExecutivePositions\`.\`start\`, COALESCE(\`memberExecutivePositions\`.\`end\`, CURRENT_DATE))) AS \`durationInDays\`,
|
||||||
COALESCE(\`memberExecutivePositions\`.\`end\`, CURRENT_DATE))) AS \`durationInDays\`
|
CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, \`memberExecutivePositions\`.\`start\`, COALESCE(\`memberExecutivePositions\`.\`end\`, CURRENT_DATE))))) AS \`durationInYears\`
|
||||||
FROM \`member_executive_positions\` \`memberExecutivePositions\`
|
FROM \`member_executive_positions\` \`memberExecutivePositions\`
|
||||||
LEFT JOIN \`executive_position\` \`executivePosition\` ON \`executivePosition\`.\`id\`=\`memberExecutivePositions\`.\`executivePositionId\`
|
LEFT JOIN \`executive_position\` \`executivePosition\` ON \`executivePosition\`.\`id\`=\`memberExecutivePositions\`.\`executivePositionId\`
|
||||||
LEFT JOIN \`member\` \`member\` ON \`member\`.\`id\`=\`memberExecutivePositions\`.\`memberId\`
|
LEFT JOIN \`member\` \`member\` ON \`member\`.\`id\`=\`memberExecutivePositions\`.\`memberId\`
|
||||||
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
||||||
GROUP BY \`executivePosition\`.\`id\`, \`member\`.\`id\`
|
GROUP BY \`executivePosition\`.\`id\`, \`member\`.\`id\`, \`salutation\`.\`id\`
|
||||||
|
`,
|
||||||
|
});
|
||||||
|
|
||||||
|
export const member_executive_positions_view_postgres = 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(COALESCE("memberExecutivePositions"."end", CURRENT_DATE) - "memberExecutivePositions"."start") AS "durationInDays",
|
||||||
|
SUM(AGE(COALESCE("memberExecutivePositions"."end", CURRENT_DATE), "memberExecutivePositions"."start")) AS "durationInYears"
|
||||||
|
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", "salutation"."id"
|
||||||
`,
|
`,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -288,13 +315,35 @@ export const member_qualifications_view = new View({
|
||||||
\`member\`.\`nameaffix\` AS \`memberNameaffix\`,
|
\`member\`.\`nameaffix\` AS \`memberNameaffix\`,
|
||||||
\`member\`.\`birthdate\` AS \`memberBirthdate\`,
|
\`member\`.\`birthdate\` AS \`memberBirthdate\`,
|
||||||
\`salutation\`.\`salutation\` AS \`memberSalutation\`,
|
\`salutation\`.\`salutation\` AS \`memberSalutation\`,
|
||||||
SUM(TIMESTAMPDIFF(DAY, \`memberQualifications\`.\`start\`,
|
SUM(TIMESTAMPDIFF(DAY, \`memberQualifications\`.\`start\`, COALESCE(\`memberQualifications\`.\`end\`, CURRENT_DATE))) AS \`durationInDays\`,
|
||||||
COALESCE(\`memberQualifications\`.\`end\`, CURRENT_DATE))) AS \`durationInDays\`
|
CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, \`memberQualifications\`.\`start\`, COALESCE(\`memberQualifications\`.\`end\`, CURRENT_DATE))))) AS \`durationInYears\`
|
||||||
FROM \`member_qualifications\` \`memberQualifications\`
|
FROM \`member_qualifications\` \`memberQualifications\`
|
||||||
LEFT JOIN \`qualification\` \`qualification\` ON \`qualification\`.\`id\`=\`memberQualifications\`.\`qualificationId\`
|
LEFT JOIN \`qualification\` \`qualification\` ON \`qualification\`.\`id\`=\`memberQualifications\`.\`qualificationId\`
|
||||||
LEFT JOIN \`member\` \`member\` ON \`member\`.\`id\`=\`memberQualifications\`.\`memberId\`
|
LEFT JOIN \`member\` \`member\` ON \`member\`.\`id\`=\`memberQualifications\`.\`memberId\`
|
||||||
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
||||||
GROUP BY \`qualification\`.\`id\`, \`member\`.\`id\`
|
GROUP BY \`qualification\`.\`id\`, \`member\`.\`id\`, \`salutation\`.\`id\`
|
||||||
|
`,
|
||||||
|
});
|
||||||
|
|
||||||
|
export const member_qualifications_view_postgres = 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(COALESCE("memberQualifications"."end", CURRENT_DATE) - "memberQualifications"."start") AS "durationInDays",
|
||||||
|
SUM(AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start")) AS "durationInYears"
|
||||||
|
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", "salutation"."id"
|
||||||
`,
|
`,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -310,13 +359,34 @@ export const membership_view = new View({
|
||||||
\`member\`.\`nameaffix\` AS \`memberNameaffix\`,
|
\`member\`.\`nameaffix\` AS \`memberNameaffix\`,
|
||||||
\`member\`.\`birthdate\` AS \`memberBirthdate\`,
|
\`member\`.\`birthdate\` AS \`memberBirthdate\`,
|
||||||
\`salutation\`.\`salutation\` AS \`memberSalutation\`,
|
\`salutation\`.\`salutation\` AS \`memberSalutation\`,
|
||||||
SUM(TIMESTAMPDIFF(DAY, \`membership\`.\`start\`,
|
SUM(TIMESTAMPDIFF(DAY, \`membership\`.\`start\`, COALESCE(\`membership\`.\`end\`, CURRENT_DATE))) AS \`durationInDays\`,
|
||||||
COALESCE(\`membership\`.\`end\`, CURRENT_DATE))) AS \`durationInDays\`,
|
|
||||||
CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, \`membership\`.\`start\`, COALESCE(\`membership\`.\`end\`, CURRENT_DATE))))) AS \`durationInYears\`
|
CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, \`membership\`.\`start\`, COALESCE(\`membership\`.\`end\`, CURRENT_DATE))))) AS \`durationInYears\`
|
||||||
FROM \`membership\` \`membership\`
|
FROM \`membership\` \`membership\`
|
||||||
LEFT JOIN \`membership_status\` \`status\` ON \`status\`.\`id\`=\`membership\`.\`statusId\`
|
LEFT JOIN \`membership_status\` \`status\` ON \`status\`.\`id\`=\`membership\`.\`statusId\`
|
||||||
LEFT JOIN \`member\` \`member\` ON \`member\`.\`id\`=\`membership\`.\`memberId\`
|
LEFT JOIN \`member\` \`member\` ON \`member\`.\`id\`=\`membership\`.\`memberId\`
|
||||||
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
LEFT JOIN \`salutation\` \`salutation\` ON \`salutation\`.\`id\`=\`member\`.\`salutationId\`
|
||||||
GROUP BY \`status\`.\`id\`, \`member\`.\`id\`
|
GROUP BY \`status\`.\`id\`, \`member\`.\`id\`, \`salutation\`.\`id\`
|
||||||
|
`,
|
||||||
|
});
|
||||||
|
|
||||||
|
export const membership_view_postgres = 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(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") AS "durationInDays",
|
||||||
|
SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")) 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", "salutation"."id"
|
||||||
`,
|
`,
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
import { Table, TableForeignKey } from "typeorm";
|
import { Table, TableForeignKey } from "typeorm";
|
||||||
import { getTypeByORM } from "../ormHelper";
|
import { getDefaultByORM, getTypeByORM, isIncrementPrimary } from "../ormHelper";
|
||||||
|
|
||||||
export const newsletter_table = new Table({
|
export const newsletter_table = new Table({
|
||||||
name: "newsletter",
|
name: "newsletter",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "title", type: getTypeByORM("varchar"), length: "255" },
|
{ name: "title", ...getTypeByORM("varchar") },
|
||||||
{ name: "description", type: getTypeByORM("varchar"), length: "255", default: "''" },
|
{ name: "description", ...getTypeByORM("varchar"), default: getDefaultByORM("string") },
|
||||||
{ name: "newsletterTitle", type: getTypeByORM("varchar"), length: "255", default: "''" },
|
{ name: "newsletterTitle", ...getTypeByORM("varchar"), default: getDefaultByORM("string") },
|
||||||
{ name: "newsletterText", type: getTypeByORM("text"), default: "''" },
|
{ name: "newsletterText", ...getTypeByORM("text"), default: getDefaultByORM("string") },
|
||||||
{ name: "newsletterSignatur", type: getTypeByORM("varchar"), length: "255", default: "''" },
|
{ name: "newsletterSignatur", ...getTypeByORM("varchar"), default: getDefaultByORM("string") },
|
||||||
{ name: "isSent", type: getTypeByORM("boolean"), default: false },
|
{ name: "isSent", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
|
||||||
{ name: "recipientsByQueryId", type: getTypeByORM("int"), isNullable: true },
|
{ name: "recipientsByQueryId", ...getTypeByORM("int", true) },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -27,10 +27,10 @@ export const newsletter_table = new Table({
|
||||||
export const newsletter_dates_table = new Table({
|
export const newsletter_dates_table = new Table({
|
||||||
name: "newsletter_dates",
|
name: "newsletter_dates",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "newsletterId", type: getTypeByORM("int"), isPrimary: true },
|
{ name: "newsletterId", ...getTypeByORM("int"), isPrimary: true },
|
||||||
{ name: "calendarId", type: getTypeByORM("varchar"), length: "255", isPrimary: true },
|
{ name: "calendarId", ...getTypeByORM("uuid"), isPrimary: true },
|
||||||
{ name: "diffTitle", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "diffTitle", ...getTypeByORM("varchar"), isNullable: true },
|
||||||
{ name: "diffDescription", type: getTypeByORM("text"), isNullable: true },
|
{ name: "diffDescription", ...getTypeByORM("text", true) },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -53,8 +53,8 @@ export const newsletter_dates_table = new Table({
|
||||||
export const newsletter_recipients_table = new Table({
|
export const newsletter_recipients_table = new Table({
|
||||||
name: "newsletter_recipients",
|
name: "newsletter_recipients",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "newsletterId", type: getTypeByORM("int"), isPrimary: true },
|
{ name: "newsletterId", ...getTypeByORM("int"), isPrimary: true },
|
||||||
{ name: "memberId", type: getTypeByORM("varchar"), isPrimary: true },
|
{ name: "memberId", ...getTypeByORM("uuid"), isPrimary: true },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -77,8 +77,8 @@ export const newsletter_recipients_table = new Table({
|
||||||
export const newsletter_config_table = new Table({
|
export const newsletter_config_table = new Table({
|
||||||
name: "newsletter_config",
|
name: "newsletter_config",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "comTypeId", type: getTypeByORM("int"), isPrimary: true, isNullable: false },
|
{ name: "comTypeId", ...getTypeByORM("int"), isPrimary: true },
|
||||||
{ name: "config", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "config", ...getTypeByORM("varchar") },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
import { Table, TableForeignKey } from "typeorm";
|
import { Table, TableForeignKey } from "typeorm";
|
||||||
import { getTypeByORM } from "../ormHelper";
|
import { getDefaultByORM, getTypeByORM, isIncrementPrimary } from "../ormHelper";
|
||||||
|
|
||||||
export const protocol_table = new Table({
|
export const protocol_table = new Table({
|
||||||
name: "protocol",
|
name: "protocol",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "title", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "title", ...getTypeByORM("varchar") },
|
||||||
{ name: "date", type: getTypeByORM("date"), isNullable: false },
|
{ name: "date", ...getTypeByORM("date") },
|
||||||
{ name: "starttime", type: getTypeByORM("time"), isNullable: true },
|
{ name: "starttime", ...getTypeByORM("time", true) },
|
||||||
{ name: "endtime", type: getTypeByORM("time"), isNullable: true },
|
{ name: "endtime", ...getTypeByORM("time", true) },
|
||||||
{ name: "summary", type: getTypeByORM("text"), isNullable: true },
|
{ name: "summary", ...getTypeByORM("text", true) },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const protocol_agenda_table = new Table({
|
export const protocol_agenda_table = new Table({
|
||||||
name: "protocol_agenda",
|
name: "protocol_agenda",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "topic", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "topic", ...getTypeByORM("varchar") },
|
||||||
{ name: "context", type: getTypeByORM("text"), default: "''", isNullable: false },
|
{ name: "context", ...getTypeByORM("text"), default: getDefaultByORM("string") },
|
||||||
{ name: "protocolId", type: getTypeByORM("int"), isNullable: false },
|
{ name: "protocolId", ...getTypeByORM("int") },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -35,10 +35,10 @@ export const protocol_agenda_table = new Table({
|
||||||
export const protocol_decision_table = new Table({
|
export const protocol_decision_table = new Table({
|
||||||
name: "protocol_decision",
|
name: "protocol_decision",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "topic", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "topic", ...getTypeByORM("varchar") },
|
||||||
{ name: "context", type: getTypeByORM("text"), default: "''", isNullable: false },
|
{ name: "context", ...getTypeByORM("text"), default: getDefaultByORM("string") },
|
||||||
{ name: "protocolId", type: getTypeByORM("int"), isNullable: false },
|
{ name: "protocolId", ...getTypeByORM("int") },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -54,10 +54,10 @@ export const protocol_decision_table = new Table({
|
||||||
export const protocol_presence_table = new Table({
|
export const protocol_presence_table = new Table({
|
||||||
name: "protocol_presence",
|
name: "protocol_presence",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "memberId", type: getTypeByORM("varchar"), isPrimary: true },
|
{ name: "memberId", ...getTypeByORM("uuid"), isPrimary: true },
|
||||||
{ name: "protocolId", type: getTypeByORM("int"), isPrimary: true },
|
{ name: "protocolId", ...getTypeByORM("int"), isPrimary: true },
|
||||||
{ name: "absent", type: getTypeByORM("boolean"), default: false, isNullable: false },
|
{ name: "absent", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
|
||||||
{ name: "excused", type: getTypeByORM("boolean"), default: false, isNullable: false },
|
{ name: "excused", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", true) },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -80,13 +80,13 @@ export const protocol_presence_table = new Table({
|
||||||
export const protocol_voting_table = new Table({
|
export const protocol_voting_table = new Table({
|
||||||
name: "protocol_voting",
|
name: "protocol_voting",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "topic", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "topic", ...getTypeByORM("varchar") },
|
||||||
{ name: "context", type: getTypeByORM("text"), default: "''", isNullable: false },
|
{ name: "context", ...getTypeByORM("text"), default: getDefaultByORM("string") },
|
||||||
{ name: "favour", type: getTypeByORM("int"), default: 0, isNullable: false },
|
{ name: "favour", ...getTypeByORM("int"), default: getDefaultByORM("number", 0) },
|
||||||
{ name: "abstain", type: getTypeByORM("int"), default: 0, isNullable: false },
|
{ name: "abstain", ...getTypeByORM("int"), default: getDefaultByORM("number", 0) },
|
||||||
{ name: "against", type: getTypeByORM("int"), default: 0, isNullable: false },
|
{ name: "against", ...getTypeByORM("int"), default: getDefaultByORM("number", 0) },
|
||||||
{ name: "protocolId", type: getTypeByORM("int"), isNullable: false },
|
{ name: "protocolId", ...getTypeByORM("int") },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
@ -102,12 +102,12 @@ export const protocol_voting_table = new Table({
|
||||||
export const protocol_printout_table = new Table({
|
export const protocol_printout_table = new Table({
|
||||||
name: "protocol_printout",
|
name: "protocol_printout",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "title", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "title", ...getTypeByORM("varchar") },
|
||||||
{ name: "iteration", type: getTypeByORM("int"), default: 1, isNullable: false },
|
{ name: "iteration", ...getTypeByORM("int"), default: getDefaultByORM("number", 1) },
|
||||||
{ name: "filename", type: getTypeByORM("varchar"), length: "255", isNullable: false },
|
{ name: "filename", ...getTypeByORM("varchar") },
|
||||||
{ name: "createdAt", type: getTypeByORM("datetime"), isNullable: false, default: "CURRENT_TIMESTAMP(6)" },
|
{ name: "createdAt", ...getTypeByORM("datetime", false, 6), default: getDefaultByORM("currentTimestamp", 6) },
|
||||||
{ name: "protocolId", type: getTypeByORM("int"), isNullable: false },
|
{ name: "protocolId", ...getTypeByORM("int") },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
|
|
@ -1,35 +1,35 @@
|
||||||
import { Table, TableForeignKey } from "typeorm";
|
import { Table, TableForeignKey } from "typeorm";
|
||||||
import { getTypeByORM } from "../ormHelper";
|
import { getDefaultByORM, getTypeByORM, isIncrementPrimary } from "../ormHelper";
|
||||||
|
|
||||||
export const query_table = new Table({
|
export const query_table = new Table({
|
||||||
name: "query",
|
name: "query",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "title", type: getTypeByORM("varchar"), length: "255", isNullable: false, isUnique: true },
|
{ name: "title", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
{ name: "query", type: getTypeByORM("text"), isNullable: false, default: "''" },
|
{ name: "query", ...getTypeByORM("text"), default: getDefaultByORM("string") },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const template_table = new Table({
|
export const template_table = new Table({
|
||||||
name: "template",
|
name: "template",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "id", type: getTypeByORM("int"), isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
{ name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
|
||||||
{ name: "template", type: getTypeByORM("varchar"), length: "255", isNullable: false, isUnique: true },
|
{ name: "template", ...getTypeByORM("varchar"), isUnique: true },
|
||||||
{ name: "description", type: getTypeByORM("varchar"), length: "255", isNullable: true },
|
{ name: "description", ...getTypeByORM("varchar", true) },
|
||||||
{ name: "design", type: getTypeByORM("text"), isNullable: false, default: "'{}'" },
|
{ name: "design", ...getTypeByORM("text"), default: getDefaultByORM("string", "{}") },
|
||||||
{ name: "html", type: getTypeByORM("text"), isNullable: false, default: "''" },
|
{ name: "html", ...getTypeByORM("text"), default: getDefaultByORM("string") },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
export const template_usage_table = new Table({
|
export const template_usage_table = new Table({
|
||||||
name: "template_usage",
|
name: "template_usage",
|
||||||
columns: [
|
columns: [
|
||||||
{ name: "scope", type: getTypeByORM("varchar"), length: "255", isPrimary: true },
|
{ name: "scope", ...getTypeByORM("varchar"), isPrimary: true },
|
||||||
{ name: "headerId", type: getTypeByORM("int"), isNullable: true },
|
{ name: "headerId", ...getTypeByORM("int", true), default: getDefaultByORM("null") },
|
||||||
{ name: "bodyId", type: getTypeByORM("int"), isNullable: true },
|
{ name: "bodyId", ...getTypeByORM("int", true), default: getDefaultByORM("null") },
|
||||||
{ name: "footerId", type: getTypeByORM("int"), isNullable: true },
|
{ name: "footerId", ...getTypeByORM("int", true), default: getDefaultByORM("null") },
|
||||||
{ name: "headerHeight", type: getTypeByORM("int"), default: null, isNullable: true },
|
{ name: "headerHeight", ...getTypeByORM("int", true), default: getDefaultByORM("null") },
|
||||||
{ name: "footerHeight", type: getTypeByORM("int"), default: null, isNullable: true },
|
{ name: "footerHeight", ...getTypeByORM("int", true), default: getDefaultByORM("null") },
|
||||||
],
|
],
|
||||||
foreignKeys: [
|
foreignKeys: [
|
||||||
new TableForeignKey({
|
new TableForeignKey({
|
||||||
|
|
|
@ -1,6 +1,18 @@
|
||||||
export type ORMType = "int" | "bigint" | "boolean" | "date" | "datetime" | "time" | "text" | "varchar";
|
export type ORMType = "int" | "bigint" | "boolean" | "date" | "datetime" | "time" | "text" | "varchar" | "uuid";
|
||||||
|
export type ORMDefault = "currentTimestamp" | "string" | "boolean" | "number" | "null";
|
||||||
|
export type ColumnConfig = {
|
||||||
|
type: string;
|
||||||
|
length?: string;
|
||||||
|
precision?: number;
|
||||||
|
isNullable: boolean;
|
||||||
|
};
|
||||||
|
export type Primary = {
|
||||||
|
isPrimary: boolean;
|
||||||
|
isGenerated: boolean;
|
||||||
|
generationStrategy: "increment" | "uuid" | "rowid" | "identity";
|
||||||
|
};
|
||||||
|
|
||||||
export function getTypeByORM(type: ORMType): string {
|
export function getTypeByORM(type: ORMType, nullable: boolean = false, length: number = 255): ColumnConfig {
|
||||||
const dbType = process.env.DB_TYPE;
|
const dbType = process.env.DB_TYPE;
|
||||||
|
|
||||||
const typeMap: Record<string, Record<ORMType, string>> = {
|
const typeMap: Record<string, Record<ORMType, string>> = {
|
||||||
|
@ -13,6 +25,7 @@ export function getTypeByORM(type: ORMType): string {
|
||||||
time: "time",
|
time: "time",
|
||||||
text: "text",
|
text: "text",
|
||||||
varchar: "varchar",
|
varchar: "varchar",
|
||||||
|
uuid: "varchar",
|
||||||
},
|
},
|
||||||
postgres: {
|
postgres: {
|
||||||
int: "integer",
|
int: "integer",
|
||||||
|
@ -22,19 +35,71 @@ export function getTypeByORM(type: ORMType): string {
|
||||||
datetime: "timestamp",
|
datetime: "timestamp",
|
||||||
time: "time",
|
time: "time",
|
||||||
text: "text",
|
text: "text",
|
||||||
varchar: "varchar",
|
varchar: "character varying",
|
||||||
|
uuid: "uuid",
|
||||||
},
|
},
|
||||||
sqlite: {
|
sqlite: {
|
||||||
int: "integer",
|
int: "integer",
|
||||||
bigint: "integer",
|
bigint: "integer",
|
||||||
boolean: "integer",
|
boolean: "integer",
|
||||||
date: "text",
|
date: "date",
|
||||||
datetime: "text",
|
datetime: "datetime",
|
||||||
time: "text",
|
time: "text",
|
||||||
text: "text",
|
text: "text",
|
||||||
varchar: "text",
|
varchar: "varchar",
|
||||||
|
uuid: "varchar",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
return typeMap[dbType]?.[type] || type;
|
let obj: ColumnConfig = {
|
||||||
|
type: typeMap[dbType]?.[type] || type,
|
||||||
|
isNullable: nullable,
|
||||||
|
};
|
||||||
|
if (type == "datetime") obj.precision = length;
|
||||||
|
else if (dbType != "sqlite" && (obj.type == "varchar" || type == "varchar")) obj.length = `${length}`;
|
||||||
|
else if (dbType != "postgres" && type == "uuid") obj.length = "36";
|
||||||
|
|
||||||
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getDefaultByORM<T = string | null>(type: ORMDefault, data?: string | number | boolean): T {
|
||||||
|
const dbType = process.env.DB_TYPE;
|
||||||
|
|
||||||
|
const typeMap: Record<string, Record<ORMDefault, string | null>> = {
|
||||||
|
mysql: {
|
||||||
|
currentTimestamp: `CURRENT_TIMESTAMP(${data ?? 6})`,
|
||||||
|
string: `'${data ?? ""}'`,
|
||||||
|
boolean: Boolean(data).toString(),
|
||||||
|
number: Number(data).toString(),
|
||||||
|
null: null,
|
||||||
|
},
|
||||||
|
postgres: {
|
||||||
|
currentTimestamp: `now()`,
|
||||||
|
string: `'${data ?? ""}'`,
|
||||||
|
boolean: Boolean(data) == true ? "true" : "false",
|
||||||
|
number: Number(data).toString(),
|
||||||
|
null: null,
|
||||||
|
},
|
||||||
|
sqlite: {
|
||||||
|
currentTimestamp: `datetime('now')`,
|
||||||
|
string: `'${data ?? ""}'`,
|
||||||
|
boolean: Boolean(data) == true ? "1" : "0",
|
||||||
|
number: Number(data).toString(),
|
||||||
|
null: null,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return (typeMap[dbType]?.[type] || type) as T;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const isIncrementPrimary: Primary = {
|
||||||
|
isPrimary: true,
|
||||||
|
isGenerated: true,
|
||||||
|
generationStrategy: "increment",
|
||||||
|
};
|
||||||
|
|
||||||
|
export const isUUIDPrimary: Primary = {
|
||||||
|
isPrimary: true,
|
||||||
|
isGenerated: true,
|
||||||
|
generationStrategy: "uuid",
|
||||||
|
};
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
||||||
import { memberExecutivePositions } from "../entity/club/member/memberExecutivePositions";
|
import { memberExecutivePositions } from "../entity/club/member/memberExecutivePositions";
|
||||||
|
import { DB_TYPE } from "../env.defaults";
|
||||||
|
|
||||||
@ViewEntity({
|
@ViewEntity({
|
||||||
expression: (datasource: DataSource) =>
|
expression: (datasource: DataSource) =>
|
||||||
|
@ -15,19 +16,31 @@ import { memberExecutivePositions } from "../entity/club/member/memberExecutiveP
|
||||||
.addSelect("member.birthdate", "memberBirthdate")
|
.addSelect("member.birthdate", "memberBirthdate")
|
||||||
.addSelect("salutation.salutation", "memberSalutation")
|
.addSelect("salutation.salutation", "memberSalutation")
|
||||||
.addSelect(
|
.addSelect(
|
||||||
"SUM(TIMESTAMPDIFF(DAY, memberExecutivePositions.start, COALESCE(memberExecutivePositions.end, CURRENT_DATE)))",
|
DB_TYPE == "postgres"
|
||||||
|
? `SUM(COALESCE("memberExecutivePositions"."end", CURRENT_DATE) - "memberExecutivePositions"."start")`
|
||||||
|
: "SUM(TIMESTAMPDIFF(DAY, memberExecutivePositions.start, COALESCE(memberExecutivePositions.end, CURRENT_DATE)))",
|
||||||
"durationInDays"
|
"durationInDays"
|
||||||
)
|
)
|
||||||
|
.addSelect(
|
||||||
|
DB_TYPE == "postgres"
|
||||||
|
? `SUM(AGE(COALESCE("memberExecutivePositions"."end", CURRENT_DATE), "memberExecutivePositions"."start"))`
|
||||||
|
: "CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, memberExecutivePositions.start, COALESCE(memberExecutivePositions.end, CURRENT_DATE)))))",
|
||||||
|
"durationInYears"
|
||||||
|
)
|
||||||
.leftJoin("memberExecutivePositions.executivePosition", "executivePosition")
|
.leftJoin("memberExecutivePositions.executivePosition", "executivePosition")
|
||||||
.leftJoin("memberExecutivePositions.member", "member")
|
.leftJoin("memberExecutivePositions.member", "member")
|
||||||
.leftJoin("member.salutation", "salutation")
|
.leftJoin("member.salutation", "salutation")
|
||||||
.groupBy("executivePosition.id")
|
.groupBy("executivePosition.id")
|
||||||
.addGroupBy("member.id"),
|
.addGroupBy("member.id")
|
||||||
|
.addGroupBy("salutation.id"),
|
||||||
})
|
})
|
||||||
export class memberExecutivePositionsView {
|
export class memberExecutivePositionsView {
|
||||||
@ViewColumn()
|
@ViewColumn()
|
||||||
durationInDays: number;
|
durationInDays: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
durationInYears: string;
|
||||||
|
|
||||||
@ViewColumn()
|
@ViewColumn()
|
||||||
position: string;
|
position: string;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
||||||
import { memberQualifications } from "../entity/club/member/memberQualifications";
|
import { memberQualifications } from "../entity/club/member/memberQualifications";
|
||||||
|
import { DB_TYPE } from "../env.defaults";
|
||||||
|
|
||||||
@ViewEntity({
|
@ViewEntity({
|
||||||
expression: (datasource: DataSource) =>
|
expression: (datasource: DataSource) =>
|
||||||
|
@ -15,19 +16,31 @@ import { memberQualifications } from "../entity/club/member/memberQualifications
|
||||||
.addSelect("member.birthdate", "memberBirthdate")
|
.addSelect("member.birthdate", "memberBirthdate")
|
||||||
.addSelect("salutation.salutation", "memberSalutation")
|
.addSelect("salutation.salutation", "memberSalutation")
|
||||||
.addSelect(
|
.addSelect(
|
||||||
"SUM(TIMESTAMPDIFF(DAY, memberQualifications.start, COALESCE(memberQualifications.end, CURRENT_DATE)))",
|
DB_TYPE == "postgres"
|
||||||
|
? `SUM(COALESCE("memberQualifications"."end", CURRENT_DATE) - "memberQualifications"."start")`
|
||||||
|
: "SUM(TIMESTAMPDIFF(DAY, memberQualifications.start, COALESCE(memberQualifications.end, CURRENT_DATE)))",
|
||||||
"durationInDays"
|
"durationInDays"
|
||||||
)
|
)
|
||||||
|
.addSelect(
|
||||||
|
DB_TYPE == "postgres"
|
||||||
|
? `SUM(AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start"))`
|
||||||
|
: "CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, memberQualifications.start, COALESCE(memberQualifications.end, CURRENT_DATE)))))",
|
||||||
|
"durationInYears"
|
||||||
|
)
|
||||||
.leftJoin("memberQualifications.qualification", "qualification")
|
.leftJoin("memberQualifications.qualification", "qualification")
|
||||||
.leftJoin("memberQualifications.member", "member")
|
.leftJoin("memberQualifications.member", "member")
|
||||||
.leftJoin("member.salutation", "salutation")
|
.leftJoin("member.salutation", "salutation")
|
||||||
.groupBy("qualification.id")
|
.groupBy("qualification.id")
|
||||||
.addGroupBy("member.id"),
|
.addGroupBy("member.id")
|
||||||
|
.addGroupBy("salutation.id"),
|
||||||
})
|
})
|
||||||
export class memberQualificationsView {
|
export class memberQualificationsView {
|
||||||
@ViewColumn()
|
@ViewColumn()
|
||||||
durationInDays: number;
|
durationInDays: number;
|
||||||
|
|
||||||
|
@ViewColumn()
|
||||||
|
durationInYears: string;
|
||||||
|
|
||||||
@ViewColumn()
|
@ViewColumn()
|
||||||
qualification: string;
|
qualification: string;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
||||||
import { member } from "../entity/club/member/member";
|
import { member } from "../entity/club/member/member";
|
||||||
|
import { DB_TYPE } from "../env.defaults";
|
||||||
|
|
||||||
@ViewEntity({
|
@ViewEntity({
|
||||||
expression: (datasource: DataSource) =>
|
expression: (datasource: DataSource) =>
|
||||||
|
@ -12,9 +13,24 @@ import { member } from "../entity/club/member/member";
|
||||||
.addSelect("member.nameaffix", "nameaffix")
|
.addSelect("member.nameaffix", "nameaffix")
|
||||||
.addSelect("member.birthdate", "birthdate")
|
.addSelect("member.birthdate", "birthdate")
|
||||||
.addSelect("salutation.salutation", "salutation")
|
.addSelect("salutation.salutation", "salutation")
|
||||||
.addSelect("TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge")
|
.addSelect(
|
||||||
.addSelect("YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear")
|
DB_TYPE == "postgres"
|
||||||
.addSelect("CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, member.birthdate, CURDATE())))", "exactAge")
|
? `DATE_PART('year', AGE(CURRENT_DATE, member.birthdate))`
|
||||||
|
: "TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())",
|
||||||
|
"todayAge"
|
||||||
|
)
|
||||||
|
.addSelect(
|
||||||
|
DB_TYPE == "postgres"
|
||||||
|
? `EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM member.birthdate)`
|
||||||
|
: "YEAR(CURDATE()) - YEAR(member.birthdate)",
|
||||||
|
"ageThisYear"
|
||||||
|
)
|
||||||
|
.addSelect(
|
||||||
|
DB_TYPE == "postgres"
|
||||||
|
? `AGE(CURRENT_DATE, member.birthdate)`
|
||||||
|
: "CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, member.birthdate, CURDATE())))",
|
||||||
|
"exactAge"
|
||||||
|
)
|
||||||
.leftJoin("member.salutation", "salutation"),
|
.leftJoin("member.salutation", "salutation"),
|
||||||
})
|
})
|
||||||
export class memberView {
|
export class memberView {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
||||||
import { membership } from "../entity/club/member/membership";
|
import { membership } from "../entity/club/member/membership";
|
||||||
|
import { DB_TYPE } from "../env.defaults";
|
||||||
|
|
||||||
@ViewEntity({
|
@ViewEntity({
|
||||||
expression: (datasource: DataSource) =>
|
expression: (datasource: DataSource) =>
|
||||||
|
@ -14,16 +15,24 @@ import { membership } from "../entity/club/member/membership";
|
||||||
.addSelect("member.nameaffix", "memberNameaffix")
|
.addSelect("member.nameaffix", "memberNameaffix")
|
||||||
.addSelect("member.birthdate", "memberBirthdate")
|
.addSelect("member.birthdate", "memberBirthdate")
|
||||||
.addSelect("salutation.salutation", "memberSalutation")
|
.addSelect("salutation.salutation", "memberSalutation")
|
||||||
.addSelect("SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))", "durationInDays")
|
|
||||||
.addSelect(
|
.addSelect(
|
||||||
"CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))))",
|
DB_TYPE == "postgres"
|
||||||
|
? `SUM(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") `
|
||||||
|
: "SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))",
|
||||||
|
"durationInDays"
|
||||||
|
)
|
||||||
|
.addSelect(
|
||||||
|
DB_TYPE == "postgres"
|
||||||
|
? `SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start"))`
|
||||||
|
: "CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))))",
|
||||||
"durationInYears"
|
"durationInYears"
|
||||||
)
|
)
|
||||||
.leftJoin("membership.status", "status")
|
.leftJoin("membership.status", "status")
|
||||||
.leftJoin("membership.member", "member")
|
.leftJoin("membership.member", "member")
|
||||||
.leftJoin("member.salutation", "salutation")
|
.leftJoin("member.salutation", "salutation")
|
||||||
.groupBy("status.id")
|
.groupBy("status.id")
|
||||||
.addGroupBy("member.id"),
|
.addGroupBy("member.id")
|
||||||
|
.addGroupBy("salutation.id"),
|
||||||
})
|
})
|
||||||
export class membershipView {
|
export class membershipView {
|
||||||
@ViewColumn()
|
@ViewColumn()
|
||||||
|
|
Loading…
Reference in a new issue