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