lint
All checks were successful
backend-action / build-image (push) Successful in 1m9s

This commit is contained in:
2024-05-16 17:26:27 +07:00
parent 5c4abf24bb
commit c1a019a461
13 changed files with 246 additions and 63 deletions

View File

@@ -1,8 +1,10 @@
{
"extends": [
"next/core-web-vitals",
"next",
"prettier",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended"
]
],
"rules": {
"prefer-const": "error"
}
}

View File

@@ -18,9 +18,9 @@ type Group = {
jobs: number[];
};
export default function GroupCreator({ allJobs }: Props) {
let locationContext = useContext(LocationContext);
let [usedJobs, setUsedJobs] = useState<number[]>([]);
let [groups, setGroup] = useState<Group[]>(
const locationContext = useContext(LocationContext);
const [usedJobs, setUsedJobs] = useState<number[]>([]);
const [groups, setGroup] = useState<Group[]>(
[...Array(4).keys()].map((i) => ({ id: i + 1, jobs: [] })),
);
function useJob(id: number) {

View File

@@ -14,10 +14,10 @@ export default function Grouping({
removeJob,
updateGroup,
}: Props) {
let [selectedJob, setSelectedJob] = useState<JobCategory[]>([]);
const [selectedJob, setSelectedJob] = useState<JobCategory[]>([]);
function addJob(id: string) {
let _id = parseInt(id);
let job = availableJobs.find((j) => j.id == _id);
const _id = parseInt(id);
const job = availableJobs.find((j) => j.id == _id);
if (job == undefined) return;
setSelectedJob((old) => [...old, job]);
selectJob(_id);

View File

@@ -4,10 +4,10 @@ import LocationContextProvider from "@/components/locationContext";
import GroupCreator from "./GroupCreator";
export default async function Page() {
let provinces = await db.query.province
const provinces = await db.query.province
.findMany({ with: { zones: true } })
.execute();
let jobList = await db.query.group.findMany().execute();
const jobList = await db.query.group.findMany().execute();
return (
<LocationContextProvider>
<LocationSelector provinces={provinces} />

View File

@@ -5,11 +5,11 @@ type Props = {
};
export default function IdComponent({ updateIdList }: Props) {
let [idSet, setIdSet] = useState<Set<string>>(new Set());
let onValidId = (id: string) => {
const [idSet, setIdSet] = useState<Set<string>>(new Set());
const onValidId = (id: string) => {
setIdSet((prev) => new Set(prev.add(id)));
};
let removeCid = (id: string) => {
const removeCid = (id: string) => {
setIdSet((prev) => new Set([...prev].filter((x) => x !== id)));
};
useEffect(() => {
@@ -51,10 +51,10 @@ type SingleIdProps = {
};
function SingleIdComponent({ onValidId }: SingleIdProps) {
let [isValid, setIsValid] = useState(false);
let [cid, setCid] = useState("");
const [isValid, setIsValid] = useState(false);
const [cid, setCid] = useState("");
useEffect(() => {
let isValidId = isValidThaiID(cid);
const isValidId = isValidThaiID(cid);
setIsValid(isValidId);
if (isValidId) {
onValidId(cid);

View File

@@ -3,7 +3,7 @@ import { useState } from "react";
import IdComponent from "./IdComponent";
export default function Page() {
let [idList, setIdList] = useState<string[]>([]);
const [idList, setIdList] = useState<string[]>([]);
function submit() {} //TODO! submit inside user
return (
<div>

View File

@@ -17,20 +17,20 @@ type Zone = {
province: number;
};
export default function LocationSelector({ provinces }: Props) {
let [provinceId, setProvinceId] = useState<number | undefined>(undefined);
let [amphurList, setAmphurList] = useState<Zone[] | undefined>(undefined);
let [amphurId, setAmphurId] = useState<number | undefined>(undefined);
const [provinceId, setProvinceId] = useState<number | undefined>(undefined);
const [amphurList, setAmphurList] = useState<Zone[] | undefined>(undefined);
const [amphurId, setAmphurId] = useState<number | undefined>(undefined);
const locationContext = useContext(LocationContext);
function setProvince(_id: string) {
let id = parseInt(_id);
const id = parseInt(_id);
setProvinceId(id);
let province = provinces.find((p) => p.id == id);
const province = provinces.find((p) => p.id == id);
if (province == undefined) return;
setAmphurList(province.zones);
setAmphurId(undefined);
}
function setAmphur(_id: string) {
let id = parseInt(_id);
const id = parseInt(_id);
setAmphurId(id);
}
useEffect(() => {

View File

@@ -21,8 +21,8 @@ export default function LocationContextProvider({
}: {
children?: ReactNode;
}) {
let zone = useState<number | undefined>(undefined);
let province = useState<number | undefined>(undefined);
const zone = useState<number | undefined>(undefined);
const province = useState<number | undefined>(undefined);
return (
<LocationContext.Provider value={{ zone, province }}>

View File

@@ -33,6 +33,7 @@
"zod": "^3.22.4"
},
"devDependencies": {
"@eslint/js": "^9.2.0",
"@swc-node/register": "^1.9.0",
"@swc/cli": "^0.3.12",
"@swc/core": "^1.4.16",
@@ -52,6 +53,7 @@
"prettier-plugin-tailwindcss": "^0.5.14",
"tailwindcss": "^3.4.3",
"ts-node": "^10.9.2",
"typescript": "^5.4.5"
"typescript": "^5.4.5",
"typescript-eslint": "^7.9.0"
}
}

196
pnpm-lock.yaml generated
View File

@@ -52,6 +52,9 @@ dependencies:
version: 3.22.4
devDependencies:
'@eslint/js':
specifier: ^9.2.0
version: 9.2.0
'@swc-node/register':
specifier: ^1.9.0
version: 1.9.0(@swc/core@1.4.16)(@swc/types@0.1.6)(typescript@5.4.5)
@@ -112,6 +115,9 @@ devDependencies:
typescript:
specifier: ^5.4.5
version: 5.4.5
typescript-eslint:
specifier: ^7.9.0
version: 7.9.0(eslint@8.57.0)(typescript@5.4.5)
packages:
@@ -574,6 +580,11 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/@eslint/js@9.2.0:
resolution: {integrity: sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dev: true
/@humanwhocodes/config-array@0.11.14:
resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
engines: {node: '>=10.10.0'}
@@ -1170,6 +1181,33 @@ packages:
'@types/send': 0.17.4
dev: true
/@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0)(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
'@typescript-eslint/parser': ^7.0.0
eslint: ^8.56.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/type-utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.9.0
eslint: 8.57.0
graphemer: 1.4.0
ignore: 5.3.1
natural-compare: 1.4.0
ts-api-utils: 1.3.0(typescript@5.4.5)
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -1191,6 +1229,27 @@ packages:
- supports-color
dev: true
/@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.9.0
debug: 4.3.4(supports-color@5.5.0)
eslint: 8.57.0
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/scope-manager@7.2.0:
resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -1199,11 +1258,44 @@ packages:
'@typescript-eslint/visitor-keys': 7.2.0
dev: true
/@typescript-eslint/scope-manager@7.9.0:
resolution: {integrity: sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==}
engines: {node: ^18.18.0 || >=20.0.0}
dependencies:
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/visitor-keys': 7.9.0
dev: true
/@typescript-eslint/type-utils@7.9.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
debug: 4.3.4(supports-color@5.5.0)
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.4.5)
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/types@7.2.0:
resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==}
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
/@typescript-eslint/types@7.9.0:
resolution: {integrity: sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==}
engines: {node: ^18.18.0 || >=20.0.0}
dev: true
/@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.5):
resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -1226,6 +1318,44 @@ packages:
- supports-color
dev: true
/@typescript-eslint/typescript-estree@7.9.0(typescript@5.4.5):
resolution: {integrity: sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/visitor-keys': 7.9.0
debug: 4.3.4(supports-color@5.5.0)
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
semver: 7.6.0
ts-api-utils: 1.3.0(typescript@5.4.5)
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/utils@7.9.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
eslint: 8.57.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/@typescript-eslint/visitor-keys@7.2.0:
resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -1234,6 +1364,14 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
/@typescript-eslint/visitor-keys@7.9.0:
resolution: {integrity: sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==}
engines: {node: ^18.18.0 || >=20.0.0}
dependencies:
'@typescript-eslint/types': 7.9.0
eslint-visitor-keys: 3.4.3
dev: true
/@ungap/structured-clone@1.2.0:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: true
@@ -2450,7 +2588,7 @@ packages:
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.9.0)(eslint@8.57.0)
eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0)
eslint-plugin-react: 7.34.1(eslint@8.57.0)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0)
@@ -2490,7 +2628,7 @@ packages:
enhanced-resolve: 5.16.1
eslint: 8.57.0
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.9.0)(eslint@8.57.0)
fast-glob: 3.3.2
get-tsconfig: 4.7.3
is-core-module: 2.13.1
@@ -2532,7 +2670,36 @@ packages:
- supports-color
dev: true
/eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
/eslint-module-utils@2.8.1(@typescript-eslint/parser@7.9.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0):
resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
eslint: '*'
eslint-import-resolver-node: '*'
eslint-import-resolver-typescript: '*'
eslint-import-resolver-webpack: '*'
peerDependenciesMeta:
'@typescript-eslint/parser':
optional: true
eslint:
optional: true
eslint-import-resolver-node:
optional: true
eslint-import-resolver-typescript:
optional: true
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
debug: 3.2.7
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
dev: true
/eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.9.0)(eslint@8.57.0):
resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
engines: {node: '>=4'}
peerDependencies:
@@ -2542,7 +2709,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
array.prototype.flat: 1.3.2
@@ -2551,7 +2718,7 @@ packages:
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.9.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0)
hasown: 2.0.2
is-core-module: 2.13.1
is-glob: 4.0.3
@@ -5458,6 +5625,25 @@ packages:
possible-typed-array-names: 1.0.0
dev: true
/typescript-eslint@7.9.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-7iTn9c10teHHCys5Ud/yaJntXZrjt3h2mrx3feJGBOLgQkF3TB1X89Xs3aVQ/GgdXRAXpk2bPTdpRwHP4YkUow==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@typescript-eslint/eslint-plugin': 7.9.0(@typescript-eslint/parser@7.9.0)(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
eslint: 8.57.0
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
dev: true
/typescript@5.4.5:
resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
engines: {node: '>=14.17'}

View File

@@ -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;
}

View File

@@ -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(),
})

View File

@@ -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(() => {}));
}