aboutsummaryrefslogtreecommitdiffstats
path: root/app/Models
diff options
context:
space:
mode:
Diffstat (limited to 'app/Models')
-rw-r--r--app/Models/Recipe.ts16
-rw-r--r--app/Models/Service.ts26
-rw-r--r--app/Models/Token.ts28
-rw-r--r--app/Models/User.ts78
-rw-r--r--app/Models/Workspace.ts28
5 files changed, 90 insertions, 86 deletions
diff --git a/app/Models/Recipe.ts b/app/Models/Recipe.ts
index bca6e76..84497d4 100644
--- a/app/Models/Recipe.ts
+++ b/app/Models/Recipe.ts
@@ -1,23 +1,23 @@
1import { DateTime } from 'luxon' 1import { DateTime } from 'luxon';
2import { BaseModel, column } from '@adonisjs/lucid/orm' 2import { BaseModel, column } from '@adonisjs/lucid/orm';
3 3
4export default class Recipe extends BaseModel { 4export default class Recipe extends BaseModel {
5 @column({ isPrimary: true }) 5 @column({ isPrimary: true })
6 public id: number 6 public id: number;
7 7
8 @column() 8 @column()
9 public name: string 9 public name: string;
10 10
11 @column() 11 @column()
12 public recipeId: string 12 public recipeId: string;
13 13
14 // TODO: Type the data object. 14 // TODO: Type the data object.
15 @column() 15 @column()
16 public data: object 16 public data: object;
17 17
18 @column.dateTime({ autoCreate: true }) 18 @column.dateTime({ autoCreate: true })
19 public createdAt: DateTime 19 public createdAt: DateTime;
20 20
21 @column.dateTime({ autoCreate: true, autoUpdate: true }) 21 @column.dateTime({ autoCreate: true, autoUpdate: true })
22 public updatedAt: DateTime 22 public updatedAt: DateTime;
23} 23}
diff --git a/app/Models/Service.ts b/app/Models/Service.ts
index 0cd2afb..0b4920b 100644
--- a/app/Models/Service.ts
+++ b/app/Models/Service.ts
@@ -1,41 +1,41 @@
1import { DateTime } from 'luxon' 1import { DateTime } from 'luxon';
2import { BaseModel, column, hasOne } from '@adonisjs/lucid/orm' 2import { BaseModel, column, hasOne } from '@adonisjs/lucid/orm';
3import User from './User.js' 3import User from './User.js';
4import type { HasOne } from '@adonisjs/lucid/types/relations' 4import type { HasOne } from '@adonisjs/lucid/types/relations';
5 5
6export default class Service extends BaseModel { 6export default class Service extends BaseModel {
7 @column({ isPrimary: true }) 7 @column({ isPrimary: true })
8 public id: number 8 public id: number;
9 9
10 @hasOne(() => User, { 10 @hasOne(() => User, {
11 foreignKey: 'userId', 11 foreignKey: 'userId',
12 }) 12 })
13 public user: HasOne<typeof User> 13 public user: HasOne<typeof User>;
14 14
15 @column({ 15 @column({
16 columnName: 'userId', 16 columnName: 'userId',
17 }) 17 })
18 public userId: number 18 public userId: number;
19 19
20 @column({ 20 @column({
21 columnName: 'serviceId', 21 columnName: 'serviceId',
22 }) 22 })
23 public serviceId: string 23 public serviceId: string;
24 24
25 @column() 25 @column()
26 public name: string 26 public name: string;
27 27
28 @column({ 28 @column({
29 columnName: 'recipeId', 29 columnName: 'recipeId',
30 }) 30 })
31 public recipeId: string 31 public recipeId: string;
32 32
33 @column() 33 @column()
34 public settings: string 34 public settings: string;
35 35
36 @column.dateTime({ autoCreate: true }) 36 @column.dateTime({ autoCreate: true })
37 public createdAt: DateTime 37 public createdAt: DateTime;
38 38
39 @column.dateTime({ autoCreate: true, autoUpdate: true }) 39 @column.dateTime({ autoCreate: true, autoUpdate: true })
40 public updatedAt: DateTime 40 public updatedAt: DateTime;
41} 41}
diff --git a/app/Models/Token.ts b/app/Models/Token.ts
index a8c29dd..9c843b8 100644
--- a/app/Models/Token.ts
+++ b/app/Models/Token.ts
@@ -1,39 +1,39 @@
1import { DateTime } from 'luxon' 1import { DateTime } from 'luxon';
2import { BaseModel, column, hasOne } from '@adonisjs/lucid/orm' 2import { BaseModel, column, hasOne } from '@adonisjs/lucid/orm';
3import User from './User.js' 3import User from './User.js';
4import { HasOne } from '@adonisjs/lucid/types/relations' 4import { HasOne } from '@adonisjs/lucid/types/relations';
5 5
6export default class Token extends BaseModel { 6export default class Token extends BaseModel {
7 @column({ isPrimary: true }) 7 @column({ isPrimary: true })
8 public id: number 8 public id: number;
9 9
10 @hasOne(() => User, { 10 @hasOne(() => User, {
11 localKey: 'user_id', 11 localKey: 'user_id',
12 foreignKey: 'id', 12 foreignKey: 'id',
13 }) 13 })
14 public user: HasOne<typeof User> 14 public user: HasOne<typeof User>;
15 15
16 @column() 16 @column()
17 public user_id: number 17 public user_id: number;
18 18
19 @column() 19 @column()
20 public token: string 20 public token: string;
21 21
22 @column() 22 @column()
23 public type: string 23 public type: string;
24 24
25 @column() 25 @column()
26 public is_revoked: boolean 26 public is_revoked: boolean;
27 27
28 @column() 28 @column()
29 public name: string 29 public name: string;
30 30
31 @column.dateTime() 31 @column.dateTime()
32 public expires_at: DateTime 32 public expires_at: DateTime;
33 33
34 @column.dateTime({ autoCreate: true }) 34 @column.dateTime({ autoCreate: true })
35 public created_at: DateTime 35 public created_at: DateTime;
36 36
37 @column.dateTime({ autoCreate: true, autoUpdate: true }) 37 @column.dateTime({ autoCreate: true, autoUpdate: true })
38 public updated_at: DateTime 38 public updated_at: DateTime;
39} 39}
diff --git a/app/Models/User.ts b/app/Models/User.ts
index cc2c553..d292b3a 100644
--- a/app/Models/User.ts
+++ b/app/Models/User.ts
@@ -1,70 +1,70 @@
1import { DateTime } from 'luxon' 1import { DateTime } from 'luxon';
2import { BaseModel, beforeSave, column, hasMany } from '@adonisjs/lucid/orm' 2import { BaseModel, beforeSave, column, hasMany } from '@adonisjs/lucid/orm';
3import hash from '@adonisjs/core/services/hash' 3import hash from '@adonisjs/core/services/hash';
4import emitter from '@adonisjs/core/services/emitter' 4import emitter from '@adonisjs/core/services/emitter';
5import moment from 'moment' 5import moment from 'moment';
6import Encryption from '@ioc:Adonis/Core/Encryption' 6import Encryption from '@ioc:Adonis/Core/Encryption';
7import randtoken from 'rand-token' 7import randtoken from 'rand-token';
8import Token from './Token.js' 8import Token from './Token.js';
9import Workspace from './Workspace.js' 9import Workspace from './Workspace.js';
10import Service from './Service.js' 10import Service from './Service.js';
11import mail from '@adonisjs/mail/services/main' 11import mail from '@adonisjs/mail/services/main';
12import { url } from '#config/app' 12import { url } from '#config/app';
13import { mailFrom } from '#config/dashboard' 13import { mailFrom } from '#config/dashboard';
14import { HasMany } from '@adonisjs/lucid/types/relations' 14import { HasMany } from '@adonisjs/lucid/types/relations';
15 15
16export default class User extends BaseModel { 16export default class User extends BaseModel {
17 @column({ isPrimary: true }) 17 @column({ isPrimary: true })
18 public id: number 18 public id: number;
19 19
20 @column() 20 @column()
21 public email: string 21 public email: string;
22 22
23 @column() 23 @column()
24 public username: string 24 public username: string;
25 25
26 @column() 26 @column()
27 public password: string 27 public password: string;
28 28
29 @column() 29 @column()
30 public lastname: string 30 public lastname: string;
31 31
32 // TODO: Type the settings object. 32 // TODO: Type the settings object.
33 @column() 33 @column()
34 public settings: object 34 public settings: object;
35 35
36 @column.dateTime({ autoCreate: true }) 36 @column.dateTime({ autoCreate: true })
37 public created_at: DateTime 37 public created_at: DateTime;
38 38
39 @column.dateTime({ autoCreate: true, autoUpdate: true }) 39 @column.dateTime({ autoCreate: true, autoUpdate: true })
40 public updated_at: DateTime 40 public updated_at: DateTime;
41 41
42 @beforeSave() 42 @beforeSave()
43 public static async hashPassword(user: User) { 43 public static async hashPassword(user: User) {
44 if (user.$dirty.password) { 44 if (user.$dirty.password) {
45 user.password = await hash.make(user.password) 45 user.password = await hash.make(user.password);
46 } 46 }
47 } 47 }
48 48
49 @hasMany(() => Token, { 49 @hasMany(() => Token, {
50 foreignKey: 'user_id', 50 foreignKey: 'user_id',
51 }) 51 })
52 public tokens: HasMany<typeof Token> 52 public tokens: HasMany<typeof Token>;
53 53
54 @hasMany(() => Service, { 54 @hasMany(() => Service, {
55 foreignKey: 'userId', 55 foreignKey: 'userId',
56 }) 56 })
57 public services: HasMany<typeof Service> 57 public services: HasMany<typeof Service>;
58 58
59 @hasMany(() => Workspace, { 59 @hasMany(() => Workspace, {
60 foreignKey: 'userId', 60 foreignKey: 'userId',
61 }) 61 })
62 public workspaces: HasMany<typeof Workspace> 62 public workspaces: HasMany<typeof Workspace>;
63 63
64 public async forgotPassword(): Promise<void> { 64 public async forgotPassword(): Promise<void> {
65 const token = await this.generateToken(this, 'forgot_password') 65 const token = await this.generateToken(this, 'forgot_password');
66 66
67 await mail.send((message) => { 67 await mail.send(message => {
68 message 68 message
69 .from(mailFrom) 69 .from(mailFrom)
70 .to(this.email) 70 .to(this.email)
@@ -73,13 +73,13 @@ export default class User extends BaseModel {
73 username: this.username, 73 username: this.username,
74 appUrl: url, 74 appUrl: url,
75 token: token, 75 token: token,
76 }) 76 });
77 }) 77 });
78 78
79 await emitter.emit('forgot:password', { 79 await emitter.emit('forgot:password', {
80 user: this, 80 user: this,
81 token, 81 token,
82 }) 82 });
83 } 83 }
84 84
85 private async generateToken(user: User, type: string): Promise<string> { 85 private async generateToken(user: User, type: string): Promise<string> {
@@ -88,17 +88,21 @@ export default class User extends BaseModel {
88 .query() 88 .query()
89 .where('type', type) 89 .where('type', type)
90 .where('is_revoked', false) 90 .where('is_revoked', false)
91 .where('updated_at', '>=', moment().subtract(24, 'hours').format('YYYY-MM-DD HH:mm:ss')) 91 .where(
92 'updated_at',
93 '>=',
94 moment().subtract(24, 'hours').format('YYYY-MM-DD HH:mm:ss'),
95 );
92 96
93 const row = await query.first() 97 const row = await query.first();
94 if (row) { 98 if (row) {
95 return row.token 99 return row.token;
96 } 100 }
97 101
98 const token = Encryption.encrypt(randtoken.generate(16)) 102 const token = Encryption.encrypt(randtoken.generate(16));
99 103
100 await user.related('tokens').create({ type, token }) 104 await user.related('tokens').create({ type, token });
101 105
102 return token 106 return token;
103 } 107 }
104} 108}
diff --git a/app/Models/Workspace.ts b/app/Models/Workspace.ts
index c960ae4..6c48c12 100644
--- a/app/Models/Workspace.ts
+++ b/app/Models/Workspace.ts
@@ -1,42 +1,42 @@
1import { DateTime } from 'luxon' 1import { DateTime } from 'luxon';
2import { BaseModel, column, hasOne } from '@adonisjs/lucid/orm' 2import { BaseModel, column, hasOne } from '@adonisjs/lucid/orm';
3import User from './User.js' 3import User from './User.js';
4import { HasOne } from '@adonisjs/lucid/types/relations' 4import { HasOne } from '@adonisjs/lucid/types/relations';
5 5
6export default class Workspace extends BaseModel { 6export default class Workspace extends BaseModel {
7 @column({ isPrimary: true }) 7 @column({ isPrimary: true })
8 public id: number 8 public id: number;
9 9
10 @column({ 10 @column({
11 columnName: 'workspaceId', 11 columnName: 'workspaceId',
12 }) 12 })
13 public workspaceId: string 13 public workspaceId: string;
14 14
15 @hasOne(() => User, { 15 @hasOne(() => User, {
16 foreignKey: 'userId', 16 foreignKey: 'userId',
17 }) 17 })
18 public user: HasOne<typeof User> 18 public user: HasOne<typeof User>;
19 19
20 @column({ 20 @column({
21 columnName: 'userId', 21 columnName: 'userId',
22 }) 22 })
23 public userId: number 23 public userId: number;
24 24
25 @column() 25 @column()
26 public name: string 26 public name: string;
27 27
28 @column() 28 @column()
29 public order: number 29 public order: number;
30 30
31 @column() 31 @column()
32 public services: string 32 public services: string;
33 33
34 @column() 34 @column()
35 public data: string 35 public data: string;
36 36
37 @column.dateTime({ autoCreate: true }) 37 @column.dateTime({ autoCreate: true })
38 public createdAt: DateTime 38 public createdAt: DateTime;
39 39
40 @column.dateTime({ autoCreate: true, autoUpdate: true }) 40 @column.dateTime({ autoCreate: true, autoUpdate: true })
41 public updatedAt: DateTime 41 public updatedAt: DateTime;
42} 42}