Add user and employee management enhancements with database schema updates

- Introduced new columns `status`, `created_by`, and `updated_by` in the `users` table to track user status and ownership.
- Updated the `employees` table to include a foreign key reference to the `users` table via `user_id`.
- Created migration script `0012_users_primary.sql` to apply these changes to the database schema.
- Enhanced the `EmployeesService` and `EmployeesRepository` to support user assignments and related data retrieval.
- Updated DTOs and service methods to reflect the new user and employee relationships.
- Added unit tests to validate the new functionality and ensure data integrity.
- Modified existing controllers to accommodate the new fields and relationships in user and employee management.
This commit is contained in:
shancheas
2026-08-26 15:29:18 +07:00
parent f635ebeda0
commit 8a61c94078
50 changed files with 2175 additions and 401 deletions
+11 -3
View File
@@ -33,7 +33,10 @@ export class AuthService {
private readonly revokedAccessTokensRepository: RevokedAccessTokensRepository,
) {}
async register(username: string, password: string): Promise<TokenPair> {
async register(
username: string,
password: string,
): Promise<{ id: string; username: string; status: string }> {
const existing = await this.usersService.findByUsername(username);
if (existing) {
throw new ConflictException('Username already registered');
@@ -41,8 +44,11 @@ export class AuthService {
const saltRounds = this.config.getOrThrow<number>('BCRYPT_SALT_ROUNDS');
const passwordHash = await bcrypt.hash(password, saltRounds);
const user = await this.usersService.create(username, passwordHash);
const { tokens } = await this.issueTokenPair(user);
return tokens;
return {
id: user.id,
username: user.username,
status: user.status.value,
};
}
async login(username: string, password: string): Promise<TokenPair> {
@@ -52,6 +58,7 @@ export class AuthService {
if (!user || !match) {
throw new UnauthorizedException('Invalid credentials');
}
this.usersService.assertCanAuthenticate(user);
const { tokens } = await this.issueTokenPair(user);
return tokens;
}
@@ -78,6 +85,7 @@ export class AuthService {
if (!user) {
throw new UnauthorizedException('Invalid refresh token');
}
this.usersService.assertCanAuthenticate(user);
await this.denylistAccessJti(claimed.accessJti);
const issued = await this.issueTokenPair(user);