Skip to content
Snippets Groups Projects
Commit db04abb9 authored by Дмитрий Малюгин's avatar Дмитрий Малюгин :clock4:
Browse files

trying and trying...

parent fe37ed50
No related branches found
No related tags found
1 merge request!2Refactor/image and text
PORT=5000
FILES_PORT=5001
DB_NAME=Shelf_note
DB_USER=postgres
DB_PASSWORD=xoxo2002!
DB_HOST=localhost
DB_PORT=5432
// prisma db push
; при запуске с родного ноутбука
; DATABASE_URL="postgresql://postgres:xoxo2002!@localhost:5432/Shelf_note"
# prisma db push
# при запуске с родного ноутбука
# DATABASE_URL="postgresql://postgres:xoxo2002!@localhost:5432/Shelf_note"
; при запуске с рабочего ноутбука
# при запуске с рабочего ноутбука
DATABASE_URL="postgresql://postgres.wrwwvdgppriodcdoyohp:Xoxo2002!qwe@aws-0-eu-central-1.pooler.supabase.com:6543/postgres?pgbouncer=true"
DIRECT_URL="postgresql://postgres.wrwwvdgppriodcdoyohp:Xoxo2002!qwe@aws-0-eu-central-1.pooler.supabase.com:5432/postgres"
......@@ -24,6 +24,13 @@ class HomeController {
console.log(error);
}
}
async createImageEntity(req) {
try {
return await HomeService.createImageEntity(req);
} catch (error) {
console.log(error);
}
}
async editEntity(req) {
try {
return await HomeService.editEntity(req.body);
......
......@@ -2,7 +2,8 @@ import 'dotenv/config';
import { WebSocketServer } from 'ws';
import HomeController from './controllers/homeController.js';
const PORT = process.env.PORT || 5432;
const PORT = process.env.PORT || 5000;
const FILES_PORT = process.env.FILES_PORT || 5001;
const users = new Set();
......@@ -13,89 +14,80 @@ const wss = new WebSocketServer(
() => console.log(`Started listen on port ${PORT}`)
);
const filesWss = new WebSocketServer(
{
port: FILES_PORT
},
() => console.log(`Started listen on port ${FILES_PORT}`)
);
wss.on('connection', (ws) => {
users.add(ws);
ws.id = Date.now();
ws.on('message', async (req) => {
req = JSON.parse(req);
console.log('req: ', req);
switch (req.event) {
case 'getHomeEntities':
const getHomeEntitiesData = await HomeController.getEntities();
wss.clients.forEach((client) => {
client.send(
JSON.stringify({
event: 'getHomeEntities',
data: getHomeEntitiesData
})
);
getHomeEntitiesData.entitiesImages.forEach((entityBlob) => {
submitFilesToUsers(entityBlob);
});
submitToUsers('getHomeEntities', getHomeEntitiesData.entities);
break;
case 'getHomeBackgroundUrl':
const homeBackgroundUrl = await HomeController.getHomeBackgroundUrl();
wss.clients.forEach((client) => {
client.send(
JSON.stringify({
event: 'getHomeBackgroundUrl',
data: homeBackgroundUrl
})
);
});
submitToUsers('getHomeBackgroundUrl', homeBackgroundUrl);
break;
case 'createHomeEntity':
const createdHomeEntity = await HomeController.createEntity(req);
wss.clients.forEach((client) => {
client.send(
JSON.stringify({
event: 'createHomeEntity',
data: createdHomeEntity
})
);
});
submitToUsers('createHomeEntity', createdHomeEntity);
break;
case 'editHomeEntity':
const editedHomeEntity = await HomeController.editEntity(req);
wss.clients.forEach((client) => {
client.send(
JSON.stringify({
event: 'editHomeEntity',
data: editedHomeEntity
})
);
});
submitToUsers('editHomeEntity', editedHomeEntity);
break;
case 'deleteHomeEntity':
const deletedHomeEntity = await HomeController.deleteEntity(req);
wss.clients.forEach((client) => {
client.send(
JSON.stringify({
event: 'deleteHomeEntity',
data: deletedHomeEntity
})
);
});
submitToUsers('deleteHomeEntity', deletedHomeEntity);
break;
case 'changeOrderHomeEntity':
await HomeController.changeOrderEntity(req);
wss.clients.forEach((client) => {
client.send(
JSON.stringify({
event: 'changeOrderHomeEntity',
data: { ...req.body }
})
);
});
submitToUsers('changeOrderHomeEntity', { ...req.body });
break;
case 'changeHomeBackgroundUrl':
await HomeController.changeHomeBackgroundUrl(req);
wss.clients.forEach((client) => {
client.send(
JSON.stringify({
event: 'changeHomeBackgroundUrl',
data: { ...req.body }
})
);
});
submitToUsers('changeHomeBackgroundUrl', { ...req.body });
break;
}
});
});
filesWss.on('connection', (ws) => {
users.add(ws);
console.log('users: ', users.size);
ws.on('message', async (req) => {
console.log('req', req);
await HomeController.createImageEntity(req);
submitToUsers('createImageHomeEntity', 'Post data of image, please');
});
});
function submitToUsers(event, data) {
console.log('data in submitToUsers:', data);
wss.clients.forEach((client) => {
client.send(
JSON.stringify({
event: event,
data: data
})
);
});
}
function submitFilesToUsers(data) {
console.log('submitFilesToUsers', data);
filesWss.clients.forEach((client) => {
client.send(data);
});
}
......@@ -38,7 +38,7 @@ model Home_entity {
font_size String?
paragraph_size String?
text_position String?
image_url String? @db.Text
image_path String? @db.Text
image_width Int?
image_height Int?
entity_position String?
......
......@@ -6,9 +6,26 @@ const prisma = new PrismaClient();
class HomeService {
async getEntities() {
return prisma.home_entity.findMany({
const entitiesDB = await prisma.home_entity.findMany({
orderBy: [{ entity_order: 'asc' }]
});
const entitiesImages = [];
const entitiesToReturn = entitiesDB.map((entity) => {
if (!entity.image_width) return entity;
const imagePath = path.join(path.resolve(), `/public/images/${entity.entity_uuid}.jpg`);
const file = fs.readFileSync(imagePath);
console.log('file in readFile: ', file);
// const blob = new Blob([file], { type: 'image/jpeg' });
// console.log('blob: ', blob);
const buffer = Buffer.from(file, 'base64');
entitiesImages.push(buffer);
console.log('entitiesImages', entitiesImages);
return entity;
});
return {
entities: entitiesToReturn,
entitiesImages: entitiesImages
};
}
async getHomeBackgroundUrl() {
return prisma.setting.findFirst({
......@@ -18,19 +35,27 @@ class HomeService {
});
}
async createEntity(body) {
let pathOfImage = '';
if (body.image_url) {
console.log('body.image_url', body.image_url);
// const response = await fetch(body.image_url);
// const blob = await body.image_url.blob();
const arrayBuffer = new ArrayBuffer(body.image_url);
// const arrayBuffer = await body.image_url.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
pathOfImage = path.join(path.resolve(), `/public/images/${body.entity_uuid}`);
console.log('pathOfImage', pathOfImage);
fs.writeFile(pathOfImage, buffer, () => console.log('Written!'));
if (body.image_blob) {
const imagePath = path.join(path.resolve(), `/public/images/image.jpg`);
let newImagePath = imagePath.split('\\');
newImagePath.splice(-1);
console.log('1 newImagePath', newImagePath);
newImagePath.push(`${body.entity_uuid}.jpg`);
console.log('2 newImagePath', newImagePath);
newImagePath = newImagePath.join('\\');
console.log('3 newImagePath', newImagePath);
fs.rename(imagePath, newImagePath, function (err) {
if (err) console.log('ERROR in fs.rename: ' + err);
});
delete body.image_blob;
body.image_path = newImagePath;
console.log('body image: ', body);
}
return prisma.home_entity.create({ data: { ...body, image_url: pathOfImage } });
return prisma.home_entity.create({ data: { ...body } });
}
async createImageEntity(body) {
const imagePath = path.join(path.resolve(), `/public/images/image.jpg`);
fs.writeFileSync(imagePath, body);
}
async editEntity(body) {
return prisma.home_entity.update({
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment