Manage SystemManagers

This commit is contained in:
Bastian Wagner
2025-01-02 13:16:45 +01:00
parent bf64103369
commit efbfc2eb01
18 changed files with 266 additions and 23 deletions

View File

@@ -6,7 +6,7 @@ export class SSOUser {
@PrimaryColumn({ type: 'uuid', unique: true })
externalId: string;
@OneToOne(() => User, (user) => user.external)
@OneToOne(() => User, (user) => user.external, { onDelete: 'CASCADE'})
@JoinColumn()
user: User;

View File

@@ -2,6 +2,7 @@ import { Exclude, Transform } from 'class-transformer';
import {
Column,
CreateDateColumn,
DeleteDateColumn,
Entity,
JoinColumn,
ManyToMany,
@@ -21,7 +22,7 @@ export class User implements IUser {
id: string;
@IsEmail()
@Column({ unique: true })
@Column({ unique: false })
username: string;
@Column({ name: 'first_name', default: '' })
@@ -37,13 +38,13 @@ export class User implements IUser {
lastLogin: Date;
@Exclude()
@OneToOne(() => SSOUser, (sso) => sso.user, { eager: true, cascade: true })
@OneToOne(() => SSOUser, (sso) => sso.user, { eager: true, cascade: true, onDelete: 'CASCADE' })
external: SSOUser;
@Column({ default: true })
isActive: boolean;
@ManyToOne(() => Role, (role) => role.user, { cascade: true, eager: true })
@ManyToOne(() => Role, (role) => role.user, { eager: true, onDelete: 'NO ACTION' })
@JoinColumn()
@Transform(({ value }) => value.name)
role: Role;
@@ -51,6 +52,9 @@ export class User implements IUser {
@ManyToMany(() => KeySystem, (system) => system.managers)
systems: KeySystem[];
@DeleteDateColumn()
deletedAt: Date;
accessToken?: string;
refreshToken?: string;
}

View File

@@ -10,5 +10,7 @@ export interface IUser {
accessToken?: string;
refreshToken?: string;
deletedAt?: Date;
role?: string | Role;
}

View File

@@ -61,4 +61,16 @@ export class UserRepository extends Repository<User> {
const sso = await this.ssoRepo.findByExternalId(externalId);
return user == null && sso == null;
}
async deleteUserById(id: string) {
const user = await this.findOne({
where: { id },
relations: ['external']
});
if (user.external) {
await this.ssoRepo.remove(user.external);
}
return this.softRemove(user)
}
}