Skip to content

Commit

Permalink
Merge pull request #46 from uwblueprint/F24/vipasha/extend-behaviours…
Browse files Browse the repository at this point in the history
…-entity-2

Added user_behaviours table and updated pet_behaviours table
  • Loading branch information
vips11 authored Nov 27, 2024
2 parents ad5ee70 + 660829f commit befb6ec
Show file tree
Hide file tree
Showing 7 changed files with 160 additions and 7 deletions.
2 changes: 2 additions & 0 deletions backend/typescript/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export const MIN_BEHAVIOUR_LEVEL = 1;
export const MAX_BEHAVIOUR_LEVEL = 4;
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,6 @@ export const up: Migration = async ({ context: sequelize }) => {
},
level: {
type: DataType.INTEGER,
validate: {
min: 1,
max: 4,
},
allowNull: false,
},
description: {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { DataType } from "sequelize-typescript";

import { Migration } from "../umzug";
import { MAX_BEHAVIOUR_LEVEL, MIN_BEHAVIOUR_LEVEL } from "../constants";

const TABLE_NAME = "user_behaviours";
const CONSTRAINT_NAME = "unique_user_behaviour_skill";
const CONSTRAINT_NAME_2 = "max_level_interval";

export const up: Migration = async ({ context: sequelize }) => {
await sequelize.getQueryInterface().createTable(TABLE_NAME, {
id: {
type: DataType.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true,
},
user_id: {
type: DataType.INTEGER,
allowNull: false,
references: {
model: "users",
key: "id",
},
},
behaviour_id: {
type: DataType.INTEGER,
allowNull: false,
references: {
model: "behaviours",
key: "id",
},
},
max_level: {
type: DataType.INTEGER,
allowNull: false,
},
});

await sequelize.getQueryInterface().addConstraint(TABLE_NAME, {
fields: ["behaviour_id", "user_id"],
type: "unique",
name: CONSTRAINT_NAME,
});

await sequelize.query(
`ALTER TABLE ${TABLE_NAME} ADD CONSTRAINT ${CONSTRAINT_NAME_2}
CHECK (max_level BETWEEN ${MIN_BEHAVIOUR_LEVEL} AND ${MAX_BEHAVIOUR_LEVEL});`,
);
};

export const down: Migration = async ({ context: sequelize }) => {
await sequelize
.getQueryInterface()
.removeConstraint(TABLE_NAME, CONSTRAINT_NAME);

await sequelize.query(
`ALTER TABLE ${TABLE_NAME} DROP CONSTRAINT ${CONSTRAINT_NAME_2};`,
);

await sequelize.getQueryInterface().dropTable(TABLE_NAME);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { DataType } from "sequelize-typescript";
import { Migration } from "../umzug";
import { MAX_BEHAVIOUR_LEVEL, MIN_BEHAVIOUR_LEVEL } from "../constants";

const TABLE_NAME = "pet_behaviours";
const CONSTRAINT_NAME = "unique_pet_behaviour";
const CONSTRAINT_NAME_2 = "skill_level_interval";

export const up: Migration = async ({ context: sequelize }) => {
await sequelize.getQueryInterface().addColumn(TABLE_NAME, "is_highlighted", {
type: DataType.BOOLEAN,
allowNull: true,
defaultValue: false,
});

await sequelize.getQueryInterface().addConstraint(TABLE_NAME, {
fields: ["behaviour_id", "pet_id"],
type: "unique",
name: CONSTRAINT_NAME,
});

await sequelize.query(
`ALTER TABLE ${TABLE_NAME} ADD CONSTRAINT ${CONSTRAINT_NAME_2}
CHECK (skill_level BETWEEN ${MIN_BEHAVIOUR_LEVEL} AND ${MAX_BEHAVIOUR_LEVEL});`,
);
};

export const down: Migration = async ({ context: sequelize }) => {
await sequelize
.getQueryInterface()
.removeConstraint(TABLE_NAME, CONSTRAINT_NAME);

await sequelize
.getQueryInterface()
.removeColumn(TABLE_NAME, "is_highlighted");

await sequelize.query(
`ALTER TABLE ${TABLE_NAME} DROP CONSTRAINT ${CONSTRAINT_NAME_2};`,
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { DataType } from "sequelize-typescript";

Check warning on line 1 in backend/typescript/migrations/2024.11.21T16.49.50.add-constraint-behaviour-level-details-table.ts

View workflow job for this annotation

GitHub Actions / run-lint

'DataType' is defined but never used
import { Migration } from "../umzug";
import { MAX_BEHAVIOUR_LEVEL, MIN_BEHAVIOUR_LEVEL } from "../constants";

const TABLE_NAME = "behaviour_level_details";
const CONSTRAINT_NAME = "level_interval";

export const up: Migration = async ({ context: sequelize }) => {
await sequelize.query(
`ALTER TABLE ${TABLE_NAME} ADD CONSTRAINT ${CONSTRAINT_NAME}
CHECK (level BETWEEN ${MIN_BEHAVIOUR_LEVEL} AND ${MAX_BEHAVIOUR_LEVEL});`,
);
};

export const down: Migration = async ({ context: sequelize }) => {
await sequelize.query(
`ALTER TABLE ${TABLE_NAME} DROP CONSTRAINT ${CONSTRAINT_NAME};`,
);
};
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,30 @@ import {
Table,
ForeignKey,
BelongsTo,
DataType,
} from "sequelize-typescript";
import Behaviour from "./behaviour.model";
import Pet from "./pet.model";

@Table({ timestamps: false, tableName: "pet_behaviours" })
export default class PetBehaviour extends Model {
@ForeignKey(() => Pet)
@Column({})
@Column({ type: DataType.INTEGER, allowNull: false })
pet_id!: number;

@BelongsTo(() => Pet)
pet!: Pet;

@ForeignKey(() => Behaviour)
@Column({})
@Column({ type: DataType.INTEGER, allowNull: false })
behaviour_id!: number;

@BelongsTo(() => Behaviour)
behaviour!: Behaviour;

@Column({})
@Column({ type: DataType.INTEGER, allowNull: false })
skill_level!: number;

@Column({ type: DataType.BOOLEAN, allowNull: true })
is_highlighted!: boolean;
}
30 changes: 30 additions & 0 deletions backend/typescript/models/userBehaviour.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import {
Column,
Model,
Table,
ForeignKey,
BelongsTo,
DataType,
} from "sequelize-typescript";
import Behaviour from "./behaviour.model";
import User from "./user.model";

@Table({ timestamps: false, tableName: "user_behaviours" })
export default class UserBehaviour extends Model {
@ForeignKey(() => User)
@Column({ type: DataType.INTEGER, allowNull: false })
user_id!: number;

@BelongsTo(() => User)
user!: User;

@ForeignKey(() => Behaviour)
@Column({ type: DataType.INTEGER, allowNull: false })
behaviour_id!: number;

@BelongsTo(() => Behaviour)
behaviour!: Behaviour;

@Column({ type: DataType.INTEGER, allowNull: false })
max_level!: number;
}

0 comments on commit befb6ec

Please sign in to comment.