diff --git a/migrations/0007_clear_sinister_six.sql b/migrations/0007_clear_sinister_six.sql new file mode 100644 index 0000000..820c4bd --- /dev/null +++ b/migrations/0007_clear_sinister_six.sql @@ -0,0 +1,2 @@ +ALTER TABLE "userPlannedAdventures" ADD COLUMN "description" text;--> statement-breakpoint +ALTER TABLE "userPlannedAdventures" ADD COLUMN "plannedDate" text; \ No newline at end of file diff --git a/migrations/meta/0007_snapshot.json b/migrations/meta/0007_snapshot.json new file mode 100644 index 0000000..740c68e --- /dev/null +++ b/migrations/meta/0007_snapshot.json @@ -0,0 +1,475 @@ +{ + "id": "2dd5d59b-9e77-4a7a-9287-65e6b2456eab", + "prevId": "42010132-1400-4431-800b-7ecd45c7aa9a", + "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": { + "featuredAdventures_name_unique": { + "name": "featuredAdventures_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "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 + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "date": { + "name": "date", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "userPlannedAdventures": { + "name": "userPlannedAdventures", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "adventureName": { + "name": "adventureName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "location": { + "name": "location", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "activityTypes": { + "name": "activityTypes", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "plannedDate": { + "name": "plannedDate", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "userPlannedAdventures_userId_user_id_fk": { + "name": "userPlannedAdventures_userId_user_id_fk", + "tableFrom": "userPlannedAdventures", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "hashed_password": { + "name": "hashed_password", + "type": "varchar", + "primaryKey": false, + "notNull": true + }, + "signup_date": { + "name": "signup_date", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "last_login": { + "name": "last_login", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "userVisitedAdventures": { + "name": "userVisitedAdventures", + "schema": "", + "columns": { + "adventure_id": { + "name": "adventure_id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "adventure_name": { + "name": "adventure_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "location": { + "name": "location", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "visited_date": { + "name": "visited_date", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "userVisitedAdventures_user_id_user_id_fk": { + "name": "userVisitedAdventures_user_id_user_id_fk", + "tableFrom": "userVisitedAdventures", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "userVisitedWorldTravel": { + "name": "userVisitedWorldTravel", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "country_code": { + "name": "country_code", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "region_id": { + "name": "region_id", + "type": "varchar", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "userVisitedWorldTravel_country_code_worldTravelCountries_country_code_fk": { + "name": "userVisitedWorldTravel_country_code_worldTravelCountries_country_code_fk", + "tableFrom": "userVisitedWorldTravel", + "tableTo": "worldTravelCountries", + "columnsFrom": [ + "country_code" + ], + "columnsTo": [ + "country_code" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "userVisitedWorldTravel_user_id_user_id_fk": { + "name": "userVisitedWorldTravel_user_id_user_id_fk", + "tableFrom": "userVisitedWorldTravel", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "userVisitedWorldTravel_region_id_worldTravelCountryRegions_id_fk": { + "name": "userVisitedWorldTravel_region_id_worldTravelCountryRegions_id_fk", + "tableFrom": "userVisitedWorldTravel", + "tableTo": "worldTravelCountryRegions", + "columnsFrom": [ + "region_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "worldTravelCountries": { + "name": "worldTravelCountries", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "country_code": { + "name": "country_code", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "continent": { + "name": "continent", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "worldTravelCountries_country_code_unique": { + "name": "worldTravelCountries_country_code_unique", + "nullsNotDistinct": false, + "columns": [ + "country_code" + ] + } + } + }, + "worldTravelCountryRegions": { + "name": "worldTravelCountryRegions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "varchar", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "country_code": { + "name": "country_code", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "info": { + "name": "info", + "type": "json", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "worldTravelCountryRegions_country_code_worldTravelCountries_country_code_fk": { + "name": "worldTravelCountryRegions_country_code_worldTravelCountries_country_code_fk", + "tableFrom": "worldTravelCountryRegions", + "tableTo": "worldTravelCountries", + "columnsFrom": [ + "country_code" + ], + "columnsTo": [ + "country_code" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/migrations/meta/_journal.json b/migrations/meta/_journal.json index c185a1f..e2109e8 100644 --- a/migrations/meta/_journal.json +++ b/migrations/meta/_journal.json @@ -50,6 +50,13 @@ "when": 1713739045755, "tag": "0006_colorful_inertia", "breakpoints": true + }, + { + "idx": 7, + "version": "5", + "when": 1713739446962, + "tag": "0007_clear_sinister_six", + "breakpoints": true } ] } \ No newline at end of file diff --git a/src/lib/components/AdventureCard.svelte b/src/lib/components/AdventureCard.svelte index 6548f3b..d52eb83 100644 --- a/src/lib/components/AdventureCard.svelte +++ b/src/lib/components/AdventureCard.svelte @@ -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 @@

{location}

{/if} - {#if created !== ""} + {#if date !== ""}
-

{created}

+

{date}

{/if}
@@ -96,10 +98,10 @@

{location}

{/if} - {#if created !== ""} + {#if date !== ""}
-

{created}

+

{date}

{/if} @@ -141,7 +143,22 @@ {/if} {#if activityTypes && activityTypes.length > 0} -

{activityTypes}

+ {#each activityTypes as activity} +
+ {activity} +
+ {/each} + {/if} + {#if description && description.length > 0} +

{description}

+ {/if} + {#if date && date != undefined} +
+ +

{date}

+
{/if}
diff --git a/src/lib/components/DeleteConfirmation.svelte b/src/lib/components/DeleteConfirmation.svelte index 96d5b85..e227f74 100644 --- a/src/lib/components/DeleteConfirmation.svelte +++ b/src/lib/components/DeleteConfirmation.svelte @@ -51,10 +51,10 @@ />
- +
diff --git a/src/lib/components/EditModal.svelte b/src/lib/components/EditModal.svelte index 59a813b..baecd7b 100644 --- a/src/lib/components/EditModal.svelte +++ b/src/lib/components/EditModal.svelte @@ -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 @@ />
- +
diff --git a/src/lib/components/UserCard.svelte b/src/lib/components/UserCard.svelte index b4ef1fd..64ee94b 100644 --- a/src/lib/components/UserCard.svelte +++ b/src/lib/components/UserCard.svelte @@ -9,7 +9,7 @@

{user.first_name} {user.last_name}

{user.username} - {user.icon}

Last Login: {user.last_login}

-

Created: {user.signup_date}

+

date: {user.signup_date}

{user.role}

{user.id}

diff --git a/src/lib/db/schema.ts b/src/lib/db/schema.ts index e6ae0f9..4d77090 100644 --- a/src/lib/db/schema.ts +++ b/src/lib/db/schema.ts @@ -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"), }); diff --git a/src/lib/utils/types.ts b/src/lib/utils/types.ts index 6ef1cfa..824a53c 100644 --- a/src/lib/utils/types.ts +++ b/src/lib/utils/types.ts @@ -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; } diff --git a/src/routes/api/visits/+server.ts b/src/routes/api/visits/+server.ts index 72db320..777106d 100644 --- a/src/routes/api/visits/+server.ts +++ b/src/routes/api/visits/+server.ts @@ -26,7 +26,7 @@ export async function GET(event: RequestEvent): Promise { 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 { } // 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 { 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 { } // 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 { .set({ adventureName: name, location: location, - visitedDate: created, + visitedDate: date, }) .where( and( @@ -164,7 +164,7 @@ export async function PUT(event: RequestEvent): Promise { 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 { }, } ); -} \ No newline at end of file +} diff --git a/src/routes/featured/+page.svelte b/src/routes/featured/+page.svelte index a755ee0..dd22129 100644 --- a/src/routes/featured/+page.svelte +++ b/src/routes/featured/+page.svelte @@ -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} diff --git a/src/routes/log/+page.svelte b/src/routes/log/+page.svelte index 26bbac5..30f786f 100644 --- a/src/routes/log/+page.svelte +++ b/src/routes/log/+page.svelte @@ -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} /> diff --git a/src/routes/planner/+page.svelte b/src/routes/planner/+page.svelte index 919a4bd..2d00005 100644 --- a/src/routes/planner/+page.svelte +++ b/src/routes/planner/+page.svelte @@ -24,6 +24,8 @@ name={adventure.name} location={adventure.location} activityTypes={adventure.activityTypes} + description={adventure?.description} + date={adventure?.date} /> {/each}
diff --git a/src/routes/shared/[key]/+page.server.ts b/src/routes/shared/[key]/+page.server.ts index 92f7d08..0d2eeee 100644 --- a/src/routes/shared/[key]/+page.server.ts +++ b/src/routes/shared/[key]/+page.server.ts @@ -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, diff --git a/src/routes/shared/[key]/+page.svelte b/src/routes/shared/[key]/+page.svelte index 78e591c..7fcff7a 100644 --- a/src/routes/shared/[key]/+page.svelte +++ b/src/routes/shared/[key]/+page.svelte @@ -10,7 +10,7 @@

{adventure.name}

{adventure.location}

-

{adventure.created}

+

{adventure.date}

{adventure.id}

{/each} --> @@ -25,7 +25,7 @@ id={adventure.id} name={adventure.name} location={adventure.location} - created={adventure.created} + date={adventure.date} /> {/each} diff --git a/src/routes/signup/+page.server.ts b/src/routes/signup/+page.server.ts index e287775..0256749 100644 --- a/src/routes/signup/+page.server.ts +++ b/src/routes/signup/+page.server.ts @@ -129,7 +129,7 @@ export const actions: Actions = { "content-type": "application/json", }, body: JSON.stringify({ - message: "User created", + message: "User date", }), }; }