From e9786f9526b9a545b9f6d7240bbfb82d72124690 Mon Sep 17 00:00:00 2001 From: winningarc Date: Sat, 6 Feb 2021 00:07:08 +0900 Subject: [PATCH] database renaming --- package-lock.json | 6 +- package.json | 2 +- .../20200827230222-create-associations.js | 8 +- .../20201005191451-edit-petition.js | 4 +- .../20201008181206-create-post-tag.js | 55 +++++++++++++ src/database/models/Admin.js | 25 ++++++ src/database/models/Banner.js | 26 ++++++ src/database/models/Board.js | 3 +- src/database/models/Petition.js | 4 +- src/database/models/PostTag.js | 27 ++++++ src/database/models/Student.js | 8 +- src/database/models/payment.js | 2 +- src/database/models/post.js | 3 +- .../seeders/20201008201030-create-banners.js | 29 +++++++ .../20201009070902-create-post-tags.js | 82 +++++++++++++++++++ src/routes/auth/auth.ctrl.js | 4 +- src/routes/payments/payments.ctrl.js | 6 +- src/routes/petitions/petitions.ctrl.js | 20 +++-- src/routes/posts/posts.ctrl.js | 6 +- yarn.lock | 8 +- 20 files changed, 287 insertions(+), 41 deletions(-) create mode 100644 src/database/migrations/20201008181206-create-post-tag.js create mode 100644 src/database/models/Admin.js create mode 100644 src/database/models/Banner.js create mode 100644 src/database/models/PostTag.js create mode 100644 src/database/seeders/20201008201030-create-banners.js create mode 100644 src/database/seeders/20201009070902-create-post-tags.js diff --git a/package-lock.json b/package-lock.json index 2ccc8b2..54c5a85 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "yarn": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.4.tgz", - "integrity": "sha512-oYM7hi/lIWm9bCoDMEWgffW8aiNZXCWeZ1/tGy0DWrN6vmzjCXIKu2Y21o8DYVBUtiktwKcNoxyGl/2iKLUNGA==" + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.10.tgz", + "integrity": "sha512-IanQGI9RRPAN87VGTF7zs2uxkSyQSrSPsju0COgbsKQOOXr5LtcVPeyXWgwVa0ywG3d8dg6kSYKGBuYK021qeA==" } } } diff --git a/package.json b/package.json index f7d7a4f..0e12349 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "router": "^1.3.5", "sequelize": "^6.3.5", "swagger-jsdoc": "^4.0.0", - "yarn": "^1.22.4" + "yarn": "^1.22.10" }, "devDependencies": { "eslint": "^7.7.0" diff --git a/src/database/migrations/20200827230222-create-associations.js b/src/database/migrations/20200827230222-create-associations.js index 3677619..e460ca1 100644 --- a/src/database/migrations/20200827230222-create-associations.js +++ b/src/database/migrations/20200827230222-create-associations.js @@ -6,7 +6,7 @@ module.exports = { return queryInterface .addColumn( "Post", // name of Source model - "boardId", // name of the key we're adding + "BoardId", // name of the key we're adding { type: Sequelize.INTEGER, references: { @@ -37,7 +37,7 @@ module.exports = { // Student hasMany Payment return queryInterface.addColumn( "Payment", // name of Target model - "studentId", // name of the key we're adding + "StudentId", // name of the key we're adding { type: Sequelize.UUID, references: { @@ -56,7 +56,7 @@ module.exports = { return queryInterface .removeColumn( "Post", // name of Source model - "boardId" // key we want to remove + "BoardId" // key we want to remove ) .then(() => { // remove Student hasMany CancelRequest @@ -69,7 +69,7 @@ module.exports = { // remove Student hasMany Payment return queryInterface.removeColumn( "Payment", // name of the Target model - "studentId" // key we want to remove + "StudentId" // key we want to remove ); }); }, diff --git a/src/database/migrations/20201005191451-edit-petition.js b/src/database/migrations/20201005191451-edit-petition.js index 0f0f8d5..e19357f 100644 --- a/src/database/migrations/20201005191451-edit-petition.js +++ b/src/database/migrations/20201005191451-edit-petition.js @@ -4,7 +4,7 @@ module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.addColumn( "Petition", // name of Source model - "authorId", // name of the key we're adding + "StudentId", // name of the key we're adding { type: Sequelize.UUID, references: { @@ -18,6 +18,6 @@ module.exports = { }, down: async (queryInterface, Sequelize) => { - await queryInterface.removeColumn("Petition", "authorId"); + await queryInterface.removeColumn("Petition", "StudentId"); }, }; diff --git a/src/database/migrations/20201008181206-create-post-tag.js b/src/database/migrations/20201008181206-create-post-tag.js new file mode 100644 index 0000000..bba5dec --- /dev/null +++ b/src/database/migrations/20201008181206-create-post-tag.js @@ -0,0 +1,55 @@ +"use strict"; + +module.exports = { + up: async (queryInterface, Sequelize) => { + await Promise.all([ + queryInterface.createTable("PostTag", { + id: { + type: Sequelize.UUID, + defaultValue: Sequelize.UUIDV4, + primaryKey: true, + }, + korName: Sequelize.TEXT, + engName: Sequelize.TEXT, + BoardId: { + type: Sequelize.INTEGER, + references: { + model: "Board", // name of Source model + key: "id", + }, + onUpdate: "CASCADE", + onDelete: "CASCADE", + }, + }), + queryInterface.createTable("Post_PostTag", { + PostId: { + type: Sequelize.UUID, + references: { + model: "Post", // name of Target model + key: "id", // key in Target model that we're referencing + }, + onUpdate: "CASCADE", + onDelete: "CASCADE", + }, + PostTagId: { + type: Sequelize.UUID, + references: { + model: "PostTag", // name of Target model + key: "id", // key in Target model that we're referencing + }, + onUpdate: "CASCADE", + onDelete: "CASCADE", + }, + createdAt: Sequelize.DATE, + updatedAt: Sequelize.DATE, + }), + ]); + }, + + down: async (queryInterface, Sequelize) => { + await Promise.all([ + queryInterface.dropTable("Post_PostTag"), + queryInterface.dropTable("PostTag"), + ]); + }, +}; diff --git a/src/database/models/Admin.js b/src/database/models/Admin.js new file mode 100644 index 0000000..1aa08ac --- /dev/null +++ b/src/database/models/Admin.js @@ -0,0 +1,25 @@ +"use strict"; +module.exports = (sequelize, DataTypes) => { + const Admin = sequelize.define( + "Admin", + { + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + primaryKey: true, + }, + email: DataTypes.STRING, + password: DataTypes.STRING, + salt: DataTypes.STRING, + }, + { + freezeTableName: true, + charset: "utf8", + collate: "utf8_general_ci", + } + ); + Admin.associate = function (models) { + // associations can be defined here + }; + return Admin; +}; diff --git a/src/database/models/Banner.js b/src/database/models/Banner.js new file mode 100644 index 0000000..dad7d15 --- /dev/null +++ b/src/database/models/Banner.js @@ -0,0 +1,26 @@ +"use strict"; +module.exports = (sequelize, DataTypes) => { + const Banner = sequelize.define( + "Banner", + { + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + primaryKey: true, + }, + image: DataTypes.TEXT, + link: DataTypes.TEXT, + isActive: DataTypes.BOOLEAN, + }, + { + freezeTableName: true, + timestamps: false, + charset: "utf8", + collate: "utf8_general_ci", + } + ); + Banner.associate = function (models) { + // associations can be defined here + }; + return Banner; +}; diff --git a/src/database/models/Board.js b/src/database/models/Board.js index cce9ffd..cc11dbc 100644 --- a/src/database/models/Board.js +++ b/src/database/models/Board.js @@ -22,7 +22,8 @@ module.exports = (sequelize, DataTypes) => { ); Board.associate = function (models) { - models.Board.hasMany(models.Post, { foreignKey: "boardId" }); + models.Board.hasMany(models.Post); + models.Board.hasMany(models.PostTag); }; return Board; diff --git a/src/database/models/Petition.js b/src/database/models/Petition.js index 1797d82..dda8d79 100644 --- a/src/database/models/Petition.js +++ b/src/database/models/Petition.js @@ -8,7 +8,7 @@ module.exports = (sequelize, DataTypes) => { defaultValue: DataTypes.UUIDV4, primaryKey: true, }, - authorId: DataTypes.UUID, + StudentId: DataTypes.UUID, korTitle: DataTypes.TEXT, engTitle: DataTypes.TEXT, korContent: DataTypes.TEXT, @@ -37,7 +37,7 @@ module.exports = (sequelize, DataTypes) => { Petition.associate = function (models) { Petition.belongsToMany(models.Student, { through: "Student_Petition" }); - Petition.belongsTo(models.Student, { foreignKey: "authorId" }); + Petition.belongsTo(models.Student); }; return Petition; diff --git a/src/database/models/PostTag.js b/src/database/models/PostTag.js new file mode 100644 index 0000000..747c6ea --- /dev/null +++ b/src/database/models/PostTag.js @@ -0,0 +1,27 @@ +"use strict"; +module.exports = (sequelize, DataTypes) => { + const PostTag = sequelize.define( + "PostTag", + { + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + primaryKey: true, + }, + korName: DataTypes.TEXT, + engName: DataTypes.TEXT, + }, + { + freezeTableName: true, + charset: "utf8", + collate: "utf8_general_ci", + timestamps: false, + } + ); + PostTag.associate = function (models) { + // associations can be defined here + PostTag.belongsToMany(models.Post, { through: "Post_PostTag" }); + PostTag.belongsTo(models.Board); + }; + return PostTag; +}; diff --git a/src/database/models/Student.js b/src/database/models/Student.js index 0bfeafd..0e4cd55 100644 --- a/src/database/models/Student.js +++ b/src/database/models/Student.js @@ -26,12 +26,8 @@ module.exports = (sequelize, DataTypes) => { foreignKey: "studentNumber", sourceKey: "studentNumber", }); - Student.hasMany(models.Payment, { - foreignKey: "studentId", - }); - Student.hasMany(models.Petition, { - foreignKey: "authorId", - }); + Student.hasMany(models.Payment); + Student.hasMany(models.Petition); Student.belongsToMany(models.Petition, { through: "Student_Petition" }); }; return Student; diff --git a/src/database/models/payment.js b/src/database/models/payment.js index e72fafb..86d6125 100644 --- a/src/database/models/payment.js +++ b/src/database/models/payment.js @@ -21,7 +21,7 @@ module.exports = (sequelize, DataTypes) => { ); Payment.associate = function (models) { // associations can be defined here - Payment.belongsTo(models.Student, { foreignKey: "studentId" }); + Payment.belongsTo(models.Student); }; return Payment; }; diff --git a/src/database/models/post.js b/src/database/models/post.js index b475ef2..dfc39b9 100644 --- a/src/database/models/post.js +++ b/src/database/models/post.js @@ -34,7 +34,8 @@ module.exports = (sequelize, DataTypes) => { ); Post.associate = function (models) { - models.Post.belongsTo(models.Board, { foreignKey: "boardId" }); + Post.belongsTo(models.Board); + Post.belongsToMany(models.PostTag, { through: "Post_PostTag" }); }; return Post; diff --git a/src/database/seeders/20201008201030-create-banners.js b/src/database/seeders/20201008201030-create-banners.js new file mode 100644 index 0000000..363257c --- /dev/null +++ b/src/database/seeders/20201008201030-create-banners.js @@ -0,0 +1,29 @@ +"use strict"; + +const models = require("../models"); + +module.exports = { + up: async (queryInterface, Sequelize) => { + await models.Banner.bulkCreate( + [ + { + image: + "https://kaistua-web.s3.ap-northeast-2.amazonaws.com/Banner_kaiwiki.png", + link: "https://student.kaist.ac.kr/wiki", + isActive: 1, + }, + { + image: + "https://kaistua-web.s3.ap-northeast-2.amazonaws.com/Banner2.png", + link: "https://student.kaist.ac.kr/web/user/studentFee", + isActive: 1, + }, + ], + {} + ); + }, + + down: async (queryInterface, Sequelize) => { + await queryInterface.bulkDelete("Banner", null, {}); + }, +}; diff --git a/src/database/seeders/20201009070902-create-post-tags.js b/src/database/seeders/20201009070902-create-post-tags.js new file mode 100644 index 0000000..8a38785 --- /dev/null +++ b/src/database/seeders/20201009070902-create-post-tags.js @@ -0,0 +1,82 @@ +"use strict"; + +const models = require("../models"); + +module.exports = { + up: async (queryInterface, Sequelize) => { + await models.PostTag.bulkCreate( + [ + { + korName: "회장단", + engName: "Presidency", + BoardId: 1, + }, + { + korName: "협력국", + engName: "Bureau of Internal Operations and Communications", + BoardId: 1, + }, + { + korName: "복지국", + engName: "Bureau of Welfare", + BoardId: 1, + }, + { + korName: "정책국", + engName: "Bureau of Policy", + BoardId: 1, + }, + { + korName: "디자인정보팀", + engName: "Bureau of Design & Information Technology", + BoardId: 1, + }, + { + korName: "사무국", + engName: "Bureau of General Affairs", + BoardId: 1, + }, + { + korName: "국제사무국", + engName: "Bureau of International Affairs", + BoardId: 1, + }, + { + korName: "집행지원실", + engName: "Executive Secretariat", + BoardId: 1, + }, + { + korName: "문화기획국", + engName: "Bureau of Cultural Events", + BoardId: 1, + }, + { + korName: "회계팀", + engName: "Bureau of Finance", + BoardId: 1, + }, + { + korName: "식당", + engName: "Restaurant", + BoardId: 2, + }, + { + korName: "병원", + engName: "Health", + BoardId: 2, + }, + { + korName: "기타", + engName: "Other", + BoardId: 2, + }, + ], + {} + ); + }, + + down: async (queryInterface, Sequelize) => { + await queryInterface.bulkDelete("Banner", null, {}); + }, +}; diff --git a/src/routes/auth/auth.ctrl.js b/src/routes/auth/auth.ctrl.js index ec70388..4f468e4 100644 --- a/src/routes/auth/auth.ctrl.js +++ b/src/routes/auth/auth.ctrl.js @@ -16,14 +16,14 @@ exports.signup = async (ctx) => { if (record || key === process.env.REGISTER_KEY) { if (!record) { record = await models.Student.create(newStudent); - const studentId = record.id; + const StudentId = record.id; const payments = await models.Payment.findAll({ where: { studentNumber: record.studentNumber }, }); console.log(payments); await Promise.all( payments.map(async (payment) => { - payment.studentId = studentId; + payment.StudentId = StudentId; await payment.save(); }) ); diff --git a/src/routes/payments/payments.ctrl.js b/src/routes/payments/payments.ctrl.js index b850d57..e34961c 100644 --- a/src/routes/payments/payments.ctrl.js +++ b/src/routes/payments/payments.ctrl.js @@ -17,9 +17,9 @@ exports.bulkUpload = async (ctx) => { const student = await models.Student.findOne({ where: { studentNumber }, }); - let studentId; + let StudentId; if (student) { - studentId = student.id; + StudentId = student.id; } for (var i = 0; i < studentData.length; i++) { if (studentData[i] === "1") { @@ -27,7 +27,7 @@ exports.bulkUpload = async (ctx) => { studentNumber, year: `${parseInt(i / 2) + 2016}`, semester: semesters[i % 2], - studentId, + StudentId, }; bulkData.push(payment); } diff --git a/src/routes/petitions/petitions.ctrl.js b/src/routes/petitions/petitions.ctrl.js index b290e15..f8ad7ad 100644 --- a/src/routes/petitions/petitions.ctrl.js +++ b/src/routes/petitions/petitions.ctrl.js @@ -14,7 +14,7 @@ exports.write = async (ctx) => { engTitle, korContent, engContent, - authorId: id, + StudentId: id, }); ctx.assert(res, 400); const a = await res.addStudents([student]); @@ -59,15 +59,17 @@ exports.read = async (ctx) => { include: models.Student, }); + console.log(petitions); + ctx.body = petitions; ctx.status = 200; }; exports.vote = async (ctx) => { ctx.assert(ctx.request.user, 401); - const studentId = ctx.request.user.id; + const StudentId = ctx.request.user.id; const student = await models.Student.findOne({ - where: { id: studentId }, + where: { id: StudentId }, }); ctx.assert(student, 401); @@ -80,7 +82,7 @@ exports.vote = async (ctx) => { ctx.assert(petition, 400); const exists = petition.Students.some((petitionStudent) => { - return petitionStudent.id === studentId; + return petitionStudent.id === StudentId; }); if (exists) { @@ -96,15 +98,15 @@ exports.vote = async (ctx) => { exports.delete = async (ctx) => { ctx.assert(ctx.request.user, 401); - const studentId = ctx.request.user.id; + const StudentId = ctx.request.user.id; const student = await models.Student.findOne({ - where: { id: studentId }, + where: { id: StudentId }, }); - const { petitionId } = ctx.request.params; + const { PetitionId } = ctx.request.params; const petition = await models.Petition.findOne({ - where: { id: petitionId }, + where: { id: PetitionId }, }); - ctx.assert(petition.authorId === studentId, 401); + ctx.assert(petition.StudentId === StudentId, 401); await petition.destroy(); diff --git a/src/routes/posts/posts.ctrl.js b/src/routes/posts/posts.ctrl.js index 2222b75..f3e183d 100644 --- a/src/routes/posts/posts.ctrl.js +++ b/src/routes/posts/posts.ctrl.js @@ -60,6 +60,7 @@ const Op = require("sequelize").Op; * description: Internal Server Error */ exports.write = async (ctx) => { + console.log(ctx.request); ctx.assert(ctx.request.user, 401); const { id } = ctx.request.user; const admin = await models.Admin.findOne({ @@ -67,7 +68,8 @@ exports.write = async (ctx) => { }); ctx.assert(admin, 401); const post = ctx.request.body; - post.boardId = parseInt(post.boardId); + post.BoardId = parseInt(post.boardId); + console.log(post); const res = await models.Post.create(post); ctx.assert(res, 400); ctx.status = 204; @@ -155,7 +157,7 @@ exports.list = async (ctx) => { const offset = POST_NUM_PER_PAGE * (page - 1); - var where = { boardId: parseInt(boardId) }; + var where = { BoardId: parseInt(boardId) }; const posts = await models.Post.findAll({ order: [["createdAt", "DESC"]], diff --git a/yarn.lock b/yarn.lock index cb75ea6..5578a0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2755,10 +2755,10 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yarn@^1.22.4: - version "1.22.4" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.4.tgz#01c1197ca5b27f21edc8bc472cd4c8ce0e5a470e" - integrity sha512-oYM7hi/lIWm9bCoDMEWgffW8aiNZXCWeZ1/tGy0DWrN6vmzjCXIKu2Y21o8DYVBUtiktwKcNoxyGl/2iKLUNGA== +yarn@^1.22.10: + version "1.22.10" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c" + integrity sha512-IanQGI9RRPAN87VGTF7zs2uxkSyQSrSPsju0COgbsKQOOXr5LtcVPeyXWgwVa0ywG3d8dg6kSYKGBuYK021qeA== ylru@^1.2.0: version "1.2.1"