feat: add Department and UserDepartment entities
This commit is contained in:
49
apps/server/src/entities/department.entity.ts
Normal file
49
apps/server/src/entities/department.entity.ts
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import {
|
||||||
|
Entity,
|
||||||
|
PrimaryGeneratedColumn,
|
||||||
|
Column,
|
||||||
|
CreateDateColumn,
|
||||||
|
UpdateDateColumn,
|
||||||
|
ManyToOne,
|
||||||
|
OneToMany,
|
||||||
|
JoinColumn,
|
||||||
|
} from 'typeorm';
|
||||||
|
|
||||||
|
export enum DepartmentType {
|
||||||
|
CAMPUS = 'campus',
|
||||||
|
DEPARTMENT = 'department',
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity('departments')
|
||||||
|
export class Department {
|
||||||
|
@PrimaryGeneratedColumn()
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({ length: 100 })
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
@Column({ name: 'parent_id', type: 'integer', nullable: true })
|
||||||
|
parentId: number;
|
||||||
|
|
||||||
|
@ManyToOne(() => Department, { nullable: true, onDelete: 'SET NULL' })
|
||||||
|
@JoinColumn({ name: 'parent_id' })
|
||||||
|
parent: Department;
|
||||||
|
|
||||||
|
@OneToMany(() => Department, (d) => d.parent)
|
||||||
|
children: Department[];
|
||||||
|
|
||||||
|
@Column({ length: 20, default: DepartmentType.DEPARTMENT })
|
||||||
|
type: string;
|
||||||
|
|
||||||
|
@Column({ name: 'sort_order', type: 'integer', default: 0 })
|
||||||
|
sortOrder: number;
|
||||||
|
|
||||||
|
@Column({ length: 20, default: 'active' })
|
||||||
|
status: string;
|
||||||
|
|
||||||
|
@CreateDateColumn({ name: 'created_at' })
|
||||||
|
createdAt: Date;
|
||||||
|
|
||||||
|
@UpdateDateColumn({ name: 'updated_at' })
|
||||||
|
updatedAt: Date;
|
||||||
|
}
|
||||||
@@ -24,3 +24,5 @@ export { SyncLog } from './sync-log.entity';
|
|||||||
export { SyncState } from './sync-state.entity';
|
export { SyncState } from './sync-state.entity';
|
||||||
export { ExpenseType } from './expense-type.entity';
|
export { ExpenseType } from './expense-type.entity';
|
||||||
export { Notification, NotificationType } from './notification.entity';
|
export { Notification, NotificationType } from './notification.entity';
|
||||||
|
export { Department, DepartmentType } from './department.entity';
|
||||||
|
export { UserDepartment } from './user-department.entity';
|
||||||
|
|||||||
38
apps/server/src/entities/user-department.entity.ts
Normal file
38
apps/server/src/entities/user-department.entity.ts
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import {
|
||||||
|
Entity,
|
||||||
|
PrimaryGeneratedColumn,
|
||||||
|
Column,
|
||||||
|
CreateDateColumn,
|
||||||
|
ManyToOne,
|
||||||
|
JoinColumn,
|
||||||
|
Unique,
|
||||||
|
} from 'typeorm';
|
||||||
|
import { User } from './user.entity';
|
||||||
|
import { Department } from './department.entity';
|
||||||
|
|
||||||
|
@Entity('user_departments')
|
||||||
|
@Unique(['userId', 'departmentId'])
|
||||||
|
export class UserDepartment {
|
||||||
|
@PrimaryGeneratedColumn()
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({ name: 'user_id', type: 'integer' })
|
||||||
|
userId: number;
|
||||||
|
|
||||||
|
@ManyToOne(() => User, { onDelete: 'CASCADE' })
|
||||||
|
@JoinColumn({ name: 'user_id' })
|
||||||
|
user: User;
|
||||||
|
|
||||||
|
@Column({ name: 'department_id', type: 'integer' })
|
||||||
|
departmentId: number;
|
||||||
|
|
||||||
|
@ManyToOne(() => Department, { onDelete: 'CASCADE' })
|
||||||
|
@JoinColumn({ name: 'department_id' })
|
||||||
|
department: Department;
|
||||||
|
|
||||||
|
@Column({ name: 'is_default', type: 'boolean', default: false })
|
||||||
|
isDefault: boolean;
|
||||||
|
|
||||||
|
@CreateDateColumn({ name: 'created_at' })
|
||||||
|
createdAt: Date;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user