Browse Source

mock 测量记录相关接口

master
zhangjiming 4 months ago
parent
commit
f5d444f999
  1. 3
      package.json
  2. 29
      prisma/schema.prisma
  3. 71
      prisma/seed.ts
  4. 19
      src/routes/auth.ts
  5. 133
      src/routes/mobile.ts
  6. 4
      src/utils/helper.ts

3
package.json

@ -2,6 +2,9 @@
"name": "express-ts",
"version": "1.0.0",
"main": "index.js",
"prisma": {
"seed": "ts-node prisma/seed.ts"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "ts-node src/index.ts",

29
prisma/schema.prisma

@ -13,13 +13,28 @@ datasource db {
url = "file:./dev.db"
}
model user {
// model User {
// id Int @id @default(autoincrement())
// name String
// email String @unique
// password String
// createdTime DateTime @default(now()) @map("created_time")
// updatedTime DateTime @updatedAt @map("updated_time")
// @@map("user")
// }
// 测量数据
model measurement {
id Int @id @default(autoincrement())
name String
email String @unique
password String
createdTime DateTime @default(now()) @map("created_time")
updatedTime DateTime @updatedAt @map("updated_time")
//  @@map("user")
railId Int
bureau String
line String
section String
direction String
createAt DateTime @default(now()) @map("create_at")
leftPoints String @map("left_points")
rightPoints String @map("right_points")
upload Boolean @default(false)
}

71
prisma/seed.ts

@ -0,0 +1,71 @@
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
async function main() {
const d1 = await prisma.measurement.upsert({
where: { id: 1 },
update: {},
create: {
name: "测量数据1",
railId: 1,
bureau: "北京铁路局",
line: "京沪线",
section: "路段一",
direction: "上行",
leftPoints: '[{"x":43,"y":22}]',
rightPoints: '[{"x":43,"y":22}]',
},
});
const d2 = await prisma.measurement.upsert({
where: { id: 2 },
update: {},
create: {
name: "测量数据2",
railId: 2,
bureau: "上海铁路局",
line: "京沪线",
section: "路段二",
direction: "下行",
leftPoints: '[{"x":43,"y":22}]',
rightPoints: '[{"x":43,"y":22}]',
},
});
const d3 = await prisma.measurement.upsert({
where: { id: 3 },
update: {},
create: {
name: "测量数据3",
railId: 2,
bureau: "上海铁路局",
line: "京九线",
section: "路段三",
direction: "下行",
leftPoints: '[{"x":43,"y":22}]',
rightPoints: '[{"x":43,"y":22}]',
},
});
const d4 = await prisma.measurement.upsert({
where: { id: 4 },
update: {},
create: {
name: "测量数据4",
railId: 3,
bureau: "南京铁路局",
line: "京九线",
section: "路段四",
direction: "上行",
leftPoints: '[{"x":43,"y":22}]',
rightPoints: '[{"x":43,"y":22}]',
},
});
console.log({ d1, d2, d3, d4 });
}
main()
.catch(e => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});

19
src/routes/auth.ts

@ -58,22 +58,5 @@ router.post("/logout", (req, res) => {
timestamp: 1741005358167,
});
});
router.get("/users", async (req, res) => {
const users = await prisma.user.findMany()
res.json({
status: 0,
data: users,
})
});
router.post("/users", async (req, res) => {
const user = req.body
console.log(user)
const newUser = await prisma.user.create({
data: user
})
res.json({
status: 0,
data: newUser,
})
})
export default router;

133
src/routes/mobile.ts

@ -1,13 +1,16 @@
import express from "express";
import { delay } from "../utils/helper";
import { delay, prismaClient } from "../utils/helper";
const router = express.Router();
import points from "../utils/measure.json";
import { WsProxy } from "../utils/wss";
import { Prisma } from "@prisma/client";
let ptIndex = 0;
let intervalId1: ReturnType<typeof setInterval>;
let intervalId2: ReturnType<typeof setInterval>;
let uploadIntervalId: ReturnType<typeof setInterval>;
router.post("/startMeasure", (req, res) => {
setTimeout(() => {
ptIndex = 0;
@ -67,4 +70,132 @@ router.post("/startMeasure", (req, res) => {
res.json({ success: true });
});
router.get("/getUploadedRecords", async (req, res) => {
const lastId = req.body?.lastId || 0;
const size = req.body?.size || 10;
const query: Prisma.measurementFindManyArgs = {
where: { upload: true },
orderBy: {
id: "desc",
},
take: size,
select: {
id: true,
name: true,
railId: true,
bureau: true,
line: true,
section: true,
direction: true,
createAt: true,
},
};
if (lastId) {
(query.skip = 1), (query.cursor = { id: lastId });
}
const list = await prismaClient.measurement.findMany(query);
res.json({ success: true, data: list });
});
router.get("/getUnuploadedRecords", async (req, res) => {
const lastId = req.body?.lastId || 0;
const size = req.body?.size || 10;
const query: Prisma.measurementFindManyArgs = {
where: { upload: false },
orderBy: {
id: "desc",
},
take: size,
select: {
id: true,
name: true,
railId: true,
bureau: true,
line: true,
section: true,
direction: true,
createAt: true,
},
};
if (lastId) {
(query.skip = 1), (query.cursor = { id: lastId });
}
const list = await prismaClient.measurement.findMany(query);
res.json({ success: true, data: list });
});
router.post("/searchHistoryRecords", async (req, res) => {
const keyword = req.body.keyword;
const query: Prisma.measurementFindManyArgs = {
orderBy: {
id: "desc",
},
take: 50,
select: {
id: true,
name: true,
railId: true,
bureau: true,
line: true,
section: true,
direction: true,
createAt: true,
},
};
if (keyword.trim()) {
query.where = { name: { contains: keyword.trim() }}
}
const list = await prismaClient.measurement.findMany(query);
res.json({ success: true, data: list });
})
router.get("/getMeasurementDetail", async (req, res) => {
const record = await prismaClient.measurement.findUnique({
where: { id: req.body.id },
});
res.json({ success: true, data: record });
});
router.post("/saveMeasurement", async (req, res) => {
try {
const record = await prismaClient.measurement.create({
data: req.body,
});
res.json({ success: true, data: record });
} catch (err: any) {
res.json({ success: false, message: err.message });
}
});
let uploadCount = 0;
let uploadIdx = 0;
router.post("/uploadRecords", async (req, res) => {
const ids = req.body.ids as number[];
uploadCount = ids.length;
setTimeout(() => {
WsProxy.sendFunc({
func: "uploadRecordsStatus",
data: ids.map((id, idx) => ({ id, state: idx === 0 ? "uploading" : "pending" })),
});
}, 100);
uploadIntervalId = setInterval(() => {
uploadIdx++;
WsProxy.sendFunc({
func: "uploadRecordsStatus",
data: ids.map((id, idx) => ({
id,
state: idx < uploadIdx ? "uploaded" : idx === uploadIdx ? "uploading" : "pending",
})),
});
if (uploadIdx === uploadCount) {
clearInterval(uploadIntervalId);
uploadCount = uploadIdx = 0;
return;
}
}, 1500);
res.json({ success: true });
});
export default router;

4
src/utils/helper.ts

@ -1,3 +1,7 @@
import { PrismaClient } from "@prisma/client";
export const prismaClient = new PrismaClient();
export async function delay(mill: number) {
return new Promise(resolve => {
setTimeout(() => {

Loading…
Cancel
Save