mirror of
https://github.com/seanmorley15/AdventureLog.git
synced 2025-07-24 23:39:37 +02:00
Add user icon field and update version number
This commit is contained in:
parent
a10f7485e0
commit
7decfd61e8
9 changed files with 249 additions and 3 deletions
1
migrations/0010_lean_gamma_corps.sql
Normal file
1
migrations/0010_lean_gamma_corps.sql
Normal file
|
@ -0,0 +1 @@
|
|||
ALTER TABLE "user" ADD COLUMN "icon" text;
|
207
migrations/meta/0010_snapshot.json
Normal file
207
migrations/meta/0010_snapshot.json
Normal file
|
@ -0,0 +1,207 @@
|
|||
{
|
||||
"id": "d6cd08c8-9dc8-42df-aab9-0f5800602864",
|
||||
"prevId": "1d83805d-6ee2-4dae-87a6-5af6f2d5add3",
|
||||
"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": {}
|
||||
},
|
||||
"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
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {},
|
||||
"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
|
||||
}
|
||||
},
|
||||
"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": {}
|
||||
}
|
||||
},
|
||||
"enums": {},
|
||||
"schemas": {},
|
||||
"_meta": {
|
||||
"columns": {},
|
||||
"schemas": {},
|
||||
"tables": {}
|
||||
}
|
||||
}
|
|
@ -71,6 +71,13 @@
|
|||
"when": 1712407140727,
|
||||
"tag": "0009_spotty_madame_web",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"version": "5",
|
||||
"when": 1712842196443,
|
||||
"tag": "0010_lean_gamma_corps",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "adventurelog",
|
||||
"version": "0.0.1",
|
||||
"version": "0.1.0",
|
||||
"description": "Embark, Explore, Remember. 🌍",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
|
|
@ -2,7 +2,14 @@
|
|||
import { enhance } from "$app/forms";
|
||||
import { goto } from "$app/navigation";
|
||||
export let user: any;
|
||||
let firstLetter = user.first_name.charAt(0);
|
||||
|
||||
let icon: string = "";
|
||||
|
||||
if (user.icon != null && user.icon != "") {
|
||||
icon = user.icon;
|
||||
} else {
|
||||
icon = user.username.charAt(0);
|
||||
}
|
||||
|
||||
async function navToSettings() {
|
||||
goto("/settings");
|
||||
|
@ -15,7 +22,7 @@
|
|||
<div class="dropdown dropdown-bottom dropdown-end" tabindex="0" role="button">
|
||||
<div class="avatar placeholder">
|
||||
<div class="bg-neutral text-neutral-content rounded-full w-10 ml-4">
|
||||
<span class="text-2xl -mt-0.5">{firstLetter}</span>
|
||||
<span class="text-2xl -mt-0.5">{icon}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- svelte-ignore a11y-missing-attribute -->
|
||||
|
@ -26,6 +33,7 @@
|
|||
>
|
||||
<!-- svelte-ignore a11y-missing-attribute -->
|
||||
<!-- svelte-ignore a11y-missing-attribute -->
|
||||
<p class="text-lg ml-4 font-bold">Hi, {user.first_name} {user.last_name}</p>
|
||||
<li><a>Profile</a></li>
|
||||
<li><button on:click={navToLog}>My Log</button></li>
|
||||
<li><button on:click={navToSettings}>Settings</button></li>
|
||||
|
|
|
@ -23,6 +23,7 @@ export const userTable = pgTable("user", {
|
|||
username: text("username").notNull(),
|
||||
first_name: text("first_name").notNull(),
|
||||
last_name: text("last_name").notNull(),
|
||||
icon: text("icon"),
|
||||
hashed_password: varchar("hashed_password").notNull(),
|
||||
});
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ export const lucia = new Lucia(adapter, {
|
|||
id: attributes.id,
|
||||
first_name: attributes.first_name,
|
||||
last_name: attributes.last_name,
|
||||
icon: attributes.icon,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
@ -35,5 +36,6 @@ export interface DatabaseUser {
|
|||
username: string;
|
||||
first_name: string;
|
||||
last_name: string;
|
||||
icon: string;
|
||||
hashed_password: string;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ export const actions: Actions = {
|
|||
let username = formData.get("username");
|
||||
let firstName = formData.get("first_name");
|
||||
let lastName = formData.get("last_name");
|
||||
let icon = formData.get("icon");
|
||||
|
||||
let password = formData.get("password");
|
||||
|
||||
|
@ -32,6 +33,15 @@ export const actions: Actions = {
|
|||
};
|
||||
}
|
||||
|
||||
if (icon.length > 1) {
|
||||
return {
|
||||
status: 400,
|
||||
body: {
|
||||
message: "Icon must be a single character"
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (password) {
|
||||
let hashedPassword = await new Argon2id().hash(password);
|
||||
console.log(hashedPassword)
|
||||
|
@ -47,6 +57,7 @@ export const actions: Actions = {
|
|||
username: username,
|
||||
first_name: firstName,
|
||||
last_name: lastName,
|
||||
icon: icon
|
||||
})
|
||||
.where(eq(userTable.id, userId));
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
let first_name = data.user?.first_name;
|
||||
let last_name = data.user?.last_name;
|
||||
let user_id = data.user?.id;
|
||||
let icon = data.user?.icon;
|
||||
</script>
|
||||
|
||||
<h1 class="text-center font-extrabold text-4xl mb-6">Settings Page</h1>
|
||||
|
@ -37,6 +38,14 @@
|
|||
id="last_name"
|
||||
class="block mb-2 input input-bordered w-full max-w-xs"
|
||||
/><br />
|
||||
<label for="icon">Profile Icon (emoji)</label>
|
||||
<input
|
||||
type="emoji"
|
||||
bind:value={icon}
|
||||
name="icon"
|
||||
id="icon"
|
||||
class="block mb-2 input input-bordered w-full max-w-xs"
|
||||
/><br />
|
||||
<label for="password">Password</label>
|
||||
<input
|
||||
type="password"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue