simpledi-app-generator 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generate_crud_use_cases.js +71 -32
- package/dist/generate_crud_use_cases.js.map +1 -1
- package/dist/generate_skeleton.d.ts.map +1 -1
- package/dist/generate_skeleton.js +57 -2
- package/dist/generate_skeleton.js.map +1 -1
- package/dist/templates/schema.ts +2 -0
- package/dist/templates/src/core/user/IUserRepository.ts +8 -0
- package/dist/templates/src/core/user/IUserService.ts +8 -0
- package/dist/templates/src/core/user/User.ts +71 -0
- package/dist/templates/src/core/user/UserModule.ts +7 -0
- package/dist/templates/src/core/user/UserRepository.spec.ts +63 -0
- package/dist/templates/src/core/user/UserRepository.ts +31 -0
- package/dist/templates/src/core/user/UserRepositoryModule.ts +15 -0
- package/dist/templates/src/core/user/UserService.ts +34 -0
- package/dist/templates/src/core/user/UserServiceModule.ts +14 -0
- package/dist/templates/src/core/user/baseZodUserSchema.ts +31 -0
- package/dist/templates/src/lib/functions/getContextUser.ts +5 -0
- package/dist/templates/src/lib/functions/test-related/createSignedUpUser.ts +44 -0
- package/dist/templates/src/lib/functions/test-related/getOneUserSignupData.ts +28 -0
- package/dist/templates/src/lib/functions/test-related/getTestServer.ts +28 -0
- package/dist/templates/src/lib/types/AdminRoleEnum.ts +6 -0
- package/dist/templates/src/lib/types/AnyRoleEnum.ts +5 -0
- package/dist/templates/src/lib/types/PhoneNumberTypeEnum.ts +7 -0
- package/dist/templates/src/lib/types/UserRoleEnum.ts +4 -0
- package/dist/templates/src/lib/types/UserTypeEnum.ts +4 -0
- package/dist/templates/src/middlewares/authGuard.ts +46 -0
- package/dist/templates/src/middlewares/index.ts +2 -0
- package/dist/templates/src/middlewares/roleGuard.ts +16 -0
- package/package.json +1 -1
|
@@ -117,7 +117,9 @@ import { inject } from '@kanian77/simple-di';
|
|
|
117
117
|
import { ${useCaseName}, ${toUpperSnakeCase(useCaseName)}_USE_CASE_TOKEN } from './${useCaseName}';
|
|
118
118
|
import { ${useCaseName}Failure } from './outputs/${useCaseName}Failure';
|
|
119
119
|
import { ${EntityName}InsertSchema } from '@root/core/${kebabName}/${EntityName}';
|
|
120
|
-
import {
|
|
120
|
+
import { getContextUser } from '@root/lib/functions/getContextUser';
|
|
121
|
+
import { authGuard } from '@root/middlewares/authGuard';
|
|
122
|
+
import { roleGuard } from '@root/middlewares/roleGuard';
|
|
121
123
|
import { AdminRoleEnum } from '@root/lib';
|
|
122
124
|
|
|
123
125
|
const ${toCamelCase(useCaseName)}Routes = new Hono();
|
|
@@ -245,7 +247,9 @@ import { ${useCaseName}, ${toUpperSnakeCase(useCaseName)}_USE_CASE_TOKEN } from
|
|
|
245
247
|
import { ${useCaseName}Failure } from './outputs/${useCaseName}Failure';
|
|
246
248
|
import type { ${useCaseName}Input } from './inputs/${useCaseName}Input';
|
|
247
249
|
import { ${EntityName}UpdateSchema } from '@root/core/${kebabName}/${EntityName}';
|
|
248
|
-
import {
|
|
250
|
+
import { getContextUser } from '@root/lib/functions/getContextUser';
|
|
251
|
+
import { authGuard } from '@root/middlewares/authGuard';
|
|
252
|
+
import { roleGuard } from '@root/middlewares/roleGuard';
|
|
249
253
|
import { AdminRoleEnum } from '@root/lib';
|
|
250
254
|
|
|
251
255
|
const ${toCamelCase(useCaseName)}Routes = new Hono();
|
|
@@ -564,7 +568,8 @@ import { StatusCodes } from 'http-status-codes';
|
|
|
564
568
|
import { inject } from '@kanian77/simple-di';
|
|
565
569
|
import { ${useCaseName}, ${toUpperSnakeCase(useCaseName)}_USE_CASE_TOKEN } from './${useCaseName}';
|
|
566
570
|
import { ${useCaseName}Failure } from './outputs/${useCaseName}Failure';
|
|
567
|
-
import { authGuard
|
|
571
|
+
import { authGuard } from '@root/middlewares/authGuard';
|
|
572
|
+
import { roleGuard } from '@root/middlewares/roleGuard';
|
|
568
573
|
import { AdminRoleEnum } from '@root/lib';
|
|
569
574
|
|
|
570
575
|
const ${toCamelCase(useCaseName)}Routes = new Hono();
|
|
@@ -692,7 +697,7 @@ async function registerInUseCaseModule(srcDir, config) {
|
|
|
692
697
|
}
|
|
693
698
|
// ============ E2E TESTS GENERATION ============
|
|
694
699
|
async function generateCreateE2ETest(baseDir, config) {
|
|
695
|
-
const { EntityName, kebabName, pluralKebab } = config;
|
|
700
|
+
const { EntityName, entityName, kebabName, pluralKebab } = config;
|
|
696
701
|
const useCaseDir = join(baseDir, `create-${kebabName}`);
|
|
697
702
|
const testContent = `import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
|
|
698
703
|
import { EnvFileNames, UserRoleEnum, UserTypeEnum } from '@root/lib';
|
|
@@ -706,12 +711,16 @@ import { APP, AppModule } from '@root/AppModule';
|
|
|
706
711
|
import type { Hono } from 'hono';
|
|
707
712
|
import * as schema from '@root/schema';
|
|
708
713
|
import { eq } from 'drizzle-orm';
|
|
709
|
-
import { getTestServer, type TestServer } from '@root/lib/functions/getTestServer';
|
|
714
|
+
import { getTestServer, type TestServer } from '@root/lib/functions/test-related/getTestServer';
|
|
715
|
+
import { createOneSignedUpUser, deleteCreatedSignedUsers } from '@root/lib/functions/test-related/createSignedUpUser';
|
|
716
|
+
import { USER_REPOSITORY_INTERFACE, type UserRepository } from '@root/core/user/IUserRepository';
|
|
717
|
+
import { UserModule } from '@root/core/user/UserModule';
|
|
710
718
|
|
|
711
719
|
describe('Create${EntityName} e2e', () => {
|
|
712
720
|
let dbService: DbService;
|
|
713
721
|
let server: TestServer;
|
|
714
722
|
let app: Hono;
|
|
723
|
+
let userRepository: UserRepository;
|
|
715
724
|
|
|
716
725
|
beforeAll(async () => {
|
|
717
726
|
const TestModule = new Module({
|
|
@@ -720,17 +729,20 @@ describe('Create${EntityName} e2e', () => {
|
|
|
720
729
|
getConfigModule(EnvFileNames.TESTING),
|
|
721
730
|
getDbModule(),
|
|
722
731
|
CoreModule,
|
|
732
|
+
UserModule,
|
|
723
733
|
UseCaseModule,
|
|
724
734
|
],
|
|
725
735
|
});
|
|
726
736
|
bootstrap(TestModule);
|
|
727
737
|
dbService = inject<DbService>(DB_SERVICE);
|
|
728
738
|
app = inject<Hono>(APP);
|
|
739
|
+
userRepository = inject(USER_REPOSITORY_INTERFACE);
|
|
729
740
|
server = await getTestServer(app);
|
|
730
741
|
});
|
|
731
742
|
|
|
732
743
|
afterAll(async () => {
|
|
733
|
-
await dbService.getDb().delete(schema.${
|
|
744
|
+
await dbService.getDb().delete(schema.${entityName}Schema).execute();
|
|
745
|
+
await deleteCreatedSignedUsers(userRepository);
|
|
734
746
|
});
|
|
735
747
|
|
|
736
748
|
it('fails if unauthenticated', async () => {
|
|
@@ -743,7 +755,7 @@ describe('Create${EntityName} e2e', () => {
|
|
|
743
755
|
});
|
|
744
756
|
|
|
745
757
|
it('fails with fake generated ID for createdBy', async () => {
|
|
746
|
-
const { token } = await
|
|
758
|
+
const { token } = await createOneSignedUpUser(userRepository, {
|
|
747
759
|
userType: UserTypeEnum.ADMIN,
|
|
748
760
|
role: UserRoleEnum.AUTHENTICATED,
|
|
749
761
|
});
|
|
@@ -770,8 +782,8 @@ describe('Create${EntityName} e2e', () => {
|
|
|
770
782
|
expect(body.result.createdBy).not.toBe('fake-malicious-id');
|
|
771
783
|
|
|
772
784
|
// Direct DB check
|
|
773
|
-
const row = await dbService.getDb().query.${
|
|
774
|
-
where: eq(schema.${
|
|
785
|
+
const row = await dbService.getDb().query.${entityName}Schema.findFirst({
|
|
786
|
+
where: eq(schema.${entityName}Schema.id, body.result.id)
|
|
775
787
|
});
|
|
776
788
|
expect(row).toBeDefined();
|
|
777
789
|
expect(row!.createdBy).not.toBe('fake-malicious-id');
|
|
@@ -781,7 +793,7 @@ describe('Create${EntityName} e2e', () => {
|
|
|
781
793
|
await writeFile(join(useCaseDir, `Create${EntityName}.e2e.spec.ts`), testContent);
|
|
782
794
|
}
|
|
783
795
|
async function generateUpdateE2ETest(baseDir, config) {
|
|
784
|
-
const { EntityName, kebabName, pluralKebab } = config;
|
|
796
|
+
const { EntityName, entityName, kebabName, pluralKebab } = config;
|
|
785
797
|
const useCaseDir = join(baseDir, `update-${kebabName}`);
|
|
786
798
|
const testContent = `import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
|
|
787
799
|
import { EnvFileNames, UserRoleEnum, UserTypeEnum } from '@root/lib';
|
|
@@ -795,13 +807,17 @@ import { APP, AppModule } from '@root/AppModule';
|
|
|
795
807
|
import type { Hono } from 'hono';
|
|
796
808
|
import * as schema from '@root/schema';
|
|
797
809
|
import { eq } from 'drizzle-orm';
|
|
798
|
-
import { getTestServer, type TestServer } from '@root/lib/functions/getTestServer';
|
|
810
|
+
import { getTestServer, type TestServer } from '@root/lib/functions/test-related/getTestServer';
|
|
811
|
+
import { createOneSignedUpUser, deleteCreatedSignedUsers } from '@root/lib/functions/test-related/createSignedUpUser';
|
|
812
|
+
import { USER_REPOSITORY_INTERFACE, type UserRepository } from '@root/core/user/IUserRepository';
|
|
813
|
+
import { UserModule } from '@root/core/user/UserModule';
|
|
799
814
|
|
|
800
815
|
describe('Update${EntityName} e2e', () => {
|
|
801
816
|
let dbService: DbService;
|
|
802
817
|
let server: TestServer;
|
|
803
818
|
let app: Hono;
|
|
804
819
|
let targetId: string;
|
|
820
|
+
let userRepository: UserRepository;
|
|
805
821
|
|
|
806
822
|
beforeAll(async () => {
|
|
807
823
|
const TestModule = new Module({
|
|
@@ -810,19 +826,22 @@ describe('Update${EntityName} e2e', () => {
|
|
|
810
826
|
getConfigModule(EnvFileNames.TESTING),
|
|
811
827
|
getDbModule(),
|
|
812
828
|
CoreModule,
|
|
829
|
+
UserModule,
|
|
813
830
|
UseCaseModule,
|
|
814
831
|
],
|
|
815
832
|
});
|
|
816
833
|
bootstrap(TestModule);
|
|
817
834
|
dbService = inject<DbService>(DB_SERVICE);
|
|
818
835
|
app = inject<Hono>(APP);
|
|
836
|
+
userRepository = inject(USER_REPOSITORY_INTERFACE);
|
|
819
837
|
server = await getTestServer(app);
|
|
820
838
|
|
|
821
839
|
// TODO: Seed a target entity here and save targetId
|
|
822
840
|
});
|
|
823
841
|
|
|
824
842
|
afterAll(async () => {
|
|
825
|
-
await dbService.getDb().delete(schema.${
|
|
843
|
+
await dbService.getDb().delete(schema.${entityName}Schema).execute();
|
|
844
|
+
await deleteCreatedSignedUsers(userRepository);
|
|
826
845
|
});
|
|
827
846
|
|
|
828
847
|
it('fails if unauthenticated', async () => {
|
|
@@ -835,7 +854,7 @@ describe('Update${EntityName} e2e', () => {
|
|
|
835
854
|
});
|
|
836
855
|
|
|
837
856
|
it('successfully updates and overrides updatedBy context', async () => {
|
|
838
|
-
const { token } = await
|
|
857
|
+
const { token } = await createOneSignedUpUser(userRepository, {
|
|
839
858
|
userType: UserTypeEnum.ADMIN,
|
|
840
859
|
role: UserRoleEnum.AUTHENTICATED,
|
|
841
860
|
});
|
|
@@ -859,8 +878,8 @@ describe('Update${EntityName} e2e', () => {
|
|
|
859
878
|
|
|
860
879
|
expect(body.result.updatedBy).not.toBe('hacker-id');
|
|
861
880
|
|
|
862
|
-
const row = await dbService.getDb().query.${
|
|
863
|
-
where: eq(schema.${
|
|
881
|
+
const row = await dbService.getDb().query.${entityName}Schema.findFirst({
|
|
882
|
+
where: eq(schema.${entityName}Schema.id, targetId)
|
|
864
883
|
});
|
|
865
884
|
expect(row!.updatedBy).not.toBe('hacker-id');
|
|
866
885
|
});
|
|
@@ -869,7 +888,7 @@ describe('Update${EntityName} e2e', () => {
|
|
|
869
888
|
await writeFile(join(useCaseDir, `Update${EntityName}.e2e.spec.ts`), testContent);
|
|
870
889
|
}
|
|
871
890
|
async function generateGetE2ETest(baseDir, config) {
|
|
872
|
-
const { EntityName, kebabName, pluralKebab } = config;
|
|
891
|
+
const { EntityName, entityName, kebabName, pluralKebab } = config;
|
|
873
892
|
const useCaseDir = join(baseDir, `get-${kebabName}`);
|
|
874
893
|
const testContent = `import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
|
|
875
894
|
import { EnvFileNames, UserRoleEnum, UserTypeEnum } from '@root/lib';
|
|
@@ -882,13 +901,17 @@ import { DB_SERVICE, type DbService } from 'db/DbService';
|
|
|
882
901
|
import { APP, AppModule } from '@root/AppModule';
|
|
883
902
|
import type { Hono } from 'hono';
|
|
884
903
|
import * as schema from '@root/schema';
|
|
885
|
-
import { getTestServer, type TestServer } from '@root/lib/functions/getTestServer';
|
|
904
|
+
import { getTestServer, type TestServer } from '@root/lib/functions/test-related/getTestServer';
|
|
905
|
+
import { createOneSignedUpUser, deleteCreatedSignedUsers } from '@root/lib/functions/test-related/createSignedUpUser';
|
|
906
|
+
import { USER_REPOSITORY_INTERFACE, type UserRepository } from '@root/core/user/IUserRepository';
|
|
907
|
+
import { UserModule } from '@root/core/user/UserModule';
|
|
886
908
|
|
|
887
909
|
describe('Get${EntityName} e2e', () => {
|
|
888
910
|
let dbService: DbService;
|
|
889
911
|
let server: TestServer;
|
|
890
912
|
let app: Hono;
|
|
891
913
|
let targetId: string;
|
|
914
|
+
let userRepository: UserRepository;
|
|
892
915
|
|
|
893
916
|
beforeAll(async () => {
|
|
894
917
|
const TestModule = new Module({
|
|
@@ -897,19 +920,22 @@ describe('Get${EntityName} e2e', () => {
|
|
|
897
920
|
getConfigModule(EnvFileNames.TESTING),
|
|
898
921
|
getDbModule(),
|
|
899
922
|
CoreModule,
|
|
923
|
+
UserModule,
|
|
900
924
|
UseCaseModule,
|
|
901
925
|
],
|
|
902
926
|
});
|
|
903
927
|
bootstrap(TestModule);
|
|
904
928
|
dbService = inject<DbService>(DB_SERVICE);
|
|
905
929
|
app = inject<Hono>(APP);
|
|
930
|
+
userRepository = inject(USER_REPOSITORY_INTERFACE);
|
|
906
931
|
server = await getTestServer(app);
|
|
907
932
|
|
|
908
933
|
// TODO: Seed an entity here and assign targetId
|
|
909
934
|
});
|
|
910
935
|
|
|
911
936
|
afterAll(async () => {
|
|
912
|
-
await dbService.getDb().delete(schema.${
|
|
937
|
+
await dbService.getDb().delete(schema.${entityName}Schema).execute();
|
|
938
|
+
await deleteCreatedSignedUsers(userRepository);
|
|
913
939
|
});
|
|
914
940
|
|
|
915
941
|
it('fails if unauthenticated (assuming route requires auth)', async () => {
|
|
@@ -919,7 +945,7 @@ describe('Get${EntityName} e2e', () => {
|
|
|
919
945
|
});
|
|
920
946
|
|
|
921
947
|
it('retrieves the entity', async () => {
|
|
922
|
-
const { token } = await
|
|
948
|
+
const { token } = await createOneSignedUpUser(userRepository, {
|
|
923
949
|
userType: UserTypeEnum.ADMIN,
|
|
924
950
|
role: UserRoleEnum.AUTHENTICATED,
|
|
925
951
|
});
|
|
@@ -940,7 +966,7 @@ describe('Get${EntityName} e2e', () => {
|
|
|
940
966
|
await writeFile(join(useCaseDir, `Get${EntityName}.e2e.spec.ts`), testContent);
|
|
941
967
|
}
|
|
942
968
|
async function generateListE2ETest(baseDir, config) {
|
|
943
|
-
const { EntityName, kebabName, pluralKebab, pluralPascal } = config;
|
|
969
|
+
const { EntityName, entityName, kebabName, pluralKebab, pluralPascal } = config;
|
|
944
970
|
const useCaseDir = join(baseDir, `list-${pluralKebab}`);
|
|
945
971
|
const testContent = `import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
|
|
946
972
|
import { EnvFileNames, UserRoleEnum, UserTypeEnum } from '@root/lib';
|
|
@@ -953,12 +979,16 @@ import { DB_SERVICE, type DbService } from 'db/DbService';
|
|
|
953
979
|
import { APP, AppModule } from '@root/AppModule';
|
|
954
980
|
import type { Hono } from 'hono';
|
|
955
981
|
import * as schema from '@root/schema';
|
|
956
|
-
import { getTestServer, type TestServer } from '@root/lib/functions/getTestServer';
|
|
982
|
+
import { getTestServer, type TestServer } from '@root/lib/functions/test-related/getTestServer';
|
|
983
|
+
import { createOneSignedUpUser, deleteCreatedSignedUsers } from '@root/lib/functions/test-related/createSignedUpUser';
|
|
984
|
+
import { USER_REPOSITORY_INTERFACE, type UserRepository } from '@root/core/user/IUserRepository';
|
|
985
|
+
import { UserModule } from '@root/core/user/UserModule';
|
|
957
986
|
|
|
958
987
|
describe('List${pluralPascal} e2e', () => {
|
|
959
988
|
let dbService: DbService;
|
|
960
989
|
let server: TestServer;
|
|
961
990
|
let app: Hono;
|
|
991
|
+
let userRepository: UserRepository;
|
|
962
992
|
|
|
963
993
|
beforeAll(async () => {
|
|
964
994
|
const TestModule = new Module({
|
|
@@ -967,23 +997,26 @@ describe('List${pluralPascal} e2e', () => {
|
|
|
967
997
|
getConfigModule(EnvFileNames.TESTING),
|
|
968
998
|
getDbModule(),
|
|
969
999
|
CoreModule,
|
|
1000
|
+
UserModule,
|
|
970
1001
|
UseCaseModule,
|
|
971
1002
|
],
|
|
972
1003
|
});
|
|
973
1004
|
bootstrap(TestModule);
|
|
974
1005
|
dbService = inject<DbService>(DB_SERVICE);
|
|
975
1006
|
app = inject<Hono>(APP);
|
|
1007
|
+
userRepository = inject(USER_REPOSITORY_INTERFACE);
|
|
976
1008
|
server = await getTestServer(app);
|
|
977
1009
|
|
|
978
1010
|
// TODO: Seed multiple entities here
|
|
979
1011
|
});
|
|
980
1012
|
|
|
981
1013
|
afterAll(async () => {
|
|
982
|
-
await dbService.getDb().delete(schema.${
|
|
1014
|
+
await dbService.getDb().delete(schema.${entityName}Schema).execute();
|
|
1015
|
+
await deleteCreatedSignedUsers(userRepository);
|
|
983
1016
|
});
|
|
984
1017
|
|
|
985
1018
|
it('lists entities successfully', async () => {
|
|
986
|
-
const { token } = await
|
|
1019
|
+
const { token } = await createOneSignedUpUser(userRepository, {
|
|
987
1020
|
userType: UserTypeEnum.ADMIN,
|
|
988
1021
|
role: UserRoleEnum.AUTHENTICATED,
|
|
989
1022
|
});
|
|
@@ -1004,7 +1037,7 @@ describe('List${pluralPascal} e2e', () => {
|
|
|
1004
1037
|
await writeFile(join(useCaseDir, `List${pluralPascal}.e2e.spec.ts`), testContent);
|
|
1005
1038
|
}
|
|
1006
1039
|
async function generateDeleteE2ETest(baseDir, config) {
|
|
1007
|
-
const { EntityName, kebabName, pluralKebab } = config;
|
|
1040
|
+
const { EntityName, entityName, kebabName, pluralKebab } = config;
|
|
1008
1041
|
const useCaseDir = join(baseDir, `delete-${kebabName}`);
|
|
1009
1042
|
const testContent = `import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
|
|
1010
1043
|
import { EnvFileNames, UserRoleEnum, UserTypeEnum } from '@root/lib';
|
|
@@ -1018,7 +1051,10 @@ import { APP, AppModule } from '@root/AppModule';
|
|
|
1018
1051
|
import type { Hono } from 'hono';
|
|
1019
1052
|
import * as schema from '@root/schema';
|
|
1020
1053
|
import { eq } from 'drizzle-orm';
|
|
1021
|
-
import { getTestServer, type TestServer } from '@root/lib/functions/getTestServer';
|
|
1054
|
+
import { getTestServer, type TestServer } from '@root/lib/functions/test-related/getTestServer';
|
|
1055
|
+
import { createOneSignedUpUser, deleteCreatedSignedUsers } from '@root/lib/functions/test-related/createSignedUpUser';
|
|
1056
|
+
import { USER_REPOSITORY_INTERFACE, type UserRepository } from '@root/core/user/IUserRepository';
|
|
1057
|
+
import { UserModule } from '@root/core/user/UserModule';
|
|
1022
1058
|
|
|
1023
1059
|
describe('Delete${EntityName} e2e', () => {
|
|
1024
1060
|
let dbService: DbService;
|
|
@@ -1026,6 +1062,7 @@ describe('Delete${EntityName} e2e', () => {
|
|
|
1026
1062
|
let app: Hono;
|
|
1027
1063
|
let targetIdSoft: string;
|
|
1028
1064
|
let targetIdHard: string;
|
|
1065
|
+
let userRepository: UserRepository;
|
|
1029
1066
|
|
|
1030
1067
|
beforeAll(async () => {
|
|
1031
1068
|
const TestModule = new Module({
|
|
@@ -1034,19 +1071,21 @@ describe('Delete${EntityName} e2e', () => {
|
|
|
1034
1071
|
getConfigModule(EnvFileNames.TESTING),
|
|
1035
1072
|
getDbModule(),
|
|
1036
1073
|
CoreModule,
|
|
1074
|
+
UserModule,
|
|
1037
1075
|
UseCaseModule,
|
|
1038
1076
|
],
|
|
1039
1077
|
});
|
|
1040
1078
|
bootstrap(TestModule);
|
|
1041
1079
|
dbService = inject<DbService>(DB_SERVICE);
|
|
1042
1080
|
app = inject<Hono>(APP);
|
|
1081
|
+
userRepository = inject(USER_REPOSITORY_INTERFACE);
|
|
1043
1082
|
server = await getTestServer(app);
|
|
1044
1083
|
|
|
1045
1084
|
// TODO: Seed two entities, assign to targetIdSoft and targetIdHard
|
|
1046
1085
|
});
|
|
1047
1086
|
|
|
1048
1087
|
afterAll(async () => {
|
|
1049
|
-
await dbService.getDb().delete(schema.${
|
|
1088
|
+
await dbService.getDb().delete(schema.${entityName}Schema).execute();
|
|
1050
1089
|
});
|
|
1051
1090
|
|
|
1052
1091
|
it('fails if unauthenticated', async () => {
|
|
@@ -1057,7 +1096,7 @@ describe('Delete${EntityName} e2e', () => {
|
|
|
1057
1096
|
});
|
|
1058
1097
|
|
|
1059
1098
|
it('soft deletes by default', async () => {
|
|
1060
|
-
const { token } = await
|
|
1099
|
+
const { token } = await createOneSignedUpUser(userRepository, {
|
|
1061
1100
|
userType: UserTypeEnum.ADMIN,
|
|
1062
1101
|
role: UserRoleEnum.AUTHENTICATED,
|
|
1063
1102
|
});
|
|
@@ -1072,8 +1111,8 @@ describe('Delete${EntityName} e2e', () => {
|
|
|
1072
1111
|
expect(req.status).toBe(200);
|
|
1073
1112
|
|
|
1074
1113
|
// Direct DB check for soft delete
|
|
1075
|
-
const row = await dbService.getDb().query.${
|
|
1076
|
-
where: eq(schema.${
|
|
1114
|
+
const row = await dbService.getDb().query.${entityName}Schema.findFirst({
|
|
1115
|
+
where: eq(schema.${entityName}Schema.id, targetIdSoft)
|
|
1077
1116
|
});
|
|
1078
1117
|
expect(row).toBeDefined();
|
|
1079
1118
|
expect(row!.deleted).toBe(true);
|
|
@@ -1081,7 +1120,7 @@ describe('Delete${EntityName} e2e', () => {
|
|
|
1081
1120
|
});
|
|
1082
1121
|
|
|
1083
1122
|
it('hard deletes when flag is false', async () => {
|
|
1084
|
-
const { token } = await
|
|
1123
|
+
const { token } = await createOneSignedUpUser(userRepository, {
|
|
1085
1124
|
userType: UserTypeEnum.ADMIN,
|
|
1086
1125
|
role: UserRoleEnum.AUTHENTICATED,
|
|
1087
1126
|
});
|
|
@@ -1098,8 +1137,8 @@ describe('Delete${EntityName} e2e', () => {
|
|
|
1098
1137
|
expect(req.status).toBe(200);
|
|
1099
1138
|
|
|
1100
1139
|
// Direct DB check for physical row missing
|
|
1101
|
-
const row = await dbService.getDb().query.${
|
|
1102
|
-
where: eq(schema.${
|
|
1140
|
+
const row = await dbService.getDb().query.${entityName}Schema.findFirst({
|
|
1141
|
+
where: eq(schema.${entityName}Schema.id, targetIdHard)
|
|
1103
1142
|
});
|
|
1104
1143
|
expect(row).toBeUndefined();
|
|
1105
1144
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_crud_use_cases.js","sourceRoot":"","sources":["../src/generate_crud_use_cases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,SAAS,GACV,MAAM,sBAAsB,CAAC;AAW9B,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB,EAClB,UAAkB,EAClB,SAAiB,EACjB,MAAc;IAEd,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAe;QACzB,UAAU;QACV,UAAU;QACV,SAAS;QACT,UAAU;QACV,WAAW;QACX,YAAY;KACb,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC9D,MAAM,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,8BAA8B;IAC9B,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,kBAAkB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,mBAAmB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAEpD,6BAA6B;IAC7B,MAAM,+BAA+B,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAE9D,oCAAoC;IACpC,MAAM,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9C,yCAAyC;IACzC,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,kBAAkB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,mBAAmB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,oCAAoC,UAAU,GAAG,CAAC,CAAC;AACjE,CAAC;AAED,4CAA4C;AAC5C,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC9E,MAAM,WAAW,GAAG,SAAS,UAAU,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,QAAQ;IACR,MAAM,YAAY,GAAG,iBAAiB,UAAU,gCAAgC,SAAS,WAAW,UAAU;;cAElG,WAAW,gBAAgB,UAAU;CAClD,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;gBACT,UAAU,gCAAgC,SAAS,WAAW,UAAU;;cAE1E,WAAW,aAAa,UAAU;;eAEjC,WAAW;;cAEZ,WAAW;yBACA,UAAU;;;;;;CAMlC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;;eAEV,WAAW;oDAC0B,UAAU;;;;CAI7D,CAAC;IAEA,WAAW;IACX,MAAM,cAAc,GAAG;WACd,WAAW,iBAAiB,WAAW,6BAA6B,WAAW;;gBAE1E,WAAW,0BAA0B,WAAW;WACrD,UAAU,6BAA6B,SAAS,IAAI,UAAU;WAC9D,UAAU,6BAA6B,UAAU,8BAA8B,SAAS,KAAK,UAAU;;eAEnG,gBAAgB,CAAC,WAAW,CAAC,sBAAsB,gBAAgB,CAAC,WAAW,CAAC;;;WAGpF,gBAAgB,CAAC,WAAW,CAAC;;;eAGzB,WAAW;;cAEZ,UAAU;uBACD,UAAU,aAAa,UAAU;;;yBAG/B,WAAW,mBAAmB,WAAW;iCACjC,UAAU;iBAC1B,WAAW,sBAAsB,WAAW;;;;eAI9C,WAAW;cACZ,UAAU;;;iBAGP,gBAAgB,CAAC,WAAW,CAAC;kBAC5B,WAAW;;;;CAI5B,CAAC;IAEA,SAAS;IACT,MAAM,aAAa,GAAG;;;WAGb,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC,6BAA6B,WAAW;WACrF,WAAW,6BAA6B,WAAW;WACnD,UAAU,mCAAmC,SAAS,IAAI,UAAU;;;;QAIvE,WAAW,CAAC,WAAW,CAAC;QACxB,WAAW,CAAC,WAAW,CAAC,kBAAkB,WAAW;;EAE3D,WAAW,CAAC,WAAW,CAAC;IACtB,WAAW,CAAC,WAAW,CAAC;;;;;;;;;;;sBAWN,UAAU;+BACD,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;;;;gCAI5C,WAAW,CAAC,WAAW,CAAC;;cAE1C,WAAW;;;;;;;WAOd,WAAW,CAAC,WAAW,CAAC,oBAAoB,WAAW,CAAC,WAAW,CAAC;CAC9E,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,WAAW,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IACzE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,EACxD,aAAa,CACd,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,YAAY,CAAC,CAAC;AACxD,CAAC;AAED,4CAA4C;AAC5C,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC9E,MAAM,WAAW,GAAG,SAAS,UAAU,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,QAAQ;IACR,MAAM,YAAY,GAAG,iBAAiB,UAAU,gCAAgC,SAAS,WAAW,UAAU;;mBAE7F,WAAW;;uBAEP,UAAU;;CAEhC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;gBACT,UAAU,gCAAgC,SAAS,WAAW,UAAU;;cAE1E,WAAW,aAAa,UAAU;;eAEjC,WAAW;;cAEZ,WAAW;yBACA,UAAU;;;;;;CAMlC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;;eAEV,WAAW;oDAC0B,UAAU;;;;CAI7D,CAAC;IAEA,WAAW;IACX,MAAM,cAAc,GAAG;WACd,WAAW,iBAAiB,WAAW,6BAA6B,WAAW;;gBAE1E,WAAW,0BAA0B,WAAW;WACrD,UAAU,6BAA6B,SAAS,IAAI,UAAU;WAC9D,UAAU,6BAA6B,UAAU,8BAA8B,SAAS,KAAK,UAAU;;eAEnG,gBAAgB,CAAC,WAAW,CAAC,sBAAsB,gBAAgB,CAAC,WAAW,CAAC;;;WAGpF,gBAAgB,CAAC,WAAW,CAAC;;;eAGzB,WAAW;;cAEZ,UAAU;uBACD,UAAU,aAAa,UAAU;;;yBAG/B,WAAW,mBAAmB,WAAW;iCACjC,UAAU;iBAC1B,WAAW,sBAAsB,WAAW;;;;eAI9C,WAAW;cACZ,UAAU;;;iBAGP,gBAAgB,CAAC,WAAW,CAAC;kBAC5B,WAAW;;;;CAI5B,CAAC;IAEA,SAAS;IACT,MAAM,aAAa,GAAG;;;WAGb,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC,6BAA6B,WAAW;WACrF,WAAW,6BAA6B,WAAW;gBAC9C,WAAW,0BAA0B,WAAW;WACrD,UAAU,mCAAmC,SAAS,IAAI,UAAU;;;;QAIvE,WAAW,CAAC,WAAW,CAAC;QACxB,WAAW,CAAC,WAAW,CAAC,kBAAkB,WAAW;;EAE3D,WAAW,CAAC,WAAW,CAAC;IACtB,WAAW,CAAC,WAAW,CAAC;;;;;;;;;;;;;qBAaP,UAAU;qBACV,WAAW;+BACD,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;;;;gCAI5C,WAAW,CAAC,WAAW,CAAC;;cAE1C,WAAW;;;;;;;WAOd,WAAW,CAAC,WAAW,CAAC,oBAAoB,WAAW,CAAC,WAAW,CAAC;CAC9E,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,WAAW,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IACzE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,EACxD,aAAa,CACd,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,YAAY,CAAC,CAAC;AACxD,CAAC;AAED,yCAAyC;AACzC,KAAK,UAAU,kBAAkB,CAC/B,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC9E,MAAM,WAAW,GAAG,MAAM,UAAU,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,SAAS,EAAE,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,iBAAiB;IACjB,MAAM,cAAc,GAAG;gBACT,UAAU,gCAAgC,SAAS,WAAW,UAAU;;cAE1E,WAAW,aAAa,UAAU;;eAEjC,WAAW;;cAEZ,WAAW;yBACA,UAAU;;;;;;CAMlC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;;eAEV,WAAW;iDACuB,UAAU;;;;CAI1D,CAAC;IAEA,WAAW;IACX,MAAM,cAAc,GAAG;WACd,WAAW,iBAAiB,WAAW,6BAA6B,WAAW;;WAE/E,UAAU,6BAA6B,SAAS,IAAI,UAAU;WAC9D,UAAU,6BAA6B,UAAU,8BAA8B,SAAS,KAAK,UAAU;;eAEnG,gBAAgB,CAAC,WAAW,CAAC,sBAAsB,gBAAgB,CAAC,WAAW,CAAC;;;WAGpF,gBAAgB,CAAC,WAAW,CAAC;;;eAGzB,WAAW;;cAEZ,UAAU;uBACD,UAAU,aAAa,UAAU;;;uCAGjB,WAAW;gCAClB,UAAU;iBACzB,WAAW,qBAAqB,WAAW;;;;eAI7C,WAAW;cACZ,UAAU;;;iBAGP,gBAAgB,CAAC,WAAW,CAAC;kBAC5B,WAAW;;;;CAI5B,CAAC;IAEA,SAAS;IACT,MAAM,aAAa,GAAG;;;WAGb,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC,6BAA6B,WAAW;WACrF,WAAW,6BAA6B,WAAW;;QAEtD,WAAW,CAAC,WAAW,CAAC;QACxB,WAAW,CAAC,WAAW,CAAC,kBAAkB,WAAW;;EAE3D,WAAW,CAAC,WAAW,CAAC,cAAc,WAAW,CAAC,WAAW,CAAC;;;6BAGnC,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;;;;8BAI5C,WAAW,CAAC,WAAW,CAAC;;YAE1C,WAAW;;;;;;WAMZ,WAAW,CAAC,WAAW,CAAC,oBAAoB,WAAW,CAAC,WAAW,CAAC;CAC9E,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,EACxD,aAAa,CACd,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,YAAY,CAAC,CAAC;AACrD,CAAC;AAED,0CAA0C;AAC1C,KAAK,UAAU,mBAAmB,CAChC,OAAe,EACf,MAAkB;IAElB,MAAM,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,GAAG,MAAM,CAAC;IACX,MAAM,WAAW,GAAG,OAAO,YAAY,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,iBAAiB;IACjB,MAAM,cAAc,GAAG;gBACT,UAAU,gCAAgC,SAAS,WAAW,UAAU;;cAE1E,WAAW,aAAa,UAAU;;eAEjC,WAAW;;cAEZ,WAAW;yBACA,YAAY;;;;;;CAMpC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;;eAEV,WAAW;kDACwB,YAAY;;;;CAI7D,CAAC;IAEA,WAAW;IACX,MAAM,cAAc,GAAG;WACd,WAAW,iBAAiB,WAAW,6BAA6B,WAAW;;WAE/E,UAAU,6BAA6B,SAAS,IAAI,UAAU;WAC9D,UAAU,6BAA6B,UAAU,8BAA8B,SAAS,KAAK,UAAU;;eAEnG,gBAAgB,CAAC,WAAW,CAAC,sBAAsB,gBAAgB,CAAC,WAAW,CAAC;;;WAGpF,gBAAgB,CAAC,WAAW,CAAC;;;eAGzB,WAAW;;cAEZ,UAAU;uBACD,UAAU,aAAa,UAAU;;;6BAG3B,WAAW;kCACN,UAAU;iBAC3B,WAAW,uBAAuB,WAAW;;;;eAI/C,WAAW;cACZ,UAAU;;;iBAGP,gBAAgB,CAAC,WAAW,CAAC;kBAC5B,WAAW;;;;CAI5B,CAAC;IAEA,SAAS;IACT,MAAM,aAAa,GAAG;;;WAGb,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC,6BAA6B,WAAW;WACrF,WAAW,6BAA6B,WAAW;;QAEtD,WAAW,CAAC,WAAW,CAAC;QACxB,WAAW,CAAC,WAAW,CAAC,kBAAkB,WAAW;;EAE3D,WAAW,CAAC,WAAW,CAAC,cAAc,WAAW,CAAC,WAAW,CAAC;;6BAEnC,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;;;;8BAI5C,WAAW,CAAC,WAAW,CAAC;;YAE1C,WAAW;;;;;;WAMZ,WAAW,CAAC,WAAW,CAAC,oBAAoB,WAAW,CAAC,WAAW,CAAC;CAC9E,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,EACxD,aAAa,CACd,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,YAAY,CAAC,CAAC;AAC/D,CAAC;AAED,4CAA4C;AAC5C,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC9E,MAAM,WAAW,GAAG,SAAS,UAAU,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,iBAAiB;IACjB,MAAM,cAAc,GAAG;;cAEX,WAAW;;eAEV,WAAW;;cAEZ,WAAW;yBACA,UAAU;;;;;;CAMlC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;;eAEV,WAAW;oDAC0B,UAAU;;;;CAI7D,CAAC;IAEA,WAAW;IACX,MAAM,cAAc,GAAG;WACd,WAAW,iBAAiB,WAAW,6BAA6B,WAAW;;WAE/E,UAAU,6BAA6B,SAAS,IAAI,UAAU;WAC9D,UAAU,6BAA6B,UAAU,8BAA8B,SAAS,KAAK,UAAU;;eAEnG,gBAAgB,CAAC,WAAW,CAAC,sBAAsB,gBAAgB,CAAC,WAAW,CAAC;;;WAGpF,gBAAgB,CAAC,WAAW,CAAC;;;eAGzB,WAAW;;cAEZ,UAAU;uBACD,UAAU,aAAa,UAAU;;;mEAGW,WAAW;iBAC7D,UAAU;oBACP,WAAW;iBACd,WAAW;;;;eAIb,WAAW;cACZ,UAAU;;;iBAGP,gBAAgB,CAAC,WAAW,CAAC;kBAC5B,WAAW;;;;CAI5B,CAAC;IAEA,SAAS;IACT,MAAM,aAAa,GAAG;;;WAGb,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC,6BAA6B,WAAW;WACrF,WAAW,6BAA6B,WAAW;;;;QAItD,WAAW,CAAC,WAAW,CAAC;QACxB,WAAW,CAAC,WAAW,CAAC,kBAAkB,WAAW;;EAE3D,WAAW,CAAC,WAAW,CAAC;IACtB,WAAW,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;+BAiBG,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;;;;gCAI5C,WAAW,CAAC,WAAW,CAAC;;cAE1C,WAAW;;;;;;;WAOd,WAAW,CAAC,WAAW,CAAC,oBAAoB,WAAW,CAAC,WAAW,CAAC;CAC9E,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,EACxD,aAAa,CACd,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,YAAY,CAAC,CAAC;AACxD,CAAC;AAED,8CAA8C;AAC9C,KAAK,UAAU,+BAA+B,CAC5C,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAEpE,MAAM,OAAO,GAAG;iBACD,UAAU,2BAA2B,SAAS,UAAU,UAAU;iBAClE,UAAU,2BAA2B,SAAS,UAAU,UAAU;cACrE,UAAU,wBAAwB,SAAS,OAAO,UAAU;eAC3D,YAAY,yBAAyB,WAAW,QAAQ,YAAY;iBAClE,UAAU,2BAA2B,SAAS,UAAU,UAAU;;eAEpE,UAAU;;YAEb,UAAU;YACV,UAAU;SACb,UAAU;UACT,YAAY;YACV,UAAU;;;CAGrB,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,UAAU,kBAAkB,CAAC,EAAE,OAAO,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,IAAI,UAAU,kBAAkB,CAAC,CAAC;AACrE,CAAC;AAED,yDAAyD;AACzD,KAAK,UAAU,uBAAuB,CACpC,MAAc,EACd,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IACzC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAEvE,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,YAAY,UAAU,2BAA2B,SAAS,IAAI,UAAU,iBAAiB,CAAC;IAElH,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,UAAU,eAAe,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,qBAAqB;IAC/B,CAAC;IAED,+BAA+B;IAC/B,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAC7D,OAAO;YACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;gBACnC,eAAe;gBACf,IAAI;gBACJ,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC;IAC7C,CAAC;IAED,uBAAuB;IACvB,MAAM,YAAY,GAAG,gBAAgB,CAAC;IACtC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACjD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;YAChC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,UAAU,eAAe,CAAC,EAAE,CAAC;gBACzD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,MAAM,SAAS,GAAG,GAAG,SAAS,GAAG,UAAU,eAAe,CAAC;gBAC3D,OAAO;oBACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AACxD,CAAC;AAED,iDAAiD;AAEjD,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG;;;;;;;;;;;;;;kBAcJ,UAAU;;;;;;;;;;;;;;;;;;;;;;4CAsBgB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;gDAIvB,WAAW;;;;;;;;;;;;;;;;;;;;gDAoBX,WAAW;;;;;;;;;;;;;;;;gDAgBX,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;yBAClD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;CAMnD,CAAC;IACA,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,SAAS,UAAU,cAAc,CAAC,EACnD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG;;;;;;;;;;;;;;kBAcJ,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;4CAyBgB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAqCvB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;yBAClD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;CAKnD,CAAC;IACA,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,SAAS,UAAU,cAAc,CAAC,EACnD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,SAAS,EAAE,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG;;;;;;;;;;;;;eAaP,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;4CAyBmB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BtE,CAAC;IACA,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,MAAM,UAAU,cAAc,CAAC,EAChD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,WAAW,EAAE,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG;;;;;;;;;;;;;gBAaN,YAAY;;;;;;;;;;;;;;;;;;;;;;;;4CAwBgB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;;;;gDASvB,WAAW;;;;;;;;;;;;CAY1D,CAAC;IACA,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,OAAO,YAAY,cAAc,CAAC,EACnD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG;;;;;;;;;;;;;;kBAcJ,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;4CA0BgB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;gDA0BvB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;yBAClD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;gDAyBJ,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;yBAClD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;CAKnD,CAAC;IACA,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,SAAS,UAAU,cAAc,CAAC,EACnD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,aAAa"}
|
|
1
|
+
{"version":3,"file":"generate_crud_use_cases.js","sourceRoot":"","sources":["../src/generate_crud_use_cases.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_skeleton.d.ts","sourceRoot":"","sources":["../src/generate_skeleton.ts"],"names":[],"mappings":"AAUA,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"generate_skeleton.d.ts","sourceRoot":"","sources":["../src/generate_skeleton.ts"],"names":[],"mappings":"AAUA,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqUzE"}
|
|
@@ -106,6 +106,26 @@ export async function generateSkeleton(projectName) {
|
|
|
106
106
|
src: 'src/lib/types/getCorsOrigin.ts',
|
|
107
107
|
dest: 'src/lib/types/getCorsOrigin.ts',
|
|
108
108
|
},
|
|
109
|
+
{
|
|
110
|
+
src: 'src/lib/types/UserRoleEnum.ts',
|
|
111
|
+
dest: 'src/lib/types/UserRoleEnum.ts',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
src: 'src/lib/types/UserTypeEnum.ts',
|
|
115
|
+
dest: 'src/lib/types/UserTypeEnum.ts',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
src: 'src/lib/types/AdminRoleEnum.ts',
|
|
119
|
+
dest: 'src/lib/types/AdminRoleEnum.ts',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
src: 'src/lib/types/AnyRoleEnum.ts',
|
|
123
|
+
dest: 'src/lib/types/AnyRoleEnum.ts',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
src: 'src/lib/types/PhoneNumberTypeEnum.ts',
|
|
127
|
+
dest: 'src/lib/types/PhoneNumberTypeEnum.ts',
|
|
128
|
+
},
|
|
109
129
|
// Lib - Functions
|
|
110
130
|
{
|
|
111
131
|
src: 'src/lib/functions/getEnvFile.ts',
|
|
@@ -127,6 +147,32 @@ export async function generateSkeleton(projectName) {
|
|
|
127
147
|
src: 'src/lib/functions/withBaseSchema.ts',
|
|
128
148
|
dest: 'src/lib/functions/withBaseSchema.ts',
|
|
129
149
|
},
|
|
150
|
+
// Lib - Functions/test-related
|
|
151
|
+
{
|
|
152
|
+
src: 'src/lib/functions/test-related/getTestServer.ts',
|
|
153
|
+
dest: 'src/lib/functions/test-related/getTestServer.ts',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
src: 'src/lib/functions/test-related/getNewTestServer.ts',
|
|
157
|
+
dest: 'src/lib/functions/test-related/getNewTestServer.ts',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
src: 'src/lib/functions/test-related/createSignedUpUser.ts',
|
|
161
|
+
dest: 'src/lib/functions/test-related/createSignedUpUser.ts',
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
src: 'src/lib/functions/test-related/getOneUserSignupData.ts',
|
|
165
|
+
dest: 'src/lib/functions/test-related/getOneUserSignupData.ts',
|
|
166
|
+
},
|
|
167
|
+
// Middlewares
|
|
168
|
+
{
|
|
169
|
+
src: 'src/middlewares/authGuard.ts',
|
|
170
|
+
dest: 'src/middlewares/authGuard.ts',
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
src: 'src/middlewares/roleGuard.ts',
|
|
174
|
+
dest: 'src/middlewares/roleGuard.ts',
|
|
175
|
+
},
|
|
130
176
|
// Lib - Errors
|
|
131
177
|
{
|
|
132
178
|
src: 'src/lib/errors/BadRequestException.ts',
|
|
@@ -166,6 +212,10 @@ export async function generateSkeleton(projectName) {
|
|
|
166
212
|
src: 'src/core/baseSchema.ts',
|
|
167
213
|
dest: 'src/core/baseSchema.ts',
|
|
168
214
|
},
|
|
215
|
+
{
|
|
216
|
+
src: 'src/core/user',
|
|
217
|
+
dest: 'src/core/user',
|
|
218
|
+
},
|
|
169
219
|
];
|
|
170
220
|
// Helper function to read template and write to dest
|
|
171
221
|
const applyTemplate = async (tpl) => {
|
|
@@ -177,7 +227,7 @@ export async function generateSkeleton(projectName) {
|
|
|
177
227
|
await mkdir(parentDir, { recursive: true });
|
|
178
228
|
}
|
|
179
229
|
if (existsSync(srcPath)) {
|
|
180
|
-
await cp(srcPath, destPath);
|
|
230
|
+
await cp(srcPath, destPath, { recursive: true });
|
|
181
231
|
console.log(`Created ${tpl.dest}`);
|
|
182
232
|
}
|
|
183
233
|
else {
|
|
@@ -187,10 +237,11 @@ export async function generateSkeleton(projectName) {
|
|
|
187
237
|
for (const tpl of templates) {
|
|
188
238
|
await applyTemplate(tpl);
|
|
189
239
|
}
|
|
190
|
-
// Generate Indices
|
|
191
240
|
const libTypesDest = join(targetDir, 'src/lib/types');
|
|
192
241
|
const libFunctionsDest = join(targetDir, 'src/lib/functions');
|
|
242
|
+
const libTestFunctionsDest = join(targetDir, 'src/lib/functions/test-related');
|
|
193
243
|
const libErrorsDest = join(targetDir, 'src/lib/errors');
|
|
244
|
+
const middlewaresDest = join(targetDir, 'src/middlewares');
|
|
194
245
|
const libDest = join(targetDir, 'src/lib');
|
|
195
246
|
const coreDir = join(targetDir, 'src/core');
|
|
196
247
|
await mkdir(coreDir, { recursive: true });
|
|
@@ -208,7 +259,9 @@ export async function generateSkeleton(projectName) {
|
|
|
208
259
|
};
|
|
209
260
|
await createIndex(libTypesDest);
|
|
210
261
|
await createIndex(libFunctionsDest);
|
|
262
|
+
await createIndex(libTestFunctionsDest);
|
|
211
263
|
await createIndex(libErrorsDest);
|
|
264
|
+
await createIndex(middlewaresDest);
|
|
212
265
|
// lib/index.ts
|
|
213
266
|
const libIndexContent = `export * from "./functions";
|
|
214
267
|
export * from "./types";
|
|
@@ -219,11 +272,13 @@ export * from "./errors";`;
|
|
|
219
272
|
const coreModuleContent = `import { Module } from '@kanian77/simple-di';
|
|
220
273
|
import { getConfigModule } from 'config/getConfigModule';
|
|
221
274
|
import { getDbModule } from 'db/getDbModule';
|
|
275
|
+
import { UserModule } from './user/UserModule';
|
|
222
276
|
|
|
223
277
|
export const CoreModule = new Module({
|
|
224
278
|
imports: [
|
|
225
279
|
getConfigModule(),
|
|
226
280
|
getDbModule(),
|
|
281
|
+
UserModule,
|
|
227
282
|
],
|
|
228
283
|
});
|
|
229
284
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_skeleton.js","sourceRoot":"","sources":["../src/generate_skeleton.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate_skeleton.js","sourceRoot":"","sources":["../src/generate_skeleton.ts"],"names":[],"mappings":"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"}
|
package/dist/templates/schema.ts
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IRepository } from '@root/IRepository';
|
|
2
|
+
import type { UserInterface } from './baseZodUserSchema';
|
|
3
|
+
|
|
4
|
+
export const USER_REPOSITORY_INTERFACE = 'IUserRepository';
|
|
5
|
+
|
|
6
|
+
export interface IUserRepository extends IRepository<UserInterface> {
|
|
7
|
+
// Add entity-specific repository methods here
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IService } from '@root/IService';
|
|
2
|
+
import type { UserInterface } from './baseZodUserSchema';
|
|
3
|
+
|
|
4
|
+
export const USER_SERVICE_INTERFACE = 'IUserService';
|
|
5
|
+
|
|
6
|
+
export interface IUserService extends IService<UserInterface> {
|
|
7
|
+
// Add entity-specific service methods here
|
|
8
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { withBaseSchema } from '@root/lib/functions/withBaseSchema';
|
|
2
|
+
import { jsonb, text, varchar } from 'drizzle-orm/pg-core';
|
|
3
|
+
import {
|
|
4
|
+
createInsertSchema,
|
|
5
|
+
createSelectSchema,
|
|
6
|
+
createUpdateSchema,
|
|
7
|
+
} from 'drizzle-zod';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { adminZodUserSchema, userZodUserSchema } from './baseZodUserSchema';
|
|
10
|
+
import { UserTypePgEnum } from '@root/lib/types/UserTypePgEnum';
|
|
11
|
+
import { UserRolePgEnum } from '@root/lib/types/UserRolePgEnum';
|
|
12
|
+
import type { PhoneNumberInterface } from '@root/lib';
|
|
13
|
+
|
|
14
|
+
// Table name constant
|
|
15
|
+
export const USER_TABLE_NAME = 'users';
|
|
16
|
+
|
|
17
|
+
// Schema definition
|
|
18
|
+
export const userSchema = withBaseSchema(USER_TABLE_NAME, {
|
|
19
|
+
email: varchar('email', { length: 255 }).unique(),
|
|
20
|
+
password: varchar('password', { length: 255 }),
|
|
21
|
+
firstName: varchar('first_name', { length: 255 }),
|
|
22
|
+
lastName: varchar('last_name', { length: 255 }),
|
|
23
|
+
phoneNumber: jsonb('phone_number').$type<PhoneNumberInterface>(),
|
|
24
|
+
userType: UserTypePgEnum('user_type').notNull(), // Stores 'ADMIN' or 'USER'
|
|
25
|
+
role: UserRolePgEnum('role').notNull(),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Relations definition
|
|
29
|
+
// import { relations } from 'drizzle-orm';
|
|
30
|
+
// export const userRelations = relations(userSchema, ({ one, many }) => ({
|
|
31
|
+
// // TODO: Add relationships here
|
|
32
|
+
// }));
|
|
33
|
+
|
|
34
|
+
// Type exports
|
|
35
|
+
export type UserSchemaType = typeof userSchema;
|
|
36
|
+
|
|
37
|
+
// Zod validation schemas
|
|
38
|
+
export const UserInsertSchema = z.discriminatedUnion('userType', [
|
|
39
|
+
createInsertSchema(userSchema).merge(
|
|
40
|
+
adminZodUserSchema.partial({
|
|
41
|
+
id: true,
|
|
42
|
+
createdAt: true,
|
|
43
|
+
createdBy:true,
|
|
44
|
+
updatedAt: true,
|
|
45
|
+
updatedBy: true,
|
|
46
|
+
deletedAt: true,
|
|
47
|
+
deleted: true,
|
|
48
|
+
}),
|
|
49
|
+
),
|
|
50
|
+
createInsertSchema(userSchema).merge(
|
|
51
|
+
userZodUserSchema.partial({
|
|
52
|
+
id: true,
|
|
53
|
+
createdAt: true,
|
|
54
|
+
createdBy:true,
|
|
55
|
+
updatedAt: true,
|
|
56
|
+
updatedBy: true,
|
|
57
|
+
deletedAt: true,
|
|
58
|
+
deleted: true,
|
|
59
|
+
}),
|
|
60
|
+
),
|
|
61
|
+
]);
|
|
62
|
+
|
|
63
|
+
export const UserSelectSchema = z.discriminatedUnion('userType', [
|
|
64
|
+
createSelectSchema(userSchema).merge(adminZodUserSchema),
|
|
65
|
+
createSelectSchema(userSchema).merge(userZodUserSchema),
|
|
66
|
+
]);
|
|
67
|
+
|
|
68
|
+
export const UserUpdateSchema = z.union([
|
|
69
|
+
createUpdateSchema(userSchema).merge(adminZodUserSchema.partial()),
|
|
70
|
+
createUpdateSchema(userSchema).merge(userZodUserSchema.partial()),
|
|
71
|
+
]);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Module } from '@kanian77/simple-di';
|
|
2
|
+
import { UserRepositoryModule } from './UserRepositoryModule';
|
|
3
|
+
import { UserServiceModule } from './UserServiceModule';
|
|
4
|
+
|
|
5
|
+
export const UserModule = new Module({
|
|
6
|
+
imports: [UserRepositoryModule, UserServiceModule],
|
|
7
|
+
});
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { afterAll, afterEach, beforeAll, describe, expect, it } from 'bun:test';
|
|
2
|
+
import { UserRepository } from './UserRepository';
|
|
3
|
+
import { randomUUIDv7 } from 'bun';
|
|
4
|
+
import * as schema from '@root/schema';
|
|
5
|
+
import { NeonHttpDatabase } from 'drizzle-orm/neon-http';
|
|
6
|
+
import {
|
|
7
|
+
EnvFileNames,
|
|
8
|
+
} from '@root/lib';
|
|
9
|
+
import { USER_REPOSITORY_INTERFACE } from './IUserRepository';
|
|
10
|
+
import { bootstrap, inject, Module } from '@kanian77/simple-di';
|
|
11
|
+
import { DB_SERVICE, DbService } from 'db/DbService';
|
|
12
|
+
import { getConfigModule } from 'config/getConfigModule';
|
|
13
|
+
|
|
14
|
+
describe('UserRepository', () => {
|
|
15
|
+
let userRepository: UserRepository;
|
|
16
|
+
let db: NeonHttpDatabase<typeof schema>;
|
|
17
|
+
|
|
18
|
+
const clear = async (db: NeonHttpDatabase<typeof schema>) => {
|
|
19
|
+
// await db.delete(schema.userSchema).execute();
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
beforeAll(async () => {
|
|
23
|
+
const ConfigModule = getConfigModule(EnvFileNames.TESTING);
|
|
24
|
+
const DbModule = getConfigModule(EnvFileNames.TESTING);
|
|
25
|
+
|
|
26
|
+
const UserRepositoryModule = new Module({
|
|
27
|
+
imports: [ConfigModule, DbModule],
|
|
28
|
+
providers: [
|
|
29
|
+
{
|
|
30
|
+
provide: USER_REPOSITORY_INTERFACE,
|
|
31
|
+
useClass: UserRepository,
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const TestModule = new Module({
|
|
37
|
+
imports: [
|
|
38
|
+
ConfigModule,
|
|
39
|
+
DbModule,
|
|
40
|
+
UserRepositoryModule,
|
|
41
|
+
],
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
bootstrap(TestModule);
|
|
45
|
+
|
|
46
|
+
db = inject<DbService>(DB_SERVICE).getDb();
|
|
47
|
+
userRepository = inject<UserRepository>(USER_REPOSITORY_INTERFACE);
|
|
48
|
+
|
|
49
|
+
await clear(db);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
afterEach(async () => {
|
|
53
|
+
// await db.delete(schema.userSchema).execute();
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
afterAll(async () => {
|
|
57
|
+
await clear(db);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('should be defined', () => {
|
|
61
|
+
expect(userRepository).toBeDefined();
|
|
62
|
+
});
|
|
63
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BaseRepository } from '@root/BaseRepository';
|
|
2
|
+
import {
|
|
3
|
+
USER_REPOSITORY_INTERFACE,
|
|
4
|
+
type IUserRepository,
|
|
5
|
+
} from './IUserRepository';
|
|
6
|
+
import { userSchema, type UserSchemaType } from './User';
|
|
7
|
+
import { type UserInterface } from './baseZodUserSchema';
|
|
8
|
+
import { Inject, Service } from '@kanian77/simple-di';
|
|
9
|
+
import { DB_SERVICE, DbService } from 'db/DbService';
|
|
10
|
+
|
|
11
|
+
@Service({ token: USER_REPOSITORY_INTERFACE })
|
|
12
|
+
export class UserRepository
|
|
13
|
+
extends BaseRepository<UserInterface, UserSchemaType>
|
|
14
|
+
implements IUserRepository
|
|
15
|
+
{
|
|
16
|
+
constructor(@Inject(DB_SERVICE) private dbService: DbService) {
|
|
17
|
+
super(userSchema, dbService);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async find(config?: any): Promise<UserInterface[]> {
|
|
21
|
+
return (await this.db.query.userSchema.findMany(
|
|
22
|
+
config
|
|
23
|
+
)) as unknown as UserInterface[];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async findOne(config?: any): Promise<UserInterface> {
|
|
27
|
+
return (await this.db.query.userSchema.findFirst(
|
|
28
|
+
config
|
|
29
|
+
)) as unknown as UserInterface;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Module } from '@kanian77/simple-di';
|
|
2
|
+
import { USER_REPOSITORY_INTERFACE } from './IUserRepository';
|
|
3
|
+
import { UserRepository } from './UserRepository';
|
|
4
|
+
import { getConfigModule } from 'config/getConfigModule';
|
|
5
|
+
import { getDbModule } from 'db/getDbModule';
|
|
6
|
+
|
|
7
|
+
export const UserRepositoryModule = new Module({
|
|
8
|
+
imports: [getConfigModule(), getDbModule()],
|
|
9
|
+
providers: [
|
|
10
|
+
{
|
|
11
|
+
provide: USER_REPOSITORY_INTERFACE,
|
|
12
|
+
useClass: UserRepository,
|
|
13
|
+
},
|
|
14
|
+
],
|
|
15
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { BaseService } from '@root/BaseService';
|
|
2
|
+
import type { UserInterface } from './baseZodUserSchema';
|
|
3
|
+
import {
|
|
4
|
+
USER_SERVICE_INTERFACE,
|
|
5
|
+
type IUserService,
|
|
6
|
+
} from './IUserService';
|
|
7
|
+
import {
|
|
8
|
+
USER_REPOSITORY_INTERFACE,
|
|
9
|
+
type IUserRepository,
|
|
10
|
+
} from './IUserRepository';
|
|
11
|
+
import {
|
|
12
|
+
UserInsertSchema,
|
|
13
|
+
UserSelectSchema,
|
|
14
|
+
UserUpdateSchema,
|
|
15
|
+
} from './User';
|
|
16
|
+
import { Inject, Service } from '@kanian77/simple-di';
|
|
17
|
+
|
|
18
|
+
@Service({ token: USER_SERVICE_INTERFACE })
|
|
19
|
+
export class UserService
|
|
20
|
+
extends BaseService<UserInterface>
|
|
21
|
+
implements IUserService
|
|
22
|
+
{
|
|
23
|
+
constructor(
|
|
24
|
+
@Inject(USER_REPOSITORY_INTERFACE)
|
|
25
|
+
private readonly userRepository: IUserRepository
|
|
26
|
+
) {
|
|
27
|
+
super(
|
|
28
|
+
userRepository,
|
|
29
|
+
UserInsertSchema,
|
|
30
|
+
UserUpdateSchema,
|
|
31
|
+
UserSelectSchema
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Module } from '@kanian77/simple-di';
|
|
2
|
+
import { UserService } from './UserService';
|
|
3
|
+
import { UserRepositoryModule } from './UserRepositoryModule';
|
|
4
|
+
import { USER_SERVICE_INTERFACE } from './IUserService';
|
|
5
|
+
|
|
6
|
+
export const UserServiceModule = new Module({
|
|
7
|
+
imports: [UserRepositoryModule],
|
|
8
|
+
providers: [
|
|
9
|
+
{
|
|
10
|
+
provide: USER_SERVICE_INTERFACE,
|
|
11
|
+
useClass: UserService,
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { baseZodSchema } from "@root/core/baseZodSchema";
|
|
3
|
+
import { AdminRoleEnum } from "@root/lib/types/AdminRoleEnum";
|
|
4
|
+
import { UserRoleEnum } from "@root/lib/types/UserRoleEnum";
|
|
5
|
+
import { phoneNumberSchema } from "@root/lib/schemas/phoneNumberSchema";
|
|
6
|
+
|
|
7
|
+
export const adminZodUserSchema = baseZodSchema.extend({
|
|
8
|
+
email: z.string().email().optional(),
|
|
9
|
+
password: z.string().optional(),
|
|
10
|
+
firstName: z.string().max(255).optional(),
|
|
11
|
+
lastName: z.string().max(255).optional(),
|
|
12
|
+
phoneNumber: phoneNumberSchema.optional(),
|
|
13
|
+
userType: z.literal('ADMIN'),
|
|
14
|
+
role: z.nativeEnum(AdminRoleEnum),
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export const userZodUserSchema = baseZodSchema.extend({
|
|
18
|
+
email: z.string().email().optional(),
|
|
19
|
+
password: z.string().optional(),
|
|
20
|
+
firstName: z.string().max(255).optional(),
|
|
21
|
+
lastName: z.string().max(255).optional(),
|
|
22
|
+
phoneNumber: phoneNumberSchema.optional(),
|
|
23
|
+
userType: z.literal('USER'),
|
|
24
|
+
role: z.nativeEnum(UserRoleEnum),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export const baseZodUserSchema = z.discriminatedUnion('userType', [
|
|
28
|
+
adminZodUserSchema,
|
|
29
|
+
userZodUserSchema,
|
|
30
|
+
]);
|
|
31
|
+
export type UserInterface = z.infer<typeof baseZodUserSchema>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { getOneUserSignupData } from './getOneUserSignupData';
|
|
2
|
+
import { AuthenticationUtils } from '@root/lib/AuthenticationUtils';
|
|
3
|
+
import type { UserRepository } from '@root/core/user/UserRepository';
|
|
4
|
+
import type { UserInterface } from '@root/core/user/baseZodUserSchema';
|
|
5
|
+
import type { TokenPayload } from '@root/lib/types';
|
|
6
|
+
|
|
7
|
+
const users: Partial<UserInterface>[] = [];
|
|
8
|
+
|
|
9
|
+
export const createOneSignedUpUser = async (
|
|
10
|
+
userRepository: UserRepository,
|
|
11
|
+
overrides: Partial<UserInterface> = {},
|
|
12
|
+
) => {
|
|
13
|
+
const userData = getOneUserSignupData(overrides);
|
|
14
|
+
userData.password = await AuthenticationUtils.hashPassword(
|
|
15
|
+
userData.password as string,
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
const createdUser = await userRepository.create(userData as any);
|
|
19
|
+
|
|
20
|
+
// We need to cast createdUser to UserInterface because repository might return something slightly different
|
|
21
|
+
// or TypeScript might infer it differently, but for tests this is usually fine.
|
|
22
|
+
const user = createdUser as UserInterface;
|
|
23
|
+
|
|
24
|
+
const token = await AuthenticationUtils.generateToken(user);
|
|
25
|
+
const payload = AuthenticationUtils.verifyToken(token) as TokenPayload;
|
|
26
|
+
|
|
27
|
+
users.push(user);
|
|
28
|
+
return { token, payload, user };
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const deleteCreatedSignedUsers = async (
|
|
32
|
+
userRepository: UserRepository,
|
|
33
|
+
) => {
|
|
34
|
+
// Check if delete method exists and accepts ID, assuming standard repository pattern
|
|
35
|
+
// If delete is not implementing in repository yet, we might need to use DB directly or skip this.
|
|
36
|
+
// Based on User.ts, we have a base repository.
|
|
37
|
+
|
|
38
|
+
await Promise.all(
|
|
39
|
+
users.map((user) =>
|
|
40
|
+
user.id ? userRepository.delete(user.id) : Promise.resolve(),
|
|
41
|
+
),
|
|
42
|
+
);
|
|
43
|
+
users.length = 0;
|
|
44
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { v7 as randomUUIDv7 } from 'uuid';
|
|
2
|
+
import { type UserInterface } from '@root/core/user/baseZodUserSchema';
|
|
3
|
+
import { PhoneNumberTypeEnum } from '@root/lib/types/PhoneNumberTypeEnum';
|
|
4
|
+
import { UserRoleEnum } from '@root/lib/types/UserRoleEnum';
|
|
5
|
+
|
|
6
|
+
// We need to define the enum values manually since we can't import them directly as values easily in all contexts,
|
|
7
|
+
// or fetch from where they are defined if it's a drizzle enum object.
|
|
8
|
+
// Based on file reads:
|
|
9
|
+
// UserTypePgEnum: ['ADMIN', 'USER']
|
|
10
|
+
// UserRolePgEnum: ['ADMIN', 'AUTHOR', 'EDITOR', 'AUTHENTICATED']
|
|
11
|
+
|
|
12
|
+
export const getOneUserSignupData = (
|
|
13
|
+
overrides: Partial<UserInterface> = {},
|
|
14
|
+
) => ({
|
|
15
|
+
id: randomUUIDv7(),
|
|
16
|
+
firstName: 'Test',
|
|
17
|
+
lastName: 'User',
|
|
18
|
+
email: `${randomUUIDv7()}@example.com`,
|
|
19
|
+
password: 'password123',
|
|
20
|
+
phoneNumber: {
|
|
21
|
+
countryCode: '+1',
|
|
22
|
+
number: '1234567890',
|
|
23
|
+
type: PhoneNumberTypeEnum.MOBILE,
|
|
24
|
+
},
|
|
25
|
+
userType: 'USER' as const,
|
|
26
|
+
role: UserRoleEnum.AUTHENTICATED,
|
|
27
|
+
...overrides,
|
|
28
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { serve } from '@hono/node-server';
|
|
2
|
+
import type { Hono } from 'hono';
|
|
3
|
+
import supertest from 'supertest';
|
|
4
|
+
|
|
5
|
+
export const getTestServer = (app: Hono, port?: number) => {
|
|
6
|
+
const usePort = port || 3001 + Math.floor(Math.random() * 10000);
|
|
7
|
+
|
|
8
|
+
const server = serve({ port: usePort, fetch: app.fetch });
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
request: () => supertest(server),
|
|
12
|
+
app,
|
|
13
|
+
port: usePort,
|
|
14
|
+
close: () => {
|
|
15
|
+
return new Promise<boolean>((resolve, reject) => {
|
|
16
|
+
server.close((err) => {
|
|
17
|
+
if (err) {
|
|
18
|
+
console.error(`Error closing server on port ${usePort}:`, err);
|
|
19
|
+
reject(err);
|
|
20
|
+
} else {
|
|
21
|
+
console.log(`Server on port ${usePort} successfully closed`);
|
|
22
|
+
resolve(true);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { inject } from '@kanian77/simple-di';
|
|
2
|
+
import type { Context, Next } from 'hono';
|
|
3
|
+
import { StatusCodes } from 'http-status-codes';
|
|
4
|
+
import { USER_SERVICE_INTERFACE } from '@root/core/user/IUserService';
|
|
5
|
+
import type { UserService } from '@root/core/user/UserService';
|
|
6
|
+
import type { TokenPayload } from '@root/lib';
|
|
7
|
+
import { AuthenticationUtils } from '@root/lib/AuthenticationUtils';
|
|
8
|
+
|
|
9
|
+
export const authGuard = () => {
|
|
10
|
+
return async (c: Context, next: Next) => {
|
|
11
|
+
const authHeader = c.req.header('Authorization');
|
|
12
|
+
|
|
13
|
+
if (!authHeader?.startsWith('Bearer ')) {
|
|
14
|
+
return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const token = authHeader.split(' ')[1];
|
|
18
|
+
|
|
19
|
+
if (!token) {
|
|
20
|
+
console.log(' no token')
|
|
21
|
+
return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const payload = AuthenticationUtils.verifyToken(token) as TokenPayload;
|
|
25
|
+
|
|
26
|
+
if (!payload) {
|
|
27
|
+
console.log(' no payload')
|
|
28
|
+
return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const user = await inject<UserService>(USER_SERVICE_INTERFACE).findById(
|
|
32
|
+
payload.userId,
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
if (!user) {
|
|
36
|
+
console.log(' no user')
|
|
37
|
+
return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
c.set('user', user);
|
|
41
|
+
await next();
|
|
42
|
+
} catch {
|
|
43
|
+
return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AnyRoleEnum } from '@root/lib/types/AnyRoleEnum';
|
|
2
|
+
import type { Context, Next } from 'hono';
|
|
3
|
+
import { StatusCodes } from 'http-status-codes';
|
|
4
|
+
|
|
5
|
+
export const roleGuard = (roles: AnyRoleEnum[]) => {
|
|
6
|
+
return async (c: Context, next: Next) => {
|
|
7
|
+
const user = c.get('user');
|
|
8
|
+
if (!user) {
|
|
9
|
+
return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
|
|
10
|
+
}
|
|
11
|
+
if (!roles.includes(user.role)) {
|
|
12
|
+
return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
|
|
13
|
+
}
|
|
14
|
+
await next();
|
|
15
|
+
};
|
|
16
|
+
};
|