Skip to content

Commit

Permalink
Measurements
Browse files Browse the repository at this point in the history
  • Loading branch information
bastikempken committed Jan 25, 2025
1 parent 5920349 commit 1baa741
Show file tree
Hide file tree
Showing 13 changed files with 664 additions and 21 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
- uses: actions/checkout@v4
with:
repository: bastikempken/power-data-ui
path: power-data
path: power-data-
- uses: actions/checkout@v4
with:
repository: bastikempken/power-data-ui
Expand Down
16 changes: 16 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
services:
db:
image: postgres:15
restart: unless-stopped
container_name: power-data-db
volumes:
- power-data:/var/lib/postgresql/data
hostname: postgres
environment:
POSTGRES_DB: powerdata
POSTGRES_USER: powerdata
POSTGRES_PASSWORD: powerdata
ports:
- 5432:5432
volumes:
power-data: null
8 changes: 7 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,17 @@
},
"dependencies": {
"@nestjs/common": "^11.0.1",
"@nestjs/config": "^4.0.0",
"@nestjs/core": "^11.0.1",
"@nestjs/platform-express": "^11.0.1",
"@nestjs/serve-static": "^5.0.1",
"@nestjs/typeorm": "^11.0.0",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.1",
"pg": "^8.13.1",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.1"
"rxjs": "^7.8.1",
"typeorm": "^0.3.20"
},
"devDependencies": {
"@eslint/eslintrc": "^3.2.0",
Expand Down
499 changes: 480 additions & 19 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions rest-files/http-client.env.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"dev": {
"baseUrl": "http://localhost:3000/api"
}
}
13 changes: 13 additions & 0 deletions rest-files/rest.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
## source

POST {{baseUrl}}/measurements
content-type: application/json

{
"device": "omv-heavy",
"ain": "11630%200481724",
"energy": 2,
"power": 3,
"temperature": 4,
"voltage": 5
}
22 changes: 22 additions & 0 deletions src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,34 @@ import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ServeStaticModule } from '@nestjs/serve-static';
import { join } from 'path';
import { MeasurementModule } from './measurement/measurement.module';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';
import { MeasurementEntity } from './measurement/measurement.entity';

@Module({
imports: [
MeasurementModule,
ServeStaticModule.forRoot({
rootPath: join(__dirname, '.', 'client'),
}),
ConfigModule.forRoot({ isGlobal: true }),
TypeOrmModule.forRootAsync({
inject: [ConfigService],
useFactory: (configService: ConfigService): TypeOrmModuleOptions => {
return {
type: 'postgres',
host: configService.getOrThrow('DB_HOST'),
port: 5432,
password: configService.getOrThrow('DB_PW'),
username: configService.getOrThrow('DB_USER'),
entities: [MeasurementEntity],
database: configService.getOrThrow('DB_NAME'),
synchronize: true,
logging: false,
};
},
}),
],
controllers: [AppController],
providers: [AppService],
Expand Down
2 changes: 2 additions & 0 deletions src/main.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe({ transform: true }));
app.setGlobalPrefix('api');
await app.listen(process.env.PORT ?? 3000);
}
Expand Down
34 changes: 34 additions & 0 deletions src/measurement/create-measurement.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { Type } from 'class-transformer';
import { IsNotEmpty, IsNumber, IsString } from 'class-validator';

export class CreateMeasurementDto {
@Type(() => String)
@IsString()
@IsNotEmpty()
readonly device: string;

@Type(() => String)
@IsString()
@IsNotEmpty()
readonly ain: string;

@Type(() => Number)
@IsNumber()
@IsNotEmpty()
readonly energy: number;

@Type(() => Number)
@IsNumber()
@IsNotEmpty()
readonly power: number;

@Type(() => Number)
@IsNumber()
@IsNotEmpty()
readonly temperature: number;

@Type(() => Number)
@IsNumber()
@IsNotEmpty()
readonly voltage: number;
}
14 changes: 14 additions & 0 deletions src/measurement/measurement.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Body, Controller, Post } from '@nestjs/common';
import { MeasurementService } from './measurement.service';
import { CreateMeasurementDto } from './create-measurement.dto';
import { MeasurementEntity } from './measurement.entity';

@Controller('measurements')
export class MeasurementController {
constructor(private readonly measurementService: MeasurementService) {}

@Post()
create(@Body() dto: CreateMeasurementDto): Promise<MeasurementEntity> {
return this.measurementService.crate(dto);
}
}
33 changes: 33 additions & 0 deletions src/measurement/measurement.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import {
Column,
CreateDateColumn,
Entity,
PrimaryGeneratedColumn,
} from 'typeorm';

@Entity({ name: 'measurements' })
export class MeasurementEntity {
@PrimaryGeneratedColumn('uuid')
id!: string;

@Column()
device!: string;

@Column()
ain!: string;

@Column()
energy: number;

@Column()
power: number;

@Column()
temperature: number;

@Column()
voltage: number;

@CreateDateColumn()
createDate?: Date;
}
13 changes: 13 additions & 0 deletions src/measurement/measurement.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { Module } from '@nestjs/common';
import { MeasurementController } from './measurement.controller';
import { MeasurementService } from './measurement.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { MeasurementEntity } from './measurement.entity';

@Module({
imports: [TypeOrmModule.forFeature([MeasurementEntity])],
controllers: [MeasurementController],
providers: [MeasurementService],
exports: [],
})
export class MeasurementModule {}
24 changes: 24 additions & 0 deletions src/measurement/measurement.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Injectable } from '@nestjs/common';
import { CreateMeasurementDto } from './create-measurement.dto';
import { MeasurementEntity } from './measurement.entity';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';

@Injectable()
export class MeasurementService {
constructor(
@InjectRepository(MeasurementEntity)
private measurementRepository: Repository<MeasurementEntity>,
) {}

crate(dto: CreateMeasurementDto): Promise<MeasurementEntity> {
const entity = new MeasurementEntity();
entity.ain = dto.ain;
entity.device = dto.device;
entity.energy = dto.energy;
entity.power = dto.power;
entity.voltage = dto.voltage;
entity.temperature = dto.temperature;
return this.measurementRepository.save(entity);
}
}

0 comments on commit 1baa741

Please sign in to comment.