create-electron-foundation
Version:
An interactive CLI to bootstrap a modern, type-safe, and scalable Electron application.
86 lines (76 loc) • 2.35 kB
text/typescript
import { db } from '../dbConnect'
import { resources } from '../schema'
import { response } from '../../utils/response'
import { eq } from 'drizzle-orm'
import { nanoid } from 'nanoid'
import type { NewDBResource } from '../../types'
export class resourceServices {
static async getDBResourceList() {
try {
const list = await db.select().from(resources)
return response.ok({ data: list || [] })
} catch (error) {
return response.error({
msg: `Error getting resource list: ${error.message}`,
})
}
}
static async getDBResourceById(id: string) {
try {
const numericId = parseInt(id, 10)
if (isNaN(numericId)) {
return response.error({ msg: 'Invalid resource ID' })
}
const info = await db
.select()
.from(resources)
.where(eq(resources.id, numericId))
if (!info || info.length === 0) {
return response.error({ msg: 'Resource does not exist' })
}
return response.ok({ data: info[0] })
} catch (error) {
return response.error({ msg: `Error getting resource: ${error.message}` })
}
}
static async insertDBResource(data: NewDBResource) {
try {
const insertData = {
...data,
id: nanoid(10),
}
const result = db.transaction(() => {
return db.insert(resources).values(insertData).run()
})
if (!result || !result.lastInsertRowid) {
return response.error({ msg: 'Resource insert failed' })
}
return response.ok({ data: { id: result.lastInsertRowid } })
} catch (error) {
return response.error({
msg: `Error inserting resource: ${error.message}`,
})
}
}
static async deleteDBResourceById(id: string) {
try {
const numericId = parseInt(id, 10)
if (isNaN(numericId)) {
return response.error({ msg: 'Invalid resource ID' })
}
const result = db.transaction(() => {
return db.delete(resources).where(eq(resources.id, id)).run()
})
if (!result || result.changes === 0) {
return response.error({
msg: 'Resource deletion failed - no rows affected',
})
}
return response.ok()
} catch (error) {
return response.error({
msg: `Error deleting resource: ${error.message}`,
})
}
}
}