diff --git a/package.json b/package.json index ead85a48..4531b7dc 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,8 @@ "@paralleldrive/cuid2": "2.2.2", "@prisma/generator-helper": "5.22.0", "@prisma/internals": "5.22.0", - "bson": "6.10.3" + "bson": "6.10.3", + "nanoid": "^3.3.11" }, "peerDependencies": { "@prisma/client": "*", diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 5952082c..71aee019 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -36,7 +36,7 @@ model User { } model Profile { - id Int @id @default(autoincrement()) + id String @id @default(nanoid()) bio String? gender Gender user User @relation(fields: [userId], references: [id], onDelete: Cascade) diff --git a/src/__tests__/create/create.test.ts b/src/__tests__/create/create.test.ts index dc991eee..ddf51040 100755 --- a/src/__tests__/create/create.test.ts +++ b/src/__tests__/create/create.test.ts @@ -1,4 +1,4 @@ -import { PrismaClient, Role, User } from '@prisma/client'; +import { Gender, PrismaClient, Profile, Role, User } from '@prisma/client'; import { buildUser, @@ -22,6 +22,8 @@ describe('create', () => { const mockUsers: User[] = []; const realUsers: User[] = []; + const mockProfiles: Profile[] = []; + const realProfiles: Profile[] = []; const data = { user1: { email: 'user4@company.com', password: 'password', warnings: 0 }, @@ -39,6 +41,7 @@ describe('create', () => { }, user4: { email: 'user-many-1@company.com', password: 'password', warnings: 0, birthday: new Date('01-01-1971') }, user5: { email: 'user-many-2@company.com', password: 'password', warnings: 0, birthday: new Date('12-12-2012') }, + profile1: { bio: 'User 1 profile', gender: Gender.FEMALE, userId: 1 }, }; beforeAll(async () => { @@ -51,10 +54,12 @@ describe('create', () => { mockUsers.push(await prismock.user.create({ data: data.user1 })); mockUsers.push(await prismock.user.create({ data: data.user2 })); mockUsers.push(await prismock.user.create({ data: data.user3 })); + mockProfiles.push(await prismock.profile.create({ data: data.profile1 })); realUsers.push(await prisma.user.create({ data: data.user1 })); realUsers.push(await prisma.user.create({ data: data.user2 })); realUsers.push(await prisma.user.create({ data: data.user3 })); + realProfiles.push(await prisma.profile.create({ data: data.profile1 })); }); describe('create', () => { @@ -93,6 +98,13 @@ describe('create', () => { expect(formatEntry(mockUsers[1])).toEqual(formatEntry(expected)); }); + it('Should create with nanoid', () => { + const nanoidRegex = /^[a-zA-Z0-9_-]{21}$/; + + expect(realProfiles[0].id).toMatch(nanoidRegex); + expect(mockProfiles[0].id).toMatch(nanoidRegex); + }); + it('Should creat with default cuid value', async () => { const realBlog3 = await prisma.blog.create({ data: { title: 'blog-3', category: '3' } }); const mockBlog3 = await prismock.blog.create({ data: { title: 'blog-3', category: '3' } }); diff --git a/src/lib/operations/create.ts b/src/lib/operations/create.ts index 2762bc34..c5adce89 100755 --- a/src/lib/operations/create.ts +++ b/src/lib/operations/create.ts @@ -2,6 +2,7 @@ import { Decimal } from '@prisma/client/runtime/library'; import { DMMF } from '@prisma/generator-helper'; import { ObjectId } from 'bson'; import { createId as createCuid } from '@paralleldrive/cuid2'; +import { nanoid } from 'nanoid'; import { Delegate, DelegateProperties, Item } from '../delegate'; import { pipe, removeUndefined, uuid } from '../helpers'; @@ -44,6 +45,12 @@ const defaultFieldhandlers: [ return uuid(); }, ], + [ + (field: DMMF.Field) => (field.default as DMMF.FieldDefault)?.name?.startsWith('nanoid'), + (_properties: DelegateProperties, _field: DMMF.Field) => { + return nanoid(); + }, + ], [ (field: DMMF.Field) => (field.default as DMMF.FieldDefault)?.name === 'auto', () => {