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

Merge branch 'feature/database' into 'main'

Initialization of database with PostgreSQL and Sequelize

See merge request !1
parents 33b77ded 7bfe18df
No related branches found
No related tags found
1 merge request!1Initialization of database with PostgreSQL and Sequelize
.env 0 → 100644
PORT=5000
DB_NAME=Shelf_note
DB_USER=postgres
DB_PASSWORD=xoxo2002!
DB_HOST=localhost
DB_PORT=5432
\ No newline at end of file
# 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
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
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
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
import {sequelize} from "../db.js";
import {DataTypes} from "sequelize";
const User = sequelize.define('user', {
user_uuid: { type: DataTypes.UUID, allowNull: false },
nick_name: { type: DataTypes.STRING, primaryKey: true },
first_name: { type: DataTypes.STRING },
middle_name: { type: DataTypes.STRING },
last_name: { type: DataTypes.STRING },
email: { type: DataTypes.STRING },
phone_number: { type: DataTypes.STRING },
settings: { type: DataTypes.JSON }
})
const Home_entity = sequelize.define('homeEntity', {
entity_uuid: { type: DataTypes.UUID, primaryKey: true },
entity_order: { type: DataTypes.INTEGER, allowNull: false, autoIncrement: true },
entity_type: { type: DataTypes.STRING, allowNull: false },
title: { type: DataTypes.STRING },
text: { type: DataTypes.TEXT },
image_data: { type: DataTypes.TEXT },
image_width: { type: DataTypes.INTEGER },
image_height: { type: DataTypes.INTEGER },
image_position: { type: DataTypes.STRING },
table_columns: { type: DataTypes.JSON },
table_data: { type: DataTypes.JSON },
})
Home_entity.belongsTo(User, { foreignKey: 'nick_name' });
export { User, Home_entity };
\ No newline at end of file
{
"name": "ShelfNote_backend",
"version": "1.0.0",
"main": "index.js",
"repository": "https://gl.iqdev.team/d.malygin/shelfnote_backend",
"author": "Дмитрий Малюгин <d.malygin@iqdev.digital>",
"license": "MIT",
"type": "module",
"scripts": {
"start": "nodemon index.js"
},
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^16.4.5",
"pg": "^8.12.0",
"pg-hstore": "^2.3.4",
"sequelize": "^6.37.3",
"ws": "^8.18.0"
},
"devDependencies": {
"nodemon": "^3.1.4"
}
}
import {Home_entity} from "../models/index.js";
class HomeService {
async getEntities() {
return await Home_entity.findAll({
order: [
['entity_order', 'ASC']
]
});
}
async createEntity(body) {
return Home_entity.create(body);
}
async editEntity(body) {
return Home_entity.upsert({...body});
}
async deleteEntity(body) {
const deletedEntity = await Home_entity.findOne({
where: {
entity_uuid: body.entity_uuid
}
})
await Home_entity.destroy({
where: {
entity_uuid: body.entity_uuid
}
});
return deletedEntity;
}
async changeOrderEntity(body) {
const allEntities = await Home_entity.findAll({
order: [
['entity_order', 'ASC']
]
});
const currentEntity = allEntities.find(entity => entity.entity_uuid === body.entity_uuid);
console.log('currentEntity: ', currentEntity);
const nextEntity = body.direction === 'up'
? allEntities
.reverse()
.find(entity => entity.entity_order < currentEntity.entity_order)
: allEntities
.find(entity => entity.entity_order > currentEntity.entity_order);
console.log('nextEntity: ', nextEntity);
await Home_entity.update({
entity_order: nextEntity.entity_order,
}, {
where: {
entity_uuid: currentEntity.entity_uuid
}
});
// await Home_entity.upsert({...currentEntity, entity_order: nextEntity.entity_order});
await Home_entity.update({
entity_order: currentEntity.entity_order,
}, {
where: {
entity_uuid: nextEntity.entity_uuid
}
});
// await Home_entity.upsert({...nextEntity, entity_order: currentEntity.entity_order});
return body;
}
}
export default new HomeService;
\ No newline at end of file
yarn.lock 0 → 100644
This diff is collapsed.
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