diff --git a/backend-api/.env.sample.dev b/backend-api/.env.sample.dev index 1526fa8..d0ed9e8 100644 --- a/backend-api/.env.sample.dev +++ b/backend-api/.env.sample.dev @@ -7,3 +7,4 @@ DB_NAME='vanillameta' CORS_ORIGIN='*' +api propertyfile fix \ No newline at end of file diff --git a/backend-api/Dockerfile b/backend-api/Dockerfile new file mode 100644 index 0000000..43929c1 --- /dev/null +++ b/backend-api/Dockerfile @@ -0,0 +1,24 @@ +FROM ubuntu:18.04 + +RUN apt-get -qq update +RUN apt-get -qq upgrade --yes +RUN apt-get -qq install curl --yes +RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - +RUN apt-get -qq install nodejs --yes + +RUN apt-get install chromium-browser --yes + +WORKDIR /app + +COPY package*.json ./ +RUN npm install + +COPY . . +COPY tsconfig.json . +COPY tsconfig.build.json . + +RUN npm run build + +EXPOSE 3000 + +CMD ["npm", "run", "start"] diff --git a/backend-api/db/conf.d/my.cnf b/backend-api/db/conf.d/my.cnf new file mode 100644 index 0000000..85344c6 --- /dev/null +++ b/backend-api/db/conf.d/my.cnf @@ -0,0 +1,7 @@ + + +[client] +default-character-set = utf8mb4 + +[mysql] +default-character-set = utf8mb4 diff --git a/backend-api/docker-compose.yml b/backend-api/docker-compose.yml new file mode 100644 index 0000000..f8fd5ae --- /dev/null +++ b/backend-api/docker-compose.yml @@ -0,0 +1,131 @@ +version: "3.7" +services: + main: + build: + context: ./ + dockerfile: ./Dockerfile + ports: + - "4000:4000" + networks: + - vanillameta + depends_on: + - mysql +# - pg + links: + - "mysql:mysqldb" +# - "pg" + env_file: + - .env + - .env.dev + restart: always + + mysql: + container_name: vanillameta_mysql + image: mysql + ports: + - "3306:3306" + networks: + - vanillameta + + environment: + MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} + MYSQL_CHARSET: utf8mb4 + MYSQL_DATABASE: ${DB_NAME} + MYSQL_USER: ${DB_USERNAME} + MYSQL_PASSWORD: ${DB_PASSWORD} + TZ: Asia/Seoul + restart: always + command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + --default_authentication_plugin=mysql_native_password + + volumes: + - mysql:/var/lib/mysql + - ./db/conf.d:/etc/mysql/conf.d + + # mariadb: + # container_name: vanillameta_mariadb + # extra_hosts: + # - "host.docker.internal:host-gateway" + # image: mariadb + # ports: + # - "3308:3308" + # networks: + # - vanillameta + # environment: + # MYSQL_ROOT_PASSWORD: 'strongpassword' + # MYSQL_CHARSET: utf8mb4 + # MYSQL_DATABASE: ${DB_NAME} + # MYSQL_USER: ${DB_USERNAME} + # MYSQL_PASSWORD: ${DB_PASSWORD} + # TZ: Asia/Seoul + # restart: always + # volumes: + # - ./db:/var/lib/maria + +# pg: +# container_name: vanillameta_pg +# image: postgres +# ports: +# - "5432:5432" +# networks: +# - vanillameta +# environment: +# POSTGRES_ROOT_PASSWORD: 'strongpassword' +# POSTGRES_CHARSET: utf8mb4 +# POSTGRES_DATABASE: ${DB_NAME} +# POSTGRES_USER: ${DB_USERNAME} +# POSTGRES_PASSWORD: ${DB_PASSWORD} +# POSTGRES_HOST_AUTH_METHOD: "trust" +# TZ: Asia/Seoul +# restart: always +# # command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci +# volumes: +# - mysql:/var/lib/mysql +# - ./db/conf.d:/etc/porstgressql/data + + +# oracledb: +# container_name: vanillameta_oracle +# image: oracleinanutshell/oracle-xe-11g +# ports: +# - "1521:1521" +# networks: +# - vanillameta +# environment: +# ORACLE_CHARSET: utf8mb4 +# ORACLE_DATABASE: ${DB_NAME} +# ORACLE_USER: ${DB_USERNAME} +# ORACLE_PASSWORD: ${DB_PASSWORD} +# TZ: Asia/Seoul +# restart: always +# # command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci +# volumes: +# - mysql:/var/lib/mysql +# - ./db/conf.d:/etc/porstgressql/data + + +# +# mssql: +# container_name: vanillameta_mssql +# image: mcr.microsoft.com/azure-sql-edge +# ports: +# - "1433:1433" +# networks: +# - vanillameta +# environment: +# ACCEPT_EULA: "Y" +# MSSQL_SA_PASSWORD: ${DB_PASSWORD} +# MSSQL_AGENT_ENABLED: "true" +# restart: always +# command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci +# +# volumes: +# - ./vanillameta_mssqldata:/var/opt/mssql +# +# - ./db/conf.d:/etc/mysql/conf.d + +volumes: + mysql: +networks: + vanillameta: + diff --git a/backend-api/instantclient-basic-macos.x64-19.8.0.0.0dbru.dmg b/backend-api/instantclient-basic-macos.x64-19.8.0.0.0dbru.dmg new file mode 100644 index 0000000..94b90a6 Binary files /dev/null and b/backend-api/instantclient-basic-macos.x64-19.8.0.0.0dbru.dmg differ diff --git a/backend-api/package.json b/backend-api/package.json index 5934232..98fc1a2 100644 --- a/backend-api/package.json +++ b/backend-api/package.json @@ -44,6 +44,7 @@ "class-validator": "^0.13.2", "cookie-parser": "^1.4.5", "cross-env": "^7.0.3", + "dylib-node": "^1.0.10", "js-joda": "^1.11.0", "knex": "^2.3.0", "knex-bigquery": "^2.0.3", diff --git a/backend-api/src/app.module.ts b/backend-api/src/app.module.ts index a16868d..b57b6ae 100644 --- a/backend-api/src/app.module.ts +++ b/backend-api/src/app.module.ts @@ -25,13 +25,12 @@ import { ConnectionModule } from './connection/connection.module'; username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, - // type: 'sqlite', - // database: 'vanillameta', autoLoadEntities: true, entities: [__dirname + '/**/*.entity{.ts,.js}'], synchronize: false, logging: process.env.NODE_ENV == 'dev', - retryAttempts: 1, + retryAttempts: 1 + }), DatabaseModule, DatasetModule, diff --git a/backend-api/src/connection/connection.service.ts b/backend-api/src/connection/connection.service.ts index 6b256d3..83fafd0 100644 --- a/backend-api/src/connection/connection.service.ts +++ b/backend-api/src/connection/connection.service.ts @@ -7,6 +7,7 @@ import { Database } from '../database/entities/database.entity'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { ResponseStatus } from '../common/enum/response-status.enum'; +import { oracledb } from 'oracledb' const knexConnections = new Map(); @@ -66,10 +67,10 @@ export class ConnectionService { useNullAsDefault: true, }; createDatabaseDto.connectionConfig = JSON.stringify(connectionConfig); - let _knex: Knex; let returnObj = {}; try { + console.log(connectionConfig) _knex = knex(connectionConfig as Knex.Config); } catch (e) { console.log('knex not connected'); @@ -101,14 +102,56 @@ export class ConnectionService { const fields = []; const resultObj = { status: ResponseStatus.SUCCESS, message: 'success', datas: [], fields: [] }; + + try { const queryRes = await knex.raw(queryExecuteDto.query); switch (knex.client.config.client) { - case 'mysql': - if (queryRes && queryRes.length > 0) { + case 'mysql2': + if (queryRes && queryRes[0].length > 0) { + datas = queryRes[0]; const tempFields = queryRes[1]; + tempFields.map(field => { + const fieldInfo = { + columnName: field.name, + columnLength: field._tableLength, + columnType: FieldTypeUtil.mysqlFieldType(field.columnType), + }; + fields.push(fieldInfo); + + }); + break; + } + + case 'pg': + if (queryRes && queryRes.rows.length > 0) { + + datas = queryRes.rows; + const tempFields = queryRes.fields; + tempFields.map(field => { + const fieldInfo = { + columnName: field.name, + columnLength: field.length, + columnType: FieldTypeUtil.mysqlFieldType(field.type), + }; + fields.push(fieldInfo); + }); + break; + } + + + + + case 'mssql': + if (queryRes && queryRes.length > 0) { + + datas = queryRes; + for(let i = 0; i < Object.keys(queryRes[0]).length; i ++){ + console.log(Object.keys[i]) + } + const tempFields = queryRes; tempFields.map(field => { const fieldInfo = { columnName: field.name, @@ -118,7 +161,8 @@ export class ConnectionService { fields.push(fieldInfo); }); } - } + break; + } resultObj.datas = datas; resultObj.fields = fields; @@ -129,6 +173,7 @@ export class ConnectionService { console.log(e.sqlMessage); } + return resultObj; } } diff --git a/backend-api/src/main.ts b/backend-api/src/main.ts index 5c62abe..2c27644 100644 --- a/backend-api/src/main.ts +++ b/backend-api/src/main.ts @@ -20,4 +20,4 @@ const expressApp = express(); await app.listen(4000); } -bootstrap(); +bootstrap(); \ No newline at end of file diff --git a/frontend-web/.env.development b/frontend-web/.env.development index 6214749..db79063 100644 --- a/frontend-web/.env.development +++ b/frontend-web/.env.development @@ -1 +1 @@ -REACT_APP_API_URL='http://localhost:4000' \ No newline at end of file +REACT_APP_API_URL='http://localhost_dev:4000' \ No newline at end of file diff --git a/identifier.sqlite b/identifier.sqlite new file mode 100644 index 0000000..e69de29