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

Merge branch 'feature/database' into 'main'

Initialization of database with PostgreSQL and Sequelize

See merge request !1
parents 33b77ded 7bfe18df
Loading
Loading
Loading
Loading

.env

0 → 100644
+6 −0
Original line number Diff line number Diff line
PORT=5000
DB_NAME=Shelf_note
DB_USER=postgres
DB_PASSWORD=xoxo2002!
DB_HOST=localhost
DB_PORT=5432
 No newline at end of file

.gitignore

0 → 100644
+30 −0
Original line number Diff line number Diff line
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
.DS_Store
dist
dist-ssr
coverage
*.local

/cypress/videos/
/cypress/screenshots/

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

*.tsbuildinfo
+42 −0
Original line number Diff line number Diff line
import HomeService from "../services/homeService.js";

class HomeController {
    async getEntities() {
        try {
            return await HomeService.getEntities();
        } catch (error) {
            console.log(error);
            return error;
        }
    }
    async createEntity(req) {
        try {
            return await HomeService.createEntity(req.body);
        } catch (error) {
            console.log(error);
        }
    }
    async editEntity(req) {
        try {
            return await HomeService.editEntity(req.body);
        } catch (error) {
            console.log(error);
        }
    }
    async deleteEntity(req) {
        try {
            return await HomeService.deleteEntity(req.body);
        } catch (error) {
            console.log(error);
        }
    }
    async changeOrderEntity(req) {
        try {
            return await HomeService.changeOrderEntity(req.body);
        } catch (error) {
            console.log(error);
        }
    }
}

export default new HomeController;
 No newline at end of file

db.js

0 → 100644
+12 −0
Original line number Diff line number Diff line
import { Sequelize } from 'sequelize';

export const sequelize = new Sequelize(
    process.env.DB_NAME,
    process.env.DB_USER,
    process.env.DB_PASSWORD,
    {
        dialect: 'postgres',
        host: process.env.DB_HOST,
        port: process.env.DB_PORT,
    }
)
 No newline at end of file

index.js

0 → 100644
+76 −0
Original line number Diff line number Diff line
import 'dotenv/config';
import {WebSocketServer} from "ws";
import HomeController from "./controllers/homeController.js";
import {sequelize} from "./db.js";
import { Home_entity, User } from "./models/index.js";

const PORT = process.env.PORT || 5000;

const users = new Set();

const wss = new WebSocketServer({
    port: PORT
}, () => console.log(`Started listen on port ${PORT}`))

wss.on('connection', (ws) => {
    users.add(ws);
    ws.id = Date.now();
    ws.on('message', async (req) => {
        req = JSON.parse(req);
        switch (req.event) {
            case 'getHomeEntities':
                const getHomeEntitiesData = await HomeController.getEntities();
                wss.clients.forEach((client) => {
                    client.send(JSON.stringify({event: 'getHomeEntities', data: getHomeEntitiesData}))
                });
                break;
            case 'createHomeEntity':
                const createdHomeEntity = await HomeController.createEntity(req);
                    wss.clients.forEach((client) => {
                    client.send(JSON.stringify({
                        event: 'createHomeEntity',
                        data: createdHomeEntity
                    }));
                });
                break;
            case 'editHomeEntity':
                const editedHomeEntity = await HomeController.editEntity(req);
                wss.clients.forEach((client) => {
                    client.send(JSON.stringify({
                        event: 'editHomeEntity',
                        data: editedHomeEntity
                    }));
                });
                break;
            case 'deleteHomeEntity':
                const deletedHomeEntity = await HomeController.deleteEntity(req);
                wss.clients.forEach((client) => {
                    client.send(JSON.stringify({
                        event: 'deleteHomeEntity',
                        data: deletedHomeEntity
                    }));
                });
                break;
            case 'changeOrderHomeEntity':
                await HomeController.changeOrderEntity(req);
                wss.clients.forEach((client) => {
                    client.send(JSON.stringify({
                        event: 'changeOrderHomeEntity',
                        data: {...req.body}
                    }));
                });
                break;
        }
    })
})

const start = async () => {
    try {
        await sequelize.authenticate();
        await sequelize.sync();
    } catch (error) {
        console.log(error)
    }
}

await start();
 No newline at end of file
Loading