fase(9): auth module with casl rbac and session management
This commit is contained in:
73
dist/modules/auth/infrastructure/repositories/KyselyUserRepository.js
vendored
Normal file
73
dist/modules/auth/infrastructure/repositories/KyselyUserRepository.js
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.KyselyUserRepository = void 0;
|
||||
const User_1 = require("../../domain/entities/User");
|
||||
const UniqueId_1 = require("../../../../shared/domain/UniqueId");
|
||||
const Email_1 = require("../../domain/value-objects/Email");
|
||||
const Role_1 = require("../../domain/value-objects/Role");
|
||||
class KyselyUserRepository {
|
||||
constructor(db) {
|
||||
this.db = db;
|
||||
}
|
||||
async save(user) {
|
||||
const row = {
|
||||
id: user.id.toString(),
|
||||
email: user.email.value,
|
||||
name: user.name,
|
||||
password_hash: user.passwordHash,
|
||||
role: user.role.value,
|
||||
org_id: user.orgId ?? null,
|
||||
created_at: user.createdAt.getTime(),
|
||||
updated_at: user.updatedAt.getTime(),
|
||||
};
|
||||
await this.db
|
||||
.insertInto('users')
|
||||
.values(row)
|
||||
.onConflict((oc) => oc.column('id').doUpdateSet({
|
||||
name: row.name,
|
||||
role: row.role,
|
||||
org_id: row.org_id,
|
||||
updated_at: row.updated_at,
|
||||
}))
|
||||
.execute();
|
||||
}
|
||||
async findById(id) {
|
||||
const row = await this.db
|
||||
.selectFrom('users')
|
||||
.selectAll()
|
||||
.where('id', '=', id)
|
||||
.executeTakeFirst();
|
||||
return row ? this.toDomain(row) : undefined;
|
||||
}
|
||||
async findByEmail(email) {
|
||||
const row = await this.db
|
||||
.selectFrom('users')
|
||||
.selectAll()
|
||||
.where('email', '=', email.toLowerCase())
|
||||
.executeTakeFirst();
|
||||
return row ? this.toDomain(row) : undefined;
|
||||
}
|
||||
async findAll() {
|
||||
const rows = await this.db.selectFrom('users').selectAll().execute();
|
||||
return rows.map((r) => this.toDomain(r));
|
||||
}
|
||||
async count() {
|
||||
const result = await this.db
|
||||
.selectFrom('users')
|
||||
.select((eb) => eb.fn.count('id').as('count'))
|
||||
.executeTakeFirstOrThrow();
|
||||
return Number(result.count);
|
||||
}
|
||||
toDomain(row) {
|
||||
return User_1.User.reconstitute({
|
||||
email: Email_1.Email.create(row.email),
|
||||
name: row.name,
|
||||
passwordHash: row.password_hash,
|
||||
role: Role_1.Role.create(row.role),
|
||||
orgId: row.org_id ?? undefined,
|
||||
createdAt: new Date(row.created_at),
|
||||
updatedAt: new Date(row.updated_at),
|
||||
}, UniqueId_1.UniqueId.from(row.id));
|
||||
}
|
||||
}
|
||||
exports.KyselyUserRepository = KyselyUserRepository;
|
||||
Reference in New Issue
Block a user