From 10cd877264920ff2026f1233ca120f0abe63c2f1 Mon Sep 17 00:00:00 2001 From: Arca Ege Cengiz Date: Sat, 3 Jan 2026 07:47:22 +0000 Subject: [PATCH] Add ovenpheus --- drizzle/0024_bored_valeria_richards.sql | 9 + drizzle/meta/0024_snapshot.json | 1229 +++++++++++++++++ drizzle/meta/_journal.json | 7 + src/lib/assets/ovenpheus.png | Bin 0 -> 8586 bytes src/lib/defs.ts | 4 +- src/lib/server/db/schema.ts | 10 + src/routes/dashboard/market/+page.svelte | 28 +- src/routes/dashboard/market/MarketItem.svelte | 4 +- .../market/ovenpheus/+page.server.ts | 55 + .../dashboard/market/ovenpheus/+page.svelte | 86 ++ 10 files changed, 1427 insertions(+), 5 deletions(-) create mode 100644 drizzle/0024_bored_valeria_richards.sql create mode 100644 drizzle/meta/0024_snapshot.json create mode 100644 src/lib/assets/ovenpheus.png create mode 100644 src/routes/dashboard/market/ovenpheus/+page.server.ts create mode 100644 src/routes/dashboard/market/ovenpheus/+page.svelte diff --git a/drizzle/0024_bored_valeria_richards.sql b/drizzle/0024_bored_valeria_richards.sql new file mode 100644 index 0000000..e7bb2e6 --- /dev/null +++ b/drizzle/0024_bored_valeria_richards.sql @@ -0,0 +1,9 @@ +CREATE TABLE "ovenpheus_log" ( + "id" serial PRIMARY KEY NOT NULL, + "userId" integer, + "clay" real NOT NULL, + "bricksReceived" real NOT NULL, + "timestamp" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +ALTER TABLE "ovenpheus_log" ADD CONSTRAINT "ovenpheus_log_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE no action ON UPDATE no action; \ No newline at end of file diff --git a/drizzle/meta/0024_snapshot.json b/drizzle/meta/0024_snapshot.json new file mode 100644 index 0000000..c11faa9 --- /dev/null +++ b/drizzle/meta/0024_snapshot.json @@ -0,0 +1,1229 @@ +{ + "id": "530bbae3-07b0-4ea9-bb7e-3d249c2632d1", + "prevId": "e061887a-050c-4b6a-a277-14fd95e9a49a", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.devlog": { + "name": "devlog", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "projectId": { + "name": "projectId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "timeSpent": { + "name": "timeSpent", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "deleted": { + "name": "deleted", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "devlog_userId_user_id_fk": { + "name": "devlog_userId_user_id_fk", + "tableFrom": "devlog", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "devlog_projectId_project_id_fk": { + "name": "devlog_projectId_project_id_fk", + "tableFrom": "devlog", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.impersonate_audit_log": { + "name": "impersonate_audit_log", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "adminUserId": { + "name": "adminUserId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "targetUserId": { + "name": "targetUserId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "impersonate_audit_log_adminUserId_user_id_fk": { + "name": "impersonate_audit_log_adminUserId_user_id_fk", + "tableFrom": "impersonate_audit_log", + "tableTo": "user", + "columnsFrom": [ + "adminUserId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "impersonate_audit_log_targetUserId_user_id_fk": { + "name": "impersonate_audit_log_targetUserId_user_id_fk", + "tableFrom": "impersonate_audit_log", + "tableTo": "user", + "columnsFrom": [ + "targetUserId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.legion_review": { + "name": "legion_review", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "projectId": { + "name": "projectId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "feedback": { + "name": "feedback", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "notes": { + "name": "notes", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "filamentUsed": { + "name": "filamentUsed", + "type": "real", + "primaryKey": false, + "notNull": false + }, + "action": { + "name": "action", + "type": "legion_action", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "legion_review_userId_user_id_fk": { + "name": "legion_review_userId_user_id_fk", + "tableFrom": "legion_review", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "legion_review_projectId_project_id_fk": { + "name": "legion_review_projectId_project_id_fk", + "tableFrom": "legion_review", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.market_item": { + "name": "market_item", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "createdBy": { + "name": "createdBy", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "minRequiredShopScore": { + "name": "minRequiredShopScore", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "minShopScore": { + "name": "minShopScore", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "maxShopScore": { + "name": "maxShopScore", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "maxPrice": { + "name": "maxPrice", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "minPrice": { + "name": "minPrice", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "isPublic": { + "name": "isPublic", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "deleted": { + "name": "deleted", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "market_item_createdBy_user_id_fk": { + "name": "market_item_createdBy_user_id_fk", + "tableFrom": "market_item", + "tableTo": "user", + "columnsFrom": [ + "createdBy" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.market_item_order": { + "name": "market_item_order", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "addressId": { + "name": "addressId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bricksPaid": { + "name": "bricksPaid", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "market_order_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'awaiting_approval'" + }, + "userNotes": { + "name": "userNotes", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "notes": { + "name": "notes", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "deleted": { + "name": "deleted", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "market_item_order_userId_user_id_fk": { + "name": "market_item_order_userId_user_id_fk", + "tableFrom": "market_item_order", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ovenpheus_log": { + "name": "ovenpheus_log", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "clay": { + "name": "clay", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "bricksReceived": { + "name": "bricksReceived", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "ovenpheus_log_userId_user_id_fk": { + "name": "ovenpheus_log_userId_user_id_fk", + "tableFrom": "ovenpheus_log", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.project": { + "name": "project", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "editorFileType": { + "name": "editorFileType", + "type": "editor_file_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "editorUrl": { + "name": "editorUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "uploadedFileUrl": { + "name": "uploadedFileUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "modelFile": { + "name": "modelFile", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'building'" + }, + "printedBy": { + "name": "printedBy", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "submittedToAirtable": { + "name": "submittedToAirtable", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "deleted": { + "name": "deleted", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "project_userId_user_id_fk": { + "name": "project_userId_user_id_fk", + "tableFrom": "project", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "project_printedBy_user_id_fk": { + "name": "project_printedBy_user_id_fk", + "tableFrom": "project", + "tableTo": "user", + "columnsFrom": [ + "printedBy" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "expiresAt": { + "name": "expiresAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "session_userId_user_id_fk": { + "name": "session_userId_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ship": { + "name": "ship", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "projectId": { + "name": "projectId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "editorFileType": { + "name": "editorFileType", + "type": "editor_file_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "editorUrl": { + "name": "editorUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "uploadedFileUrl": { + "name": "uploadedFileUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "modelFile": { + "name": "modelFile", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "ship_userId_user_id_fk": { + "name": "ship_userId_user_id_fk", + "tableFrom": "ship", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "ship_projectId_project_id_fk": { + "name": "ship_projectId_project_id_fk", + "tableFrom": "ship", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.t1_review": { + "name": "t1_review", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "projectId": { + "name": "projectId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "feedback": { + "name": "feedback", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "notes": { + "name": "notes", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "action": { + "name": "action", + "type": "t1_review_action", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "t1_review_userId_user_id_fk": { + "name": "t1_review_userId_user_id_fk", + "tableFrom": "t1_review", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "t1_review_projectId_project_id_fk": { + "name": "t1_review_projectId_project_id_fk", + "tableFrom": "t1_review", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.t2_review": { + "name": "t2_review", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "projectId": { + "name": "projectId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "feedback": { + "name": "feedback", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "notes": { + "name": "notes", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "shopScoreMultiplier": { + "name": "shopScoreMultiplier", + "type": "real", + "primaryKey": false, + "notNull": true, + "default": 25 + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "t2_review_userId_user_id_fk": { + "name": "t2_review_userId_user_id_fk", + "tableFrom": "t2_review", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "t2_review_projectId_project_id_fk": { + "name": "t2_review_projectId_project_id_fk", + "tableFrom": "t2_review", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "idvId": { + "name": "idvId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "idvToken": { + "name": "idvToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "slackId": { + "name": "slackId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "profilePicture": { + "name": "profilePicture", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "hackatimeTrust": { + "name": "hackatimeTrust", + "type": "hackatime_trust", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "trust": { + "name": "trust", + "type": "trust", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'blue'" + }, + "clay": { + "name": "clay", + "type": "real", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "brick": { + "name": "brick", + "type": "real", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "shopScore": { + "name": "shopScore", + "type": "real", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "hasBasePrinter": { + "name": "hasBasePrinter", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "hasT1Review": { + "name": "hasT1Review", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "hasT2Review": { + "name": "hasT2Review", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "hasAdmin": { + "name": "hasAdmin", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isPrinter": { + "name": "isPrinter", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "lastLoginAt": { + "name": "lastLoginAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_idvId_unique": { + "name": "user_idvId_unique", + "nullsNotDistinct": false, + "columns": [ + "idvId" + ] + }, + "user_slackId_unique": { + "name": "user_slackId_unique", + "nullsNotDistinct": false, + "columns": [ + "slackId" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.editor_file_type": { + "name": "editor_file_type", + "schema": "public", + "values": [ + "url", + "upload" + ] + }, + "public.hackatime_trust": { + "name": "hackatime_trust", + "schema": "public", + "values": [ + "green", + "blue", + "yellow", + "red" + ] + }, + "public.legion_action": { + "name": "legion_action", + "schema": "public", + "values": [ + "mark_for_printing", + "unmark_for_printing", + "print", + "add_comment", + "reject", + "already_printed" + ] + }, + "public.market_order_status": { + "name": "market_order_status", + "schema": "public", + "values": [ + "awaiting_approval", + "fulfilled", + "denied", + "refunded" + ] + }, + "public.project_audit_log_type": { + "name": "project_audit_log_type", + "schema": "public", + "values": [ + "create", + "update", + "delete" + ] + }, + "public.status": { + "name": "status", + "schema": "public", + "values": [ + "building", + "submitted", + "t1_approved", + "printing", + "printed", + "t2_approved", + "finalized", + "rejected", + "rejected_locked" + ] + }, + "public.t1_review_action": { + "name": "t1_review_action", + "schema": "public", + "values": [ + "approve", + "approve_no_print", + "add_comment", + "reject", + "reject_lock" + ] + }, + "public.trust": { + "name": "trust", + "schema": "public", + "values": [ + "green", + "blue", + "yellow", + "red" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json index 803d64f..f350c57 100644 --- a/drizzle/meta/_journal.json +++ b/drizzle/meta/_journal.json @@ -169,6 +169,13 @@ "when": 1767292777224, "tag": "0023_pale_junta", "breakpoints": true + }, + { + "idx": 24, + "version": "7", + "when": 1767390464394, + "tag": "0024_bored_valeria_richards", + "breakpoints": true } ] } \ No newline at end of file diff --git a/src/lib/assets/ovenpheus.png b/src/lib/assets/ovenpheus.png new file mode 100644 index 0000000000000000000000000000000000000000..d230d4ab76223b2ec5ddbb8cb2695ea9b852b47d GIT binary patch literal 8586 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 agka9?%oo4tQGn+e02L(-#r$Vxe*XiH-OQH& literal 0 HcmV?d00001 diff --git a/src/lib/defs.ts b/src/lib/defs.ts index d3b5824..2215271 100644 --- a/src/lib/defs.ts +++ b/src/lib/defs.ts @@ -8,11 +8,11 @@ export const BASE_PRINTER_CLAY = 40; export const CLAY_PER_HOUR = 1.0; export const BRICKS_PER_HOUR = 12.0; +export const BRICKS_PER_HOUR_CONVERTED = 10.0; export const BASE_SHOP_SCORE_PER_HOUR = 25.0; -export const BRICKS_PER_CLAY_CONVERTED = 10.0; export const PRINT_PAYOUT_CENTS_PER_GRAM = 2.0; export const PRINT_MINUTES_PER_GRAM = 0.24; export const BETA_DATE_CUTOFF = new Date('2025-12-16'); -export const BETA_MULTIPLIER = 1.5; \ No newline at end of file +export const BETA_MULTIPLIER = 1.5; diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts index e9975f5..2f4591e 100644 --- a/src/lib/server/db/schema.ts +++ b/src/lib/server/db/schema.ts @@ -229,6 +229,16 @@ export const marketItem = pgTable('market_item', { updatedAt: timestamp().notNull().defaultNow() }); +export const ovenpheusLog = pgTable('ovenpheus_log', { + id: serial().primaryKey(), + userId: integer().references(() => user.id), + + clay: real().notNull(), + bricksReceived: real().notNull(), + + timestamp: timestamp().notNull().defaultNow(), +}); + export const marketOrderStatus = pgEnum('market_order_status', [ 'awaiting_approval', 'fulfilled', diff --git a/src/routes/dashboard/market/+page.svelte b/src/routes/dashboard/market/+page.svelte index 2d531b8..7dab8ad 100644 --- a/src/routes/dashboard/market/+page.svelte +++ b/src/routes/dashboard/market/+page.svelte @@ -2,6 +2,8 @@ import Head from '$lib/components/Head.svelte'; import MarketItem from './MarketItem.svelte'; import MarketTimer from './MarketTimer.svelte'; + import ovenpheus from '$lib/assets/ovenpheus.png'; + import { BRICKS_PER_HOUR, BRICKS_PER_HOUR_CONVERTED, CLAY_PER_HOUR } from '$lib/defs'; let { data } = $props(); @@ -14,10 +16,34 @@ {:else}

- Market score: {data.user.shopScore} + Market score: {Math.floor(data.user.shopScore)} (allows you to get stuff for cheaper and unlock more items!)

+
+
+ ovenpheus +
+
+
+

+ Fire your clay into bricks with Ovenpheus today!!1! +

+

Get your yummy yummy bricks here!

+
+

+ You'll get {(data.user.hasBasePrinter ? BRICKS_PER_HOUR : BRICKS_PER_HOUR_CONVERTED) / + CLAY_PER_HOUR} bricks per clay +

+
+ Go get your bricks +
+
+ +

Market items

+
{#each data.marketItems as item (item.id)} diff --git a/src/routes/dashboard/market/MarketItem.svelte b/src/routes/dashboard/market/MarketItem.svelte index 992cc27..91e5124 100644 --- a/src/routes/dashboard/market/MarketItem.svelte +++ b/src/routes/dashboard/market/MarketItem.svelte @@ -40,9 +40,9 @@ class={`button md primary ${disableBuy ? 'disabled' : ''}`} > {#if item.minRequiredShopScore > userShopScore} - {item.minRequiredShopScore - userShopScore} more market score needed + {Math.ceil(item.minRequiredShopScore - userShopScore)} more market score needed {:else if item.computedPrice > userBricks} - {item.computedPrice - userBricks} more bricks needed + {item.computedPrice - Math.floor(userBricks)} more bricks needed {:else} Buy for {item.computedPrice} bricks {/if} diff --git a/src/routes/dashboard/market/ovenpheus/+page.server.ts b/src/routes/dashboard/market/ovenpheus/+page.server.ts new file mode 100644 index 0000000..9507426 --- /dev/null +++ b/src/routes/dashboard/market/ovenpheus/+page.server.ts @@ -0,0 +1,55 @@ +import { db } from '$lib/server/db/index.js'; +import { ovenpheusLog, user } from '$lib/server/db/schema.js'; +import { error, redirect } from '@sveltejs/kit'; +import { eq } from 'drizzle-orm'; +import type { Actions } from './$types'; +import { BRICKS_PER_HOUR, BRICKS_PER_HOUR_CONVERTED, CLAY_PER_HOUR } from '$lib/defs'; + +export async function load({ locals }) { + if (!locals.user) { + throw error(500); + } + + return {}; +} + +export const actions = { + default: async ({ locals, request }) => { + if (!locals.user) { + throw error(500); + } + + const data = await request.formData(); + const clay = data.get('clay'); + + if ( + !clay || + !parseInt(clay.toString()) || + parseInt(clay.toString()) <= 0 || + parseInt(clay.toString()) > locals.user.clay + ) { + return error(400, { message: 'invalid clay' }); + } + + const parsedClay = parseInt(clay.toString()); + const bricks = + (parsedClay / CLAY_PER_HOUR) * + (locals.user.hasBasePrinter ? BRICKS_PER_HOUR : BRICKS_PER_HOUR_CONVERTED); + + await db + .update(user) + .set({ + clay: locals.user.clay - parsedClay, + brick: locals.user.brick + bricks + }) + .where(eq(user.id, locals.user.id)); + + await db.insert(ovenpheusLog).values({ + userId: locals.user.id, + clay: parsedClay, + bricksReceived: bricks + }); + + return redirect(302, '/dashboard/market'); + } +} satisfies Actions; diff --git a/src/routes/dashboard/market/ovenpheus/+page.svelte b/src/routes/dashboard/market/ovenpheus/+page.svelte new file mode 100644 index 0000000..210ac31 --- /dev/null +++ b/src/routes/dashboard/market/ovenpheus/+page.svelte @@ -0,0 +1,86 @@ + + + + +

Ovenpheus

+ +
+
+ ovenpheus +
+ +
+

Do you want to fire {clay} clay into {bricks} bricks?

+

+ {#if !data.user.hasBasePrinter} + Keep in mind that you'll need {BASE_PRINTER_CLAY} clay to get a base printer + {/if} +

+ +
{ + formPending = true; + return async ({ update }) => { + await update(); + formPending = false; + }; + }} + > + + +
+ + +
+
+