Loading .env +5 −4 Original line number Diff line number Diff line 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" controllers/homeController.js +7 −0 Original line number Diff line number Diff line Loading @@ -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); Loading index.js +48 −56 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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); 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: 'changeHomeBackgroundUrl', data: { ...req.body } event: event, data: data }) ); }); break; } function submitFilesToUsers(data) { console.log('submitFilesToUsers', data); filesWss.clients.forEach((client) => { client.send(data); }); }); } prisma/schema.prisma +1 −1 Original line number Diff line number Diff line Loading @@ -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? Loading services/homeService.js +38 −13 Original line number Diff line number Diff line Loading @@ -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({ Loading @@ -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!')); } return prisma.home_entity.create({ data: { ...body, image_url: pathOfImage } }); 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 } }); } 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({ Loading Loading
.env +5 −4 Original line number Diff line number Diff line 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"
controllers/homeController.js +7 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
index.js +48 −56 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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); 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: 'changeHomeBackgroundUrl', data: { ...req.body } event: event, data: data }) ); }); break; } function submitFilesToUsers(data) { console.log('submitFilesToUsers', data); filesWss.clients.forEach((client) => { client.send(data); }); }); }
prisma/schema.prisma +1 −1 Original line number Diff line number Diff line Loading @@ -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? Loading
services/homeService.js +38 −13 Original line number Diff line number Diff line Loading @@ -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({ Loading @@ -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!')); } return prisma.home_entity.create({ data: { ...body, image_url: pathOfImage } }); 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 } }); } 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({ Loading