Skip to content

Commit 9dc78fe

Browse files
feat: mongo schema changes (#493)
1 parent f0c9c0c commit 9dc78fe

File tree

12 files changed

+179
-241
lines changed

12 files changed

+179
-241
lines changed

prisma/mongodb/schema.prisma

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ datasource db {
88
}
99

1010
model District {
11-
id String @id @default(auto()) @map("_id") @db.ObjectId
12-
code String @unique
11+
code String @id @map("_id")
1312
name String
1413
regencyCode String @map("regency_code")
1514
regency Regency @relation(fields: [regencyCode], references: [code])
@@ -19,8 +18,7 @@ model District {
1918
}
2019

2120
model Island {
22-
id String @id @default(auto()) @map("_id") @db.ObjectId
23-
code String @unique
21+
code String @id @map("_id")
2422
coordinate String
2523
isOutermostSmall Boolean @map("is_outermost_small")
2624
isPopulated Boolean @map("is_populated")
@@ -32,17 +30,15 @@ model Island {
3230
}
3331

3432
model Province {
35-
id String @id @default(auto()) @map("_id") @db.ObjectId
36-
code String @unique
33+
code String @id @map("_id")
3734
name String
3835
regencies Regency[]
3936
4037
@@map("provinces")
4138
}
4239

4340
model Regency {
44-
id String @id @default(auto()) @map("_id") @db.ObjectId
45-
code String @unique
41+
code String @id @map("_id")
4642
name String
4743
provinceCode String @map("province_code")
4844
islands Island[]
@@ -61,8 +57,7 @@ model SeederLogs {
6157
}
6258

6359
model Village {
64-
id String @id @default(auto()) @map("_id") @db.ObjectId
65-
code String @unique
60+
code String @id @map("_id")
6661
districtCode String @map("district_code")
6762
name String
6863
district District @relation(fields: [districtCode], references: [code])

src/district/district.service.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ describe('DistrictService', () => {
183183
.spyOn(prismaService.district, 'findUnique')
184184
.mockResolvedValue({
185185
...expectedDistrict,
186-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
187186
// @ts-expect-error
188187
regency: {
189188
...expectedRegency,

src/island/island.service.spec.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,6 @@ describe('IslandService', () => {
235235
.spyOn(prismaService.island, 'findUnique')
236236
.mockResolvedValue({
237237
...expectedIsland,
238-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
239238
// @ts-expect-error
240239
regency: { ...expectedRegency, province: expectedProvince },
241240
});
@@ -268,7 +267,6 @@ describe('IslandService', () => {
268267
.spyOn(prismaService.island, 'findUnique')
269268
.mockResolvedValue({
270269
...expectedIsland,
271-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
272270
// @ts-expect-error
273271
regency: null,
274272
});

src/regency/regency.service.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ describe('RegencyService', () => {
161161
.spyOn(prismaService.regency, 'findUnique')
162162
.mockReturnValue({
163163
...expectedRegency,
164-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
165164
// @ts-expect-error
166165
province: expectedProvince,
167166
});

src/village/village.service.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,6 @@ describe('VillageService', () => {
194194
.spyOn(prismaService.village, 'findUnique')
195195
.mockResolvedValue({
196196
...expectedVillage,
197-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
198197
// @ts-expect-error
199198
district: {
200199
...expectedDistrict,

test/district.e2e-spec.ts

Lines changed: 31 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
provinceRegex,
66
regencyRegex,
77
} from './helper/data-regex';
8-
import { expectIdFromMongo, getEncodedSymbols } from './helper/utils';
8+
import { getEncodedSymbols } from './helper/utils';
99

1010
describe('District (e2e)', () => {
1111
const baseUrl = '/districts';
@@ -23,13 +23,11 @@ describe('District (e2e)', () => {
2323
const districts = await tester.expectData<District[]>(baseUrl);
2424

2525
for (const district of districts) {
26-
expect(district).toEqual(
27-
expectIdFromMongo({
28-
code: expect.stringMatching(districtRegex.code),
29-
name: expect.stringMatching(districtRegex.name),
30-
regencyCode: district.code.slice(0, 4),
31-
}),
32-
);
26+
expect(district).toEqual({
27+
code: expect.stringMatching(districtRegex.code),
28+
name: expect.stringMatching(districtRegex.name),
29+
regencyCode: district.code.slice(0, 4),
30+
});
3331
}
3432
});
3533

@@ -66,13 +64,11 @@ describe('District (e2e)', () => {
6664
);
6765

6866
for (const district of districts) {
69-
expect(district).toEqual(
70-
expectIdFromMongo({
71-
code: expect.stringMatching(districtRegex.code),
72-
name: expect.stringMatching(new RegExp(testName, 'i')),
73-
regencyCode: district.code.slice(0, 4),
74-
}),
75-
);
67+
expect(district).toEqual({
68+
code: expect.stringMatching(districtRegex.code),
69+
name: expect.stringMatching(new RegExp(testName, 'i')),
70+
regencyCode: district.code.slice(0, 4),
71+
});
7672
}
7773
});
7874

@@ -83,13 +79,11 @@ describe('District (e2e)', () => {
8379
);
8480

8581
for (const district of districts) {
86-
expect(district).toEqual(
87-
expectIdFromMongo({
88-
code: expect.stringMatching(districtRegex.code),
89-
name: expect.stringMatching(districtRegex.name),
90-
regencyCode,
91-
}),
92-
);
82+
expect(district).toEqual({
83+
code: expect.stringMatching(districtRegex.code),
84+
name: expect.stringMatching(districtRegex.name),
85+
regencyCode,
86+
});
9387
}
9488
});
9589
});
@@ -111,24 +105,22 @@ describe('District (e2e)', () => {
111105
`${baseUrl}/${testCode}`,
112106
);
113107

114-
expect(district).toEqual(
115-
expectIdFromMongo({
116-
code: testCode,
117-
name: expect.stringMatching(districtRegex.name),
118-
regencyCode: testCode.slice(0, 4),
119-
parent: {
120-
regency: expectIdFromMongo({
121-
code: testCode.slice(0, 4),
122-
name: expect.stringMatching(regencyRegex.name),
123-
provinceCode: testCode.slice(0, 2),
124-
}),
125-
province: expectIdFromMongo({
126-
code: testCode.slice(0, 2),
127-
name: expect.stringMatching(provinceRegex.name),
128-
}),
108+
expect(district).toEqual({
109+
code: testCode,
110+
name: expect.stringMatching(districtRegex.name),
111+
regencyCode: testCode.slice(0, 4),
112+
parent: {
113+
regency: {
114+
code: testCode.slice(0, 4),
115+
name: expect.stringMatching(regencyRegex.name),
116+
provinceCode: testCode.slice(0, 2),
129117
},
130-
}),
131-
);
118+
province: {
119+
code: testCode.slice(0, 2),
120+
name: expect.stringMatching(provinceRegex.name),
121+
},
122+
},
123+
});
132124
});
133125
});
134126

test/helper/data-regex.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,33 @@ type DataRegex<T extends Record<string | number | symbol, unknown>> = Partial<
44
Record<keyof T, RegExp>
55
>;
66

7-
export const provinceRegex: DataRegex<Province> = {
7+
export const provinceRegex = {
88
code: /^\d{2}$/,
99
name: /^(?!\s)(?!PROVINSI)[A-Z ]+$/,
10-
};
10+
} as const satisfies DataRegex<Province>;
1111

12-
export const regencyRegex: DataRegex<Regency> = {
12+
export const regencyRegex = {
1313
code: /^\d{4}$/,
1414
name: /^(?:KABUPATEN|KOTA)[A-Z ]+$/,
1515
provinceCode: provinceRegex.code,
16-
};
16+
} as const satisfies DataRegex<Regency>;
1717

18-
export const districtRegex: DataRegex<District> = {
18+
export const districtRegex = {
1919
code: /^\d{6}$/,
2020
name: /^[a-zA-Z0-9\-'.\\/() ]+$/,
2121
regencyCode: regencyRegex.code,
22-
};
22+
} as const satisfies DataRegex<District>;
2323

24-
export const villageRegex: DataRegex<Village> = {
24+
export const villageRegex = {
2525
code: /^\d{10}$/,
2626
name: /^[a-zA-Z0-9\-'".*\\/() ]+$/,
2727
districtCode: districtRegex.code,
28-
};
28+
} as const satisfies DataRegex<Village>;
2929

30-
export const islandRegex: DataRegex<Island> = {
30+
export const islandRegex = {
3131
code: /^\d{9}$/,
3232
name: /^[a-zA-Z0-9\-'/ ]+$/,
3333
coordinate:
3434
/^([0-8][0-9]|90)°([0-5][0-9]|60)'(([0-5][0-9].[0-9]{2})|60.00)"\s(N|S)\s(0\d{2}|1([0-7][0-9]|80))°([0-5][0-9]|60)'(([0-5][0-9].[0-9]{2})|60.00)"\s(E|W)$/,
3535
regencyCode: /^\d{4}|$/,
36-
};
36+
} as const satisfies DataRegex<Island>;

test/helper/utils.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { isDBProvider } from '@/common/utils/db/provider';
2-
31
/**
42
* All symbol characters.
53
*/
@@ -26,15 +24,3 @@ export function getEncodedSymbols(
2624
.filter((char) => !exclude.includes(char))
2725
.map((char) => encodeURIComponent(char));
2826
}
29-
30-
/**
31-
* Expect the data contains the `id` property if the database provider is MongoDB.
32-
*/
33-
export function expectIdFromMongo(data: Record<keyof any, any>) {
34-
return {
35-
...data,
36-
id: isDBProvider('mongodb')
37-
? expect.stringMatching(/^[0-9a-fA-F]{24}$/)
38-
: undefined,
39-
};
40-
}

0 commit comments

Comments
 (0)