74 lines
2.5 KiB
JavaScript
74 lines
2.5 KiB
JavaScript
"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;
|