mirror of https://github.com/fantasticit/think.git
server: use shortId
This commit is contained in:
parent
fb6fdfffb5
commit
ce32879386
|
@ -1,10 +1,16 @@
|
||||||
|
import { getShortId } from '@helpers/shortid.herlper';
|
||||||
import { DocumentStatus } from '@think/domains';
|
import { DocumentStatus } from '@think/domains';
|
||||||
import { Exclude } from 'class-transformer';
|
import { Exclude } from 'class-transformer';
|
||||||
import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm';
|
import { BeforeInsert, Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn } from 'typeorm';
|
||||||
|
|
||||||
@Entity('document')
|
@Entity('document')
|
||||||
export class DocumentEntity {
|
export class DocumentEntity {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@BeforeInsert()
|
||||||
|
getShortId() {
|
||||||
|
this.id = getShortId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PrimaryColumn()
|
||||||
public id: string;
|
public id: string;
|
||||||
|
|
||||||
@Column({ type: 'varchar', comment: '文档所属知识库 Id' })
|
@Column({ type: 'varchar', comment: '文档所属知识库 Id' })
|
||||||
|
|
|
@ -1,10 +1,16 @@
|
||||||
|
import { getShortId } from '@helpers/shortid.herlper';
|
||||||
import { DEFAULT_WIKI_AVATAR } from '@think/constants';
|
import { DEFAULT_WIKI_AVATAR } from '@think/constants';
|
||||||
import { WikiStatus } from '@think/domains';
|
import { WikiStatus } from '@think/domains';
|
||||||
import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm';
|
import { BeforeInsert, Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn } from 'typeorm';
|
||||||
|
|
||||||
@Entity('wiki')
|
@Entity('wiki')
|
||||||
export class WikiEntity {
|
export class WikiEntity {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@BeforeInsert()
|
||||||
|
getShortId() {
|
||||||
|
this.id = getShortId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PrimaryColumn()
|
||||||
public id: string;
|
public id: string;
|
||||||
|
|
||||||
@Column({ type: 'varchar', length: 200, comment: '知识库名称' })
|
@Column({ type: 'varchar', length: 200, comment: '知识库名称' })
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
import { randomFillSync } from 'node:crypto';
|
||||||
|
|
||||||
|
const urlAlphabet = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';
|
||||||
|
|
||||||
|
// It is best to make fewer, larger requests to the crypto module to
|
||||||
|
// avoid system call overhead. So, random numbers are generated in a
|
||||||
|
// pool. The pool is a Buffer that is larger than the initial random
|
||||||
|
// request size by this multiplier. The pool is enlarged if subsequent
|
||||||
|
// requests exceed the maximum buffer size.
|
||||||
|
const POOL_SIZE_MULTIPLIER = 128;
|
||||||
|
let pool, poolOffset;
|
||||||
|
|
||||||
|
const fillPool = (bytes) => {
|
||||||
|
if (!pool || pool.length < bytes) {
|
||||||
|
pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
|
||||||
|
randomFillSync(pool);
|
||||||
|
poolOffset = 0;
|
||||||
|
} else if (poolOffset + bytes > pool.length) {
|
||||||
|
randomFillSync(pool);
|
||||||
|
poolOffset = 0;
|
||||||
|
}
|
||||||
|
poolOffset += bytes;
|
||||||
|
};
|
||||||
|
|
||||||
|
const nanoid = (size = 21) => {
|
||||||
|
// `-=` convert `size` to number to prevent `valueOf` abusing
|
||||||
|
fillPool((size -= 0));
|
||||||
|
let id = '';
|
||||||
|
// We are reading directly from the random pool to avoid creating new array
|
||||||
|
for (let i = poolOffset - size; i < poolOffset; i++) {
|
||||||
|
// It is incorrect to use bytes exceeding the alphabet size.
|
||||||
|
// The following mask reduces the random byte in the 0-255 value
|
||||||
|
// range to the 0-63 value range. Therefore, adding hacks, such
|
||||||
|
// as empty string fallback or magic numbers, is unneccessary because
|
||||||
|
// the bitmask trims bytes down to the alphabet size.
|
||||||
|
id += urlAlphabet[pool[i] & 63];
|
||||||
|
}
|
||||||
|
return id;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getShortId = () => {
|
||||||
|
return nanoid(12);
|
||||||
|
};
|
Loading…
Reference in New Issue