base types and viewmodels
This commit is contained in:
parent
18ae1ddc04
commit
551b6353bf
39 changed files with 1046 additions and 0 deletions
5
.prettierrc.json
Normal file
5
.prettierrc.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"trailingComma": "es5",
|
||||||
|
"tabWidth": 2,
|
||||||
|
"printWidth": 120
|
||||||
|
}
|
150
package-lock.json
generated
Normal file
150
package-lock.json
generated
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
{
|
||||||
|
"name": "@ff-admin/webapi-client",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "@ff-admin/webapi-client",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"license": "GPL-3.0-only",
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^1.6.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^20.17.16",
|
||||||
|
"typescript": "^5.7.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/node": {
|
||||||
|
"version": "20.17.16",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.16.tgz",
|
||||||
|
"integrity": "sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"undici-types": "~6.19.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/asynckit": {
|
||||||
|
"version": "0.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
|
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/axios": {
|
||||||
|
"version": "1.7.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
|
||||||
|
"integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"follow-redirects": "^1.15.6",
|
||||||
|
"form-data": "^4.0.0",
|
||||||
|
"proxy-from-env": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/combined-stream": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"delayed-stream": "~1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/delayed-stream": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/follow-redirects": {
|
||||||
|
"version": "1.15.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
|
||||||
|
"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "individual",
|
||||||
|
"url": "https://github.com/sponsors/RubenVerborgh"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"debug": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/form-data": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"asynckit": "^0.4.0",
|
||||||
|
"combined-stream": "^1.0.8",
|
||||||
|
"mime-types": "^2.1.12"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime-db": {
|
||||||
|
"version": "1.52.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||||
|
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime-types": {
|
||||||
|
"version": "2.1.35",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||||
|
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"mime-db": "1.52.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/proxy-from-env": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/typescript": {
|
||||||
|
"version": "5.7.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
|
||||||
|
"integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"bin": {
|
||||||
|
"tsc": "bin/tsc",
|
||||||
|
"tsserver": "bin/tsserver"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.17"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/undici-types": {
|
||||||
|
"version": "6.19.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||||
|
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
package.json
Normal file
33
package.json
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
"name": "@ff-admin/webapi-client",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"description": "api client for ff admin webapi",
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start_ts": "ts-node src/index.ts",
|
||||||
|
"build": "tsc",
|
||||||
|
"start": "node .",
|
||||||
|
"dev": "npm run build && set NODE_ENV=development && npm run start"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://forgejo.jk-effects.cloud/Ehrenamt/ff-admin-webapi-client.git"
|
||||||
|
},
|
||||||
|
"homepage": "https://forgejo.jk-effects.cloud/Ehrenamt/ff-admin-webapi-client.git#readme",
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^1.6.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^20.17.16",
|
||||||
|
"typescript": "^5.7.3"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"Feuerwehr",
|
||||||
|
"ff-admin"
|
||||||
|
],
|
||||||
|
"author": "JK Effects",
|
||||||
|
"license": "GPL-3.0-only",
|
||||||
|
"publishConfig": {
|
||||||
|
"@ff-admin:registry": "https://npm.registry.jk-effects.cloud"
|
||||||
|
}
|
||||||
|
}
|
4
src/enums/newsletterConfigType.ts
Normal file
4
src/enums/newsletterConfigType.ts
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
export enum NewsletterConfigType {
|
||||||
|
pdf = "pdf",
|
||||||
|
mail = "mail",
|
||||||
|
}
|
131
src/types/dynamicQueries.ts
Normal file
131
src/types/dynamicQueries.ts
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
export interface DynamicQueryStructure {
|
||||||
|
select: string[] | "*";
|
||||||
|
table: string;
|
||||||
|
where?: Array<ConditionStructure>;
|
||||||
|
join?: Array<DynamicQueryStructure & { foreignColumn: string }>;
|
||||||
|
orderBy?: Array<OrderByStructure>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ConditionStructure = (
|
||||||
|
| {
|
||||||
|
structureType: "condition";
|
||||||
|
column: string;
|
||||||
|
operation: WhereOperation;
|
||||||
|
value: ConditionValue;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
structureType: "nested";
|
||||||
|
invert?: boolean;
|
||||||
|
conditions: Array<ConditionStructure>;
|
||||||
|
}
|
||||||
|
) & {
|
||||||
|
concat: WhereType;
|
||||||
|
structureType: "condition" | "nested";
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ConditionValue = FieldType | Array<FieldType> | { start: FieldType; end: FieldType };
|
||||||
|
export type FieldType = number | string | Date | boolean;
|
||||||
|
|
||||||
|
export type WhereType = "OR" | "AND" | "_"; // _ represents initial where in (sub-)query
|
||||||
|
|
||||||
|
export type WhereOperation =
|
||||||
|
| "eq" // Equal
|
||||||
|
| "neq" // Not equal
|
||||||
|
| "lt" // Less than
|
||||||
|
| "lte" // Less than or equal to
|
||||||
|
| "gt" // Greater than
|
||||||
|
| "gte" // Greater than or equal to
|
||||||
|
| "in" // Included in an array
|
||||||
|
| "notIn" // Not included in an array
|
||||||
|
| "contains" // Contains
|
||||||
|
| "notContains" // Does not contain
|
||||||
|
| "null" // Is null
|
||||||
|
| "notNull" // Is not null
|
||||||
|
| "between" // Is between
|
||||||
|
| "startsWith" // Starts with
|
||||||
|
| "endsWith" // Ends with
|
||||||
|
| "timespanEq"; // Date before x years (YYYY-01-01 <bis> YYYY-12-31)
|
||||||
|
// TODO: age between | age equals | age greater | age smaller
|
||||||
|
|
||||||
|
export type OrderByStructure = {
|
||||||
|
column: string;
|
||||||
|
order: OrderByType;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type OrderByType = "ASC" | "DESC";
|
||||||
|
|
||||||
|
export type QueryResult = {
|
||||||
|
[key: string]: FieldType | QueryResult | Array<QueryResult>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const exampleQuery: DynamicQueryStructure = {
|
||||||
|
select: ["firstname", "lastname"],
|
||||||
|
table: "member",
|
||||||
|
where: [
|
||||||
|
{
|
||||||
|
structureType: "condition",
|
||||||
|
concat: "_",
|
||||||
|
column: "mail",
|
||||||
|
operation: "endsWith",
|
||||||
|
value: "@gmail.com",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
structureType: "nested",
|
||||||
|
concat: "AND",
|
||||||
|
conditions: [
|
||||||
|
{
|
||||||
|
structureType: "condition",
|
||||||
|
concat: "_",
|
||||||
|
column: "firstname",
|
||||||
|
operation: "startsWith",
|
||||||
|
value: "J",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
structureType: "condition",
|
||||||
|
concat: "OR",
|
||||||
|
column: "lastname",
|
||||||
|
operation: "startsWith",
|
||||||
|
value: "K",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
join: [
|
||||||
|
{
|
||||||
|
select: "*",
|
||||||
|
table: "communication",
|
||||||
|
foreignColumn: "sendNewsletter",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
select: "*",
|
||||||
|
table: "membership",
|
||||||
|
foreignColumn: "memberships",
|
||||||
|
join: [
|
||||||
|
{
|
||||||
|
select: "*",
|
||||||
|
table: "membership_status",
|
||||||
|
foreignColumn: "status",
|
||||||
|
where: [
|
||||||
|
{
|
||||||
|
structureType: "condition",
|
||||||
|
concat: "_",
|
||||||
|
column: "status",
|
||||||
|
operation: "eq",
|
||||||
|
value: "aktiv",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
orderBy: [
|
||||||
|
{
|
||||||
|
column: "firstname",
|
||||||
|
order: "ASC",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
column: "lastname",
|
||||||
|
order: "ASC",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
18
src/types/fieldTypes.ts
Normal file
18
src/types/fieldTypes.ts
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
export type CommunicationFieldType =
|
||||||
|
| "mobile"
|
||||||
|
| "email"
|
||||||
|
| "postalCode"
|
||||||
|
| "city"
|
||||||
|
| "street"
|
||||||
|
| "streetNumber"
|
||||||
|
| "streetNumberAddition";
|
||||||
|
|
||||||
|
export const communicationFieldTypes: Array<CommunicationFieldType> = [
|
||||||
|
"mobile",
|
||||||
|
"email",
|
||||||
|
"postalCode",
|
||||||
|
"city",
|
||||||
|
"street",
|
||||||
|
"streetNumber",
|
||||||
|
"streetNumberAddition",
|
||||||
|
];
|
84
src/types/permissionTypes.ts
Normal file
84
src/types/permissionTypes.ts
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
export type PermissionSection = "club" | "settings" | "user";
|
||||||
|
|
||||||
|
export type PermissionModule =
|
||||||
|
| "member"
|
||||||
|
| "calendar"
|
||||||
|
| "newsletter"
|
||||||
|
| "newsletter_config"
|
||||||
|
| "protocol"
|
||||||
|
| "qualification"
|
||||||
|
| "award"
|
||||||
|
| "executive_position"
|
||||||
|
| "communication_type"
|
||||||
|
| "membership_status"
|
||||||
|
| "salutation"
|
||||||
|
| "calendar_type"
|
||||||
|
| "user"
|
||||||
|
| "role"
|
||||||
|
| "webapi"
|
||||||
|
| "query"
|
||||||
|
| "query_store"
|
||||||
|
| "template"
|
||||||
|
| "template_usage";
|
||||||
|
|
||||||
|
export type PermissionType = "read" | "create" | "update" | "delete";
|
||||||
|
|
||||||
|
export type PermissionString =
|
||||||
|
| `${PermissionSection}.${PermissionModule}.${PermissionType}` // für spezifische Berechtigungen
|
||||||
|
| `${PermissionSection}.${PermissionModule}.*` // für alle Berechtigungen in einem Modul
|
||||||
|
| `${PermissionSection}.${PermissionType}` // für spezifische Berechtigungen in einem Abschnitt
|
||||||
|
| `${PermissionSection}.*` // für alle Berechtigungen in einem Abschnitt
|
||||||
|
| "*"; // für Admin
|
||||||
|
|
||||||
|
export type PermissionObject = {
|
||||||
|
[section in PermissionSection]?: {
|
||||||
|
[module in PermissionModule]?: Array<PermissionType> | "*";
|
||||||
|
} & { all?: Array<PermissionType> | "*" };
|
||||||
|
} & {
|
||||||
|
admin?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type SectionsAndModulesObject = {
|
||||||
|
[section in PermissionSection]: Array<PermissionModule>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const permissionSections: Array<PermissionSection> = ["club", "settings", "user"];
|
||||||
|
export const permissionModules: Array<PermissionModule> = [
|
||||||
|
"member",
|
||||||
|
"calendar",
|
||||||
|
"newsletter",
|
||||||
|
"newsletter_config",
|
||||||
|
"protocol",
|
||||||
|
"qualification",
|
||||||
|
"award",
|
||||||
|
"executive_position",
|
||||||
|
"communication_type",
|
||||||
|
"membership_status",
|
||||||
|
"salutation",
|
||||||
|
"calendar_type",
|
||||||
|
"user",
|
||||||
|
"role",
|
||||||
|
"webapi",
|
||||||
|
"query",
|
||||||
|
"query_store",
|
||||||
|
"template",
|
||||||
|
"template_usage",
|
||||||
|
];
|
||||||
|
export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"];
|
||||||
|
export const sectionsAndModules: SectionsAndModulesObject = {
|
||||||
|
club: ["member", "calendar", "newsletter", "protocol", "query"],
|
||||||
|
settings: [
|
||||||
|
"qualification",
|
||||||
|
"award",
|
||||||
|
"executive_position",
|
||||||
|
"communication_type",
|
||||||
|
"membership_status",
|
||||||
|
"salutation",
|
||||||
|
"calendar_type",
|
||||||
|
"query_store",
|
||||||
|
"template",
|
||||||
|
"template_usage",
|
||||||
|
"newsletter_config",
|
||||||
|
],
|
||||||
|
user: ["user", "role", "webapi"],
|
||||||
|
};
|
7
src/types/tableMeta.ts
Normal file
7
src/types/tableMeta.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import { ColumnType } from "typeorm";
|
||||||
|
|
||||||
|
export interface TableMeta {
|
||||||
|
tableName: string;
|
||||||
|
columns: Array<{ column: string; type: ColumnType }>;
|
||||||
|
relations: Array<{ column: string; relationType: string; referencedTableName: string }>;
|
||||||
|
}
|
35
src/viewmodels/admin/club/calendar.models.ts
Normal file
35
src/viewmodels/admin/club/calendar.models.ts
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
import type { CalendarTypeViewModel } from "../settings/calendarType.models";
|
||||||
|
|
||||||
|
export interface CalendarViewModel {
|
||||||
|
id: string;
|
||||||
|
starttime: string;
|
||||||
|
endtime: string;
|
||||||
|
title: string;
|
||||||
|
content: string;
|
||||||
|
location: string;
|
||||||
|
allDay: boolean;
|
||||||
|
createdAt: Date;
|
||||||
|
updatedAt: Date;
|
||||||
|
type: CalendarTypeViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateCalendarViewModel {
|
||||||
|
starttime: string;
|
||||||
|
endtime: string;
|
||||||
|
title: string;
|
||||||
|
content: string;
|
||||||
|
location: string;
|
||||||
|
allDay: boolean;
|
||||||
|
typeId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateCalendarViewModel {
|
||||||
|
id: string;
|
||||||
|
starttime: string;
|
||||||
|
endtime: string;
|
||||||
|
title: string;
|
||||||
|
content: string;
|
||||||
|
location: string;
|
||||||
|
allDay: boolean;
|
||||||
|
typeId: string;
|
||||||
|
}
|
44
src/viewmodels/admin/club/member/communication.models.ts
Normal file
44
src/viewmodels/admin/club/member/communication.models.ts
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
import type { CommunicationTypeViewModel } from "../../settings/communicationType.models";
|
||||||
|
|
||||||
|
export interface CommunicationViewModel {
|
||||||
|
id: number;
|
||||||
|
preferred: boolean;
|
||||||
|
mobile: string;
|
||||||
|
email: string;
|
||||||
|
postalCode: string;
|
||||||
|
city: string;
|
||||||
|
street: string;
|
||||||
|
streetNumber: number;
|
||||||
|
streetNumberAddition: string;
|
||||||
|
type: CommunicationTypeViewModel;
|
||||||
|
isNewsletterMain: boolean;
|
||||||
|
isSMSAlarming: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateCommunicationViewModel {
|
||||||
|
preferred: boolean;
|
||||||
|
mobile: string;
|
||||||
|
email: string;
|
||||||
|
postalCode: string;
|
||||||
|
city: string;
|
||||||
|
street: string;
|
||||||
|
streetNumber: number;
|
||||||
|
streetNumberAddition: string;
|
||||||
|
typeId: number;
|
||||||
|
isNewsletterMain: boolean;
|
||||||
|
isSMSAlarming: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateCommunicationViewModel {
|
||||||
|
id: number;
|
||||||
|
preferred: boolean;
|
||||||
|
mobile: string;
|
||||||
|
email: string;
|
||||||
|
postalCode: string;
|
||||||
|
city: string;
|
||||||
|
street: string;
|
||||||
|
streetNumber: number;
|
||||||
|
streetNumberAddition: string;
|
||||||
|
isNewsletterMain: boolean;
|
||||||
|
isSMSAlarming: boolean;
|
||||||
|
}
|
49
src/viewmodels/admin/club/member/member.models.ts
Normal file
49
src/viewmodels/admin/club/member/member.models.ts
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
import type { CommunicationViewModel } from "./communication.models";
|
||||||
|
import type { MembershipViewModel } from "./membership.models";
|
||||||
|
import type { SalutationViewModel } from "../../settings/salutation.models";
|
||||||
|
|
||||||
|
export interface MemberViewModel {
|
||||||
|
id: number;
|
||||||
|
salutation: SalutationViewModel;
|
||||||
|
firstname: string;
|
||||||
|
lastname: string;
|
||||||
|
nameaffix: string;
|
||||||
|
birthdate: Date;
|
||||||
|
internalId?: string;
|
||||||
|
firstMembershipEntry?: MembershipViewModel;
|
||||||
|
lastMembershipEntry?: MembershipViewModel;
|
||||||
|
sendNewsletter?: CommunicationViewModel;
|
||||||
|
smsAlarming?: Array<CommunicationViewModel>;
|
||||||
|
preferredCommunication?: Array<CommunicationViewModel>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MemberStatisticsViewModel {
|
||||||
|
id: number;
|
||||||
|
salutation: string;
|
||||||
|
firstname: string;
|
||||||
|
lastname: string;
|
||||||
|
nameaffix: string;
|
||||||
|
birthdate: Date;
|
||||||
|
todayAge: number;
|
||||||
|
ageThisYear: number;
|
||||||
|
exactAge: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateMemberViewModel {
|
||||||
|
salutationId: number;
|
||||||
|
firstname: string;
|
||||||
|
lastname: string;
|
||||||
|
nameaffix: string;
|
||||||
|
birthdate: Date;
|
||||||
|
internalId?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateMemberViewModel {
|
||||||
|
id: number;
|
||||||
|
salutationId: number;
|
||||||
|
firstname: string;
|
||||||
|
lastname: string;
|
||||||
|
nameaffix: string;
|
||||||
|
birthdate: Date;
|
||||||
|
internalId?: string;
|
||||||
|
}
|
23
src/viewmodels/admin/club/member/memberAward.models.ts
Normal file
23
src/viewmodels/admin/club/member/memberAward.models.ts
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
export interface MemberAwardViewModel {
|
||||||
|
id: number;
|
||||||
|
given: boolean;
|
||||||
|
note?: string;
|
||||||
|
date: Date;
|
||||||
|
award: string;
|
||||||
|
awardId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateMemberAwardViewModel {
|
||||||
|
given: boolean;
|
||||||
|
note?: string;
|
||||||
|
date: Date;
|
||||||
|
awardId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateMemberAwardViewModel {
|
||||||
|
id: number;
|
||||||
|
given: boolean;
|
||||||
|
note?: string;
|
||||||
|
date: Date;
|
||||||
|
awardId: number;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
export interface MemberExecutivePositionViewModel {
|
||||||
|
id: number;
|
||||||
|
note?: string;
|
||||||
|
start: Date;
|
||||||
|
end?: Date;
|
||||||
|
executivePosition: string;
|
||||||
|
executivePositionId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateMemberExecutivePositionViewModel {
|
||||||
|
note?: string;
|
||||||
|
start: Date;
|
||||||
|
end?: Date;
|
||||||
|
executivePositionId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateMemberExecutivePositionViewModel {
|
||||||
|
id: number;
|
||||||
|
note?: string;
|
||||||
|
start: Date;
|
||||||
|
end?: Date;
|
||||||
|
executivePositionId: number;
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
export interface MemberQualificationViewModel {
|
||||||
|
id: number;
|
||||||
|
note?: string;
|
||||||
|
start: Date;
|
||||||
|
end?: Date;
|
||||||
|
terminationReason?: string;
|
||||||
|
qualification: string;
|
||||||
|
qualificationId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateMemberQualificationViewModel {
|
||||||
|
note?: string;
|
||||||
|
start: Date;
|
||||||
|
qualificationId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateMemberQualificationViewModel {
|
||||||
|
id: number;
|
||||||
|
note?: string;
|
||||||
|
start: Date;
|
||||||
|
end?: Date;
|
||||||
|
terminationReason?: string;
|
||||||
|
qualificationId: number;
|
||||||
|
}
|
34
src/viewmodels/admin/club/member/membership.models.ts
Normal file
34
src/viewmodels/admin/club/member/membership.models.ts
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
export interface MembershipViewModel {
|
||||||
|
id: number;
|
||||||
|
start: Date;
|
||||||
|
end?: Date;
|
||||||
|
terminationReason?: string;
|
||||||
|
status: string;
|
||||||
|
statusId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MembershipStatisticsViewModel {
|
||||||
|
durationInDays: number;
|
||||||
|
durationInYears: string;
|
||||||
|
status: string;
|
||||||
|
statusId: number;
|
||||||
|
memberId: number;
|
||||||
|
memberSalutation: string;
|
||||||
|
memberFirstname: string;
|
||||||
|
memberLastname: string;
|
||||||
|
memberNameaffix: string;
|
||||||
|
memberBirthdate: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateMembershipViewModel {
|
||||||
|
start: Date;
|
||||||
|
statusId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateMembershipViewModel {
|
||||||
|
id: number;
|
||||||
|
start: Date;
|
||||||
|
end?: Date;
|
||||||
|
terminationReason?: string;
|
||||||
|
statusId: number;
|
||||||
|
}
|
31
src/viewmodels/admin/club/newsletter/newsletter.models.ts
Normal file
31
src/viewmodels/admin/club/newsletter/newsletter.models.ts
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
import type { QueryViewModel } from "../../settings/query.models";
|
||||||
|
|
||||||
|
export interface NewsletterViewModel {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
newsletterTitle: string;
|
||||||
|
newsletterText: string;
|
||||||
|
newsletterSignatur: string;
|
||||||
|
isSent: boolean;
|
||||||
|
recipientsByQueryId?: number | null;
|
||||||
|
recipientsByQuery?: QueryViewModel | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateNewsletterViewModel {
|
||||||
|
title: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SyncNewsletterViewModel {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
newsletterTitle: string;
|
||||||
|
newsletterText: string;
|
||||||
|
newsletterSignatur: string;
|
||||||
|
recipientsByQueryId?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SendNewsletterViewModel {
|
||||||
|
id: number;
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
import type { CalendarViewModel } from "../calendar.models";
|
||||||
|
|
||||||
|
export interface NewsletterDatesViewModel {
|
||||||
|
newsletterId: number;
|
||||||
|
calendarId: string;
|
||||||
|
diffTitle: string | null;
|
||||||
|
diffDescription: string | null;
|
||||||
|
calendar: CalendarViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SyncNewsletterDatesViewModel {
|
||||||
|
calendarId: string;
|
||||||
|
diffTitle?: string;
|
||||||
|
diffDescription?: string;
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
import type { MemberViewModel } from "../member/member.models";
|
||||||
|
|
||||||
|
export interface NewsletterRecipientsViewModel {
|
||||||
|
newsletterId: number;
|
||||||
|
memberId: number;
|
||||||
|
member: MemberViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SyncNewsletterRecipientsViewModel {
|
||||||
|
memberId: number;
|
||||||
|
}
|
22
src/viewmodels/admin/club/protocol/protocol.models.ts
Normal file
22
src/viewmodels/admin/club/protocol/protocol.models.ts
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
export interface ProtocolViewModel {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
date: Date;
|
||||||
|
starttime: Date;
|
||||||
|
endtime: Date;
|
||||||
|
summary: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateProtocolViewModel {
|
||||||
|
title: string;
|
||||||
|
date: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SyncProtocolViewModel {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
date: Date;
|
||||||
|
starttime: Date;
|
||||||
|
endtime: Date;
|
||||||
|
summary: string;
|
||||||
|
}
|
12
src/viewmodels/admin/club/protocol/protocolAgenda.models.ts
Normal file
12
src/viewmodels/admin/club/protocol/protocolAgenda.models.ts
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
export interface ProtocolAgendaViewModel {
|
||||||
|
id: number;
|
||||||
|
topic: string;
|
||||||
|
context: string;
|
||||||
|
protocolId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SyncProtocolAgendaViewModel {
|
||||||
|
id?: number;
|
||||||
|
topic: string;
|
||||||
|
context: string;
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
export interface ProtocolDecisionViewModel {
|
||||||
|
id: number;
|
||||||
|
topic: string;
|
||||||
|
context: string;
|
||||||
|
protocolId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SyncProtocolDecisionViewModel {
|
||||||
|
id?: number;
|
||||||
|
topic: string;
|
||||||
|
context: string;
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
export interface ProtocolPresenceViewModel {
|
||||||
|
memberId: number;
|
||||||
|
absent: boolean;
|
||||||
|
excused: boolean;
|
||||||
|
protocolId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SyncProtocolPresenceViewModel {
|
||||||
|
memberIds: Array<number>;
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
export interface ProtocolPrintoutViewModel {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
iteration: number;
|
||||||
|
createdAt: Date;
|
||||||
|
protocolId: number;
|
||||||
|
}
|
19
src/viewmodels/admin/club/protocol/protocolVoting.models.ts
Normal file
19
src/viewmodels/admin/club/protocol/protocolVoting.models.ts
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
export interface ProtocolVotingViewModel {
|
||||||
|
id: number;
|
||||||
|
topic: string;
|
||||||
|
context: string;
|
||||||
|
favour: number;
|
||||||
|
abstain: number;
|
||||||
|
against: number;
|
||||||
|
protocolId: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SyncProtocolVotingViewModel {
|
||||||
|
id?: number;
|
||||||
|
topic: string;
|
||||||
|
context: string;
|
||||||
|
favour: number;
|
||||||
|
abstain: number;
|
||||||
|
against: number;
|
||||||
|
protocolId: number;
|
||||||
|
}
|
13
src/viewmodels/admin/settings/award.models.ts
Normal file
13
src/viewmodels/admin/settings/award.models.ts
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
export interface AwardViewModel {
|
||||||
|
id: number;
|
||||||
|
award: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateAwardViewModel {
|
||||||
|
award: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateAwardViewModel {
|
||||||
|
id: number;
|
||||||
|
award: string;
|
||||||
|
}
|
22
src/viewmodels/admin/settings/calendarType.models.ts
Normal file
22
src/viewmodels/admin/settings/calendarType.models.ts
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
export interface CalendarTypeViewModel {
|
||||||
|
id: string;
|
||||||
|
type: string;
|
||||||
|
nscdr: boolean;
|
||||||
|
color: string;
|
||||||
|
passphrase: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateCalendarTypeViewModel {
|
||||||
|
type: string;
|
||||||
|
nscdr: boolean;
|
||||||
|
color: string;
|
||||||
|
passphrase?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateCalendarTypeViewModel {
|
||||||
|
id: string;
|
||||||
|
type: string;
|
||||||
|
nscdr: boolean;
|
||||||
|
color: string;
|
||||||
|
passphrase?: string;
|
||||||
|
}
|
18
src/viewmodels/admin/settings/communicationType.models.ts
Normal file
18
src/viewmodels/admin/settings/communicationType.models.ts
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
import type { CommunicationFieldType } from "../../../types/fieldTypes";
|
||||||
|
|
||||||
|
export interface CommunicationTypeViewModel {
|
||||||
|
id: number;
|
||||||
|
type: string;
|
||||||
|
fields: Array<CommunicationFieldType>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateCommunicationTypeViewModel {
|
||||||
|
type: string;
|
||||||
|
fields: Array<CommunicationFieldType>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateCommunicationTypeViewModel {
|
||||||
|
id: number;
|
||||||
|
type: string;
|
||||||
|
fields: Array<CommunicationFieldType>;
|
||||||
|
}
|
13
src/viewmodels/admin/settings/executivePosition.models.ts
Normal file
13
src/viewmodels/admin/settings/executivePosition.models.ts
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
export interface ExecutivePositionViewModel {
|
||||||
|
id: number;
|
||||||
|
position: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateExecutivePositionViewModel {
|
||||||
|
position: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateExecutivePositionViewModel {
|
||||||
|
id: number;
|
||||||
|
position: string;
|
||||||
|
}
|
13
src/viewmodels/admin/settings/membershipStatus.models.ts
Normal file
13
src/viewmodels/admin/settings/membershipStatus.models.ts
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
export interface MembershipStatusViewModel {
|
||||||
|
id: number;
|
||||||
|
status: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateMembershipStatusViewModel {
|
||||||
|
status: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateMembershipStatusViewModel {
|
||||||
|
id: number;
|
||||||
|
status: string;
|
||||||
|
}
|
13
src/viewmodels/admin/settings/newsletterConfig.models.ts
Normal file
13
src/viewmodels/admin/settings/newsletterConfig.models.ts
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
import type { NewsletterConfigType } from "../../../enums/newsletterConfigType";
|
||||||
|
import type { CommunicationTypeViewModel } from "./communicationType.models";
|
||||||
|
|
||||||
|
export interface NewsletterConfigViewModel {
|
||||||
|
comTypeId: number;
|
||||||
|
config: NewsletterConfigType;
|
||||||
|
comType: CommunicationTypeViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SetNewsletterConfigViewModel {
|
||||||
|
comTypeId: number;
|
||||||
|
config: NewsletterConfigType;
|
||||||
|
}
|
16
src/viewmodels/admin/settings/qualification.models.ts
Normal file
16
src/viewmodels/admin/settings/qualification.models.ts
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
export interface QualificationViewModel {
|
||||||
|
id: number;
|
||||||
|
qualification: string;
|
||||||
|
description: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateQualificationViewModel {
|
||||||
|
qualification: string;
|
||||||
|
description: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateQualificationViewModel {
|
||||||
|
id: number;
|
||||||
|
qualification: string;
|
||||||
|
description: string | null;
|
||||||
|
}
|
23
src/viewmodels/admin/settings/query.models.ts
Normal file
23
src/viewmodels/admin/settings/query.models.ts
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import type { DynamicQueryStructure } from "../../../types/dynamicQueries";
|
||||||
|
|
||||||
|
export interface TableMeta {
|
||||||
|
tableName: string;
|
||||||
|
columns: Array<{ column: string; type: string }>;
|
||||||
|
relations: Array<{ column: string; relationType: string; referencedTableName: string }>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface QueryViewModel {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
query: string | DynamicQueryStructure;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateQueryViewModel {
|
||||||
|
title: string;
|
||||||
|
query: string | DynamicQueryStructure;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateQueryViewModel {
|
||||||
|
id: number;
|
||||||
|
query: string | DynamicQueryStructure;
|
||||||
|
}
|
13
src/viewmodels/admin/settings/salutation.models.ts
Normal file
13
src/viewmodels/admin/settings/salutation.models.ts
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
export interface SalutationViewModel {
|
||||||
|
id: number;
|
||||||
|
salutation: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateSalutationViewModel {
|
||||||
|
salutation: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateSalutationViewModel {
|
||||||
|
id: number;
|
||||||
|
salutation: string;
|
||||||
|
}
|
20
src/viewmodels/admin/settings/template.models.ts
Normal file
20
src/viewmodels/admin/settings/template.models.ts
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
export interface TemplateViewModel {
|
||||||
|
id: number;
|
||||||
|
template: string;
|
||||||
|
description: string | null;
|
||||||
|
design: object;
|
||||||
|
html: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateTemplateViewModel {
|
||||||
|
template: string;
|
||||||
|
description: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateTemplateViewModel {
|
||||||
|
id: number;
|
||||||
|
template: string;
|
||||||
|
description: string | null;
|
||||||
|
design: object;
|
||||||
|
html: string;
|
||||||
|
}
|
19
src/viewmodels/admin/settings/templateUsage.models.ts
Normal file
19
src/viewmodels/admin/settings/templateUsage.models.ts
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import type { PermissionModule } from "../../../types/permissionTypes";
|
||||||
|
|
||||||
|
export interface TemplateUsageViewModel {
|
||||||
|
scope: PermissionModule;
|
||||||
|
header: { id: number; template: string } | null;
|
||||||
|
body: { id: number; template: string } | null;
|
||||||
|
footer: { id: number; template: string } | null;
|
||||||
|
headerHeight: number | null;
|
||||||
|
footerHeight: number | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateTemplateUsageViewModel {
|
||||||
|
scope: PermissionModule;
|
||||||
|
headerId: number | null;
|
||||||
|
bodyId: number | null;
|
||||||
|
footerId: number | null;
|
||||||
|
headerHeight: number | null;
|
||||||
|
footerHeight: number | null;
|
||||||
|
}
|
13
src/viewmodels/admin/user/invite.models.ts
Normal file
13
src/viewmodels/admin/user/invite.models.ts
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
export interface InviteViewModel {
|
||||||
|
username: string;
|
||||||
|
mail: string;
|
||||||
|
firstname: string;
|
||||||
|
lastname: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateInviteViewModel {
|
||||||
|
username: string;
|
||||||
|
mail: string;
|
||||||
|
firstname: string;
|
||||||
|
lastname: string;
|
||||||
|
}
|
7
src/viewmodels/admin/user/role.models.ts
Normal file
7
src/viewmodels/admin/user/role.models.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import { PermissionObject } from "../../../types/permissionTypes";
|
||||||
|
|
||||||
|
export interface RoleViewModel {
|
||||||
|
id: number;
|
||||||
|
permissions: PermissionObject;
|
||||||
|
role: string;
|
||||||
|
}
|
29
src/viewmodels/admin/user/user.models.ts
Normal file
29
src/viewmodels/admin/user/user.models.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import { PermissionObject } from "../../../types/permissionTypes";
|
||||||
|
import { RoleViewModel } from "./role.models";
|
||||||
|
|
||||||
|
export interface UserViewModel {
|
||||||
|
id: string;
|
||||||
|
username: string;
|
||||||
|
mail: string;
|
||||||
|
firstname: string;
|
||||||
|
lastname: string;
|
||||||
|
isOwner: boolean;
|
||||||
|
permissions: PermissionObject;
|
||||||
|
roles: Array<RoleViewModel>;
|
||||||
|
permissions_total: PermissionObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateUserViewModel {
|
||||||
|
username: string;
|
||||||
|
mail: string;
|
||||||
|
firstname: string;
|
||||||
|
lastname: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateUserViewModel {
|
||||||
|
id: string;
|
||||||
|
username: string;
|
||||||
|
mail: string;
|
||||||
|
firstname: string;
|
||||||
|
lastname: string;
|
||||||
|
}
|
11
tsconfig.json
Normal file
11
tsconfig.json
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES6",
|
||||||
|
"module": "commonjs",
|
||||||
|
"declaration": true,
|
||||||
|
"outDir": "./dist",
|
||||||
|
"strict": true
|
||||||
|
},
|
||||||
|
"include": ["src/**/*"],
|
||||||
|
"exclude": ["tests", "dist", "node_modules"]
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue