Showing
11 changed files
with
321 additions
and
5 deletions
| 1 | const bcrypt = require('bcrypt') | 1 | const bcrypt = require('bcrypt') |
| 2 | 2 | ||
| 3 | -const { sequelize, Sequelize, User, Group} = require('../models') | 3 | +const { sequelize, Sequelize, User} = require('../models') |
| 4 | const { sendResponse, sendError } = require('../utils/response') | 4 | const { sendResponse, sendError } = require('../utils/response') |
| 5 | const { logging } = require('../utils/log') | 5 | const { logging } = require('../utils/log') |
| 6 | const { checkRequiredExist, setValues } = require('../utils/validation') | 6 | const { checkRequiredExist, setValues } = require('../utils/validation') | ... | ... |
| 1 | +'use strict'; | ||
| 2 | +module.exports = { | ||
| 3 | + up: async (queryInterface, Sequelize) => { | ||
| 4 | + await queryInterface.createTable('Dockerfiles', { | ||
| 5 | + id: { | ||
| 6 | + autoIncrement: true, | ||
| 7 | + primaryKey: true, | ||
| 8 | + type: Sequelize.INTEGER | ||
| 9 | + }, | ||
| 10 | + userId: { | ||
| 11 | + allowNull: false, | ||
| 12 | + type: Sequelize.INTEGER | ||
| 13 | + }, | ||
| 14 | + filepath: { | ||
| 15 | + allowNull: false, | ||
| 16 | + type: Sequelize.STRING, | ||
| 17 | + }, | ||
| 18 | + content: { | ||
| 19 | + allowNull: false, | ||
| 20 | + type: Sequelize.TEXT('long'), | ||
| 21 | + }, | ||
| 22 | + createdAt: { | ||
| 23 | + allowNull: false, | ||
| 24 | + type: Sequelize.DATE | ||
| 25 | + }, | ||
| 26 | + updatedAt: { | ||
| 27 | + allowNull: false, | ||
| 28 | + type: Sequelize.DATE | ||
| 29 | + } | ||
| 30 | + },{ | ||
| 31 | + charset: 'utf8mb4', | ||
| 32 | + collate: 'utf8mb4_unicode_ci' | ||
| 33 | + }) | ||
| 34 | + }, | ||
| 35 | + down: async (queryInterface, Sequelize) => { | ||
| 36 | + await queryInterface.dropTable('Dockerfiles'); | ||
| 37 | + } | ||
| 38 | +}; |
backend/migrations/20210609175315-image.js
0 → 100644
| 1 | +'use strict'; | ||
| 2 | +module.exports = { | ||
| 3 | + up: async (queryInterface, Sequelize) => { | ||
| 4 | + await queryInterface.createTable('Images', { | ||
| 5 | + id: { | ||
| 6 | + autoIncrement: true, | ||
| 7 | + primaryKey: true, | ||
| 8 | + type: Sequelize.INTEGER | ||
| 9 | + }, | ||
| 10 | + dockerfileId: { | ||
| 11 | + allowNull: false, | ||
| 12 | + type: Sequelize.INTEGER, | ||
| 13 | + onDelete: 'CASCADE', | ||
| 14 | + references: { | ||
| 15 | + model: 'Dockerfiles', | ||
| 16 | + key: 'id' | ||
| 17 | + } | ||
| 18 | + }, | ||
| 19 | + name: { | ||
| 20 | + allowNull: false, | ||
| 21 | + type: Sequelize.STRING(255), | ||
| 22 | + }, | ||
| 23 | + createdAt: { | ||
| 24 | + allowNull: false, | ||
| 25 | + type: Sequelize.DATE | ||
| 26 | + }, | ||
| 27 | + updatedAt: { | ||
| 28 | + allowNull: false, | ||
| 29 | + type: Sequelize.DATE | ||
| 30 | + } | ||
| 31 | + },{ | ||
| 32 | + charset: 'utf8mb4', | ||
| 33 | + collate: 'utf8mb4_unicode_ci' | ||
| 34 | + }) | ||
| 35 | + }, | ||
| 36 | + down: async (queryInterface, Sequelize) => { | ||
| 37 | + await queryInterface.dropTable('Images'); | ||
| 38 | + } | ||
| 39 | +}; |
| 1 | +'use strict'; | ||
| 2 | +module.exports = { | ||
| 3 | + up: async (queryInterface, Sequelize) => { | ||
| 4 | + await queryInterface.createTable('Containers', { | ||
| 5 | + id: { | ||
| 6 | + autoIncrement: true, | ||
| 7 | + primaryKey: true, | ||
| 8 | + type: Sequelize.INTEGER | ||
| 9 | + }, | ||
| 10 | + imageId: { | ||
| 11 | + allowNull: false, | ||
| 12 | + type: Sequelize.INTEGER, | ||
| 13 | + onDelete: 'CASCADE', | ||
| 14 | + references: { | ||
| 15 | + model: 'Images', | ||
| 16 | + key: 'id' | ||
| 17 | + } | ||
| 18 | + }, | ||
| 19 | + name: { | ||
| 20 | + allowNull: false, | ||
| 21 | + type: Sequelize.STRING(255), | ||
| 22 | + }, | ||
| 23 | + command: { | ||
| 24 | + type: Sequelize.TEXT('long') | ||
| 25 | + }, | ||
| 26 | + description: { | ||
| 27 | + type: Sequelize.TEXT('long') | ||
| 28 | + }, | ||
| 29 | + createdAt: { | ||
| 30 | + allowNull: false, | ||
| 31 | + type: Sequelize.DATE | ||
| 32 | + }, | ||
| 33 | + updatedAt: { | ||
| 34 | + allowNull: false, | ||
| 35 | + type: Sequelize.DATE | ||
| 36 | + } | ||
| 37 | + },{ | ||
| 38 | + charset: 'utf8mb4', | ||
| 39 | + collate: 'utf8mb4_unicode_ci' | ||
| 40 | + }) | ||
| 41 | + }, | ||
| 42 | + down: async (queryInterface, Sequelize) => { | ||
| 43 | + await queryInterface.dropTable('Containers'); | ||
| 44 | + } | ||
| 45 | +}; |
backend/migrations/20210609183220-port.js
0 → 100644
| 1 | +'use strict'; | ||
| 2 | +module.exports = { | ||
| 3 | + up: async (queryInterface, Sequelize) => { | ||
| 4 | + await queryInterface.createTable('Ports', { | ||
| 5 | + id: { | ||
| 6 | + autoIncrement: true, | ||
| 7 | + primaryKey: true, | ||
| 8 | + type: Sequelize.INTEGER | ||
| 9 | + }, | ||
| 10 | + ContainerId: { | ||
| 11 | + allowNull: false, | ||
| 12 | + type: Sequelize.INTEGER, | ||
| 13 | + onDelete: 'CASCADE', | ||
| 14 | + references: { | ||
| 15 | + model: 'Containers', | ||
| 16 | + key: 'id' | ||
| 17 | + } | ||
| 18 | + }, | ||
| 19 | + innerPort: { | ||
| 20 | + allowNull: false, | ||
| 21 | + type: Sequelize.INTEGER | ||
| 22 | + }, | ||
| 23 | + outerPort: { | ||
| 24 | + allowNull: false, | ||
| 25 | + type: Sequelize.INTEGER | ||
| 26 | + }, | ||
| 27 | + description: { | ||
| 28 | + type: Sequelize.TEXT('long') | ||
| 29 | + }, | ||
| 30 | + createdAt: { | ||
| 31 | + allowNull: false, | ||
| 32 | + type: Sequelize.DATE | ||
| 33 | + }, | ||
| 34 | + updatedAt: { | ||
| 35 | + allowNull: false, | ||
| 36 | + type: Sequelize.DATE | ||
| 37 | + } | ||
| 38 | + },{ | ||
| 39 | + charset: 'utf8mb4', | ||
| 40 | + collate: 'utf8mb4_unicode_ci' | ||
| 41 | + }) | ||
| 42 | + }, | ||
| 43 | + down: async (queryInterface, Sequelize) => { | ||
| 44 | + await queryInterface.dropTable('Ports'); | ||
| 45 | + } | ||
| 46 | +}; |
backend/models/container.js
0 → 100644
| 1 | +'use strict' | ||
| 2 | +const { Model } = require('sequelize') | ||
| 3 | + | ||
| 4 | +module.exports = (sequelize, DataTypes) => { | ||
| 5 | + class Container extends Model { | ||
| 6 | + static associate(models) { | ||
| 7 | + this.belongsTo(models.Image, { | ||
| 8 | + foreignKey: "imageId", | ||
| 9 | + onDelete: 'CASCADE' | ||
| 10 | + }) | ||
| 11 | + this.hasMany(models.Port) | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + Container.init({ | ||
| 15 | + id: { | ||
| 16 | + type: DataTypes.INTEGER, | ||
| 17 | + primaryKey: true, | ||
| 18 | + autoIncrement: true | ||
| 19 | + }, | ||
| 20 | + imageId: { | ||
| 21 | + allowNull: false, | ||
| 22 | + type: DataTypes.INTEGER | ||
| 23 | + }, | ||
| 24 | + name: { | ||
| 25 | + allowNull: false, | ||
| 26 | + type: DataTypes.STRING(255) | ||
| 27 | + }, | ||
| 28 | + command: { | ||
| 29 | + type: DataTypes.TEXT('long') | ||
| 30 | + }, | ||
| 31 | + description: { | ||
| 32 | + type: DataTypes.TEXT('long') | ||
| 33 | + } | ||
| 34 | + }, { | ||
| 35 | + sequelize, | ||
| 36 | + modelName: 'Container' | ||
| 37 | + }) | ||
| 38 | + return Container | ||
| 39 | +} |
backend/models/dockerfile.js
0 → 100644
| 1 | +'use strict' | ||
| 2 | +const { Model } = require('sequelize') | ||
| 3 | + | ||
| 4 | +module.exports = (sequelize, DataTypes) => { | ||
| 5 | + class Dockerfile extends Model { | ||
| 6 | + static associate(models) { | ||
| 7 | + this.belongsTo(models.User, { | ||
| 8 | + foreignKey: "userId" | ||
| 9 | + }) | ||
| 10 | + this.hasMany(models.Image) | ||
| 11 | + } | ||
| 12 | + } | ||
| 13 | + Dockerfile.init({ | ||
| 14 | + id: { | ||
| 15 | + type: DataTypes.INTEGER, | ||
| 16 | + primaryKey: true, | ||
| 17 | + autoIncrement: true | ||
| 18 | + }, | ||
| 19 | + userId: { | ||
| 20 | + allowNull: false, | ||
| 21 | + type: DataTypes.INTEGER | ||
| 22 | + }, | ||
| 23 | + filepath: { | ||
| 24 | + allowNull: false, | ||
| 25 | + type: DataTypes.STRING | ||
| 26 | + }, | ||
| 27 | + content: { | ||
| 28 | + allowNull: false, | ||
| 29 | + type: DataTypes.TEXT('long') | ||
| 30 | + } | ||
| 31 | + }, { | ||
| 32 | + sequelize, | ||
| 33 | + modelName: 'Dockerfile' | ||
| 34 | + }) | ||
| 35 | + return Dockerfile | ||
| 36 | +} |
backend/models/image.js
0 → 100644
| 1 | +'use strict' | ||
| 2 | +const { Model } = require('sequelize') | ||
| 3 | + | ||
| 4 | +module.exports = (sequelize, DataTypes) => { | ||
| 5 | + class Image extends Model { | ||
| 6 | + static associate(models) { | ||
| 7 | + this.belongsTo(models.Dockerfile, { | ||
| 8 | + foreignKey: "dockerfileId", | ||
| 9 | + onDelete: 'CASCADE' | ||
| 10 | + }) | ||
| 11 | + this.hasMany(models.Container) | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + Image.init({ | ||
| 15 | + id: { | ||
| 16 | + type: DataTypes.INTEGER, | ||
| 17 | + primaryKey: true, | ||
| 18 | + autoIncrement: true | ||
| 19 | + }, | ||
| 20 | + dockerfileId: { | ||
| 21 | + allowNull: false, | ||
| 22 | + type: DataTypes.INTEGER | ||
| 23 | + }, | ||
| 24 | + name: { | ||
| 25 | + allowNull: false, | ||
| 26 | + type: DataTypes.STRING(255) | ||
| 27 | + } | ||
| 28 | + }, { | ||
| 29 | + sequelize, | ||
| 30 | + modelName: 'Image' | ||
| 31 | + }) | ||
| 32 | + return Image | ||
| 33 | +} |
| 1 | 'use strict' | 1 | 'use strict' |
| 2 | -const { sequelize } = require('.') | ||
| 3 | const { Model } = require('sequelize') | 2 | const { Model } = require('sequelize') |
| 4 | module.exports = (sequelize, DataTypes) => { | 3 | module.exports = (sequelize, DataTypes) => { |
| 5 | class Log extends Model {} | 4 | class Log extends Model {} | ... | ... |
backend/models/port.js
0 → 100644
| 1 | +'use strict' | ||
| 2 | +const { Model } = require('sequelize') | ||
| 3 | + | ||
| 4 | +module.exports = (sequelize, DataTypes) => { | ||
| 5 | + class Port extends Model { | ||
| 6 | + static associate(models) { | ||
| 7 | + this.belongsTo(models.Container, { | ||
| 8 | + foreignKey: "ContainerId", | ||
| 9 | + onDelete: 'CASCADE' | ||
| 10 | + }) | ||
| 11 | + } | ||
| 12 | + } | ||
| 13 | + Port.init({ | ||
| 14 | + id: { | ||
| 15 | + type: DataTypes.INTEGER, | ||
| 16 | + primaryKey: true, | ||
| 17 | + autoIncrement: true | ||
| 18 | + }, | ||
| 19 | + ContainerId: { | ||
| 20 | + allowNull: false, | ||
| 21 | + type: DataTypes.INTEGER | ||
| 22 | + }, | ||
| 23 | + innerPort: { | ||
| 24 | + allowNull: false, | ||
| 25 | + type: DataTypes.INTEGER | ||
| 26 | + }, | ||
| 27 | + outerPort: { | ||
| 28 | + allowNull: false, | ||
| 29 | + type: DataTypes.INTEGER | ||
| 30 | + }, | ||
| 31 | + description: { | ||
| 32 | + type: DataTypes.TEXT('long') | ||
| 33 | + } | ||
| 34 | + }, { | ||
| 35 | + sequelize, | ||
| 36 | + modelName: 'Port' | ||
| 37 | + }) | ||
| 38 | + return Port | ||
| 39 | +} |
| 1 | 'use strict' | 1 | 'use strict' |
| 2 | -const { sequelize } = require('.') | ||
| 3 | const { Model } = require('sequelize') | 2 | const { Model } = require('sequelize') |
| 4 | module.exports = (sequelize, DataTypes) => { | 3 | module.exports = (sequelize, DataTypes) => { |
| 5 | - class User extends Model { } | 4 | + class User extends Model { |
| 5 | + static associate(models) { | ||
| 6 | + this.hasMany(models.Dockerfile) | ||
| 7 | + } | ||
| 8 | + } | ||
| 6 | 9 | ||
| 7 | User.init({ | 10 | User.init({ |
| 8 | id: { | 11 | id: { |
| ... | @@ -36,6 +39,5 @@ module.exports = (sequelize, DataTypes) => { | ... | @@ -36,6 +39,5 @@ module.exports = (sequelize, DataTypes) => { |
| 36 | paranoid: true, | 39 | paranoid: true, |
| 37 | modelName: 'User' | 40 | modelName: 'User' |
| 38 | }) | 41 | }) |
| 39 | - | ||
| 40 | return User | 42 | return User |
| 41 | } | 43 | } | ... | ... |
-
Please register or login to post a comment