Skip to content

Commit 8772429

Browse files
committed
Add rendez-vous models
1 parent a73d05c commit 8772429

File tree

8 files changed

+226
-0
lines changed

8 files changed

+226
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { QueryInterface, DataTypes, QueryTypes, Sequelize } from 'sequelize';
2+
3+
module.exports = {
4+
up: (queryInterface: QueryInterface): Promise<any> => queryInterface.sequelize.transaction(
5+
async (transaction) => {
6+
return Promise.all([
7+
queryInterface.createTable('RendezVouss', {
8+
id: {
9+
type: DataTypes.INTEGER,
10+
primaryKey: true,
11+
allowNull: false,
12+
autoIncrement: true
13+
},
14+
date: {
15+
type: DataTypes.DATE,
16+
allowNull: false
17+
},
18+
agenda: {
19+
type: DataTypes.TEXT
20+
},
21+
report: {
22+
type: DataTypes.TEXT
23+
},
24+
sheduling: {
25+
type: DataTypes.ENUM("PLANNED", "PASSED")
26+
}
27+
}, { transaction: transaction })
28+
])
29+
}
30+
),
31+
32+
down: (queryInterface: QueryInterface): Promise<any> => queryInterface.sequelize.transaction(
33+
async (transaction) => {
34+
return Promise.all([
35+
queryInterface.dropTable('RendezVouss', { transaction: transaction }),
36+
])
37+
}
38+
)
39+
};
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { QueryInterface, DataTypes, QueryTypes, Sequelize } from 'sequelize';
2+
3+
module.exports = {
4+
up: (queryInterface: QueryInterface): Promise<any> => queryInterface.sequelize.transaction(
5+
async (transaction) => {
6+
return Promise.all([
7+
queryInterface.createTable('RendezVousUserAttendances', {
8+
id: {
9+
type: DataTypes.INTEGER,
10+
primaryKey: true,
11+
allowNull: false,
12+
autoIncrement: true
13+
},
14+
rendezVousId: {
15+
type: DataTypes.INTEGER
16+
},
17+
userId: {
18+
type: DataTypes.UUID
19+
},
20+
attendance: {
21+
type: DataTypes.ENUM("UNDEFINED", "PRESENT", "ABSENT")
22+
}
23+
}, { transaction: transaction })
24+
])
25+
}
26+
),
27+
28+
down: (queryInterface: QueryInterface): Promise<any> => queryInterface.sequelize.transaction(
29+
async (transaction) => {
30+
return Promise.all([
31+
queryInterface.dropTable('RendezVousUserAttendances', { transaction: transaction }),
32+
])
33+
}
34+
)
35+
};
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { QueryInterface, DataTypes, QueryTypes, Sequelize } from 'sequelize';
2+
3+
module.exports = {
4+
up: (queryInterface: QueryInterface): Promise<any> => queryInterface.sequelize.transaction(
5+
async (transaction) => {
6+
return Promise.all([
7+
queryInterface.addConstraint('RendezVousUserAttendances', {
8+
fields: ['rendezVousId'],
9+
type: 'foreign key',
10+
references: {
11+
table: 'RendezVouss',
12+
field: 'id'
13+
},
14+
onUpdate: "CASCADE",
15+
onDelete: "CASCADE",
16+
transaction: transaction
17+
}),
18+
queryInterface.addConstraint('RendezVousUserAttendances', {
19+
fields: ['userId'],
20+
type: 'foreign key',
21+
references: {
22+
table: 'Users',
23+
field: 'id'
24+
},
25+
onUpdate: "CASCADE",
26+
onDelete: "CASCADE",
27+
transaction: transaction
28+
})
29+
])
30+
}
31+
),
32+
33+
down: (queryInterface: QueryInterface): Promise<any> => queryInterface.sequelize.transaction(
34+
async (transaction) => {
35+
return Promise.all([
36+
queryInterface.removeColumn('RendezVousUserAttendances', 'rendezVousId', { transaction: transaction }),
37+
queryInterface.removeColumn('RendezVousUserAttendances', 'userId', { transaction: transaction })
38+
])
39+
}
40+
)
41+
};

src/models/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import CardUser from "./cardUser";
44
import Config from "./config";
55
import Part from "./part";
66
import PLD from "./pld";
7+
import RendezVous from "./rendezVous";
8+
import RendezVousUserAttendance from "./rendezVousUserAttendance";
79
import Sprint from "./sprint";
810
import User from "./user";
911

@@ -23,6 +25,8 @@ const sequelize = new Sequelize({
2325
CardUser,
2426
Config,
2527
PLD,
28+
RendezVous,
29+
RendezVousUserAttendance,
2630
]
2731
});
2832

src/models/rendezVous.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { Op } from 'sequelize';
2+
import { Model, Column, DataType, Default, AllowNull, Unique, Table, HasMany, BelongsToMany } from 'sequelize-typescript';
3+
import RendezVousUserAttendance from './rendezVousUserAttendance';
4+
5+
export type Sheduling = "PLANNED"|"PASSED";
6+
7+
@Table({
8+
modelName: "RendezVous",
9+
tableName: "RendezVouss"
10+
})
11+
class RendezVous extends Model<RendezVous> {
12+
13+
@Column({
14+
type: DataType.INTEGER,
15+
primaryKey: true,
16+
allowNull: false,
17+
autoIncrement: true
18+
})
19+
id: number;
20+
21+
@AllowNull(false)
22+
@Column(DataType.DATE)
23+
date: Date;
24+
25+
@Column(DataType.TEXT)
26+
agenda: string;
27+
28+
@Column(DataType.TEXT)
29+
report: string;
30+
31+
@Default("PLANNED")
32+
@Column(DataType.ENUM("PLANNED", "PASSED"))
33+
sheduling: Sheduling;
34+
35+
@HasMany(() => RendezVousUserAttendance)
36+
userAttendances: RendezVousUserAttendance[];
37+
38+
}
39+
40+
export default RendezVous;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { Op } from 'sequelize';
2+
import { Model, Column, DataType, Default, AllowNull, Unique, Table, HasMany, BelongsToMany, ForeignKey, BelongsTo } from 'sequelize-typescript';
3+
import RendezVous from './rendezVous';
4+
import User from './user';
5+
6+
export type Attendance = "UNDEFINED"|"PRESENT"|"ABSENT";
7+
8+
@Table({
9+
modelName: "RendezVousUserAttendance",
10+
tableName: "RendezVousUserAttendances"
11+
})
12+
class RendezVousUserAttendance extends Model<RendezVousUserAttendance> {
13+
14+
@Column({
15+
type: DataType.INTEGER,
16+
primaryKey: true,
17+
allowNull: false,
18+
autoIncrement: true
19+
})
20+
id: number;
21+
22+
@ForeignKey(() => RendezVous)
23+
@Column(DataType.INTEGER)
24+
rendezVousId: number;
25+
26+
@BelongsTo(() => RendezVous)
27+
rendezVous: RendezVous;
28+
29+
@ForeignKey(() => User)
30+
@Column(DataType.UUID)
31+
userId: string;
32+
33+
@BelongsTo(() => User)
34+
user: User;
35+
36+
@Default("UNDEFINED")
37+
@Column(DataType.ENUM("UNDEFINED", "PRESENT", "ABSENT"))
38+
attendance: Attendance;
39+
40+
}
41+
42+
export default RendezVousUserAttendance;

src/models/user.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Op } from 'sequelize';
22
import { Model, Column, DataType, Default, AllowNull, Unique, Table, HasMany, BelongsToMany } from 'sequelize-typescript';
33
import Card from './card';
44
import CardUser from './cardUser';
5+
import RendezVousUserAttendance from './rendezVousUserAttendance';
56

67
export type Role = "ADMIN"|"EDITOR"|"MAINTENER"|"USER";
78

@@ -47,6 +48,9 @@ class User extends Model<User> {
4748
@Column(DataType.BOOLEAN)
4849
isDefaultPassword: boolean;
4950

51+
@HasMany(() => RendezVousUserAttendance)
52+
rendezVousAttendances: RendezVousUserAttendance[];
53+
5054
static generateRandomPassword() {
5155
const characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
5256
const specials = "#!^@_";

views/rdv/rdv.ejs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="robots" content="noindex, nofollow">
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
7+
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
8+
<title>WAP - Rendez-Vous</title>
9+
</head>
10+
<body>
11+
<%- include("../partials/navbar.ejs") %>
12+
<div class="container-xxl bd-gutter flex-wrap flex-lg-nowrap p-5">
13+
<div class="row mb-5 text-center">
14+
<h1>Rendez-Vous</h1>
15+
</div>
16+
<div class="row">
17+
</div>
18+
</div>
19+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>
20+
</body>
21+
</html>

0 commit comments

Comments
 (0)