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

View file

@ -44,3 +44,12 @@ export enum FieldNameMediaUpload {
} }
export const TableMediaUpload = 'media_upload'; 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 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 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 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 const TableRevision = 'revision';
export type TypeInsertRevision = Omit<
Revision,
FieldNameRevision.createdAt | FieldNameRevision.id
>;

View file

@ -42,7 +42,7 @@ export interface User {
[FieldNameUser.authorStyle]: number; [FieldNameUser.authorStyle]: number;
} }
export enum FieldNameUser { export const enum FieldNameUser {
id = 'id', id = 'id',
username = 'username', username = 'username',
guestUuid = 'guest_uuid', guestUuid = 'guest_uuid',
@ -54,3 +54,15 @@ export enum FieldNameUser {
} }
export const TableUser = 'user'; 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
>;