Skip to content

Commit fe518cc

Browse files
committed
feat: auth improvements
1 parent d5f8f7f commit fe518cc

File tree

11 files changed

+92
-255
lines changed

11 files changed

+92
-255
lines changed

app.vue

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,8 @@
1-
<script setup lang="ts">
2-
import Framework7 from 'framework7/lite-bundle'
3-
import Framework7Vue from 'framework7-vue/bundle'
4-
import { f7App, f7View } from 'framework7-vue'
5-
6-
Framework7.use(Framework7Vue)
7-
</script>
8-
91
<template>
10-
<f7App>
2+
<div>
113
<NuxtLoadingIndicator />
12-
<f7View>
13-
<NuxtLayout>
14-
<NuxtPage />
15-
</NuxtLayout>
16-
</f7View>
17-
</f7App>
4+
<NuxtLayout>
5+
<NuxtPage />
6+
</NuxtLayout>
7+
</div>
188
</template>

pages/app.vue

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<script setup lang="ts">
2+
// @ts-expect-error Missing types
3+
import Framework7 from 'framework7/lite-bundle'
4+
import Framework7Vue from 'framework7-vue/bundle'
5+
import { f7App, f7View } from 'framework7-vue'
6+
7+
Framework7.use(Framework7Vue)
8+
</script>
9+
10+
<template>
11+
<f7App>
12+
<f7View>
13+
<NuxtPage />
14+
</f7View>
15+
</f7App>
16+
</template>

pages/app/index.vue

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<script setup lang="ts">
2+
</script>
3+
4+
<template>
5+
<div>
6+
hello!
7+
</div>
8+
</template>

pages/index.vue

Lines changed: 4 additions & 192 deletions
Original file line numberDiff line numberDiff line change
@@ -1,196 +1,8 @@
1-
<script>
2-
import {
3-
f7Block,
4-
f7Link,
5-
f7NavRight,
6-
f7Navbar,
7-
f7Page,
8-
f7Tab,
9-
f7Tabs,
10-
f7Toolbar,
11-
} from 'framework7-vue'
12-
13-
export default {
14-
components: {
15-
F7Navbar: f7Navbar,
16-
F7Page: f7Page,
17-
F7Block: f7Block,
18-
F7Tabs: f7Tabs,
19-
F7Tab: f7Tab,
20-
F7Link: f7Link,
21-
F7Toolbar: f7Toolbar,
22-
F7NavRight: f7NavRight,
23-
},
24-
data() {
25-
return {
26-
toolbarPosition: 'bottom',
27-
}
28-
},
29-
methods: {
30-
toggleToolbarPosition() {
31-
this.toolbarPosition = this.toolbarPosition === 'top' ? 'bottom' : 'top'
32-
},
33-
},
34-
}
1+
<script setup lang="ts">
352
</script>
363

374
<template>
38-
<F7Page :page-content="false">
39-
<F7Navbar title="Tabbar Icons">
40-
<F7NavRight>
41-
<F7Link
42-
icon-md="material:compare_arrows"
43-
icon-ios="f7:arrow_up_arrow_down_circle_fill"
44-
@click="toggleToolbarPosition"
45-
/>
46-
</F7NavRight>
47-
</F7Navbar>
48-
<F7Toolbar position="bottom" tabbar icons>
49-
<F7Link
50-
tab-link="#tab-1"
51-
tab-link-active
52-
text="Tab 1"
53-
icon-ios="f7:envelope_fill"
54-
icon-md="material:email"
55-
/>
56-
<F7Link
57-
tab-link="#tab-2"
58-
text="Tab 2"
59-
icon-ios="f7:calendar_fill"
60-
icon-md="material:today"
61-
/>
62-
<F7Link
63-
tab-link="#tab-3"
64-
text="Tab 3"
65-
icon-ios="f7:cloud_upload_fill"
66-
icon-md="material:file_upload"
67-
/>
68-
</F7Toolbar>
69-
70-
<F7Tabs>
71-
<F7Tab id="tab-1" class="page-content" tab-active>
72-
<F7Block>
73-
<p>Tab 1 content</p>
74-
<p>
75-
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam enim quia molestiae
76-
facilis laudantium voluptates obcaecati officia cum, sit libero commodi. Ratione illo
77-
suscipit temporibus sequi iure ad laboriosam accusamus?
78-
</p>
79-
<p>
80-
Saepe explicabo voluptas ducimus provident, doloremque quo totam molestias! Suscipit
81-
blanditiis eaque exercitationem praesentium reprehenderit, fuga accusamus possimus sed,
82-
sint facilis ratione quod, qui dignissimos voluptas! Aliquam rerum consequuntur
83-
deleniti.
84-
</p>
85-
<p>
86-
Totam reprehenderit amet commodi ipsum nam provident doloremque possimus odio itaque,
87-
est animi culpa modi consequatur reiciendis corporis libero laudantium sed eveniet unde
88-
delectus a maiores nihil dolores? Natus, perferendis.
89-
</p>
90-
<p>
91-
Atque quis totam repellendus omnis alias magnam corrupti, possimus aspernatur
92-
perspiciatis quae provident consequatur minima doloremque blanditiis nihil maxime
93-
ducimus earum autem. Magni animi blanditiis similique iusto, repellat sed quisquam!
94-
</p>
95-
<p>
96-
Suscipit, facere quasi atque totam. Repudiandae facilis at optio atque, rem nam, natus
97-
ratione cum enim voluptatem suscipit veniam! Repellat, est debitis. Modi nam mollitia
98-
explicabo, unde aliquid impedit! Adipisci!
99-
</p>
100-
<p>
101-
Deserunt adipisci tempora asperiores, quo, nisi ex delectus vitae consectetur iste
102-
fugiat iusto dolorem autem. Itaque, ipsa voluptas, a assumenda rem, dolorum porro
103-
accusantium, officiis veniam nostrum cum cumque impedit.
104-
</p>
105-
<p>
106-
Laborum illum ipsa voluptatibus possimus nesciunt ex consequatur rem, natus ad
107-
praesentium rerum libero consectetur temporibus cupiditate atque aspernatur, eaque
108-
provident eligendi quaerat ea soluta doloremque. Iure fugit, minima facere.
109-
</p>
110-
</F7Block>
111-
</F7Tab>
112-
<F7Tab id="tab-2" class="page-content">
113-
<F7Block>
114-
<p>Tab 2 content</p>
115-
<p>
116-
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam enim quia molestiae
117-
facilis laudantium voluptates obcaecati officia cum, sit libero commodi. Ratione illo
118-
suscipit temporibus sequi iure ad laboriosam accusamus?
119-
</p>
120-
<p>
121-
Saepe explicabo voluptas ducimus provident, doloremque quo totam molestias! Suscipit
122-
blanditiis eaque exercitationem praesentium reprehenderit, fuga accusamus possimus sed,
123-
sint facilis ratione quod, qui dignissimos voluptas! Aliquam rerum consequuntur
124-
deleniti.
125-
</p>
126-
<p>
127-
Totam reprehenderit amet commodi ipsum nam provident doloremque possimus odio itaque,
128-
est animi culpa modi consequatur reiciendis corporis libero laudantium sed eveniet unde
129-
delectus a maiores nihil dolores? Natus, perferendis.
130-
</p>
131-
<p>
132-
Atque quis totam repellendus omnis alias magnam corrupti, possimus aspernatur
133-
perspiciatis quae provident consequatur minima doloremque blanditiis nihil maxime
134-
ducimus earum autem. Magni animi blanditiis similique iusto, repellat sed quisquam!
135-
</p>
136-
<p>
137-
Suscipit, facere quasi atque totam. Repudiandae facilis at optio atque, rem nam, natus
138-
ratione cum enim voluptatem suscipit veniam! Repellat, est debitis. Modi nam mollitia
139-
explicabo, unde aliquid impedit! Adipisci!
140-
</p>
141-
<p>
142-
Deserunt adipisci tempora asperiores, quo, nisi ex delectus vitae consectetur iste
143-
fugiat iusto dolorem autem. Itaque, ipsa voluptas, a assumenda rem, dolorum porro
144-
accusantium, officiis veniam nostrum cum cumque impedit.
145-
</p>
146-
<p>
147-
Laborum illum ipsa voluptatibus possimus nesciunt ex consequatur rem, natus ad
148-
praesentium rerum libero consectetur temporibus cupiditate atque aspernatur, eaque
149-
provident eligendi quaerat ea soluta doloremque. Iure fugit, minima facere.
150-
</p>
151-
</F7Block>
152-
</F7Tab>
153-
<F7Tab id="tab-3" class="page-content">
154-
<F7Block>
155-
<p>Tab 3 content</p>
156-
<p>
157-
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam enim quia molestiae
158-
facilis laudantium voluptates obcaecati officia cum, sit libero commodi. Ratione illo
159-
suscipit temporibus sequi iure ad laboriosam accusamus?
160-
</p>
161-
<p>
162-
Saepe explicabo voluptas ducimus provident, doloremque quo totam molestias! Suscipit
163-
blanditiis eaque exercitationem praesentium reprehenderit, fuga accusamus possimus sed,
164-
sint facilis ratione quod, qui dignissimos voluptas! Aliquam rerum consequuntur
165-
deleniti.
166-
</p>
167-
<p>
168-
Totam reprehenderit amet commodi ipsum nam provident doloremque possimus odio itaque,
169-
est animi culpa modi consequatur reiciendis corporis libero laudantium sed eveniet unde
170-
delectus a maiores nihil dolores? Natus, perferendis.
171-
</p>
172-
<p>
173-
Atque quis totam repellendus omnis alias magnam corrupti, possimus aspernatur
174-
perspiciatis quae provident consequatur minima doloremque blanditiis nihil maxime
175-
ducimus earum autem. Magni animi blanditiis similique iusto, repellat sed quisquam!
176-
</p>
177-
<p>
178-
Suscipit, facere quasi atque totam. Repudiandae facilis at optio atque, rem nam, natus
179-
ratione cum enim voluptatem suscipit veniam! Repellat, est debitis. Modi nam mollitia
180-
explicabo, unde aliquid impedit! Adipisci!
181-
</p>
182-
<p>
183-
Deserunt adipisci tempora asperiores, quo, nisi ex delectus vitae consectetur iste
184-
fugiat iusto dolorem autem. Itaque, ipsa voluptas, a assumenda rem, dolorum porro
185-
accusantium, officiis veniam nostrum cum cumque impedit.
186-
</p>
187-
<p>
188-
Laborum illum ipsa voluptatibus possimus nesciunt ex consequatur rem, natus ad
189-
praesentium rerum libero consectetur temporibus cupiditate atque aspernatur, eaque
190-
provident eligendi quaerat ea soluta doloremque. Iure fugit, minima facere.
191-
</p>
192-
</F7Block>
193-
</F7Tab>
194-
</F7Tabs>
195-
</F7Page>
5+
<div>
6+
Imagine a landing page here!
7+
</div>
1968
</template>

server/api/user/[id].delete.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { eq } from 'drizzle-orm'
2+
import { users } from '~/server/db/schema'
3+
4+
export default defineProtectedEventHandler(async (event) => {
5+
if (event.context.user!.id !== event.context.params!.id) {
6+
throw createError({
7+
status: 403,
8+
statusMessage: 'Forbidden',
9+
})
10+
}
11+
12+
await event.context.database.delete(users)
13+
.where(
14+
eq(users.id, event.context.params!.id),
15+
)
16+
17+
return { ok: true }
18+
})

server/api/user/[id].post.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,6 @@ export default defineProtectedEventHandler(async (event) => {
2727
.returning()
2828

2929
return user
30+
}, {
31+
allowUnlinkedUser: true,
3032
})

server/db/schema.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1+
import type { InferSelectModel } from 'drizzle-orm'
12
import { relations } from 'drizzle-orm'
2-
import { int, integer, primaryKey, sqliteTable, text } from 'drizzle-orm/sqlite-core'
3+
import { integer, primaryKey, sqliteTable, text } from 'drizzle-orm/sqlite-core'
34
import { createId } from '@paralleldrive/cuid2'
45

56
// Tables
67

78
export const users = sqliteTable('users', {
89
id: text('id').primaryKey().$defaultFn(() => createId()),
910
memberId: text('member_id').notNull().unique(), // Member ID for tracking by SSTAA Admin
10-
firebaseId: text('firebase_id').notNull().unique(), // Use Firebase Auth provided ID as SSOT
11+
firebaseId: text('firebase_id').unique(), // Use Firebase Auth provided ID as SSOT
1112
name: text('name').notNull(), // Ignore Firebase Auth provided values and force user to provide their own
1213
email: text('email').notNull().unique(),
1314
graduationYear: integer('graduation_year').notNull(),
@@ -22,6 +23,8 @@ export const users = sqliteTable('users', {
2223
}),
2324
})
2425

26+
export type User = InferSelectModel<typeof users>
27+
2528
export const events = sqliteTable('events', {
2629
id: text('id').primaryKey(),
2730
name: text('name').notNull(),

server/drizzle/0003_young_pyro.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
DROP INDEX IF EXISTS `users_id_unique`;--> statement-breakpoint
2-
ALTER TABLE users ADD `firebase_id` text NOT NULL;--> statement-breakpoint
3-
CREATE UNIQUE INDEX `users_firebase_id_unique` ON `users` (`firebase_id`);
2+
ALTER TABLE users ADD `firebase_id` text;--> statement-breakpoint
3+
CREATE UNIQUE INDEX `users_firebase_id_unique` ON `users` (`firebase_id`);

server/drizzle/meta/0003_snapshot.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@
272272
"name": "firebase_id",
273273
"type": "text",
274274
"primaryKey": false,
275-
"notNull": true,
275+
"notNull": false,
276276
"autoincrement": false
277277
},
278278
"name": {
@@ -395,4 +395,4 @@
395395
"tables": {},
396396
"columns": {}
397397
}
398-
}
398+
}

server/drizzle/meta/_journal.json

Lines changed: 1 addition & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1 @@
1-
{
2-
"version": "5",
3-
"dialect": "sqlite",
4-
"entries": [
5-
{
6-
"idx": 0,
7-
"version": "5",
8-
"when": 1694905369882,
9-
"tag": "0000_majestic_shen",
10-
"breakpoints": true
11-
},
12-
{
13-
"idx": 1,
14-
"version": "5",
15-
"when": 1695126561835,
16-
"tag": "0001_wealthy_valeria_richards",
17-
"breakpoints": true
18-
},
19-
{
20-
"idx": 2,
21-
"version": "5",
22-
"when": 1695127050309,
23-
"tag": "0002_peaceful_phil_sheldon",
24-
"breakpoints": true
25-
},
26-
{
27-
"idx": 3,
28-
"version": "5",
29-
"when": 1695127082331,
30-
"tag": "0003_young_pyro",
31-
"breakpoints": true
32-
},
33-
{
34-
"idx": 4,
35-
"version": "5",
36-
"when": 1695128452007,
37-
"tag": "0004_special_tenebrous",
38-
"breakpoints": true
39-
}
40-
]
41-
}
1+
{"version":"5","dialect":"sqlite","entries":[{"idx":0,"version":"5","when":1694905369882,"tag":"0000_majestic_shen","breakpoints":true},{"idx":1,"version":"5","when":1695126561835,"tag":"0001_wealthy_valeria_richards","breakpoints":true},{"idx":2,"version":"5","when":1695127050309,"tag":"0002_peaceful_phil_sheldon","breakpoints":true},{"idx":3,"version":"5","when":1695127082331,"tag":"0003_young_pyro","breakpoints":true},{"idx":4,"version":"5","when":1695128452007,"tag":"0004_special_tenebrous","breakpoints":true}]}

0 commit comments

Comments
 (0)