@open-kingdom/shared-backend-data-access-users 0.0.2-0

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/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # data-access-backend-users
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build data-access-backend-users` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test data-access-backend-users` to execute the unit tests via [Jest](https://jestjs.io).
@@ -0,0 +1,4 @@
1
+ export * from './lib/data-access-backend-users.module';
2
+ export * from './lib/schema';
3
+ export * from './lib/users.service';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./lib/data-access-backend-users.module"), exports);
5
+ tslib_1.__exportStar(require("./lib/schema"), exports);
6
+ tslib_1.__exportStar(require("./lib/users.service"), exports);
@@ -0,0 +1,3 @@
1
+ export declare class OpenKingdomDataAccessBackendUsersModule {
2
+ }
3
+ //# sourceMappingURL=data-access-backend-users.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-access-backend-users.module.d.ts","sourceRoot":"","sources":["../../src/lib/data-access-backend-users.module.ts"],"names":[],"mappings":"AAGA,qBAKa,uCAAuC;CAAG"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenKingdomDataAccessBackendUsersModule = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const users_service_1 = require("./users.service");
7
+ let OpenKingdomDataAccessBackendUsersModule = class OpenKingdomDataAccessBackendUsersModule {
8
+ };
9
+ exports.OpenKingdomDataAccessBackendUsersModule = OpenKingdomDataAccessBackendUsersModule;
10
+ exports.OpenKingdomDataAccessBackendUsersModule = OpenKingdomDataAccessBackendUsersModule = tslib_1.__decorate([
11
+ (0, common_1.Module)({
12
+ controllers: [],
13
+ providers: [users_service_1.UsersService],
14
+ exports: [users_service_1.UsersService],
15
+ })
16
+ ], OpenKingdomDataAccessBackendUsersModule);
@@ -0,0 +1,141 @@
1
+ import * as t from 'drizzle-orm/sqlite-core';
2
+ export declare const UserTableName = "users";
3
+ export declare const users: t.SQLiteTableWithColumns<{
4
+ name: "users";
5
+ schema: undefined;
6
+ columns: {
7
+ id: t.SQLiteColumn<{
8
+ name: "id";
9
+ tableName: "users";
10
+ dataType: "number";
11
+ columnType: "SQLiteInteger";
12
+ data: number;
13
+ driverParam: number;
14
+ notNull: true;
15
+ hasDefault: true;
16
+ isPrimaryKey: true;
17
+ isAutoincrement: false;
18
+ hasRuntimeDefault: false;
19
+ enumValues: undefined;
20
+ baseColumn: never;
21
+ identity: undefined;
22
+ generated: undefined;
23
+ }, {}, {}>;
24
+ firstName: t.SQLiteColumn<{
25
+ name: "first_name";
26
+ tableName: "users";
27
+ dataType: "string";
28
+ columnType: "SQLiteText";
29
+ data: string;
30
+ driverParam: string;
31
+ notNull: false;
32
+ hasDefault: false;
33
+ isPrimaryKey: false;
34
+ isAutoincrement: false;
35
+ hasRuntimeDefault: false;
36
+ enumValues: [string, ...string[]];
37
+ baseColumn: never;
38
+ identity: undefined;
39
+ generated: undefined;
40
+ }, {}, {
41
+ length: number | undefined;
42
+ }>;
43
+ lastName: t.SQLiteColumn<{
44
+ name: "last_name";
45
+ tableName: "users";
46
+ dataType: "string";
47
+ columnType: "SQLiteText";
48
+ data: string;
49
+ driverParam: string;
50
+ notNull: false;
51
+ hasDefault: false;
52
+ isPrimaryKey: false;
53
+ isAutoincrement: false;
54
+ hasRuntimeDefault: false;
55
+ enumValues: [string, ...string[]];
56
+ baseColumn: never;
57
+ identity: undefined;
58
+ generated: undefined;
59
+ }, {}, {
60
+ length: number | undefined;
61
+ }>;
62
+ email: t.SQLiteColumn<{
63
+ name: "email";
64
+ tableName: "users";
65
+ dataType: "string";
66
+ columnType: "SQLiteText";
67
+ data: string;
68
+ driverParam: string;
69
+ notNull: true;
70
+ hasDefault: false;
71
+ isPrimaryKey: false;
72
+ isAutoincrement: false;
73
+ hasRuntimeDefault: false;
74
+ enumValues: [string, ...string[]];
75
+ baseColumn: never;
76
+ identity: undefined;
77
+ generated: undefined;
78
+ }, {}, {
79
+ length: undefined;
80
+ }>;
81
+ invitee: t.SQLiteColumn<{
82
+ name: "invitee";
83
+ tableName: "users";
84
+ dataType: "number";
85
+ columnType: "SQLiteInteger";
86
+ data: number;
87
+ driverParam: number;
88
+ notNull: false;
89
+ hasDefault: false;
90
+ isPrimaryKey: false;
91
+ isAutoincrement: false;
92
+ hasRuntimeDefault: false;
93
+ enumValues: undefined;
94
+ baseColumn: never;
95
+ identity: undefined;
96
+ generated: undefined;
97
+ }, {}, {}>;
98
+ role: t.SQLiteColumn<{
99
+ name: "role";
100
+ tableName: "users";
101
+ dataType: "string";
102
+ columnType: "SQLiteText";
103
+ data: "guest" | "user" | "admin";
104
+ driverParam: string;
105
+ notNull: false;
106
+ hasDefault: true;
107
+ isPrimaryKey: false;
108
+ isAutoincrement: false;
109
+ hasRuntimeDefault: false;
110
+ enumValues: [string, ...string[]];
111
+ baseColumn: never;
112
+ identity: undefined;
113
+ generated: undefined;
114
+ }, {}, {
115
+ length: undefined;
116
+ $type: "guest" | "user" | "admin";
117
+ }>;
118
+ password: t.SQLiteColumn<{
119
+ name: "password";
120
+ tableName: "users";
121
+ dataType: "string";
122
+ columnType: "SQLiteText";
123
+ data: string;
124
+ driverParam: string;
125
+ notNull: true;
126
+ hasDefault: false;
127
+ isPrimaryKey: false;
128
+ isAutoincrement: false;
129
+ hasRuntimeDefault: false;
130
+ enumValues: [string, ...string[]];
131
+ baseColumn: never;
132
+ identity: undefined;
133
+ generated: undefined;
134
+ }, {}, {
135
+ length: undefined;
136
+ }>;
137
+ };
138
+ dialect: "sqlite";
139
+ }>;
140
+ export type User = typeof users.$inferSelect;
141
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,yBAAyB,CAAC;AAG7C,eAAO,MAAM,aAAa,UAAU,CAAC;AACrC,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYjB,CAAC;AACF,MAAM,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.users = exports.UserTableName = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const sqlite_core_1 = require("drizzle-orm/sqlite-core");
6
+ const t = tslib_1.__importStar(require("drizzle-orm/sqlite-core"));
7
+ exports.UserTableName = 'users';
8
+ exports.users = (0, sqlite_core_1.sqliteTable)(exports.UserTableName, {
9
+ id: t.int().primaryKey({ autoIncrement: true }),
10
+ firstName: t.text('first_name'),
11
+ lastName: t.text('last_name'),
12
+ email: t.text().notNull().unique(),
13
+ invitee: t.int().references(() => exports.users.id),
14
+ role: t.text().$type().default('guest'),
15
+ password: t.text().notNull(),
16
+ }, (table) => [t.uniqueIndex('email_idx').on(table.email)]);
@@ -0,0 +1,23 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
3
+ import { User, users, UserTableName } from './schema';
4
+ type schema = {
5
+ [UserTableName]: typeof users;
6
+ };
7
+ export declare class UsersService implements OnModuleInit {
8
+ private db;
9
+ constructor(db: BetterSQLite3Database<schema>);
10
+ onModuleInit(): Promise<void>;
11
+ findOne(email: string): Promise<User | undefined>;
12
+ ensureUser(data: Omit<User, 'id'>): Promise<{
13
+ id: number;
14
+ firstName: string | null;
15
+ lastName: string | null;
16
+ email: string;
17
+ invitee: number | null;
18
+ role: "guest" | "user" | "admin" | null;
19
+ password: string;
20
+ } | undefined>;
21
+ }
22
+ export {};
23
+ //# sourceMappingURL=users.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.service.d.ts","sourceRoot":"","sources":["../../src/lib/users.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAMnE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEtD,KAAK,MAAM,GAAG;IACZ,CAAC,aAAa,CAAC,EAAE,OAAO,KAAK,CAAC;CAC/B,CAAC;AAEF,qBACa,YAAa,YAAW,YAAY;IACnB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,qBAAqB,CAAC,MAAM,CAAC;IAE/D,YAAY;IAWZ,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAOjD,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;;;;;;;;;CAaxC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UsersService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const better_sqlite3_1 = require("drizzle-orm/better-sqlite3");
7
+ const drizzle_orm_1 = require("drizzle-orm");
8
+ const bcrypt = tslib_1.__importStar(require("bcrypt"));
9
+ const shared_poly_util_constants_1 = require("@open-kingdom/shared-poly-util-constants");
10
+ const schema_1 = require("./schema");
11
+ let UsersService = class UsersService {
12
+ constructor(db) {
13
+ this.db = db;
14
+ }
15
+ async onModuleInit() {
16
+ await this.ensureUser({
17
+ invitee: null,
18
+ firstName: 'Admin',
19
+ lastName: 'Admin',
20
+ email: 'admin@admin.com',
21
+ password: 'admin',
22
+ role: 'admin',
23
+ });
24
+ }
25
+ async findOne(email) {
26
+ const user = await this.db.query.users.findFirst({
27
+ where: (0, drizzle_orm_1.eq)(schema_1.users.email, email),
28
+ });
29
+ return user;
30
+ }
31
+ async ensureUser(data) {
32
+ const existing = await this.findOne(data.email);
33
+ if (existing)
34
+ return existing;
35
+ await this.db.insert(schema_1.users).values({
36
+ firstName: data.firstName,
37
+ lastName: data.lastName,
38
+ email: data.email,
39
+ password: await bcrypt.hash(data.password, 12),
40
+ role: data.role ?? 'admin',
41
+ });
42
+ return this.findOne(data.email);
43
+ }
44
+ };
45
+ exports.UsersService = UsersService;
46
+ exports.UsersService = UsersService = tslib_1.__decorate([
47
+ (0, common_1.Injectable)(),
48
+ tslib_1.__param(0, (0, common_1.Inject)(shared_poly_util_constants_1.DB_TAG)),
49
+ tslib_1.__metadata("design:paramtypes", [better_sqlite3_1.BetterSQLite3Database])
50
+ ], UsersService);
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@open-kingdom/shared-backend-data-access-users",
3
+ "version": "0.0.2-0",
4
+ "main": "./dist/index.js",
5
+ "module": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ "./package.json": "./package.json",
9
+ ".": {
10
+ "development": "./src/index.ts",
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "!**/*.tsbuildinfo"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "dependencies": {
24
+ "tslib": "^2.3.0",
25
+ "@nestjs/testing": "^11.0.0",
26
+ "@knaadh/nestjs-drizzle-better-sqlite3": "^1.2.0",
27
+ "@open-kingdom/shared-poly-util-constants": "0.0.2-0",
28
+ "@nestjs/common": "^11.0.0",
29
+ "drizzle-orm": "^0.44.5",
30
+ "bcrypt": "^5.1.1"
31
+ },
32
+ "nx": {
33
+ "name": "@open-kingdom/shared-backend-data-access-users",
34
+ "targets": {
35
+ "build": {
36
+ "executor": "@nx/js:tsc",
37
+ "outputs": [
38
+ "{options.outputPath}"
39
+ ],
40
+ "options": {
41
+ "outputPath": "dist/libs/shared/backend/data-access-users",
42
+ "tsConfig": "libs/shared/backend/data-access-users/tsconfig.lib.json",
43
+ "packageJson": "libs/shared/backend/data-access-users/package.json",
44
+ "main": "libs/shared/backend/data-access-users/src/index.ts",
45
+ "assets": [
46
+ "libs/shared/backend/data-access-users/*.md"
47
+ ]
48
+ }
49
+ }
50
+ },
51
+ "tags": [
52
+ "type:data-access",
53
+ "scope:shared",
54
+ "environment:backend"
55
+ ]
56
+ }
57
+ }