Skip to content
This repository was archived by the owner on Feb 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules/
yarn.lock
23 changes: 23 additions & 0 deletions config/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"development": {
"username": "tylus",
"password": "MadWizard1508!",
"database": "dogsDB",
"host": "127.0.0.1",
"dialect": "postgres"
},
"test": {
"username": "tylus",
"password": "MadWizard1508!",
"database": "dogsDB",
"host": "127.0.0.1",
"dialect": "postgres"
},
"production": {
"username": "tylus",
"password": "MadWizard1508!",
"database": "dogsDB",
"host": "127.0.0.1",
"dialect": "postgres"
}
}
33 changes: 33 additions & 0 deletions migrations/20220412182645-create-house-hold.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
'use strict';
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.createTable('HouseHolds', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
address: {
type: Sequelize.STRING
},
hasYard: {
type: Sequelize.BOOLEAN
},
userId: {
type: Sequelize.INTEGER
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
async down(queryInterface, Sequelize) {
await queryInterface.dropTable('HouseHolds');
}
};
39 changes: 39 additions & 0 deletions migrations/20220412182942-create-user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
'use strict';
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
},
userName: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
async down(queryInterface, Sequelize) {
await queryInterface.dropTable('Users');
}
};
39 changes: 39 additions & 0 deletions migrations/20220412183132-create-puppy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
'use strict';
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.createTable('Puppies', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
dogName: {
type: Sequelize.STRING
},
breed: {
type: Sequelize.STRING
},
userId: {
type: Sequelize.INTEGER
},
homeId: {
type: Sequelize.INTEGER
},
shotsUpToDate: {
type: Sequelize.BOOLEAN
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
async down(queryInterface, Sequelize) {
await queryInterface.dropTable('Puppies');
}
};
31 changes: 31 additions & 0 deletions models/HouseHold.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class HouseHold extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
HouseHold.belongsTo(models.User, {
foreignKey: 'userId',
as: 'users',
onDelete: 'CASCADE',
onUpdate: 'CASCADE'
})
}
}
HouseHold.init({
address: DataTypes.STRING,
hasYard: DataTypes.BOOLEAN,
userId: DataTypes.INTEGER
}, {
sequelize,
modelName: 'HouseHold',
tableName: 'HouseHolds'
});
return HouseHold;
};
39 changes: 39 additions & 0 deletions models/Puppy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Puppy extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
Puppy.belongsTo(models.User, {
foreignKey: 'userId',
as: 'user',
onDelete: 'CASCADE',
onUpdate: 'CASCADE'
})
Puppy.belongsTo(models.HouseHold, {
foreignKey: 'userId',
as: 'household',
onDelete: 'CASCADE',
onUpdate: 'CASCADE'
})
}
}
Puppy.init({
dogName: DataTypes.STRING,
breed: DataTypes.STRING,
userId: DataTypes.INTEGER,
homeId: DataTypes.INTEGER,
shotsUpToDate: DataTypes.BOOLEAN
}, {
sequelize,
modelName: 'Puppy',
tabelName: 'puppies'
});
return Puppy;
};
35 changes: 35 additions & 0 deletions models/User.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
'use strict';
const { Model } = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
User.hasMany(models.HouseHold, {
foreignKey: 'userId',
onDelete: 'CASCADE',
onUpdate: 'CASCADE'
})
User.hasMany(models.Puppy, {
foreignKey: 'userId',
onDelete: 'CASCADE',
onUpdate: 'CASCADE'
})
}
}
User.init({
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
userName: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING
}, {
sequelize,
modelName: "User",
tableName: "Users"
});
return User;
};
37 changes: 37 additions & 0 deletions models/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});

Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;
Loading