WIP - use objection for record shares

This commit is contained in:
Francisco Gaona
2025-12-30 21:46:37 +01:00
parent c50098a55c
commit 75b7325cea
2 changed files with 19 additions and 23 deletions

View File

@@ -21,13 +21,13 @@ export class RecordShare extends BaseModel {
};
}
// Override BaseModel hooks to prevent automatic timestamp handling
$beforeInsert(queryContext: any) {
// Don't set timestamps - let database defaults handle it
// Don't auto-set timestamps - let DB defaults handle them
$beforeInsert() {
// Don't call super - skip BaseModel's timestamp logic
}
$beforeUpdate(opt: any, queryContext: any) {
// Don't set timestamps - let database defaults handle it
$beforeUpdate() {
// Don't call super - skip BaseModel's timestamp logic
}
id!: string;

View File

@@ -147,39 +147,37 @@ export class RecordSharingController {
if (existingShare) {
// Update existing share
await knex('record_shares')
.where({ id: existingShare.id })
.update({
accessLevel: JSON.stringify({
const updated = await RecordShare.query(knex)
.patchAndFetchById(existingShare.id, {
accessLevel: {
canRead: data.canRead,
canEdit: data.canEdit,
canDelete: data.canDelete,
}),
expiresAt: data.expiresAt ? data.expiresAt : null,
updatedAt: knex.fn.now(),
},
expiresAt: data.expiresAt || null,
});
return RecordShare.query(knex)
.findById(existingShare.id)
.findById(updated.id)
.withGraphFetched('[granteeUser]');
}
// Create new share
const [shareId] = await knex('record_shares').insert({
const share = await RecordShare.query(knex).insert({
objectDefinitionId: objectDef.id,
recordId,
granteeUserId: data.granteeUserId,
grantedByUserId: currentUser.userId,
accessLevel: JSON.stringify({
accessLevel: {
canRead: data.canRead,
canEdit: data.canEdit,
canDelete: data.canDelete,
}),
expiresAt: data.expiresAt ? data.expiresAt : null,
},
expiresAt: data.expiresAt || null,
});
return RecordShare.query(knex)
.findById(shareId)
.findById(share.id)
.withGraphFetched('[granteeUser]');
}
@@ -235,11 +233,9 @@ export class RecordSharingController {
}
// Revoke the share (soft delete)
await knex('record_shares')
.where({ id: shareId })
.update({
revokedAt: knex.fn.now(),
updatedAt: knex.fn.now(),
await RecordShare.query(knex)
.patchAndFetchById(shareId, {
revokedAt: knex.fn.now() as any,
});
return { success: true };