1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-23 06:49:37 +02:00

Add migrations and code for sharedAdventures table

This commit is contained in:
Sean Morley 2024-04-02 18:54:09 +00:00
parent 9baab4c675
commit 56a8a45efb
11 changed files with 301 additions and 2 deletions

View file

@ -0,0 +1,6 @@
CREATE TABLE IF NOT EXISTS "sharedAdventures" (
"id" serial PRIMARY KEY NOT NULL,
"name" text NOT NULL,
"location" text,
"date" text
);

View file

@ -0,0 +1 @@
ALTER TABLE "sharedAdventures" ALTER COLUMN "id" SET DATA TYPE text;

View file

@ -0,0 +1,4 @@
ALTER TABLE "sharedAdventures" ADD COLUMN "data" json NOT NULL;--> statement-breakpoint
ALTER TABLE "sharedAdventures" DROP COLUMN IF EXISTS "name";--> statement-breakpoint
ALTER TABLE "sharedAdventures" DROP COLUMN IF EXISTS "location";--> statement-breakpoint
ALTER TABLE "sharedAdventures" DROP COLUMN IF EXISTS "date";

View file

@ -0,0 +1,77 @@
{
"id": "183ebfda-8d83-4256-8715-169d36867deb",
"prevId": "1639b320-88dd-4af5-ae34-092ab26b4b85",
"version": "5",
"dialect": "pg",
"tables": {
"featuredAdventures": {
"name": "featuredAdventures",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"location": {
"name": "location",
"type": "text",
"primaryKey": false,
"notNull": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"sharedAdventures": {
"name": "sharedAdventures",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"location": {
"name": "location",
"type": "text",
"primaryKey": false,
"notNull": false
},
"date": {
"name": "date",
"type": "text",
"primaryKey": false,
"notNull": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
}
},
"enums": {},
"schemas": {},
"_meta": {
"columns": {},
"schemas": {},
"tables": {}
}
}

View file

@ -0,0 +1,77 @@
{
"id": "808d6d31-5ef6-4b22-97f0-cfc73193eb5e",
"prevId": "183ebfda-8d83-4256-8715-169d36867deb",
"version": "5",
"dialect": "pg",
"tables": {
"featuredAdventures": {
"name": "featuredAdventures",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"location": {
"name": "location",
"type": "text",
"primaryKey": false,
"notNull": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"sharedAdventures": {
"name": "sharedAdventures",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"location": {
"name": "location",
"type": "text",
"primaryKey": false,
"notNull": false
},
"date": {
"name": "date",
"type": "text",
"primaryKey": false,
"notNull": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
}
},
"enums": {},
"schemas": {},
"_meta": {
"columns": {},
"schemas": {},
"tables": {}
}
}

View file

@ -0,0 +1,65 @@
{
"id": "45d98527-f0a9-44fc-9658-d3c461afed95",
"prevId": "808d6d31-5ef6-4b22-97f0-cfc73193eb5e",
"version": "5",
"dialect": "pg",
"tables": {
"featuredAdventures": {
"name": "featuredAdventures",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"location": {
"name": "location",
"type": "text",
"primaryKey": false,
"notNull": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
},
"sharedAdventures": {
"name": "sharedAdventures",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"data": {
"name": "data",
"type": "json",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {}
}
},
"enums": {},
"schemas": {},
"_meta": {
"columns": {},
"schemas": {},
"tables": {}
}
}

View file

@ -8,6 +8,27 @@
"when": 1712061709595,
"tag": "0000_fancy_starjammers",
"breakpoints": true
},
{
"idx": 1,
"version": "5",
"when": 1712083579596,
"tag": "0001_nostalgic_skreet",
"breakpoints": true
},
{
"idx": 2,
"version": "5",
"when": 1712083756923,
"tag": "0002_dusty_captain_midlands",
"breakpoints": true
},
{
"idx": 3,
"version": "5",
"when": 1712083977580,
"tag": "0003_clammy_goblin_queen",
"breakpoints": true
}
]
}

View file

@ -1,4 +1,4 @@
import { pgTable,serial,text } from "drizzle-orm/pg-core";
import { pgTable,json,text,serial } from "drizzle-orm/pg-core";
export const featuredAdventures = pgTable("featuredAdventures",{
id:serial("id").primaryKey(),
@ -6,4 +6,7 @@ export const featuredAdventures = pgTable("featuredAdventures",{
location:text("location"),
})
export const sharedAdventures = pgTable("sharedAdventures",{
id:text("id").primaryKey(),
data:json("data").notNull(),
})

View file

@ -1 +1,11 @@
// place files you want to import through the `$lib` alias in this folder.
export function generateRandomString() {
let randomString = '';
const digits = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
for (let i = 0; i < 10; i++) {
const randomIndex = Math.floor(Math.random() * digits.length);
randomString += digits[randomIndex];
}
return randomString;
}

View file

@ -0,0 +1,11 @@
import { db } from "$lib/db/db.server";
import { sharedAdventures } from "$lib/db/schema";
import type { Adventure } from "$lib/utils/types";
export async function POST({ request }: { request: Request }) {
const { key , data } = await request.json();
let adventure = data as Adventure;
console.log(adventure);
await db.insert(sharedAdventures).values({ id:key,data:adventure }).execute();
return new Response(JSON.stringify({key:key}));
}

View file

@ -10,6 +10,7 @@
import SucessToast from "$lib/components/SucessToast.svelte";
import mapDrawing from "$lib/assets/adventure_map.svg"
import EditModal from "$lib/components/EditModal.svelte";
import { generateRandomString } from "$lib";
let newName = '';
let newLocation = '';
@ -79,6 +80,26 @@
}
}
function shareLink() {
let key = generateRandomString()
let data = JSON.stringify(adventures)
fetch('/api/share', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ key, data }),
})
.then(response => response.json())
.then(data => {
console.log('Success:', data);
})
.catch((error) => {
console.error('Error:', error);
});
}
function handleClose() {
editId = NaN;
editName = '';
@ -144,5 +165,8 @@
<button class="btn btn-neutral" on:click={deleteData}>
<img src={deleteIcon} class="inline-block -mt-1" alt="Logo" /> Delete Data
</button>
<button class="btn btn-neutral" on:click={shareLink}>
<img src={deleteIcon} class="inline-block -mt-1" alt="Logo" /> Share as Link
</button>
</div>
{/if}