Commit db04abb9 authored by Дмитрий Малюгин's avatar Дмитрий Малюгин 🕓
Browse files

trying and trying...

parent fe37ed50
Loading
Loading
Loading
Loading
+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"
+7 −0
Original line number Diff line number Diff line
@@ -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);
+48 −56
Original line number Diff line number Diff line
@@ -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);
        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);
  });
});
}
+1 −1
Original line number Diff line number Diff line
@@ -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?
+38 −13
Original line number Diff line number Diff line
@@ -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!'));
    }
    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({