# Реалізація інформаційного та програмного забезпечення

В рамках проекту розробляється:

# SQL-скрипт для створення на початкового наповнення бази даних:

-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`users`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`users` (
  `user_id` INT NOT NULL,
  `user_name` VARCHAR(45) NOT NULL,
  `user_email` VARCHAR(45) NOT NULL,
  `user_psswd` VARCHAR(45) NOT NULL,
  `isAdmin` VARCHAR(45) NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC) VISIBLE,
  UNIQUE INDEX `user_email_UNIQUE` (`user_email` ASC) VISIBLE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`markdown_NER`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`markdown_NER` (
  `markdown_id` INT NOT NULL,
  `partials_ready` VARCHAR(45) NULL,
  `partials_not_ready` VARCHAR(45) NULL,
  `markdown_status` INT NULL,
  PRIMARY KEY (`markdown_id`),
  UNIQUE INDEX `markdown_id_UNIQUE` (`markdown_id` ASC) VISIBLE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`markdown_SEMANTIC`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`markdown_SEMANTIC` (
  `markdown_id` INT NOT NULL,
  `partials_ready` VARCHAR(45) NULL,
  `partials_not_ready` VARCHAR(45) NULL,
  `markdown_status` INT NULL,
  PRIMARY KEY (`markdown_id`),
  UNIQUE INDEX `markdown_id_UNIQUE` (`markdown_id` ASC) VISIBLE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`markdown_INTENTION`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`markdown_INTENTION` (
  `markdown_id` INT NOT NULL,
  `partials_ready` VARCHAR(45) NULL,
  `partials_not_ready` VARCHAR(45) NULL,
  `markdown_status` INT NULL,
  PRIMARY KEY (`markdown_id`),
  UNIQUE INDEX `markdown_id_UNIQUE` (`markdown_id` ASC) VISIBLE)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`branch`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`branch` (
  `branch_id` INT NOT NULL,
  `editor_id` INT NULL,
  `NER` INT NOT NULL,
  `SEMANTIC` INT NOT NULL,
  `INTENTION` INT NOT NULL,
  PRIMARY KEY (`branch_id`),
  INDEX `editor_idx` (`editor_id` ASC) VISIBLE,
  INDEX `NER_idx` (`NER` ASC) VISIBLE,
  INDEX `SEMANTIC_idx` (`SEMANTIC` ASC) VISIBLE,
  INDEX `INTENTION_idx` (`INTENTION` ASC) VISIBLE,
  CONSTRAINT `editor`
    FOREIGN KEY (`editor_id`)
    REFERENCES `mydb`.`users` (`user_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `NER`
    FOREIGN KEY (`NER`)
    REFERENCES `mydb`.`markdown_NER` (`markdown_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `SEMANTIC`
    FOREIGN KEY (`SEMANTIC`)
    REFERENCES `mydb`.`markdown_SEMANTIC` (`markdown_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `INTENTION`
    FOREIGN KEY (`INTENTION`)
    REFERENCES `mydb`.`markdown_INTENTION` (`markdown_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`files`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`files` (
  `file_id` INT NOT NULL,
  `file_name` VARCHAR(45) NOT NULL,
  `admin_id` INT NOT NULL,
  `branch1` INT NOT NULL,
  `branch2` INT NOT NULL,
  `original` VARCHAR(45) NOT NULL,
  `final_NER` VARCHAR(45) NULL,
  `final_SEMANTIC` VARCHAR(45) NULL,
  `final_INTENTION` VARCHAR(45) NULL,
  PRIMARY KEY (`file_id`),
  UNIQUE INDEX `file_id_UNIQUE` (`file_id` ASC) VISIBLE,
  INDEX `user_id_idx` (`admin_id` ASC) VISIBLE,
  INDEX `branch1_idx` (`branch1` ASC) VISIBLE,
  INDEX `branch2_idx` (`branch2` ASC) VISIBLE,
  CONSTRAINT `user_id`
    FOREIGN KEY (`admin_id`)
    REFERENCES `mydb`.`users` (`user_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `branch1`
    FOREIGN KEY (`branch1`)
    REFERENCES `mydb`.`branch` (`branch_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `branch2`
    FOREIGN KEY (`branch2`)
    REFERENCES `mydb`.`branch` (`branch_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

# EER модель

# RESTfull сервіс для управління даними

# Підключення до бази даних

  const mysql = require('mysql2');

  module.exports = mysql.createConnection({
    host: 'localhost',
    user: 'oleh',
    password: 'password',
    database: 'mydb'
  })  

# express.js-сервер

  const express = require('express');
  const db = require('./database');
  const bodyParser = require('body-parser');
  
  const app = express();
  const port = 5000;
  
  app.use(bodyParser.json());
  
  app.get('/', (req, res) => {
    db.query('SELECT * FROM files;', (err, files) => {
      if (err) {
        console.log(err);
        res.status(500).send(err);
        return;
      }
  
      if(files.length == 0) {
        res.status(201).json({
          message: "Table is empty"
        });
      }
  
      res.status(201).json({ data: files });
    })
  });
  
  app.get('/:id', (req, res) => {
    const {id} = req.params;
    console.log(id);
    db.query(`SELECT * FROM files WHERE file_id = ${id}`, (err, file) => {
      if (err) {
        console.log(err);
        res.status(500).send(err);
        return;
      }
  
      if (file.length == 0) {
        console.log('There is no file with such id');
        res.status(404).json({
          message: 'There is no file with such id'
        })
        return;
      }
      console.log(file);
      res.status(201).json({ data: file });
    });
  })
  
  app.post('/', (req, res) => {
    const {
      file_id,
      file_name,
      admin_id,
      branch1,
      branch2,
      original,
      final_NER,
      final_SEMANTIC,
      final_INTENTION
    } = req.body;
    if (
      file_id &&
      file_name &&
      admin_id &&
      branch1 &&
      branch2 &&
      original &&
      final_NER &&
      final_SEMANTIC &&
      final_INTENTION
    ) {
       db.query(`INSERT INTO files(file_id, file_name, admin_id, branch1, branch2, original, final_NER, final_SEMANTIC, final_INTENTION) VALUES("${file_id}", "${file_name}", "${admin_id}", "${branch1}", "${branch2}", "${original}", "${final_NER}", "${final_SEMANTIC}", "${final_INTENTION}")`, (err) => {
        console.log(err);
        res.status(500).json({
          error: err
        })
        return;
      });
  
      res.status(201).send({msg: 'Created User' });
    } else {
      console.log('Wrong data provided');
      res.json({
        error: 'Wrong data provided'
      });
    }
  })
  
  app.put('/:id', (req, res) => {
    const {id} = req.params;
    db.query(`SELECT * FROM files WHERE file_id = ${id}`, (err, [file]) => {
      if (err) {
        console.log(err);
        res.status(500).json({
          error: err
        })
        return;
      }
      
      if (!file) {
        res.status(500).json({ message: 'There is no such file'})
        console.log('There is no file with such id');
        return;
      }
  
      let query = "UPDATE files SET ";
  
      for (key of Object.keys(file)) {
        if (req.body[key]) {
          query += `${key} = '${req.body[key]}'`;
        }
      }
      query += `WHERE file_id = ${id}`;
      db.query(query, (err) => {
        if (err) {
          console.log(err);
          return;
        }
  
        res.status(201).send(`Changed lines ${Object.keys(req.body)} in file ${id}`);
      })
    }); 
  })
  
  app.delete('/:id', (req, res) => {
    const {id} = req.params;
  
    db.query(`SELECT * FROM files WHERE file_id = ${id}`, (err, file) => {
      if (err) {
        console.log(err);
        res.status(500).json({
          error: err
        })
        return;
      }
      if (file.length == 0) {
        res.status(404).json({ error: "There is no such user" });
        return;
      }

     db.query(`DELETE FROM files WHERE file_id = ${id}`, (err) => {
       if (err) {
          console.log(err);
          res.status(404).json({ error: err });
          return;
        }
        res.status(201).json({ message: `User ${id} deleted` });
      })
    })
  })
  
  app.listen(port, () => {
    console.log(`Server now listening on port ${port}`);
  })
Останнє оновлення: 1/5/2023, 5:24:53 PM