Skip to content
2 changes: 1 addition & 1 deletion application/backend/batches/batchendpoints.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ async function nightlyMails() {
checkMaster(now),
]);

const jobtypes: JobType[] = ["Presse", "Fluegel", "Photo", "TextFehlt", "Kasse", "Programmheft", "Staff", "Bar"];
const jobtypes: JobType[] = ["Presse", "Fluegel", "Photo", "TextFehlt", "Kasse", "Programmheft", "Staff", "Bar", "Master"];
const typedResults = map(results, (jobResult, index) => ({ type: jobtypes[index], jobResult }));
return informAdmin(typedResults);
}
Expand Down
2 changes: 1 addition & 1 deletion application/backend/batches/sendMailToAdmin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import map from "lodash/map.js";

const receiver = "leider";

export type JobType = "Programmheft" | "Presse" | "Kasse" | "Bar" | "Photo" | "Fluegel" | "TextFehlt" | "Staff";
export type JobType = "Programmheft" | "Presse" | "Kasse" | "Bar" | "Photo" | "Fluegel" | "TextFehlt" | "Staff" | "Master";

export async function informAdmin(allResults: { type: JobType; jobResult: JobResult }[]) {
const user = userstore.forId(receiver);
Expand Down
16 changes: 2 additions & 14 deletions application/backend/lib/commons/replies.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,5 @@
import { Response } from "express";

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function reply(res: Response, err?: Error | null, value?: any): void {
if (err) {
res.status(500).send(err.message ? err.message : err);
return;
}
const valToSend = value?.toJSON ? value.toJSON() : value;
res.type("application/json").send(valToSend || { status: "ok" });
}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function resToJson(res: Response, value?: any) {
const valToSend = value?.toJSON ? value.toJSON() : value;
res.type("application/json").send(valToSend ?? { status: "ok" });
export function resToJson<T>(res: Response, value?: T) {
res.json(value);
}
3 changes: 2 additions & 1 deletion application/backend/lib/konzerte/imageService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { ImageOverviewRow } from "jc-shared/konzert/konzert.js";
import store from "./konzertestore.js";
import conf from "jc-shared/commons/simpleConfigure.js";
import map from "lodash/map.js";
import sortBy from "lodash/sortBy.js";

async function renameImage(oldname: string, newname: string, konzertIds: string[], user: User) {
function updateKonzert(id: string) {
Expand Down Expand Up @@ -31,6 +32,6 @@ export default {

alleBildNamen: async function alleBildNamen() {
const files = await fs.readdir(conf.uploadDir);
return files.sort();
return sortBy(files);
},
};
3 changes: 1 addition & 2 deletions application/backend/lib/konzerte/konzertestore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,7 @@ export default {
},

saveKonzert(konzert: Konzert, user: User) {
const object = konzert.toJSON();
persistence.save(object as { id: string }, user);
persistence.save(konzert as { id: string }, user);
return konzert;
},

Expand Down
2 changes: 1 addition & 1 deletion application/backend/lib/mailsender/mailstore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export default {
},

save: function save(mailRule: MailRule, user: User) {
persistence.save(mailRule.toJSON(), user);
persistence.save(mailRule, user);
return mailRule;
},

Expand Down
2 changes: 1 addition & 1 deletion application/backend/lib/optionen/kalendereventstore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export default {
},

save: function save(event: KalenderEvents) {
persistence.save(event.toJSON(), new User({ name: "System" }));
persistence.save(event, new User({ name: "System" }));
return event;
},
};
2 changes: 1 addition & 1 deletion application/backend/lib/optionen/optionenstore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export default {
},

save: function save(object: OptionValues | Orte | FerienIcals, user: User) {
persistence.save(object.toJSON ? object.toJSON() : object, user);
persistence.save(object, user);
return object;
},
};
2 changes: 1 addition & 1 deletion application/backend/lib/optionen/terminstore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export default {
},

save: function save(termin: Termin, user: User) {
persistence.save(termin.toJSON(), user);
persistence.save(termin, user);
return termin;
},

Expand Down
13 changes: 8 additions & 5 deletions application/backend/lib/persistence/sqlitePersistence.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import User from "jc-shared/user/user.js";
import { areDifferentForHistoryEntries } from "jc-shared/commons/comparingAndTransforming.js";
import map from "lodash/map.js";
import forEach from "lodash/forEach.js";
import isString from "lodash/isString.js";

export const db = new Database(conf.sqlitedb);
const scriptLogger = loggers.get("scripts");
Expand All @@ -14,8 +15,11 @@ function asSqliteString(obj: object) {
return `${escape(JSON.stringify(obj))}`;
}

export function escape(str = "") {
return `'${str.replaceAll("'", "''")}'`;
export function escape(str: string | Date = "") {
if (isString(str)) {
return `'${str.replaceAll("'", "''")}'`;
}
return `'${str.toJSON().replaceAll("'", "''")}'`;
}

export function execWithTry(command: string) {
Expand Down Expand Up @@ -93,11 +97,10 @@ class Persistence {
return ["id", "data"].concat(this.extraCols);
}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
private createValsForSave(object: { [ind: string]: any } & { id: string }) {
private createValsForSave(object: { [ind: string]: string | Date } & { id: string }) {
return [escape(object.id), asSqliteString(object)].concat(
map(this.extraCols, (col) => {
return object[col]?.toJSON ? escape(object[col].toJSON()) : escape(object[col]);
return escape(object[col]);
}),
);
}
Expand Down
3 changes: 2 additions & 1 deletion application/backend/lib/rider/ridersrest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ app.post("/", (req: Request, res: Response) => {
}
const anonymous = new User({ id: "anonymous", name: "Rider Anonymous" });
store.saveRider(rider, anonymous);
return resToJson(res, rider);
resToJson(res, rider);
return;
}
}
res.sendStatus(500);
Expand Down
2 changes: 1 addition & 1 deletion application/backend/lib/rider/riderstore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export default {
},

saveRider: function saveRider(object: Rider, user: User) {
persistence.save(object.toJSON() as Rider, user);
persistence.save(object, user);
return object;
},
};
3 changes: 1 addition & 2 deletions application/backend/lib/vermietungen/vermietungenstore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,7 @@ export default {
},

saveVermietung: function saveVermietung(vermietung: Vermietung, user: User) {
const object = vermietung.toJSON();
persistence.save(object as { id: string }, user);
persistence.save(vermietung as { id: string }, user);
return vermietung;
},

Expand Down
5 changes: 3 additions & 2 deletions application/backend/rest/calendar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import flatMap from "lodash/flatMap.js";

import DatumUhrzeit from "jc-shared/commons/DatumUhrzeit.js";
import { Ical } from "jc-shared/optionen/ferienIcals.js";
import { TerminFilterOptions } from "jc-shared/optionen/termin.js";
import { TerminEvent, TerminFilterOptions } from "jc-shared/optionen/termin.js";
import User from "jc-shared/user/user.js";

import store from "../lib/konzerte/konzertestore.js";
Expand All @@ -18,6 +18,7 @@ import kalenderEventsService from "../lib/optionen/kalenderEventsService.js";
import Veranstaltung from "jc-shared/veranstaltung/veranstaltung.js";
import map from "lodash/map.js";
import filter from "lodash/filter.js";
import identity from "lodash/identity.js";

const app = express();

Expand Down Expand Up @@ -67,7 +68,7 @@ app.get("/fullcalendarevents.json", async (req, res) => {

const termineForIcals = await Promise.all(map(icals, termineForIcal));
const events = termine
.concat(flatMap(termineForIcals, (x) => x))
.concat(flatMap(termineForIcals, identity<TerminEvent[]>))
.concat(konzerte)
.concat(vermietungen);
resToJson(res, events);
Expand Down
3 changes: 1 addition & 2 deletions application/backend/rest/konzerte.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,12 @@ import { kassenzettelToBuchhaltung } from "../lib/pdf/pdfGeneration.js";
import { checkAbendkasse, checkOrgateam } from "./checkAccessHandlers.js";
import parseFormData from "../lib/commons/parseFormData.js";
import find from "lodash/find.js";
import invokeMap from "lodash/invokeMap.js";

const app = express();

function standardHandler(res: Response, user: User, konzerte: Konzert[]) {
const result = konzerteService.filterUnbestaetigteFuerJedermann(konzerte, user);
resToJson(res, invokeMap(result, "toJSON"));
resToJson(res, result);
}

function saveAndReply(req: Request, res: Response, konzert: Konzert) {
Expand Down
12 changes: 7 additions & 5 deletions application/backend/rest/mail.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,20 @@ import User from "jc-shared/user/user.js";
import fs from "fs/promises";
import parseFormData from "../lib/commons/parseFormData.js";
import MailMessage from "jc-shared/mail/mailMessage.js";
import invokeMap from "lodash/invokeMap.js";
import map from "lodash/map.js";
import forEach from "lodash/forEach.js";
import filter from "lodash/filter.js";

const app = express();

app.get("/mailrule", [checkSuperuser], (req: Request, res: Response) => {
const rules = mailstore.all();
const result = invokeMap(rules, "toJSON");
resToJson(res, result);
resToJson(res, mailstore.all());
});

app.post("/mailrules", [checkSuperuser], (req: Request, res: Response) => {
const oldRules = mailstore.all();
const newRules = misc.toObjectList(MailRule, req.body);
const { changed, deletedIds } = calculateChangedAndDeleted(invokeMap(newRules, "toJSON"), invokeMap(oldRules, "toJSON"));
const { changed, deletedIds } = calculateChangedAndDeleted(newRules, oldRules);

mailstore.saveAll(changed, req.user as User);
mailstore.removeAll(deletedIds, req.user as User);
Expand Down Expand Up @@ -72,4 +69,9 @@ app.post("/mailinglisten", [checkSuperuser], (req: Request, res: Response) => {
resToJson(res, users);
});

app.get("/mailinglisten", [checkSuperuser], (req: Request, res: Response) => {
const users = userstore.allUsers();
resToJson(res, map(users, "withoutPass"));
});

export default app;
3 changes: 1 addition & 2 deletions application/backend/rest/optionen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import { calculateChangedAndDeleted } from "jc-shared/commons/compareObjects.js"
import misc from "jc-shared/commons/misc.js";
import { checkOrgateam } from "./checkAccessHandlers.js";
import User from "jc-shared/user/user.js";
import invokeMap from "lodash/invokeMap.js";

const app = express();

Expand Down Expand Up @@ -51,7 +50,7 @@ app.get("/termine", (req, res) => {
app.post("/termine", [checkOrgateam], (req: Request, res: Response) => {
const oldTermine = terminstore.alle();
const newTermine = misc.toObjectList(Termin, req.body);
const { changed, deletedIds } = calculateChangedAndDeleted(invokeMap(newTermine, "toJSON"), invokeMap(oldTermine, "toJSON"));
const { changed, deletedIds } = calculateChangedAndDeleted(newTermine, oldTermine);
terminstore.saveAll(changed, req.user as User);
terminstore.removeAll(deletedIds, req.user as User);
resToJson(res, terminstore.alle());
Expand Down
16 changes: 8 additions & 8 deletions application/backend/rest/users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,28 @@ import User from "jc-shared/user/user.js";

import service from "../lib/users/usersService.js";
import store from "../lib/users/userstore.js";
import { reply, resToJson } from "../lib/commons/replies.js";
import { resToJson } from "../lib/commons/replies.js";
import { checkCanEditUser, checkSuperuser } from "./checkAccessHandlers.js";
import invokeMap from "lodash/invokeMap.js";
import map from "lodash/map.js";

const app = express();

app.get("/users/current", (req, res) => {
if (req.user) {
return reply(res, undefined, new User(req.user).toJSONWithoutPass());
return resToJson(res, new User(req.user).withoutPass);
}
res.sendStatus(401);
});

app.get("/users", (req, res) => {
const users = store.allUsers();
resToJson(res, { users: invokeMap(users, "toJSONWithoutPass") });
resToJson(res, map(users, "withoutPass"));
});

app.post("/user/changePassword", [checkCanEditUser], (req: Request, res: Response) => {
const user = new User(req.body);
service.changePassword(user, req.user as User);
resToJson(res, user);
resToJson(res, user.withoutPass);
});

app.post("/user", [checkCanEditUser], (req: Request, res: Response) => {
Expand All @@ -37,19 +37,19 @@ app.post("/user", [checkCanEditUser], (req: Request, res: Response) => {
user.hashedPassword = existingUser.hashedPassword;
user.salt = existingUser.salt;
store.save(user, req.user as User);
resToJson(res, user);
resToJson(res, user.withoutPass);
});

app.put("/user", [checkSuperuser], (req: Request, res: Response) => {
const user = new User(req.body);
service.saveNewUserWithPassword(user, req.user as User);
resToJson(res, user);
resToJson(res, user.withoutPass);
});

app.delete("/user", [checkSuperuser], (req: Request, res: Response) => {
const userToDelete = new User(req.body);
store.deleteUser(userToDelete.id, req.user as User);
resToJson(res, userToDelete);
resToJson(res, userToDelete.withoutPass);
});

export default app;
3 changes: 1 addition & 2 deletions application/backend/rest/vermietungen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,12 @@ import store from "../lib/vermietungen/vermietungenstore.js";
import { checkOrgateam } from "./checkAccessHandlers.js";
import { saveVermietungToShare, vermietungVertragToBuchhaltung } from "../lib/pdf/pdfGeneration.js";
import { filterUnbestaetigteFuerJedermann } from "../lib/vermietungen/vermietungenService.js";
import invokeMap from "lodash/invokeMap.js";

const app = express();

async function standardHandler(req: Request, res: Response, vermietungen: Vermietung[]) {
const user: User = req.user as User;
resToJson(res, invokeMap(filterUnbestaetigteFuerJedermann(vermietungen, user), "toJSON"));
resToJson(res, filterUnbestaetigteFuerJedermann(vermietungen, user));
}

function saveAndReply(req: Request, res: Response, vermietung: Vermietung) {
Expand Down
5 changes: 0 additions & 5 deletions application/shared/konzert/eintrittspreise.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,6 @@ export default class Eintrittspreise {
};
}

/* eslint-disable-next-line @typescript-eslint/no-explicit-any*/
toJSON(): any {
return Object.assign({}, this);
}

constructor(object?: RecursivePartial<Eintrittspreise>) {
if (object && keys(object).length !== 0) {
if (!object.preisprofil) {
Expand Down
4 changes: 0 additions & 4 deletions application/shared/konzert/kasse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,6 @@ export default class Kasse {
"10000": undefined,
};
endbestandGezaehltEUR = 0;
/* eslint-disable-next-line @typescript-eslint/no-explicit-any*/
toJSON(): any {
return Object.assign({}, this);
}

constructor(object?: RecursivePartial<Omit<Kasse, "kassenfreigabeAm"> & { kassenfreigabeAm?: Date | string }>) {
if (object && keys(object).length !== 0) {
Expand Down
19 changes: 0 additions & 19 deletions application/shared/konzert/konzert.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,25 +53,6 @@ export default class Konzert extends Veranstaltung {

unterkunft: Unterkunft;

toJSON(): object {
const result = {};
Object.assign(result, this, {
agentur: this.agentur.toJSON(),
artist: this.artist.toJSON(),
eintrittspreise: this.eintrittspreise.toJSON(),
hotel: this.hotel.toJSON(),
kasse: this.kasse.toJSON(),
kopf: this.kopf.toJSON(),
kosten: this.kosten.toJSON(),
presse: this.presse.toJSON(),
staff: this.staff.toJSON(),
technik: this.technik.toJSON(),
unterkunft: this.unterkunft.toJSON(),
vertrag: this.vertrag.toJSON(),
});
return result;
}

constructor(object?: RecursivePartial<Omit<Konzert, "startDate" | "endDate"> & { startDate: string | Date; endDate: string | Date }>) {
super(object);
if (object) {
Expand Down
5 changes: 0 additions & 5 deletions application/shared/konzert/unterkunft.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,6 @@ export default class Unterkunft {
anreiseDate: Date;
abreiseDate: Date;

/* eslint-disable-next-line @typescript-eslint/no-explicit-any*/
toJSON(): any {
return Object.assign({}, this);
}

constructor(
object:
| RecursivePartial<
Expand Down
Loading