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 { Exclude } from 'class-transformer';
|
||||
import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm';
|
||||
import { BeforeInsert, Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn } from 'typeorm';
|
||||
|
||||
@Entity('document')
|
||||
export class DocumentEntity {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
@BeforeInsert()
|
||||
getShortId() {
|
||||
this.id = getShortId();
|
||||
}
|
||||
|
||||
@PrimaryColumn()
|
||||
public id: string;
|
||||
|
||||
@Column({ type: 'varchar', comment: '文档所属知识库 Id' })
|
||||
|
|
|
@ -1,10 +1,16 @@
|
|||
import { getShortId } from '@helpers/shortid.herlper';
|
||||
import { DEFAULT_WIKI_AVATAR } from '@think/constants';
|
||||
import { WikiStatus } from '@think/domains';
|
||||
import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm';
|
||||
import { BeforeInsert, Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn } from 'typeorm';
|
||||
|
||||
@Entity('wiki')
|
||||
export class WikiEntity {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
@BeforeInsert()
|
||||
getShortId() {
|
||||
this.id = getShortId();
|
||||
}
|
||||
|
||||
@PrimaryColumn()
|
||||
public id: string;
|
||||
|
||||
@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