45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import { createServerFn } from "@tanstack/react-start"
|
|
import { eq } from "drizzle-orm"
|
|
import { db } from "@/integrations/drizzle"
|
|
import { places as placesSchema } from "@/integrations/drizzle/db/schema"
|
|
import { paginatedPlacesSchema, placeSchema } from "../validation/places"
|
|
|
|
export const insertUserPlace = createServerFn()
|
|
.inputValidator(placeSchema)
|
|
.handler(async ({ data }) => {
|
|
await db.insert(placesSchema).values(data).returning()
|
|
})
|
|
|
|
export const editUserPlace = createServerFn()
|
|
.inputValidator(
|
|
placeSchema.pick({
|
|
hidden_place: true,
|
|
name: true,
|
|
description: true,
|
|
id_user: true
|
|
})
|
|
)
|
|
.handler(async ({ data }) => {
|
|
await db
|
|
.update(placesSchema)
|
|
.set(data)
|
|
.where(eq(placesSchema.id_user, data.id_user))
|
|
})
|
|
|
|
export const getUserPlacesById = createServerFn()
|
|
.inputValidator(paginatedPlacesSchema)
|
|
.handler(async ({ data }) => {
|
|
return await db
|
|
.select()
|
|
.from(placesSchema)
|
|
.where(eq(placesSchema.id_user, data.id_user))
|
|
.limit(data.limit)
|
|
.offset((data.page - 1) * data.limit)
|
|
})
|
|
|
|
export const places = {
|
|
insertUserPlace,
|
|
editUserPlace,
|
|
getUserPlacesById
|
|
}
|