This commit is contained in:
@@ -18,16 +18,16 @@ export async function createUploadImageUrl(
|
||||
objectName: string,
|
||||
contentType: string,
|
||||
) {
|
||||
let policy = mc.newPostPolicy();
|
||||
const policy = mc.newPostPolicy();
|
||||
policy.setKey(objectName);
|
||||
policy.setBucket(Config.bucketName);
|
||||
let expires = new Date();
|
||||
const expires = new Date();
|
||||
expires.setSeconds(30 * 60);
|
||||
policy.setExpires(expires);
|
||||
policy.setContentType(contentType);
|
||||
policy.setContentDisposition(`attachment; filename="${objectName}"`);
|
||||
policy.setContentLengthRange(1, 3 * 1024 * 1024);
|
||||
let rs = await mc.presignedPostPolicy(policy);
|
||||
const rs = await mc.presignedPostPolicy(policy);
|
||||
return rs;
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ export const createContext = async (opts: CreateHTTPContextOptions) => {
|
||||
const bearerToken = authorizationHeader.split(" ")[1];
|
||||
const phone = await verifyToken(bearerToken);
|
||||
if (phone !== null) {
|
||||
let user = await db.query.user.findFirst({
|
||||
const user = await db.query.user.findFirst({
|
||||
where: (user, { eq }) => eq(user.phone, phone),
|
||||
});
|
||||
return {
|
||||
@@ -59,7 +59,7 @@ export const createContext = async (opts: CreateHTTPContextOptions) => {
|
||||
|
||||
async function verifyToken(token: string): Promise<string | null> {
|
||||
try {
|
||||
let rs = await new Promise((resolve, reject) => {
|
||||
const rs = await new Promise((resolve, reject) => {
|
||||
jwt.verify(token, Config.jwt_secret, (err, decoded) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
@@ -68,7 +68,7 @@ async function verifyToken(token: string): Promise<string | null> {
|
||||
}
|
||||
});
|
||||
});
|
||||
let data = z
|
||||
const data = z
|
||||
.object({
|
||||
phone: z.string(),
|
||||
})
|
||||
|
||||
@@ -1,13 +1,6 @@
|
||||
import { router, publicProcedure, protectedProcedure } from "./trpc";
|
||||
import { db } from "./db";
|
||||
import {
|
||||
imageToUser,
|
||||
opinion,
|
||||
province,
|
||||
user,
|
||||
userOpinion,
|
||||
zone,
|
||||
} from "./schema";
|
||||
import { imageToUser, opinion, user, userOpinion, zone } from "./schema";
|
||||
import { createInsertSchema } from "drizzle-zod";
|
||||
import { z } from "zod";
|
||||
import { SQL, and, count, eq, inArray, sql } from "drizzle-orm";
|
||||
@@ -125,11 +118,11 @@ async function getAllUserCount(
|
||||
zoneId?: number,
|
||||
provinceId?: number,
|
||||
) {
|
||||
let zoneIds: number[] = await getZone(provinceId);
|
||||
const zoneIds: number[] = await getZone(provinceId);
|
||||
if (provinceId && zoneIds.length === 0) {
|
||||
return [];
|
||||
}
|
||||
let conditions: SQL[] = [];
|
||||
const conditions: SQL[] = [];
|
||||
if (group !== undefined) {
|
||||
conditions.push(eq(user.group, group));
|
||||
}
|
||||
@@ -154,11 +147,11 @@ async function getAllUser(
|
||||
zoneId?: number,
|
||||
provinceId?: number,
|
||||
) {
|
||||
let zoneIds: number[] = await getZone(provinceId);
|
||||
const zoneIds: number[] = await getZone(provinceId);
|
||||
if (provinceId && zoneIds.length === 0) {
|
||||
return [];
|
||||
}
|
||||
let users = await db.query.user.findMany({
|
||||
const users = await db.query.user.findMany({
|
||||
with: {
|
||||
group: true,
|
||||
opinions: {
|
||||
@@ -172,7 +165,7 @@ async function getAllUser(
|
||||
offset,
|
||||
orderBy: sql`random()`,
|
||||
where: (user, { eq, and }) => {
|
||||
let conditions: SQL[] = [];
|
||||
const conditions: SQL[] = [];
|
||||
if (group !== undefined) {
|
||||
conditions.push(eq(user.group, group));
|
||||
}
|
||||
@@ -195,7 +188,7 @@ async function getAllUser(
|
||||
}
|
||||
|
||||
async function getUser(userId: number, showPhone: boolean) {
|
||||
let user = await db.query.user.findFirst({
|
||||
const user = await db.query.user.findFirst({
|
||||
where: (user, { eq }) => eq(user.id, userId),
|
||||
with: {
|
||||
group: true,
|
||||
@@ -224,10 +217,10 @@ async function createUser(
|
||||
opinions: OpinionInsertSchema,
|
||||
) {
|
||||
try {
|
||||
let result = (
|
||||
const result = (
|
||||
await db.insert(user).values(newUser).returning({ id: user.id })
|
||||
)[0];
|
||||
for (let op of opinions) {
|
||||
for (const op of opinions) {
|
||||
await db.insert(userOpinion).values({ ...op, userId: result.id });
|
||||
}
|
||||
return { token: createJWT(newUser.phone) };
|
||||
@@ -248,7 +241,7 @@ async function updateUser(userId: number, update: UserUpdateSchema) {
|
||||
}
|
||||
|
||||
async function login(cid: string, phone: string) {
|
||||
let user = await db.query.user.findFirst({
|
||||
const user = await db.query.user.findFirst({
|
||||
where: (user, { and, eq }) => and(eq(user.cid, cid), eq(user.phone, phone)),
|
||||
});
|
||||
if (user === undefined) {
|
||||
@@ -267,7 +260,7 @@ async function changeOpinion(
|
||||
opinionChoice: OpinionInsertSchema[0]["choice"],
|
||||
) {
|
||||
try {
|
||||
let thisOpinion = await db
|
||||
const thisOpinion = await db
|
||||
.select()
|
||||
.from(opinion)
|
||||
.where(eq(opinion.id, opinionId))
|
||||
@@ -328,11 +321,11 @@ async function requestChangeImage(
|
||||
});
|
||||
}
|
||||
// Create a unique image name
|
||||
let tryCount = 0;
|
||||
const tryCount = 0;
|
||||
let objectName: string | null = null;
|
||||
while (tryCount < 3) {
|
||||
let imageName = `${generateRandomString()}.${extension}`;
|
||||
let ok = await db
|
||||
const imageName = `${generateRandomString()}.${extension}`;
|
||||
const ok = await db
|
||||
.select({ value: count(user.image) })
|
||||
.from(user)
|
||||
.where(eq(user.image, imageName))
|
||||
@@ -356,14 +349,14 @@ async function requestChangeImage(
|
||||
target: [imageToUser.userId],
|
||||
set: { imageName: objectName },
|
||||
});
|
||||
let request = await createUploadImageUrl(mc, objectName, contentType);
|
||||
const request = await createUploadImageUrl(mc, objectName, contentType);
|
||||
request.postURL = Config.minioPublicBucketEndpoint;
|
||||
return request;
|
||||
}
|
||||
|
||||
async function confirmChangeImage(userId: number, oldImage: string | null) {
|
||||
const mc = createClient();
|
||||
let rs = await db
|
||||
const rs = await db
|
||||
.select({ imageName: imageToUser.imageName })
|
||||
.from(imageToUser)
|
||||
.where(eq(imageToUser.userId, userId));
|
||||
@@ -373,7 +366,7 @@ async function confirmChangeImage(userId: number, oldImage: string | null) {
|
||||
code: "BAD_REQUEST",
|
||||
});
|
||||
}
|
||||
let imageName = rs[0].imageName;
|
||||
const imageName = rs[0].imageName;
|
||||
const isImageExist = await mc
|
||||
.statObject(Config.bucketName, imageName)
|
||||
.then(() => true)
|
||||
@@ -384,7 +377,7 @@ async function confirmChangeImage(userId: number, oldImage: string | null) {
|
||||
code: "BAD_REQUEST",
|
||||
});
|
||||
}
|
||||
const promises: Promise<any>[] = [];
|
||||
const promises: Promise<void>[] = [];
|
||||
if (oldImage) {
|
||||
promises.push(mc.removeObject(Config.bucketName, oldImage).catch(() => {}));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user