1
+ import { plainToInstance } from "class-transformer" ;
2
+ import { Request , Response } from "express" ;
3
+ import { AppDataSource } from "../data-source" ;
4
+ import { Miner } from "../entity/Miner" ;
5
+ import { MinerStateAudit } from "../entity/MinerStateAudit" ;
6
+ import { now } from "../helpers/nowTimestamp" ;
7
+ import { AddMinerDTO } from "../mapper/AddMinerDTO" ;
8
+ import { ChangeMinerStateDto } from "../mapper/ChangeMinerStateDto" ;
9
+ import { MinerDTO } from "../mapper/MinerDTO" ;
10
+ import { UpdateMinerDTO } from "../mapper/UpdateMinerDTO" ;
11
+
12
+
13
+ /**
14
+ * Loads all posts from the database.
15
+ */
16
+ export class MinerController {
17
+ static async getAllMiners ( request : Request , response : Response ) {
18
+
19
+ }
20
+
21
+ static async getAllUserMiners ( request : Request , response : Response ) {
22
+ // get a post repository to perform operations with post
23
+ const minerRepository = AppDataSource . manager . getRepository ( Miner ) ;
24
+
25
+ // get user id
26
+ const user_id = request . params . id
27
+
28
+ // get all miners
29
+ const miners = await minerRepository . findBy ( {
30
+ owner_id : + user_id // where id is your column name
31
+ } ) ;
32
+
33
+ // return loaded miner(s)
34
+ response . send ( plainToInstance ( MinerDTO , miners ) ) ;
35
+
36
+ }
37
+
38
+ static async addMiner ( request : Request , response : Response ) {
39
+ // get a post repository to perform operations with post
40
+ const minerRepository = AppDataSource . manager . getRepository ( Miner ) ;
41
+
42
+ // convert body to defined object.
43
+ const minerDto = plainToInstance ( AddMinerDTO , request . body ) ;
44
+
45
+ // create a real post object
46
+ const newMiner = minerRepository . create ( minerDto ) ;
47
+
48
+ // save received post
49
+ await minerRepository . save ( newMiner ) ;
50
+
51
+ // return saved miner(s) back
52
+ response . send ( plainToInstance ( MinerDTO , newMiner ) ) ;
53
+ }
54
+
55
+ static async updateMinerRecord ( request : Request , response : Response ) {
56
+ // get a post repository to perform operations with post
57
+ const minerRepository = AppDataSource . manager . getRepository ( Miner ) ;
58
+ const stateChangeAuditRepository = AppDataSource . manager . getRepository ( MinerStateAudit ) ;
59
+
60
+ // convert body to defined object.
61
+ const updateMinerDto = plainToInstance ( UpdateMinerDTO , request . body ) ;
62
+
63
+ // get miner
64
+ var miner = await minerRepository . findOneBy ( {
65
+ id : updateMinerDto . miner_id // where id is your column name
66
+ } ) ;
67
+
68
+ // miner not found
69
+ if ( ! miner ) {
70
+ response . status ( 404 ) ;
71
+ response . end ( ) ;
72
+ return ;
73
+ }
74
+
75
+ // Update the object.
76
+ const updateTime = now ( ) ;
77
+
78
+ let auditRecord ;
79
+ for ( let prop in miner ) {
80
+ if ( updateMinerDto . hasOwnProperty ( prop ) ) {
81
+ if ( prop === "state" ) {
82
+ auditRecord = await stateChangeAuditRepository . create (
83
+ {
84
+ miner_id : updateMinerDto . miner_id ,
85
+ previous_state : miner . state ,
86
+ new_state : updateMinerDto . state ,
87
+ changed_at : updateTime
88
+ }
89
+ ) ;
90
+ miner . last_state_change = updateTime ;
91
+ }
92
+ miner [ prop ] = updateMinerDto [ prop ] ;
93
+ }
94
+ }
95
+
96
+ // save updated object
97
+ await AppDataSource . manager . transaction ( async ( transactionalEntityManager ) => {
98
+ await transactionalEntityManager . save ( miner )
99
+ if ( auditRecord ) {
100
+ await transactionalEntityManager . save ( auditRecord )
101
+ }
102
+ } )
103
+
104
+ // return saved miner(s) back
105
+ response . send ( plainToInstance ( MinerDTO , miner ) ) ;
106
+ }
107
+ }
0 commit comments