Add new columns to userPlannedAdventures table and update Adventure interface

This commit is contained in:
Sean Morley
2024-04-21 22:56:27 +00:00
parent b2184bdee3
commit a3d4d757a9
16 changed files with 548 additions and 43 deletions

View File

@@ -3,18 +3,20 @@
import locationDot from "$lib/assets/locationDot.svg";
import calendar from "$lib/assets/calendar.svg";
import { goto } from "$app/navigation";
import { desc } from "drizzle-orm";
const dispatch = createEventDispatcher();
export let type: String;
export let name: String | undefined = undefined;
export let location: String | undefined = undefined;
export let created: String | undefined = undefined;
export let date: String | undefined = undefined;
export let id: Number | undefined = undefined;
export let regionId: String | undefined = undefined;
export let visited: Boolean | undefined = undefined;
export let countryCode: String | undefined = undefined;
export let activityTypes: String[] | undefined = undefined;
export let description: String | undefined = undefined;
function remove() {
dispatch("remove", id);
@@ -51,10 +53,10 @@
<p class="ml-.5">{location}</p>
</div>
{/if}
{#if created !== ""}
{#if date !== ""}
<div class="inline-flex items-center">
<iconify-icon icon="mdi:calendar" class="text-xl"></iconify-icon>
<p class="ml-1">{created}</p>
<p class="ml-1">{date}</p>
</div>
{/if}
<div class="card-actions justify-end">
@@ -96,10 +98,10 @@
<p class="ml-.5">{location}</p>
</div>
{/if}
{#if created !== ""}
{#if date !== ""}
<div class="inline-flex items-center">
<iconify-icon icon="mdi:calendar" class="text-xl"></iconify-icon>
<p class="ml-1">{created}</p>
<p class="ml-1">{date}</p>
</div>
{/if}
</div>
@@ -141,7 +143,22 @@
</div>
{/if}
{#if activityTypes && activityTypes.length > 0}
<p>{activityTypes}</p>
{#each activityTypes as activity}
<div
class="relative grid select-none items-center whitespace-nowrap rounded-lg bg-gray-900 py-1.5 px-3 font-sans text-xs font-bold uppercase text-white"
>
<span class="">{activity}</span>
</div>
{/each}
{/if}
{#if description && description.length > 0}
<p>{description}</p>
{/if}
{#if date && date != undefined}
<div class="inline-flex items-center">
<iconify-icon icon="mdi:calendar" class="text-xl"></iconify-icon>
<p class="ml-1">{date}</p>
</div>
{/if}
<div class="card-actions justify-end">
<button class="btn btn-primary" on:click={add}>Add</button>

View File

@@ -51,10 +51,10 @@
/>
</div>
<div>
<label for="created">Created</label>
<label for="date">date</label>
<input
type="date"
id="created"
id="date"
class="input input-bordered w-full max-w-xs"
/>
</div>

View File

@@ -2,7 +2,7 @@
export let editId: number = NaN;
export let editName: string = "";
export let editLocation: string = "";
export let editCreated: string = "";
export let editdate: string = "";
import { createEventDispatcher } from "svelte";
import type { Adventure } from "$lib/utils/types";
const dispatch = createEventDispatcher();
@@ -23,7 +23,7 @@
id: editId,
name: editName,
location: editLocation,
created: editCreated,
date: editdate,
};
dispatch("submit", adventureEdited);
console.log(adventureEdited);
@@ -70,11 +70,11 @@
/>
</div>
<div>
<label for="created">Created</label>
<label for="date">date</label>
<input
type="date"
id="created"
bind:value={editCreated}
id="date"
bind:value={editdate}
class="input input-bordered w-full max-w-xs"
/>
</div>

View File

@@ -9,7 +9,7 @@
<h2 class="card-title">{user.first_name} {user.last_name}</h2>
<p>{user.username} - {user.icon}</p>
<p>Last Login: {user.last_login}</p>
<p>Created: {user.signup_date}</p>
<p>date: {user.signup_date}</p>
<p>{user.role}</p>
<p>{user.id}</p>
<div class="card-actions justify-end">

View File

@@ -1,3 +1,4 @@
import { desc } from "drizzle-orm";
import {
pgTable,
text,
@@ -99,4 +100,6 @@ export const userPlannedAdventures = pgTable("userPlannedAdventures", {
name: text("adventureName").notNull(),
location: text("location"),
activityTypes: json("activityTypes"),
description: text("description"),
date: text("plannedDate"),
});

View File

@@ -2,7 +2,7 @@ export interface Adventure {
id?: number;
name?: string;
location?: string | undefined;
created?: string | undefined;
date?: string | undefined;
description?: string | undefined;
activityTypes?: string[] | undefined;
}

View File

@@ -26,7 +26,7 @@ export async function GET(event: RequestEvent): Promise<Response> {
id: item.adventureID,
name: item.adventureName,
location: item.location,
created: item.visitedDate,
date: item.visitedDate,
})),
}),
{
@@ -91,7 +91,7 @@ export async function POST(event: RequestEvent): Promise<Response> {
}
// get properties from the body
const { name, location, created } = await event.request.json();
const { name, location, date } = await event.request.json();
// insert the adventure to the user's visited list
await db
@@ -100,10 +100,10 @@ export async function POST(event: RequestEvent): Promise<Response> {
userId: event.locals.user.id,
adventureName: name,
location: location,
visitedDate: created,
visitedDate: date,
})
.execute();
let res = await db
let res = await db
.select()
.from(userVisitedAdventures)
.where(
@@ -111,17 +111,17 @@ let res = await db
eq(userVisitedAdventures.userId, event.locals.user.id),
eq(userVisitedAdventures.adventureName, name),
eq(userVisitedAdventures.location, location),
eq(userVisitedAdventures.visitedDate, created)
eq(userVisitedAdventures.visitedDate, date)
)
)
.execute();
// return a response with the adventure object values
// return a response with the adventure object values
return new Response(
JSON.stringify({
adventure: { name, location, created },
adventure: { name, location, date },
message: { message: "Adventure added" },
id: res[0].adventureID
id: res[0].adventureID,
}),
{
status: 200,
@@ -144,7 +144,7 @@ export async function PUT(event: RequestEvent): Promise<Response> {
}
// get properties from the body
const { id, name, location, created } = await event.request.json();
const { id, name, location, date } = await event.request.json();
// update the adventure in the user's visited list
await db
@@ -152,7 +152,7 @@ export async function PUT(event: RequestEvent): Promise<Response> {
.set({
adventureName: name,
location: location,
visitedDate: created,
visitedDate: date,
})
.where(
and(
@@ -164,7 +164,7 @@ export async function PUT(event: RequestEvent): Promise<Response> {
return new Response(
JSON.stringify({
adventure: { id, name, location, created },
adventure: { id, name, location, date },
message: { message: "Adventure updated" },
}),
{
@@ -174,4 +174,4 @@ export async function PUT(event: RequestEvent): Promise<Response> {
},
}
);
}
}

View File

@@ -19,7 +19,7 @@
body: JSON.stringify({
name: event.detail.name,
location: event.detail.location,
created: "",
date: "",
}),
});
@@ -46,7 +46,7 @@
on:add={add}
name={adventure.name}
location={adventure.location}
created=""
date=""
id={NaN}
/>
{/each}

View File

@@ -20,7 +20,7 @@
let editId: number = NaN;
let editName: string = "";
let editLocation: string = "";
let editCreated: string = "";
let editdate: string = "";
let isShowingToast: boolean = false;
let toastAction: string = "";
@@ -71,7 +71,7 @@
body: JSON.stringify({
name: newName,
location: newLocation,
created: dateString,
date: dateString,
}),
})
.then((response) => response.json())
@@ -84,7 +84,7 @@
id: newId,
name: newName,
location: newLocation,
created: dateString,
date: dateString,
},
];
newName = ""; // Reset newName and newLocation after adding adventure
@@ -109,7 +109,7 @@
id: event.detail.id,
name: event.detail.name,
location: event.detail.location,
created: event.detail.created,
date: event.detail.date,
}),
})
.then((response) => response.json())
@@ -122,7 +122,7 @@
editId = NaN;
editName = "";
editLocation = "";
editCreated = "";
editdate = "";
showToast("Adventure edited successfully!");
})
.catch((error) => {
@@ -138,7 +138,7 @@
editId = adventure.id || 0;
editName = adventure.name || "";
editLocation = adventure.location || "";
editCreated = adventure.created || "";
editdate = adventure.date || "";
}
}
@@ -168,7 +168,7 @@
editId = NaN;
editName = "";
editLocation = "";
editCreated = "";
editdate = "";
}
function deleteData() {
@@ -263,7 +263,7 @@
bind:editId
bind:editName
bind:editLocation
bind:editCreated
bind:editdate
on:submit={saveAdventure}
on:close={handleClose}
/>
@@ -278,7 +278,7 @@
id={adventure.id}
name={adventure.name}
location={adventure.location}
created={adventure.created}
date={adventure.date}
on:edit={editAdventure}
on:remove={removeAdventure}
/>

View File

@@ -24,6 +24,8 @@
name={adventure.name}
location={adventure.location}
activityTypes={adventure.activityTypes}
description={adventure?.description}
date={adventure?.date}
/>
{/each}
</div>

View File

@@ -25,14 +25,13 @@ export async function load({ params }) {
id: item.id,
name: item.name,
location: item.location,
created: item.created,
date: item.date,
} as Adventure;
});
let name = rawData.name;
let date = rawData.date;
// Return the array of Adventure objects
return {
adventureArray,

View File

@@ -10,7 +10,7 @@
<div>
<h1>{adventure.name}</h1>
<p>{adventure.location}</p>
<p>{adventure.created}</p>
<p>{adventure.date}</p>
<p>{adventure.id}</p>
</div>
{/each} -->
@@ -25,7 +25,7 @@
id={adventure.id}
name={adventure.name}
location={adventure.location}
created={adventure.created}
date={adventure.date}
/>
{/each}
</div>

View File

@@ -129,7 +129,7 @@ export const actions: Actions = {
"content-type": "application/json",
},
body: JSON.stringify({
message: "User created",
message: "User date",
}),
};
}