From 27cda7df659852317d751b4354f75dd54878d4a7 Mon Sep 17 00:00:00 2001 From: Rory& Date: Sun, 1 Jun 2025 17:41:31 +0200 Subject: Add sensor history, balance --- src/db/schemas/index.js | 2 ++ src/db/schemas/sensorHistory.js | 34 +++++++++++++++++++++++++++ src/db/schemas/spendHistory.js | 52 ++++++++++++++++++++++++----------------- src/db/schemas/user.js | 21 +++++++++++++++++ 4 files changed, 88 insertions(+), 21 deletions(-) create mode 100644 src/db/schemas/sensorHistory.js (limited to 'src/db/schemas') diff --git a/src/db/schemas/index.js b/src/db/schemas/index.js index ee1c337..ef18499 100644 --- a/src/db/schemas/index.js +++ b/src/db/schemas/index.js @@ -1 +1,3 @@ export * from './user.js'; +export * from './spendHistory.js'; +export * from './sensorHistory.js'; diff --git a/src/db/schemas/sensorHistory.js b/src/db/schemas/sensorHistory.js new file mode 100644 index 0000000..0cf1187 --- /dev/null +++ b/src/db/schemas/sensorHistory.js @@ -0,0 +1,34 @@ +import { model, Schema, ObjectId } from 'mongoose'; + +/** + * User schema for MongoDB. + * @type {module:mongoose.Schema} + */ +export const sensorHistorySchema = new Schema( + { + createdAt: { + type: Date, + default: Date.now, + immutable: true + }, + sensor: { + type: String, + required: true, + immutable: true + }, + value: { + type: Number, + required: true, + immutable: true + } + }, + { + timeseries: { + timeField: 'createdAt' + } + } +); + +export const DbSpendHistory = model('sensorHistory', sensorHistorySchema); + +console.log('[MONGODB] sensorHistory schema initialized successfully!'); diff --git a/src/db/schemas/spendHistory.js b/src/db/schemas/spendHistory.js index b12bcc3..b4c3f20 100644 --- a/src/db/schemas/spendHistory.js +++ b/src/db/schemas/spendHistory.js @@ -1,29 +1,39 @@ -import { model, Schema } from 'mongoose'; -import { hash, compare } from 'bcrypt'; -import {ref} from "joi"; +import { model, Schema, ObjectId } from 'mongoose'; /** * User schema for MongoDB. * @type {module:mongoose.Schema} */ -export const spendHistorySchema = new Schema({ - spentBy: { - type: ObjectId, - ref: "users" +export const spendHistorySchema = new Schema( + { + venue: { + type: String, + required: true, + immutable: true + }, + items: { + type: [String], + required: true, + immutable: true + }, + cost: { + type: Number, + required: true, + immutable: true + }, + createdAt: { + type: Date, + default: Date.now, + immutable: true + } + }, + { + timeseries: { + timeField: 'createdAt' + } } - createdAt: { - type: Date, - default: Date.now, - immutable: true - } -}); - -export const UserType = Object.freeze({ - USER: 'user', - MONITOR: 'monitor', - ADMIN: 'admin' -}); +); -export const DbUser = model('user', userSchema); +export const DbSpendHistory = model('spendHistory', spendHistorySchema); -console.log('[MONGODB] User schema initialized successfully!'); +console.log('[MONGODB] spendHistory schema initialized successfully!'); diff --git a/src/db/schemas/user.js b/src/db/schemas/user.js index f8802d7..7680319 100644 --- a/src/db/schemas/user.js +++ b/src/db/schemas/user.js @@ -84,6 +84,27 @@ export const userSchema = new Schema({ monitoredUsers: { type: [ObjectId], ref: 'users' + }, + balance: { + type: Number, + default: 0 + }, + spendHistory: { + type: [ObjectId], + ref: 'spendHistory' + }, + emergencyContacts: { + type: String + }, + medicalInfo: { + type: String + }, + location: { + // https://stackoverflow.com/a/27218808 + // Longtitute, Latitude info + type: [Number], + index: { type: '2dsphere', sparse: true }, + count: 2 } }); -- cgit 1.5.1