Skip to content

Commit 94f4286

Browse files
committed
First commit with part of the service working.
1 parent 0287967 commit 94f4286

23 files changed

+530
-133
lines changed

.vscode/launch.json

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
// Use IntelliSense to learn about possible attributes.
3+
// Hover to view descriptions of existing attributes.
4+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"name": "Dev",
9+
"type": "node",
10+
"request": "launch",
11+
"runtimeExecutable": "node",
12+
"runtimeArgs": ["--nolazy", "-r", "ts-node/register/transpile-only"],
13+
14+
"args": ["src/index.ts", "--example", "hello"],
15+
16+
"cwd": "${workspaceRoot}",
17+
"internalConsoleOptions": "openOnSessionStart",
18+
"skipFiles": ["<node_internals>/**", "node_modules/**"]
19+
},
20+
{
21+
"name": "PROD",
22+
"type": "node",
23+
"request": "launch",
24+
"runtimeExecutable": "node",
25+
"runtimeArgs": ["--nolazy", "-r", "ts-node/register/transpile-only"],
26+
"args": ["src/index.ts", "--example", "hello"],
27+
"env": {
28+
"NODE_ENV": "production"
29+
},
30+
"cwd": "${workspaceRoot}",
31+
"internalConsoleOptions": "openOnSessionStart",
32+
"skipFiles": ["<node_internals>/**", "node_modules/**"]
33+
}
34+
]
35+
}

package-lock.json

+60-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@
3030
"typescript": "^4.6.4"
3131
},
3232
"dependencies": {
33-
"body-parser": "^1.18.2",
34-
"express": "^4.16.3",
33+
"class-transformer": "^0.5.1",
34+
"class-validator": "^0.13.2",
35+
"express": "^4.18.1",
3536
"mysql": "^2.15.0",
3637
"reflect-metadata": "^0.1.13",
3738
"typeorm": "^0.3.6"

src/controller/MinerController.ts

+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
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+
}

src/controller/PostGetAllAction.ts

-18
This file was deleted.

src/controller/PostGetByIdAction.ts

-27
This file was deleted.

src/controller/PostSaveAction.ts

-21
This file was deleted.

0 commit comments

Comments
 (0)