diff --git a/.env b/.env
index 329b1011cb05fc8855757b47cc941249d9c58f19..8133a82ec7849eb5ce07b74dc917ebec30dd74a4 100644
--- a/.env
+++ b/.env
@@ -7,8 +7,8 @@ DB_HOST=localhost
 DB_PORT=5432
 # prisma db push
 # при запуске с родного ноутбука
-# DATABASE_URL="postgresql://postgres:xoxo2002!@localhost:5432/Shelf_note"
+ 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"
+# 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"
diff --git a/.gitignore b/.gitignore
index 9d78a2b8be2f6beac79d4fa4c2ad357b5d73500d..5288bc4f98889b969751cb944f86a4dac89afa9c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ yarn-error.log*
 pnpm-debug.log*
 lerna-debug.log*
 
+public
 node_modules
 .DS_Store
 dist
diff --git a/controllers/homeController.js b/controllers/homeController.js
index 1f2a6979a9f51dc0096e2db92198a186fea7af07..0250e88fc76cf3318cb547d783a96b32f6fd4891 100644
--- a/controllers/homeController.js
+++ b/controllers/homeController.js
@@ -1,17 +1,31 @@
 import HomeService from '../services/homeService.js';
 
 class HomeController {
-  async getEntities() {
+  async getHomeBackground() {
     try {
-      return await HomeService.getEntities();
+      return await HomeService.getHomeBackground();
     } catch (error) {
       console.log(error);
       return error;
     }
   }
-  async getHomeBackgroundUrl() {
+  async changeHomeBackground(req) {
+    try {
+      return await HomeService.changeHomeBackground(req.body);
+    } catch (error) {
+      console.log(error);
+    }
+  }
+  async removeHomeBackground() {
+    try {
+      await HomeService.removeHomeBackground();
+    } catch (error) {
+      console.log(error);
+    }
+  }
+  async getEntities() {
     try {
-      return await HomeService.getHomeBackgroundUrl();
+      return await HomeService.getEntities();
     } catch (error) {
       console.log(error);
       return error;
@@ -24,9 +38,9 @@ class HomeController {
       console.log(error);
     }
   }
-  async createImageEntity(req) {
+  async createImage(req) {
     try {
-      return await HomeService.createImageEntity(req);
+      return await HomeService.createImage(req);
     } catch (error) {
       console.log(error);
     }
@@ -38,23 +52,23 @@ class HomeController {
       console.log(error);
     }
   }
-  async deleteEntity(req) {
+  async cropImage(req) {
     try {
-      return await HomeService.deleteEntity(req.body);
+      return await HomeService.cropImage(req.body);
     } catch (error) {
       console.log(error);
     }
   }
-  async changeOrderEntity(req) {
+  async deleteEntity(req) {
     try {
-      return await HomeService.changeOrderEntity(req.body);
+      return await HomeService.deleteEntity(req.body);
     } catch (error) {
       console.log(error);
     }
   }
-  async changeHomeBackgroundUrl(req) {
+  async changeOrderEntity(req) {
     try {
-      return await HomeService.changeHomeBackgroundUrl(req.body);
+      return await HomeService.changeOrderEntity(req.body);
     } catch (error) {
       console.log(error);
     }
diff --git a/index.js b/index.js
index 2dd18a3b5b331a271b8a51fa3344fde71b36ce73..3b9e5bacd075f8f81e5ec59c6aa4256a74510402 100644
--- a/index.js
+++ b/index.js
@@ -1,6 +1,8 @@
 import 'dotenv/config';
 import { WebSocketServer } from 'ws';
 import HomeController from './controllers/homeController.js';
+import path from 'node:path';
+import fs from 'node:fs';
 
 const PORT = process.env.PORT || 5000;
 const FILES_PORT = process.env.FILES_PORT || 5001;
@@ -26,27 +28,40 @@ wss.on('connection', (ws) => {
   ws.id = Date.now();
   ws.on('message', async (req) => {
     req = JSON.parse(req);
-    console.log('req: ', req);
+    // console.log('req: ', req);
     switch (req.event) {
+      case 'getHomeBackground':
+        const homeBackground = await HomeController.getHomeBackground();
+        submitFilesToUsers(homeBackground);
+        break;
+      case 'changeHomeBackground':
+        await HomeController.changeHomeBackground(req);
+        submitToUsers('changeHomeBackground', { ...req.body });
+        break;
+      case 'removeHomeBackground':
+        await HomeController.removeHomeBackground();
+        break;
       case 'getHomeEntities':
         const getHomeEntitiesData = await HomeController.getEntities();
-        getHomeEntitiesData.entitiesImages.forEach((entityBlob) => {
-          submitFilesToUsers(entityBlob);
+        getHomeEntitiesData.entitiesImages.forEach((entityBuffer) => {
+          submitFilesToUsers(entityBuffer);
         });
         submitToUsers('getHomeEntities', getHomeEntitiesData.entities);
         break;
-      case 'getHomeBackgroundUrl':
-        const homeBackgroundUrl = await HomeController.getHomeBackgroundUrl();
-        submitToUsers('getHomeBackgroundUrl', homeBackgroundUrl);
-        break;
       case 'createHomeEntity':
         const createdHomeEntity = await HomeController.createEntity(req);
         submitToUsers('createHomeEntity', createdHomeEntity);
         break;
-      case 'editHomeEntity':
+      case 'editHomeEntity': {
         const editedHomeEntity = await HomeController.editEntity(req);
         submitToUsers('editHomeEntity', editedHomeEntity);
         break;
+      }
+      case 'cropImage': {
+        const editedHomeEntity = await HomeController.cropImage(req);
+        submitToUsers('editHomeEntity', editedHomeEntity);
+        break;
+      }
       case 'deleteHomeEntity':
         const deletedHomeEntity = await HomeController.deleteEntity(req);
         submitToUsers('deleteHomeEntity', deletedHomeEntity);
@@ -55,10 +70,6 @@ wss.on('connection', (ws) => {
         await HomeController.changeOrderEntity(req);
         submitToUsers('changeOrderHomeEntity', { ...req.body });
         break;
-      case 'changeHomeBackgroundUrl':
-        await HomeController.changeHomeBackgroundUrl(req);
-        submitToUsers('changeHomeBackgroundUrl', { ...req.body });
-        break;
     }
   });
 });
@@ -67,14 +78,14 @@ 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');
+    console.log('req: ', req);
+    await HomeController.createImage(req);
+    submitToUsers('createImageHomeEntity', '');
   });
 });
 
 function submitToUsers(event, data) {
-  console.log('data in submitToUsers:', data);
+  // console.log('data in submitToUsers:', data);
   wss.clients.forEach((client) => {
     client.send(
       JSON.stringify({
@@ -86,7 +97,6 @@ function submitToUsers(event, data) {
 }
 
 function submitFilesToUsers(data) {
-  console.log('submitFilesToUsers', data);
   filesWss.clients.forEach((client) => {
     client.send(data);
   });
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 1c09602b8b3b5bc6f76768b22efb0966c97ab92a..5d5d2017f469ebc071bb1f808200c3ef9155c5c1 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -12,7 +12,7 @@ datasource db {
   provider = "postgresql"
   url      = env("DATABASE_URL")
   // при запуске с рабочего ноутбука
-  directUrl = env("DIRECT_URL")
+  // directUrl = env("DIRECT_URL")
 }
 
 model User {
@@ -24,13 +24,11 @@ model User {
   email         String?
   phone_number  String?
   settings      Json?
-  home_entities Home_entity[]
+  home_entities Json?
 }
 
 model Home_entity {
   entity_uuid      String @id @default(uuid())
-  entity_user    User?   @relation(fields: [user_nick_name], references: [nick_name])
-  user_nick_name String? @unique
   entity_order   Int    @default(autoincrement())
   entity_type    String
   title          String?
@@ -49,6 +47,7 @@ model Home_entity {
 }
 
 model Setting {
+  setting_uuid String @id @default(uuid())
   setting_name String @unique
   setting_value String
 }
diff --git a/services/homeService.js b/services/homeService.js
index e8a9fd8a1821c39ddd2ef316baf14b6da94932a5..e66810c35256b3e36831ce149d73e0eb9467965d 100644
--- a/services/homeService.js
+++ b/services/homeService.js
@@ -5,6 +5,55 @@ import path from 'node:path';
 const prisma = new PrismaClient();
 
 class HomeService {
+  async getHomeBackground() {
+    const backgroundInfo = await prisma.setting.findFirst({
+      where: {
+        setting_name: 'homeBackground'
+      }
+    });
+    if (backgroundInfo?.setting_value) {
+      const file = fs.readFileSync(backgroundInfo.setting_value);
+      return Buffer.from(file, 'base64');
+    }
+  }
+  async changeHomeBackground(body) {
+    console.log('body in changeHomeBackground: ', body);
+    const response = await fetch(body.setting_value);
+    const blob = await response.blob();
+    const arrayBuffer = await blob.arrayBuffer();
+    const buffer = Buffer.from(arrayBuffer);
+    const extension = body.extension.split('/')[1];
+    const imagePath = path.join(path.resolve(), `/public/images/backgrounds/homeBackground.jpg`);
+    fs.writeFileSync(imagePath, buffer);
+
+    delete body.extension;
+    body.setting_value = imagePath;
+    const homeBackground = await prisma.setting.findFirst({
+      where: {
+        setting_name: 'homeBackground'
+      }
+    });
+    if (homeBackground) {
+      return prisma.setting.update({
+        where: {
+          setting_name: 'homeBackground'
+        },
+        data: { ...body }
+      });
+    }
+    return prisma.setting.create({ data: { ...body } });
+  }
+  async removeHomeBackground() {
+    const imagePath = path.join(path.resolve(), `/public/images/backgrounds/homeBackground.jpg`);
+    fs.unlink(imagePath, (err) => {
+      if (err) throw err;
+    });
+    await prisma.setting.delete({
+      where: {
+        setting_name: 'homeBackground'
+      }
+    });
+  }
   async getEntities() {
     const entitiesDB = await prisma.home_entity.findMany({
       orderBy: [{ entity_order: 'asc' }]
@@ -14,12 +63,12 @@ class HomeService {
       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);
+      // 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);
+      // console.log('entitiesImages', entitiesImages);
       return entity;
     });
     return {
@@ -27,36 +76,45 @@ class HomeService {
       entitiesImages: entitiesImages
     };
   }
-  async getHomeBackgroundUrl() {
-    return prisma.setting.findFirst({
-      where: {
-        setting_name: 'homeBackgroundUrl'
-      }
-    });
-  }
   async createEntity(body) {
-    if (body.image_blob) {
+    if (body.image_buffer) {
       const imagePath = path.join(path.resolve(), `/public/images/image.jpg`);
-      let newImagePath = imagePath.split('\\');
+      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);
+      newImagePath = newImagePath.join('/');
+      console.log('imagePath', imagePath);
+      console.log('newImagePath', newImagePath);
       fs.rename(imagePath, newImagePath, function (err) {
         if (err) console.log('ERROR in fs.rename: ' + err);
       });
-      delete body.image_blob;
+      delete body.image_buffer;
       body.image_path = newImagePath;
       console.log('body image: ', body);
     }
     return prisma.home_entity.create({ data: { ...body } });
   }
-  async createImageEntity(body) {
+  // единственная функция, срабатывающая по сокету для файлов
+  async createImage(body) {
     const imagePath = path.join(path.resolve(), `/public/images/image.jpg`);
     fs.writeFileSync(imagePath, body);
   }
+  async cropImage(body) {
+    const imagePath = path.join(path.resolve(), `/public/images/image.jpg`);
+    fs.unlink(body.image_path, (err) => {
+      if (err) throw err;
+    });
+    fs.rename(imagePath, body.image_path, function (err) {
+      if (err) throw err;
+    });
+    delete body.imageUrl;
+    return prisma.home_entity.update({
+      where: {
+        entity_uuid: body.entity_uuid
+      },
+      data: { ...body }
+    });
+  }
   async editEntity(body) {
     return prisma.home_entity.update({
       where: {
@@ -76,6 +134,10 @@ class HomeService {
         entity_uuid: body.entity_uuid
       }
     });
+    if (body.image_width)
+      fs.unlink(body.image_path, (err) => {
+        if (err) throw err;
+      });
     return deletedEntity;
   }
   async changeOrderEntity(body) {
@@ -105,22 +167,6 @@ class HomeService {
     });
     return body;
   }
-  async changeHomeBackgroundUrl(body) {
-    const homeBackgroundUrl = await prisma.setting.findFirst({
-      where: {
-        setting_name: 'homeBackgroundUrl'
-      }
-    });
-    if (homeBackgroundUrl) {
-      return prisma.setting.update({
-        where: {
-          setting_name: 'homeBackgroundUrl'
-        },
-        data: { ...body }
-      });
-    }
-    return prisma.setting.create({ data: { ...body } });
-  }
 }
 
 export default new HomeService();
diff --git a/yarn.lock b/yarn.lock
index 334659924f203e1acdf181bad9ded275f7cfa34d..41a4664401d7da79ee2c8c1dfb413823f8384a79 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,31 @@
 # yarn lockfile v1
 
 
+"@cspotcode/source-map-support@^0.8.0":
+  version "0.8.1"
+  resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
+  integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
+  dependencies:
+    "@jridgewell/trace-mapping" "0.3.9"
+
+"@jridgewell/resolve-uri@^3.0.3":
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+  integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/sourcemap-codec@^1.4.10":
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
+  integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
+
+"@jridgewell/trace-mapping@0.3.9":
+  version "0.3.9"
+  resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
+  integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.0.3"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+
 "@prisma/client@^5.18.0":
   version "5.18.0"
   resolved "https://registry.npmjs.org/@prisma/client/-/client-5.18.0.tgz"
@@ -43,6 +68,103 @@
   dependencies:
     "@prisma/debug" "5.18.0"
 
+"@tsconfig/node10@^1.0.7":
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2"
+  integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==
+
+"@tsconfig/node12@^1.0.7":
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
+  integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
+
+"@tsconfig/node14@^1.0.0":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
+  integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
+
+"@tsconfig/node16@^1.0.2":
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
+  integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
+
+"@types/node@^22.3.0":
+  version "22.5.0"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.0.tgz#10f01fe9465166b4cab72e75f60d8b99d019f958"
+  integrity sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==
+  dependencies:
+    undici-types "~6.19.2"
+
+acorn-walk@^8.1.1:
+  version "8.3.3"
+  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e"
+  integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==
+  dependencies:
+    acorn "^8.11.0"
+
+acorn@^8.11.0, acorn@^8.4.1:
+  version "8.12.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248"
+  integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
+
+anymatch@~3.1.2:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+arg@^4.1.0:
+  version "4.1.3"
+  resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+  integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+binary-extensions@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
+  integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+braces@~3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
+  integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
+  dependencies:
+    fill-range "^7.1.1"
+
+chokidar@^3.5.2:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+  integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
 cors@^2.8.5:
   version "2.8.5"
   resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz"
@@ -51,11 +173,119 @@ cors@^2.8.5:
     object-assign "^4"
     vary "^1"
 
+create-require@^1.1.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
+  integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+
+debug@^4:
+  version "4.3.6"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b"
+  integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==
+  dependencies:
+    ms "2.1.2"
+
+diff@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+  integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
 dotenv@^16.4.5:
   version "16.4.5"
   resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz"
   integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
 
+fill-range@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
+  integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+fsevents@~2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+  integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+has-flag@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+  integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+ignore-by-default@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
+  integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==
+
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-glob@^4.0.1, is-glob@~4.0.1:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+make-error@^1.1.1:
+  version "1.3.6"
+  resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+  integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
+minimatch@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+nodemon@^3.1.4:
+  version "3.1.4"
+  resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.4.tgz#c34dcd8eb46a05723ccde60cbdd25addcc8725e4"
+  integrity sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==
+  dependencies:
+    chokidar "^3.5.2"
+    debug "^4"
+    ignore-by-default "^1.0.1"
+    minimatch "^3.1.2"
+    pstree.remy "^1.1.8"
+    semver "^7.5.3"
+    simple-update-notifier "^2.0.0"
+    supports-color "^5.5.0"
+    touch "^3.1.0"
+    undefsafe "^2.0.5"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
 object-assign@^4:
   version "4.1.1"
   resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
@@ -104,7 +334,7 @@ pg-types@^2.1.0:
     postgres-date "~1.0.4"
     postgres-interval "^1.1.0"
 
-pg@^8.12.0, pg@>=8.0:
+pg@^8.12.0:
   version "8.12.0"
   resolved "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz"
   integrity sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==
@@ -124,6 +354,11 @@ pgpass@1.x:
   dependencies:
     split2 "^4.1.0"
 
+picomatch@^2.0.4, picomatch@^2.2.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
 postgres-array@~2.0.0:
   version "2.0.0"
   resolved "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz"
@@ -146,23 +381,110 @@ postgres-interval@^1.1.0:
   dependencies:
     xtend "^4.0.0"
 
-prisma@*, prisma@^5.18.0:
+prettier@^3.3.3:
+  version "3.3.3"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105"
+  integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==
+
+prisma@^5.18.0:
   version "5.18.0"
   resolved "https://registry.npmjs.org/prisma/-/prisma-5.18.0.tgz"
   integrity sha512-+TrSIxZsh64OPOmaSgVPH7ALL9dfU0jceYaMJXsNrTkFHO7/3RANi5K2ZiPB1De9+KDxCWn7jvRq8y8pvk+o9g==
   dependencies:
     "@prisma/engines" "5.18.0"
 
+pstree.remy@^1.1.8:
+  version "1.1.8"
+  resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
+  integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
+
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
+semver@^7.5.3:
+  version "7.6.3"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
+  integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
+
+simple-update-notifier@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb"
+  integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==
+  dependencies:
+    semver "^7.5.3"
+
 split2@^4.1.0:
   version "4.2.0"
   resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz"
   integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
 
+supports-color@^5.5.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  dependencies:
+    has-flag "^3.0.0"
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+touch@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694"
+  integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==
+
+ts-node@^10.9.2:
+  version "10.9.2"
+  resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f"
+  integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==
+  dependencies:
+    "@cspotcode/source-map-support" "^0.8.0"
+    "@tsconfig/node10" "^1.0.7"
+    "@tsconfig/node12" "^1.0.7"
+    "@tsconfig/node14" "^1.0.0"
+    "@tsconfig/node16" "^1.0.2"
+    acorn "^8.4.1"
+    acorn-walk "^8.1.1"
+    arg "^4.1.0"
+    create-require "^1.1.0"
+    diff "^4.0.1"
+    make-error "^1.1.1"
+    v8-compile-cache-lib "^3.0.1"
+    yn "3.1.1"
+
+typescript@^5.5.4:
+  version "5.5.4"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba"
+  integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==
+
+undefsafe@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
+  integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
+
 underscore@^1.13.1:
   version "1.13.7"
   resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz"
   integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==
 
+undici-types@~6.19.2:
+  version "6.19.8"
+  resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
+  integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
+
+v8-compile-cache-lib@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
+  integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
+
 vary@^1:
   version "1.1.2"
   resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
@@ -177,3 +499,8 @@ xtend@^4.0.0:
   version "4.0.2"
   resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
   integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+yn@3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
+  integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==