added province filter

This commit is contained in:
2024-04-21 21:43:35 +07:00
parent 9ac18c30b8
commit c00fbbaea2

View File

@@ -1,9 +1,16 @@
import { router, publicProcedure, protectedProcedure } from "./trpc";
import { db } from "./db";
import { imageToUser, opinion, user, userOpinion } from "./schema";
import {
imageToUser,
opinion,
province,
user,
userOpinion,
zone,
} from "./schema";
import { createInsertSchema } from "drizzle-zod";
import { z } from "zod";
import { SQL, count, eq } from "drizzle-orm";
import { SQL, count, eq, inArray } from "drizzle-orm";
import { Config } from "./config";
import { TRPCError } from "@trpc/server";
import * as jwt from "jsonwebtoken";
@@ -83,6 +90,7 @@ export const userRoute = router({
group: z.number().optional(),
zone: z.number().optional(),
opinionCount: z.number().default(3),
province: z.number().optional(),
})
)
.query(
@@ -92,7 +100,8 @@ export const userRoute = router({
input.limit,
input.opinionCount,
input.group,
input.zone
input.zone,
input.province
)
),
});
@@ -102,8 +111,20 @@ async function getAllUser(
limit: number,
opinionLimit: number,
group?: number,
zone?: number
zoneId?: number,
provinceId?: number
) {
let zoneIds: number[] = [];
if (provinceId) {
zoneIds = await db
.select({ id: zone.id })
.from(zone)
.where(eq(zone.province, provinceId))
.then((queryResult) => queryResult.map((v) => v.id));
if (zoneIds.length === 0) {
return [];
}
}
let users = await db.query.user.findMany({
with: {
group: true,
@@ -121,8 +142,11 @@ async function getAllUser(
if (group) {
conditions.push(eq(user.group, group));
}
if (zone) {
conditions.push(eq(user.zone, zone));
if (zoneId) {
conditions.push(eq(user.zone, zoneId));
}
if (zoneIds.length > 0) {
conditions.push(inArray(user.zone, zoneIds));
}
return and(...conditions);
},