From d65a0846148a9f3d391f9bba771b15c5c0da3645 Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 30 Jun 2026 20:06:59 +0000 Subject: [PATCH] Initial --- src/models/Settings.js | 22 ++++++++++++++++++++++ src/models/TimeEntry.js | 19 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/models/Settings.js create mode 100644 src/models/TimeEntry.js diff --git a/src/models/Settings.js b/src/models/Settings.js new file mode 100644 index 0000000..029b7d3 --- /dev/null +++ b/src/models/Settings.js @@ -0,0 +1,22 @@ +const mongoose = require('mongoose'); + +const settingsSchema = new mongoose.Schema( + { + targetHoursPerDay: { type: Number, default: 8 }, + // 0 = Sonntag ... 6 = Samstag (JS Date.getDay()) + workDays: { type: [Number], default: [1, 2, 3, 4, 5] }, + // Bereits vorhandenes Über-/Minusstunden-Guthaben, bevor die App genutzt wurde. + startingBalanceMinutes: { type: Number, default: 0 }, + }, + { timestamps: true } +); + +settingsSchema.statics.getSingleton = async function getSingleton() { + let settings = await this.findOne(); + if (!settings) { + settings = await this.create({}); + } + return settings; +}; + +module.exports = mongoose.model('Settings', settingsSchema); diff --git a/src/models/TimeEntry.js b/src/models/TimeEntry.js new file mode 100644 index 0000000..d02252b --- /dev/null +++ b/src/models/TimeEntry.js @@ -0,0 +1,19 @@ +const mongoose = require('mongoose'); + +const timeEntrySchema = new mongoose.Schema( + { + date: { type: String, required: true, unique: true }, // 'YYYY-MM-DD' + startTime: { type: String, required: true }, // 'HH:MM' + endTime: { type: String, required: true }, // 'HH:MM' + breakMinutes: { type: Number, default: 0 }, + note: { type: String, default: '' }, + // Werden beim Speichern anhand der zu diesem Zeitpunkt gültigen + // Einstellungen berechnet und fest abgelegt, damit spätere Änderungen + // an den Soll-Stunden bestehende Buchungen nicht rückwirkend verändern. + workedMinutes: { type: Number, required: true }, + balanceMinutes: { type: Number, required: true }, + }, + { timestamps: true } +); + +module.exports = mongoose.model('TimeEntry', timeEntrySchema);