76 lines
2.6 KiB
TypeScript
76 lines
2.6 KiB
TypeScript
import { eq, like, and, count, desc } from "drizzle-orm";
|
|
import { getDb } from "./connection";
|
|
import { placesOfWorship } from "@db/schema";
|
|
import type { InsertPlaceOfWorship } from "@db/schema";
|
|
|
|
export async function findAllPlaces(search?: string, type?: string, active?: string, managerId?: number) {
|
|
const db = getDb();
|
|
const conditions = [];
|
|
if (search) {
|
|
conditions.push(like(placesOfWorship.name, `%${search}%`));
|
|
}
|
|
if (type && type !== "all") {
|
|
conditions.push(eq(placesOfWorship.type, type as "mosque" | "church" | "temple" | "vihara" | "other"));
|
|
}
|
|
if (active && active !== "all") {
|
|
conditions.push(eq(placesOfWorship.isActive, active as "yes" | "no"));
|
|
}
|
|
if (managerId !== undefined) {
|
|
conditions.push(eq(placesOfWorship.managerId, managerId));
|
|
}
|
|
const where = conditions.length > 0 ? and(...conditions) : undefined;
|
|
return db.select().from(placesOfWorship).where(where).orderBy(desc(placesOfWorship.createdAt));
|
|
}
|
|
|
|
export async function findPlaceById(id: number) {
|
|
const db = getDb();
|
|
const rows = await db.select().from(placesOfWorship).where(eq(placesOfWorship.id, id)).limit(1);
|
|
return rows.at(0) ?? null;
|
|
}
|
|
|
|
export async function findPlaceByManagerId(managerId: number) {
|
|
const db = getDb();
|
|
const rows = await db.select().from(placesOfWorship).where(eq(placesOfWorship.managerId, managerId)).limit(1);
|
|
return rows.at(0) ?? null;
|
|
}
|
|
|
|
export async function findPlaceIdsByManagerId(managerId: number) {
|
|
const db = getDb();
|
|
const rows = await db
|
|
.select({ id: placesOfWorship.id })
|
|
.from(placesOfWorship)
|
|
.where(eq(placesOfWorship.managerId, managerId));
|
|
return rows.map((r) => r.id);
|
|
}
|
|
|
|
export async function createPlace(data: InsertPlaceOfWorship) {
|
|
const db = getDb();
|
|
const [{ id }] = await db.insert(placesOfWorship).values(data).$returningId();
|
|
return findPlaceById(id);
|
|
}
|
|
|
|
export async function updatePlace(id: number, data: Partial<InsertPlaceOfWorship>) {
|
|
const db = getDb();
|
|
await db.update(placesOfWorship).set(data).where(eq(placesOfWorship.id, id));
|
|
return findPlaceById(id);
|
|
}
|
|
|
|
export async function deletePlace(id: number) {
|
|
const db = getDb();
|
|
await db.delete(placesOfWorship).where(eq(placesOfWorship.id, id));
|
|
}
|
|
|
|
export async function countPlaces() {
|
|
const db = getDb();
|
|
const result = await db.select({ count: count() }).from(placesOfWorship);
|
|
return result[0]?.count ?? 0;
|
|
}
|
|
|
|
export async function countActivePlaces() {
|
|
const db = getDb();
|
|
const result = await db.select({ count: count() })
|
|
.from(placesOfWorship)
|
|
.where(eq(placesOfWorship.isActive, "yes"));
|
|
return result[0]?.count ?? 0;
|
|
}
|