From d5a8a61d6dcc36b52555bba65118dd4aabfc4b33 Mon Sep 17 00:00:00 2001
From: Peter Hornburger
Date: Fri, 22 Mar 2024 12:28:28 +0100
Subject: [PATCH] Freitag 12:25
---
src/constclass.ts | 2 +
src/database/filesdbclass.ts | 174 ++++++++++++++++++
.../aufgabenpersonenfilterstruktur_server.ts | 16 ++
.../mitarbeitersettingsstruktur_server.ts | 16 +-
.../projektestruktur_server.ts | 20 +-
.../teamsfilesstruktur_server.ts | 48 +++++
src/index.ts | 4 +
src/routes/filesrouts.ts | 121 ++++++++++++
8 files changed, 380 insertions(+), 21 deletions(-)
create mode 100644 src/database/filesdbclass.ts
create mode 100644 src/datenstrukturen/aufgabenpersonenfilterstruktur_server.ts
create mode 100644 src/datenstrukturen/teamsfilesstruktur_server.ts
create mode 100644 src/routes/filesrouts.ts
diff --git a/src/constclass.ts b/src/constclass.ts
index dbaa352..78d40dd 100644
--- a/src/constclass.ts
+++ b/src/constclass.ts
@@ -2,6 +2,7 @@ export class Constclass {
public readonly NONE: string;
public readonly StandortecollectionName: string;
+ public readonly FilescollectionName: string;
public readonly MitarbeitercollectionName: string;
public readonly ProjektecollectionName: string;
public readonly SettingscollectionName: string;
@@ -20,6 +21,7 @@ export class Constclass {
this.NONE = 'none';
this.StandortecollectionName = 'standorte';
+ this.FilescollectionName = 'files';
this.MitarbeitercollectionName = 'mitarbeiter';
this.SettingscollectionName = 'mitarbeitersettings';
this.ProjektecollectionName = 'projekte';
diff --git a/src/database/filesdbclass.ts b/src/database/filesdbclass.ts
new file mode 100644
index 0000000..ae7be4c
--- /dev/null
+++ b/src/database/filesdbclass.ts
@@ -0,0 +1,174 @@
+import {Document, DocumentQuery, model, Model} from "mongoose";
+import {DebugClass} from "../debug";
+import {Constclass} from "../constclass";
+import * as mongoose from "mongoose";
+import {ITeamsfilesstruktur, Teamsfileshema} from "../datenstrukturen/teamsfilesstruktur_server";
+import {Projektpunktshema} from "../datenstrukturen/projektpunktestruktur_server";
+
+export class FilesDBClass {
+
+ private Debug: DebugClass;
+ private Const: Constclass;
+
+ constructor() {
+
+ this.Debug = new DebugClass();
+ this.Const = new Constclass();
+ }
+
+ public RemoveTeamsfile(teamsfile: ITeamsfilesstruktur) {
+
+ try {
+
+ let FilesmodelClass: mongoose.Model;
+
+ return new Promise((resolve, reject) => {
+
+ FilesmodelClass = model(this.Const.FilescollectionName, Teamsfileshema);
+
+ FilesmodelClass.deleteOne({_id: teamsfile._id} ).then(() => {
+
+ resolve(true);
+
+ }).catch((error) => {
+
+ reject(error);
+ });
+
+ });
+
+ } catch (error) {
+
+ this.Debug.ShowErrorMessage(error.message, error, 'FilesDBClass', 'RemoveTeamsfile');
+ }
+
+ }
+
+ public ReadFilesliste(projektkey: string, filetype: string): Promise {
+
+ try {
+
+ let FilesmodelClass: mongoose.Model;
+ let Liste: ITeamsfilesstruktur[] = [];
+ let Filter: any;
+
+ if(filetype === 'Any') {
+
+ Filter = { Projektkey: projektkey };
+ }
+ else {
+
+ Filter = { Filetyp: filetype };
+ }
+
+ return new Promise((resolve, reject) => {
+
+ FilesmodelClass = model(this.Const.FilescollectionName, Teamsfileshema);
+
+ FilesmodelClass.find(Filter).then((data: any) => {
+
+ data.forEach((teamsfile) => {
+
+ Liste.push(teamsfile._doc);
+ });
+
+ resolve(Liste);
+
+ console.log('');
+
+ }).catch((error: any) => {
+
+ reject(error);
+ });
+
+ });
+
+ } catch (error) {
+
+ this.Debug.ShowErrorMessage(error.message, error, 'FilesDBClass', 'ReadFileliste');
+ }
+ }
+
+ public AddFiles(data: ITeamsfilesstruktur):Promise {
+
+ try {
+
+ let Filesmodel: mongoose.Document;
+
+ return new Promise((resolve, reject) => {
+
+ delete data._id;
+
+ Filesmodel = this.GetFilesModel(data);
+
+ Filesmodel.save().then((result: Document) => {
+
+ resolve(result);
+
+ }).catch((error) => {
+
+ reject(error);
+ });
+ });
+
+ } catch (error) {
+
+ this.Debug.ShowErrorMessage(error.message, error, 'FilesDBClass', 'AddFile');
+ }
+ }
+
+ public UpdateFiles(data: ITeamsfilesstruktur):Promise {
+
+ try {
+
+ let FilesmodelClass: mongoose.Model;
+
+ return new Promise((resolve, reject) => {
+
+ FilesmodelClass = model(this.Const.FilescollectionName, Teamsfileshema);
+
+ FilesmodelClass.findById(data._id).then((standort: mongoose.Document) => {
+
+ if(standort) {
+
+ standort.set(data);
+ standort.save().then((result: Document) => {
+
+ resolve(result);
+
+ }).catch((error) => {
+
+ reject(error);
+ });
+ }
+ else {
+
+ resolve(null);
+ }
+ }).catch((error) => {
+
+ reject(error);
+ });
+ });
+
+ } catch (error) {
+
+ this.Debug.ShowErrorMessage(error.message, error, 'FilesDBClass', 'UpdateFile');
+ }
+ }
+
+ public GetFilesModel(data: ITeamsfilesstruktur): mongoose.Document {
+
+ try {
+
+ const FilesmodelClass = model(this.Const.FilescollectionName, Teamsfileshema);
+ const Filesmodel: mongoose.Document = new FilesmodelClass(data);
+
+ return Filesmodel;
+ }
+ catch (error) {
+
+ this.Debug.ShowErrorMessage(error.message, error, 'FilesDBClass', 'GetStandortModel');
+ }
+ }
+}
diff --git a/src/datenstrukturen/aufgabenpersonenfilterstruktur_server.ts b/src/datenstrukturen/aufgabenpersonenfilterstruktur_server.ts
new file mode 100644
index 0000000..548992a
--- /dev/null
+++ b/src/datenstrukturen/aufgabenpersonenfilterstruktur_server.ts
@@ -0,0 +1,16 @@
+import mongoose from "mongoose";
+
+interface IAufgabenpersonenfilterstruktur {
+
+ Projektkey: string;
+ PersonenlisteID: string[];
+};
+
+const Aufgabenpersonenfiltershema = new mongoose.Schema({
+
+ Projektkey: {type: String, required: false},
+ PersonenlisteID: {type: [String], required: false},
+
+}, {_id: false});
+
+export { IAufgabenpersonenfilterstruktur, Aufgabenpersonenfiltershema };
diff --git a/src/datenstrukturen/mitarbeitersettingsstruktur_server.ts b/src/datenstrukturen/mitarbeitersettingsstruktur_server.ts
index 4773723..a387945 100644
--- a/src/datenstrukturen/mitarbeitersettingsstruktur_server.ts
+++ b/src/datenstrukturen/mitarbeitersettingsstruktur_server.ts
@@ -1,5 +1,6 @@
import mongoose from "mongoose";
import {Aufgabenansichtshema, IAufgabenansichtstruktur} from "./aufgabenansichtstruktur_server";
+import {Aufgabenpersonenfiltershema, IAufgabenpersonenfilterstruktur} from "./aufgabenpersonenfilterstruktur_server";
interface IMitarbeitersettingsstruktur {
@@ -16,17 +17,6 @@ interface IMitarbeitersettingsstruktur {
HauptkostengruppeFilter: number;
UnterkostengruppeFilter: number;
- /*
- AufgabenShowOffen: boolean;
- AufgabenShowGeschlossen: boolean;
- AufgabenShowBearbeitung: boolean;
- AufgabenShowRuecklauf: boolean;
- AufgabenShowBilder: boolean;
- AufgabenShowMeilensteinOnly: boolean;
- AufgabenShowMeilensteine: boolean;
-
- */
-
Aufgabenansicht: IAufgabenansichtstruktur[];
AufgabenTerminfiltervariante: string;
@@ -65,6 +55,8 @@ interface IMitarbeitersettingsstruktur {
UrlaubShowMeinenUrlaub: boolean;
LOPListeGeschlossenZeitfilter: number;
+
+ AufgabenPersonenfilter: IAufgabenpersonenfilterstruktur[];
};
const Mitarbeitersettingsshema = new mongoose.Schema({
@@ -125,6 +117,8 @@ const Mitarbeitersettingsshema = new mongoose.Schema({
UrlaubShowFeiertage_DE: {type: Boolean, default: true},
UrlaubShowFeiertage_BG: {type: Boolean, default: true},
UrlaubShowMeinenUrlaub: {type: Boolean, default: true},
+
+ AufgabenPersonenfilter: {type: [Aufgabenpersonenfiltershema], default: []},
});
export { Mitarbeitersettingsshema, IMitarbeitersettingsstruktur };
diff --git a/src/datenstrukturen/projektestruktur_server.ts b/src/datenstrukturen/projektestruktur_server.ts
index 0f959d8..df4a513 100644
--- a/src/datenstrukturen/projektestruktur_server.ts
+++ b/src/datenstrukturen/projektestruktur_server.ts
@@ -1,8 +1,7 @@
-import * as mongoose from "mongoose";
+import mongoose from "mongoose";
import {IVerfasserstruktur, Verfassershema} from "./verfasserstruktur_server";
import {IProjektbeteiligtestruktur, Projektbeteiligteeshema} from "./projektbeteiligtestruktur_server";
import {Bauteilshema, IBauteilstruktur} from "./bauteilstruktur_server";
-import {IProjektfirmenstruktur, Projektfirmenshema} from "./projektfirmenstruktur_server";
interface IProjektestruktur {
@@ -13,7 +12,6 @@ interface IProjektestruktur {
Projektkey: string;
Zeitstempel: number;
Zeitpunkt: string;
- Projektmailadresse: string;
Strasse: string;
PLZ: string;
Ort: string;
@@ -25,7 +23,6 @@ interface IProjektestruktur {
Status: string;
Verfasser: IVerfasserstruktur;
Beteiligtenliste: IProjektbeteiligtestruktur[];
- Firmenliste: IProjektfirmenstruktur[];
Bauteilliste: IBauteilstruktur[];
MitarbeiterIDListe: string[];
ProjektIsReal: boolean;
@@ -46,12 +43,15 @@ interface IProjektestruktur {
TeamsDescription: string;
TeamsName: string;
+ ProjektlogofileID: string;
+ Projektlogobreite: string;
+
+ BilderFolderID: string;
ProjektFolderID: string;
ProtokolleFolderID: string;
BautagebuchFolderID: string;
BaustellenLOPFolderID: string;
- RechnungListefolderID: string;
- LastLOPEintragnummer: number;
+ LastLOPEintragnummer: number;
};
const Projekteshema = new mongoose.Schema({
@@ -61,7 +61,6 @@ const Projekteshema = new mongoose.Schema({
StellvertreterID: {type: String, required: false},
StandortID: {type: String, required: false},
Projektkey: {type: String, required: false},
- Projektmailadresse: {type: String, required: false},
Projektkurzname: {type: String, required: false},
OutlookkategorieID: {type: String, required: false},
Projektnummer: {type: String, required: false},
@@ -92,7 +91,6 @@ const Projekteshema = new mongoose.Schema({
Verfasser: Verfassershema,
Beteiligtenliste: [Projektbeteiligteeshema],
Bauteilliste: [Bauteilshema],
- Firmenliste: [Projektfirmenshema],
MitarbeiterIDListe: [{type: String}],
LastLOPEintragnummer: {type: Number, required: false},
@@ -100,13 +98,15 @@ const Projekteshema = new mongoose.Schema({
TeamsDescription: {type: String, required: false},
TeamsName: {type: String, required: false},
+ ProjektlogofileID: {type: String, required: false},
+ Projektlogobreite: {type: String, required: false},
+
ProjektFolderID: {type: String, required: false},
ProtokolleFolderID: {type: String, required: false},
BautagebuchFolderID: {type: String, required: false},
BaustellenLOPFolderID: {type: String, required: false},
- RechnungListefolderID: {type: String, required: false}
+ BilderFolderID: {type: String, required: false},
});
export { IProjektestruktur, Projekteshema };
-
diff --git a/src/datenstrukturen/teamsfilesstruktur_server.ts b/src/datenstrukturen/teamsfilesstruktur_server.ts
new file mode 100644
index 0000000..7b9b7f2
--- /dev/null
+++ b/src/datenstrukturen/teamsfilesstruktur_server.ts
@@ -0,0 +1,48 @@
+import {IVerfasserstruktur, Verfassershema} from "./verfasserstruktur_server";
+import mongoose from "mongoose";
+
+
+interface ITeamsfilesstruktur {
+
+ _id: string;
+ id: string;
+ name: string;
+ webUrl: string;
+ size: number;
+ ProjektID: string;
+ Projektkey: string;
+ ProjektpunktID: string;
+ Filetyp: string;
+ Leistungsphase: string;
+ Zeitstempel: number;
+ Zeitsting: string;
+ MimeType: string;
+ DirectoryID: string;
+ Beschreibung: string;
+ Verfasser: IVerfasserstruktur;
+};
+
+const Teamsfileshema = new mongoose.Schema({
+
+ id: {type: String, required: false},
+ name: {type: String, required: false},
+ webUrl: {type: String, required: false},
+ size: {type: Number, required: false},
+ ProjektID: {type: String, required: false},
+ Projektkey: {type: String, required: false},
+ ProjektpunktID: {type: String, required: false},
+ Filetyp: {type: String, required: false},
+ Leistungsphase: {type: String, required: false},
+ Zeitstempel: {type: Number, required: false},
+ Zeitsting: {type: String, required: false},
+ MimeType: {type: String, required: false},
+ DirectoryID: {type: String, required: false},
+ Beschreibung: {type: String, required: false},
+ Verfasser: Verfassershema
+});
+
+export { ITeamsfilesstruktur, Teamsfileshema };
+
+
+
+
diff --git a/src/index.ts b/src/index.ts
index b2b3fc1..9cf5f2c 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -54,6 +54,7 @@ import {SaveLOPListeroutsClass} from "./routes/saveloplisterouts";
import {SendReminderroutsClass} from "./routes/sendreminderrouts";
import {FestlegungskategorieouterClass} from "./routes/festlegungskategorierouts";
import {SimontabelleroutsClass} from "./routes/simontabellerouts";
+import {FilesrouterClass} from "./routes/filesrouts";
const app: Application = express();
@@ -90,6 +91,7 @@ const SendLOPListerouter: SendLOPListeroutsClass = new SendLOPListeroutsClass();
const SaveFestlegungenrouts: SaveFestlegungenroutsClass = new SaveFestlegungenroutsClass();
const Addsubscriptionrouts: AddsubscriptionroutsClass = new AddsubscriptionroutsClass();
const Simontabellenrouts: SimontabelleroutsClass = new SimontabelleroutsClass();
+const Filesroutes: FilesrouterClass = new FilesrouterClass();
const NONE = 'NONE';
let Port: string = 'none';
@@ -186,6 +188,7 @@ SaveLOPListerouter.Init(Config);
Addsubscriptionrouts.Init(Config);
Simontabellenrouts.Init(Config);
+Filesroutes.SetRoutes();
Homerouter.SetRoutes();
Errorrouter.SetRoutes();
Standorterouter.SetRoutes();
@@ -247,6 +250,7 @@ app.use('/subscription', Addsubscriptionrouts.subscriptionrouter);
app.use('/notizenkapitel', Notizenkapitelroutes.notizenkapitelrouter);
app.use('/festlegungskategorie', Festlegungskategorieroutes.festlegungskategorierouter);
app.use('/simontabellen', Simontabellenrouts.simontabellerouter);
+app.use('/files', Filesroutes.filesrouter);
// eventcallback
diff --git a/src/routes/filesrouts.ts b/src/routes/filesrouts.ts
new file mode 100644
index 0000000..5dd9af3
--- /dev/null
+++ b/src/routes/filesrouts.ts
@@ -0,0 +1,121 @@
+import {Request, Response, Router} from 'express';
+import {StandorteDBClass} from "../database/standortedbclass";
+import {DebugClass} from "../debug";
+import {AuthenticationClass} from "../middleware/authentication";
+import {FilesDBClass} from "../database/filesdbclass";
+import {ITeamsfilesstruktur} from "../datenstrukturen/teamsfilesstruktur_server";
+import {FILE} from "node:dns";
+
+export class FilesrouterClass {
+
+ public filesrouter: any;
+ private Debug: DebugClass;
+ private Database: FilesDBClass;
+ private Authentication: AuthenticationClass;
+
+ constructor() {
+
+
+ this.Debug = new DebugClass();
+ this.Database = new FilesDBClass();
+ this.filesrouter = Router();
+ this.Authentication = new AuthenticationClass();
+ }
+
+ public SetRoutes() {
+
+ try {
+
+ this.filesrouter.get('/', this.Authentication.authenticate, (req: Request, res: Response) => {
+
+ let query= req.query;
+ let Projektkey = query.projektkey;
+ let Filetyp: string = query.filetype;
+
+ this.Database.ReadFilesliste(Projektkey, Filetyp).then((liste: ITeamsfilesstruktur[]) => {
+
+ res.status(200).send(liste);
+
+ }).catch((error) => {
+
+ res.status(400).send(error.message);
+
+ });
+ });
+
+ this.filesrouter.put('/', (req: Request, res: Response) => {
+
+ // PUT ist für Update
+
+ console.log('Standorte PUT');
+
+ const data = req.body;
+ let Delete: boolean = data.Delete;
+ let Teamsfile: ITeamsfilesstruktur = data.Teamsfile;
+
+ console.log('Daten: ' + JSON.stringify(data));
+
+ if(Delete === false) {
+
+ this.Database.UpdateFiles(Teamsfile).then((result) => {
+
+ if(result !== null) {
+
+ res.status(200).send({ message: 'Saved: ' + data.name, data: data });
+ }
+ else {
+
+ res.status(404).send({ message: 'Teamsfile not found.', data: null });
+ }
+
+ }).catch((error) => {
+
+ res.status(400).send({ message: error.message });
+ });
+ }
+ else {
+
+ // Teamsfile loeschen
+
+ this.Database.RemoveTeamsfile(Teamsfile).then((result) => {
+
+ if(result !== null) {
+
+ res.status(200).send({ message: 'Teamsfile wurden gelöscht' });
+ }
+
+ }).catch((error) => {
+
+ res.status(400).send({ message: error.message });
+ });
+ }
+ });
+
+ this.filesrouter.post('/', (req: Request, res: Response) => {
+
+ // POST ist für neuen Eintrag
+
+ console.log('Files POST');
+
+ const data = req.body;
+
+ console.log('Daten: ' + JSON.stringify(data));
+
+ this.Database.AddFiles(data).then((result) => {
+
+ res.status(200).send({ message: 'Added: ' + data.name, data: result._doc });
+
+ }).catch((error) => {
+
+ res.status(400).send({ message: error.message });
+ });
+ });
+
+ } catch (error) {
+
+ this.Debug.ShowErrorMessage(error.message, error, 'FilesrouterClass', 'SetRoutes');
+ }
+ }
+}
+
+