refactor(knex): export partial types for insert and update

We need these types when crafting objects to be passed into knex's
.insert() and .update() methods.

Signed-off-by: Erik Michelson <github@erik.michelson.eu>
This commit is contained in:
Erik Michelson 2025-03-14 23:27:33 +01:00
parent 4790705f0d
commit 6e151c8a1b
No known key found for this signature in database
GPG key ID: DB99ADDDC5C0AF82
11 changed files with 96 additions and 62 deletions

View file

@ -28,3 +28,5 @@ export enum FieldNameAlias {
}
export const TableAlias = 'alias';
export type TypeUpdateAlias = Pick<Alias, FieldNameAlias.isPrimary>;

View file

@ -39,3 +39,6 @@ export enum FieldNameApiToken {
}
export const TableApiToken = 'api_token';
export type TypeInsertApiToken = Omit<ApiToken, FieldNameApiToken.lastUsedAt>;
export type TypeUpdateApiToken = Pick<ApiToken, FieldNameApiToken.lastUsedAt>;

View file

@ -31,3 +31,8 @@ export enum FieldNameGroup {
}
export const TableGroup = 'group';
export type TypeInsertGroup = Omit<Group, FieldNameGroup.id>;
export type TypeUpdateGroup = Pick<
Group,
FieldNameGroup.name | FieldNameGroup.displayName
>;

View file

@ -42,3 +42,12 @@ export enum FieldNameIdentity {
}
export const TableIdentity = 'identity';
export type TypeInsertIdentity = Omit<
Identity,
FieldNameIdentity.createdAt | FieldNameIdentity.updatedAt
>;
export type TypeUpdateIdentity = Pick<
Identity,
FieldNameIdentity.passwordHash | FieldNameIdentity.updatedAt
>;

View file

@ -5,28 +5,13 @@
*/
import { Knex } from 'knex';
import { Alias, TypeUpdateAlias } from './alias';
import { ApiToken, TypeInsertApiToken, TypeUpdateApiToken } from './api-token';
import { Group, TypeInsertGroup, TypeUpdateGroup } from './group';
import { Identity, TypeInsertIdentity, TypeUpdateIdentity } from './identity';
import {
Alias,
ApiToken,
AuthorshipInfo,
FieldNameAlias,
FieldNameApiToken,
FieldNameGroup,
FieldNameIdentity,
FieldNameMediaUpload,
FieldNameNote,
FieldNameNoteGroupPermission,
FieldNameNoteUserPermission,
FieldNameRevision,
FieldNameUser,
Group,
GroupUser,
Identity,
MediaUpload,
Note,
NoteGroupPermission,
NoteUserPermission,
Revision,
RevisionTag,
TableAlias,
TableApiToken,
@ -42,77 +27,65 @@ import {
TableRevisionTag,
TableUser,
TableUserPinnedNote,
User,
UserPinnedNote,
} from './index';
import {
MediaUpload,
TypeInsertMediaUpload,
TypeUpdateMediaUpload,
} from './media-upload';
import { Note, TypeInsertNote, TypeUpdateNote } from './note';
import {
NoteGroupPermission,
TypeUpdateNoteGroupPermission,
} from './note-group-permission';
import {
NoteUserPermission,
TypeUpdateNoteUserPermission,
} from './note-user-permission';
import { Revision, TypeInsertRevision } from './revision';
import { TypeInsertUser, TypeUpdateUser, User } from './user';
/* eslint-disable @typescript-eslint/naming-convention */
declare module 'knex/types/tables.js' {
interface Tables {
[TableAlias]: Knex.CompositeTableType<
Alias,
Alias,
Pick<Alias, FieldNameAlias.isPrimary>
>;
[TableAlias]: Knex.CompositeTableType<Alias, Alias, TypeUpdateAlias>;
[TableApiToken]: Knex.CompositeTableType<
ApiToken,
Omit<ApiToken, FieldNameApiToken.lastUsedAt>,
Pick<ApiToken, FieldNameApiToken.lastUsedAt>
TypeInsertApiToken,
TypeUpdateApiToken
>;
[TableAuthorshipInfo]: AuthorshipInfo;
[TableGroup]: Knex.CompositeTableType<
Group,
Omit<Group, FieldNameGroup.id>,
Pick<Group, FieldNameGroup.name | FieldNameGroup.displayName>
TypeInsertGroup,
TypeUpdateGroup
>;
[TableGroupUser]: GroupUser;
[TableIdentity]: Knex.CompositeTableType<
Identity,
Omit<Identity, FieldNameIdentity.createdAt | FieldNameIdentity.updatedAt>,
Pick<
Identity,
FieldNameIdentity.passwordHash | FieldNameIdentity.updatedAt
>
TypeInsertIdentity,
TypeUpdateIdentity
>;
[TableMediaUpload]: Knex.CompositeTableType<
MediaUpload,
Omit<
MediaUpload,
FieldNameMediaUpload.createdAt | FieldNameMediaUpload.uuid
>,
Pick<MediaUpload, FieldNameMediaUpload.noteId>
>;
[TableNote]: Knex.CompositeTableType<
Note,
Omit<Note, FieldNameNote.createdAt | FieldNameNote.id>,
Pick<Note, FieldNameNote.ownerId>
TypeInsertMediaUpload,
TypeUpdateMediaUpload
>;
[TableNote]: Knex.CompositeTableType<Note, TypeInsertNote, TypeUpdateNote>;
[TableNoteGroupPermission]: Knex.CompositeTableType<
NoteGroupPermission,
NoteGroupPermission,
Pick<NoteGroupPermission, FieldNameNoteGroupPermission.canEdit>
TypeUpdateNoteGroupPermission
>;
[TableNoteUserPermission]: Knex.CompositeTableType<
NoteUserPermission,
NoteUserPermission,
Pick<NoteUserPermission, FieldNameNoteUserPermission.canEdit>
>;
[TableRevision]: Knex.CompositeTableType<
Revision,
Omit<Revision, FieldNameRevision.createdAt | FieldNameRevision.id>
TypeUpdateNoteUserPermission
>;
[TableRevision]: Knex.CompositeTableType<Revision, TypeInsertRevision>;
[TableRevisionTag]: RevisionTag;
[TableUser]: Knex.CompositeTableType<
User,
Omit<User, FieldNameUser.id | FieldNameUser.createdAt>,
Pick<
User,
| FieldNameUser.displayName
| FieldNameUser.photoUrl
| FieldNameUser.email
| FieldNameUser.authorStyle
>
>;
[TableUser]: Knex.CompositeTableType<User, TypeInsertUser, TypeUpdateUser>;
[TableUserPinnedNote]: UserPinnedNote;
}
}

View file

@ -44,3 +44,12 @@ export enum FieldNameMediaUpload {
}
export const TableMediaUpload = 'media_upload';
export type TypeInsertMediaUpload = Omit<
MediaUpload,
FieldNameMediaUpload.createdAt | FieldNameMediaUpload.uuid
>;
export type TypeUpdateMediaUpload = Pick<
MediaUpload,
FieldNameMediaUpload.noteId
>;

View file

@ -24,3 +24,8 @@ export enum FieldNameNoteGroupPermission {
}
export const TableNoteGroupPermission = 'note_group_permission';
export type TypeUpdateNoteGroupPermission = Pick<
NoteGroupPermission,
FieldNameNoteGroupPermission.canEdit
>;

View file

@ -24,3 +24,8 @@ export enum FieldNameNoteUserPermission {
}
export const TableNoteUserPermission = 'note_user_permission';
export type TypeUpdateNoteUserPermission = Pick<
NoteUserPermission,
FieldNameNoteUserPermission.canEdit
>;

View file

@ -31,3 +31,9 @@ export enum FieldNameNote {
}
export const TableNote = 'note';
export type TypeInsertNote = Omit<
Note,
FieldNameNote.createdAt | FieldNameNote.id
>;
export type TypeUpdateNote = Pick<Note, FieldNameNote.ownerId>;

View file

@ -50,3 +50,8 @@ export enum FieldNameRevision {
}
export const TableRevision = 'revision';
export type TypeInsertRevision = Omit<
Revision,
FieldNameRevision.createdAt | FieldNameRevision.id
>;

View file

@ -42,7 +42,7 @@ export interface User {
[FieldNameUser.authorStyle]: number;
}
export enum FieldNameUser {
export const enum FieldNameUser {
id = 'id',
username = 'username',
guestUuid = 'guest_uuid',
@ -54,3 +54,15 @@ export enum FieldNameUser {
}
export const TableUser = 'user';
export type TypeInsertUser = Omit<
User,
FieldNameUser.id | FieldNameUser.createdAt
>;
export type TypeUpdateUser = Pick<
User,
| FieldNameUser.displayName
| FieldNameUser.photoUrl
| FieldNameUser.email
| FieldNameUser.authorStyle
>;