Skip to content

Commit ddedaf4

Browse files
feat: add the preference route
1 parent aa58ddc commit ddedaf4

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed

src/api/routes.ts

+8
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { createLaunchRecord } from '@/controllers/create-launch-record.ts'
55
import { deleteLaunchRecord } from '@/controllers/delete-launch-record.ts'
66
import { deleteRom } from '@/controllers/delete-rom.ts'
77
import { getLaunchRecords } from '@/controllers/get-launch-records.ts'
8+
import { updatePreference } from '@/controllers/update-preference.ts'
89
import { createRoms } from '../controllers/create-roms.ts'
910
import { createState } from '../controllers/create-state.ts'
1011
import { getRomContent } from '../controllers/get-rom-content.ts'
@@ -160,4 +161,11 @@ export function addRoutes(app: Hono) {
160161
return c.json(result)
161162
},
162163
)
164+
165+
app.post('preference', async (c) => {
166+
const formData = await c.req.formData()
167+
const preference = formData.get('preference')
168+
const result = await updatePreference(preference)
169+
return c.json(result)
170+
})
163171
}

src/controllers/get-preference.ts

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { eq } from 'drizzle-orm'
2+
import { merge } from 'es-toolkit'
3+
import { getContextData } from 'waku/middleware/context'
4+
import { defaultPreference } from '../constants/preference.ts'
5+
import { userPreferenceTable } from '../databases/library/schema.ts'
6+
7+
export async function getPreference() {
8+
const { currentUser, db } = getContextData()
9+
10+
const where = eq(userPreferenceTable.user_id, currentUser.id)
11+
const results = await db.library.select().from(userPreferenceTable).where(where)
12+
const preference = structuredClone(defaultPreference)
13+
const userPreference = results[0].content
14+
merge(preference, userPreference as any)
15+
return preference
16+
}

src/controllers/update-preference.ts

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { eq } from 'drizzle-orm'
2+
import { merge } from 'es-toolkit'
3+
import { getContextData } from 'waku/middleware/context'
4+
import { userPreferenceTable } from '@/databases/library/schema.ts'
5+
6+
export async function updatePreference(preference) {
7+
const { currentUser, db } = getContextData()
8+
9+
const where = eq(userPreferenceTable.user_id, currentUser.id)
10+
const results = await db.library.select().from(userPreferenceTable).where(where)
11+
12+
let newPreferenceResult
13+
if (results.length > 0) {
14+
const [{ emulator, ui }] = results
15+
const newPreference: any = {}
16+
if (emulator) {
17+
merge(emulator, preference.emulator)
18+
newPreference.emulator = emulator
19+
}
20+
if (ui) {
21+
merge(ui, preference.ui)
22+
newPreference.ui = ui
23+
}
24+
newPreferenceResult = await db.library
25+
.update(userPreferenceTable)
26+
.set({ ...newPreference, user_id: currentUser.id })
27+
.where(where)
28+
.returning()
29+
} else {
30+
newPreferenceResult = await db.library
31+
.insert(userPreferenceTable)
32+
.values({ ...preference, user_id: currentUser.id })
33+
.returning()
34+
}
35+
36+
return newPreferenceResult.content
37+
}

0 commit comments

Comments
 (0)