Skip to content

Commit 01d2884

Browse files
Add types for department/position
1 parent 9555636 commit 01d2884

File tree

4 files changed

+48
-16
lines changed

4 files changed

+48
-16
lines changed

backend/typescript/models/admin.model.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ import {
66
Table,
77
} from "sequelize-typescript";
88
import User from "./user.model";
9+
import { Department } from "../types";
910

1011
@Table({ tableName: "admins" })
1112
export default class Admin extends Model {
1213
@ForeignKey(() => User)
1314
@Column({ type: DataType.STRING, primaryKey: true })
1415
userId!: string;
1516

16-
@Column({ type: DataType.ARRAY(DataType.STRING) })
17-
authorizedDepartments!: string[];
17+
@Column({ type: DataType.ARRAY(DataType.ENUM(...Object.values(Department))) })
18+
authorizedDepartments!: Department[];
1819
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { Column, DataType, Model, Table } from "sequelize-typescript";
2-
import { Department } from "../types";
2+
import { Department, PositionTitle, PositionTitles } from "../types";
33

44
@Table({ tableName: "positions" })
55
export default class Position extends Model {
6-
@Column({ type: DataType.STRING, primaryKey: true })
7-
title!: string;
6+
@Column({ type: DataType.ENUM(...PositionTitles), primaryKey: true })
7+
title!: PositionTitle;
88

99
@Column({ type: DataType.ENUM(...Object.values(Department)) })
10-
department!: string;
10+
department!: Department;
1111
}

backend/typescript/models/user.model.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
Model,
99
Table,
1010
} from "sequelize-typescript";
11-
import { Role } from "../types";
11+
import { PositionTitle, Role } from "../types";
1212
import ApplicationDashboardTable from "./applicationDashboard.model";
1313
import Position from "./position.model";
1414

@@ -34,7 +34,7 @@ export default class User extends Model {
3434

3535
@ForeignKey(() => Position)
3636
@Column({ type: DataType.STRING })
37-
position!: string;
37+
position!: PositionTitle;
3838

3939
@HasMany(() => ApplicationDashboardTable)
4040
applicationDashboards?: ApplicationDashboardTable[];

backend/typescript/types.ts

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,44 @@ export enum ApplicantRole {
127127
}
128128

129129
export enum Department {
130-
ENGINEERING = "Engineering",
131-
DESIGN = "Design",
132-
PRODUCT = "Product",
133-
COMMUNITY = "Community",
130+
Engineering = "Engineering",
131+
Design = "Design",
132+
Product = "Product",
133+
Community = "Community",
134134
}
135135

136-
export type Position = {
137-
title: string;
138-
department: Department;
139-
};
136+
export const EngineeringPositionTitles = [
137+
"Project Lead",
138+
"Developer",
139+
"VP Engineering",
140+
] as const;
141+
export const DesignPositionTitles = [
142+
"Designer",
143+
"VP Design",
144+
"Graphic Designer",
145+
] as const;
146+
export const ProductPositionTitles = ["Product Manager", "VP Product"] as const;
147+
export const CommunityPositionTitles = [
148+
"President",
149+
"VP Scoping",
150+
"VP Talent",
151+
"VP Finance",
152+
"Director Lead",
153+
"Internal Director",
154+
"External Director",
155+
"Content Strategist",
156+
] as const;
157+
158+
export const PositionTitles = [
159+
...EngineeringPositionTitles,
160+
...DesignPositionTitles,
161+
...ProductPositionTitles,
162+
...CommunityPositionTitles,
163+
] as const;
164+
165+
// Union types
166+
export type EngineeringPositionTitle = typeof EngineeringPositionTitles[number];
167+
export type DesignPositionTitle = typeof DesignPositionTitles[number];
168+
export type ProductPositionTitle = typeof ProductPositionTitles[number];
169+
export type CommunityPositionTitle = typeof CommunityPositionTitles[number];
170+
export type PositionTitle = typeof PositionTitles[number];

0 commit comments

Comments
 (0)