Compare commits

...

2 Commits

Author SHA1 Message Date
566bce4663 feat: delete image
Some checks failed
platform/multy-stub/pipeline/pr-master There was a failure building this commit
platform/multy-stub/pipeline/head There was a failure building this commit
2025-03-03 19:46:10 +03:00
c828718498 feat: add today filter 2025-03-03 19:36:56 +03:00
3 changed files with 106 additions and 194 deletions

View File

@@ -1,111 +1,116 @@
const router = require('express').Router()
const {MasterModel} = require('./model/master')
const mongoose = require("mongoose")
const {OrderModel} = require("./model/order")
const router = require("express").Router();
const { MasterModel } = require("./model/master");
const mongoose = require("mongoose");
const { OrderModel } = require("./model/order");
router.get("/masters", async (req, res, next) => {
try {
const masters = await MasterModel.find({});
const orders = await OrderModel.find({});
try {
const masters = await MasterModel.find({});
const mastersWithOrders = masters.map((master) => {
const masterOrders = orders.filter((order) => {
return (
order?.master && order.master.toString() === master._id.toString()
);
});
// Создаем объекты для начала и конца текущего дня
const today = new Date();
today.setHours(0, 0, 0, 0);
const tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate() + 1);
const schedule = masterOrders.map((order) => ({
id: order._id,
startWashTime: order.startWashTime,
endWashTime: order.endWashTime,
}));
const orders = await OrderModel.find({
startWashTime: {
$gte: today,
$lt: tomorrow,
},
});
return {
id: master._id,
name: master.name,
schedule: schedule,
phone: master.phone,
};
});
res.status(200).send({ success: true, body: mastersWithOrders });
} catch (error) {
next(error);
}
});
router.delete('/masters/:id', async (req, res,next) => {
const { id } = req.params;
if (!mongoose.Types.ObjectId.isValid(id)){
throw new Error('ID is required')
}
try {
const master = await MasterModel.findByIdAndDelete(id, {
new: true,
});
if (!master) {
throw new Error('master not found')
}
res.status(200).send({success: true, body: master})
} catch (error) {
next(error)
}
})
router.post('/masters', async (req, res,next) => {
const {name, phone} = req.body
if (!name || !phone ){
throw new Error('Enter name and phone')
}
try {
const master = await MasterModel.create({name, phone})
res.status(200).send({success: true, body: master})
} catch (error) {
next(error)
}
})
router.patch('/masters/:id', async (req, res, next) => {
const { id } = req.params;
if (!mongoose.Types.ObjectId.isValid(id)) {
throw new Error('ID is required')
}
const { name, phone } = req.body;
if (!name && !phone) {
throw new Error('Enter name and phone')
}
try {
const updateData = {};
if (name) updateData.name = name;
if (phone) updateData.phone = phone;
const master = await MasterModel.findByIdAndUpdate(
id,
updateData,
{ new: true }
const mastersWithOrders = masters.map((master) => {
const masterOrders = orders.filter((order) => {
return (
order?.master && order.master.toString() === master._id.toString()
);
});
if (!master) {
throw new Error('master not found')
}
const schedule = masterOrders.map((order) => ({
id: order._id,
startWashTime: order.startWashTime,
endWashTime: order.endWashTime,
}));
res.status(200).send({ success: true, body: master });
} catch (error) {
next(error);
}
return {
id: master._id,
name: master.name,
schedule: schedule,
phone: master.phone,
};
});
res.status(200).send({ success: true, body: mastersWithOrders });
} catch (error) {
next(error);
}
});
module.exports = router
router.delete("/masters/:id", async (req, res, next) => {
const { id } = req.params;
if (!mongoose.Types.ObjectId.isValid(id)) {
throw new Error("ID is required");
}
try {
const master = await MasterModel.findByIdAndDelete(id, {
new: true,
});
if (!master) {
throw new Error("master not found");
}
res.status(200).send({ success: true, body: master });
} catch (error) {
next(error);
}
});
router.post("/masters", async (req, res, next) => {
const { name, phone } = req.body;
if (!name || !phone) {
throw new Error("Enter name and phone");
}
try {
const master = await MasterModel.create({ name, phone });
res.status(200).send({ success: true, body: master });
} catch (error) {
next(error);
}
});
router.patch("/masters/:id", async (req, res, next) => {
const { id } = req.params;
if (!mongoose.Types.ObjectId.isValid(id)) {
throw new Error("ID is required");
}
const { name, phone } = req.body;
if (!name && !phone) {
throw new Error("Enter name and phone");
}
try {
const updateData = {};
if (name) updateData.name = name;
if (phone) updateData.phone = phone;
const master = await MasterModel.findByIdAndUpdate(id, updateData, {
new: true,
});
if (!master) {
throw new Error("master not found");
}
res.status(200).send({ success: true, body: master });
} catch (error) {
next(error);
}
});
module.exports = router;

View File

@@ -1,91 +0,0 @@
const API_URL = "https://gigachat.devices.sberbank.ru/api/v1"
const router = require('express').Router()
const { v4: uuidv4 } = require("uuid");
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
const token = 'MTQwMmNmZjgtZjA5OC00OGMxLWI0OTUtNWU3ZTU4YzMzZjdjOmU5OGFiYmNiLThmMDItNGVmOC1hNjhhLTA4Y2QxYjVmOGRmMA=='
const getToken = async (req, res) => {
const rqUID = uuidv4()
const body = new URLSearchParams({
scope: "GIGACHAT_API_PERS",
})
const response = await fetch("https://ngw.devices.sberbank.ru:9443/api/v2/oauth", {
method: "POST",
headers: {
Authorization: `Basic ${token}`,
"Content-Type": "application/x-www-form-urlencoded",
Accept: "application/json",
RqUID: rqUID,
},
body,
})
if (!response.ok) {
const errorData = await response.json();
console.error(" Ошибка запроса:", errorData);
return res.status(response.status).json(errorData);
}
return await response.json()
}
async function analyzeImage(fileId,token) {
const response = await fetch(`${API_URL}/chat/completions`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
model: "GigaChat-Max",
stream: false,
update_interval: 0,
messages: [
{
role: "system",
content:
"Ты эксперт по оценке чистоты автомобилей. Твоя задача — анализировать фотографии машин и определять степень их чистоты по 10-балльной шкале, где 1 — очень грязная, 10 — полностью чистая. Отвечай только числом от 1 до 10, без пояснений и дополнительных слов.",
},
{
role: "user",
content: "Что с чистотой машины? Отвечай на основе приложенного документа",
attachments: [fileId],
},
],
}),
});
const data = await response.json()
console.log(" Результат анализа:", data)
return data
}
router.post("/upload", async (req, res) => {
const {access_token} = await getToken(req, res)
const response = await fetch(`${API_URL}/files`, {
method: "POST",
headers: {
Authorization: `Bearer ${access_token}`,
contentType: "multipart/form-data",
},
body: req.body,
})
const data = await response.json()
const analysisResponse = await analyzeImage(data.id,access_token)
res.json({ fileId: data.id, analysis: analysisResponse })
})
module.exports = router

View File

@@ -2,13 +2,11 @@ const router = require('express').Router()
const armMasterRouter = require('./arm-master')
const armOrdersRouter = require('./arm-orders')
const orderRouter = require('./order')
const imageRouter = require('./image')
router.use('/arm', armMasterRouter)
router.use('/arm', armOrdersRouter)
router.use('/order', orderRouter)
router.use('/image', imageRouter)
module.exports = router