aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorschererleander <leander@schererleander.de>2025-07-02 22:17:50 +0200
committerschererleander <leander@schererleander.de>2025-07-02 22:17:50 +0200
commit198f95f079078e60e05d1ea6607ee14f79721a7e (patch)
tree517a9f7ebeae329a015c939563b55d1b7a114640 /src
parented9dfc0080ce10dbffe51cbe3fd031b332d43f79 (diff)
feat: add database models
Diffstat (limited to 'src')
-rw-r--r--src/model/User.ts18
-rw-r--r--src/model/Widget.ts25
2 files changed, 43 insertions, 0 deletions
diff --git a/src/model/User.ts b/src/model/User.ts
new file mode 100644
index 0000000..169549a
--- /dev/null
+++ b/src/model/User.ts
@@ -0,0 +1,18 @@
+import { Schema, model, models } from "mongoose";
+
+const UserSchema = new Schema({
+ name: { type: String, required: true },
+ email: { type: String, required: true, unique: true },
+ password: { type: String, required: true },
+ profileImage: {
+ url: { type: String },
+ key: { type: String },
+ uploadedAt: { type: Date }
+ }
+}, {
+ timestamps: true
+});
+
+const User = models.User || model("User", UserSchema);
+
+export default User; \ No newline at end of file
diff --git a/src/model/Widget.ts b/src/model/Widget.ts
new file mode 100644
index 0000000..ed4c8bc
--- /dev/null
+++ b/src/model/Widget.ts
@@ -0,0 +1,25 @@
+import { Schema, model } from "mongoose";
+import { WidgetType, ThemeOption } from "../types/widget";
+
+const WidgetSchema = new Schema({
+ ownerId: { type: String, required: true },
+ id: { type: String, required: true, unique: true },
+ name: { type: String, required: true, default: "unnamed" },
+ type: { type: String, required: true, enum: Object.values(WidgetType) },
+ data: { type: Object, required: true },
+ theme: {
+ option: { type: String, required: true, enum: Object.values(ThemeOption), default: ThemeOption.SYSTEM },
+ customColors: {
+ primary: { type: String },
+ secondary: { type: String },
+ background: { type: String },
+ text: { type: String }
+ }
+ },
+ createdAt: { type: Date, default: Date.now },
+ updatedAt: { type: Date, default: Date.now },
+});
+
+const Widget = model("Widget", WidgetSchema);
+
+export default Widget; \ No newline at end of file