Skip to content

Commit 6af7f14

Browse files
Merge pull request #18 from fga-eps-mds/hotfix/#225-CardMetrica-nao-atualiza
Hotfix/#225 card metrica nao atualiza
2 parents e187306 + 214f89b commit 6af7f14

19 files changed

+266
-141
lines changed
+10-9
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
export enum ECategoriaMetrica {
2-
FREQUENCIA_CARDIACA = 'Frequência Cardíaca',
3-
PRESSAO_SANGUINEA = 'Pressão',
4-
TEMPERATURA = 'Temperatura',
5-
PESO = 'Peso',
6-
GLICEMIA = 'Glicemia',
7-
SATURACAO = 'Saturação',
8-
HORAS_DORMIDAS = 'Horas Dormidas',
9-
ALTURA = 'Altura',
10-
IMC = 'IMC',
2+
FREQUENCIA_CARDIACA = 'Frequência Cardíaca',
3+
PRESSAO_SANGUINEA = 'Pressão',
4+
TEMPERATURA = 'Temperatura',
5+
PESO = 'Peso',
6+
GLICEMIA = 'Glicemia',
7+
SATURACAO = 'Saturação',
8+
HORAS_DORMIDAS = 'Horas Dormidas',
9+
ALTURA = 'Altura',
10+
IMC = 'IMC',
11+
HIDRATACAO = 'Hidratação',
1112
}

src/metrica/dto/create-metrica-dto.ts

+19-9
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
1-
import { IsEnum, IsNotEmpty, IsNumber } from "class-validator";
2-
import { ECategoriaMetrica } from "../classes/tipo-metrica.enum";
1+
import {
2+
IsEnum,
3+
IsNotEmpty,
4+
IsNumber,
5+
IsOptional,
6+
IsString,
7+
} from 'class-validator';
8+
import { ECategoriaMetrica } from '../classes/tipo-metrica.enum';
39

410
export class CreateMetricaDto {
5-
@IsNotEmpty()
6-
@IsNumber()
7-
idIdoso!: number;
11+
@IsNotEmpty()
12+
@IsNumber()
13+
idIdoso!: number;
814

9-
@IsNotEmpty()
10-
@IsEnum(ECategoriaMetrica)
11-
categoria?: ECategoriaMetrica;
12-
}
15+
@IsNotEmpty()
16+
@IsEnum(ECategoriaMetrica)
17+
categoria?: ECategoriaMetrica;
18+
19+
@IsOptional()
20+
@IsString()
21+
valorMaximo?: string;
22+
}

src/metrica/dto/update-metrica-dto.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { PartialType } from "@nestjs/mapped-types";
2-
import { CreateMetricaDto } from "./create-metrica-dto";
1+
import { PartialType } from '@nestjs/mapped-types';
2+
import { CreateMetricaDto } from './create-metrica-dto';
33

4-
export class UpdateMetricaDto extends PartialType(CreateMetricaDto) { }
4+
export class UpdateMetricaDto extends PartialType(CreateMetricaDto) {}
+30-16
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,36 @@
1-
import { Column, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
2-
import { Idoso } from "../../idoso/entities/idoso.entity";
3-
import { ECategoriaMetrica } from "../classes/tipo-metrica.enum";
4-
import { CreateMetricaDto } from "../dto/create-metrica-dto";
5-
import { UpdateMetricaDto } from "../dto/update-metrica-dto";
1+
import {
2+
Column,
3+
Entity,
4+
JoinColumn,
5+
ManyToOne,
6+
OneToMany,
7+
PrimaryGeneratedColumn,
8+
} from 'typeorm';
9+
import { Idoso } from '../../idoso/entities/idoso.entity';
10+
import { ValorMetrica } from '../../valorMetrica/entities/valorMetrica.entity';
11+
import { ECategoriaMetrica } from '../classes/tipo-metrica.enum';
12+
import { CreateMetricaDto } from '../dto/create-metrica-dto';
13+
import { UpdateMetricaDto } from '../dto/update-metrica-dto';
614

715
@Entity({ name: 'metrica' })
816
export class Metrica {
9-
@PrimaryGeneratedColumn()
10-
id!: number;
17+
@PrimaryGeneratedColumn()
18+
id!: number;
1119

12-
@ManyToOne(() => Idoso)
13-
@JoinColumn({ name: 'idIdoso' })
14-
idIdoso!: number;
20+
@ManyToOne(() => Idoso)
21+
@JoinColumn({ name: 'idIdoso' })
22+
idIdoso!: number;
1523

16-
@Column('enum', { enum: ECategoriaMetrica })
17-
categoria!: ECategoriaMetrica;
24+
@OneToMany(() => ValorMetrica, (valorMetrica) => valorMetrica.idMetrica)
25+
valoresMetricas!: ValorMetrica[];
1826

19-
constructor(createMetricaDto: CreateMetricaDto | UpdateMetricaDto) {
20-
Object.assign(this, createMetricaDto);
21-
}
22-
}
27+
@Column('enum', { enum: ECategoriaMetrica })
28+
categoria!: ECategoriaMetrica;
29+
30+
@Column('varchar', { length: 20, nullable: true })
31+
valorMaximo?: string;
32+
33+
constructor(createMetricaDto: CreateMetricaDto | UpdateMetricaDto) {
34+
Object.assign(this, createMetricaDto);
35+
}
36+
}

src/metrica/metrica.controller.spec.ts

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ describe('MetricaController', () => {
1919
const metricaDto = {
2020
idIdoso: 1,
2121
categoria: ECategoriaMetrica.FREQUENCIA_CARDIACA,
22+
valoresMetricas: [],
2223
};
2324

2425
const metrica = {

src/metrica/metrica.controller.ts

+15-9
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
import {
22
Body,
33
Controller,
4+
Delete,
45
Get,
56
Param,
67
Patch,
78
Post,
8-
Delete,
99
} from '@nestjs/common';
10-
import { MetricaService } from './metrica.service';
11-
import { Response } from '../shared/interceptors/data-transform.interceptor';
12-
import { Paginate, Pagination } from '../shared/decorators/paginate.decorator';
10+
import { HttpResponse } from '../shared/classes/http-response';
11+
import { Filtering, Filtrate } from '../shared/decorators/filtrate.decorator';
1312
import { Ordenate, Ordering } from '../shared/decorators/ordenate.decorator';
13+
import { Paginate, Pagination } from '../shared/decorators/paginate.decorator';
14+
import { PublicRoute } from '../shared/decorators/public-route.decorator';
15+
import { Response } from '../shared/interceptors/data-transform.interceptor';
1416
import { ResponsePaginate } from '../shared/interfaces/response-paginate.interface';
15-
import { Metrica } from './entities/metrica.entity';
1617
import { IdValidator } from '../shared/validators/id.validator';
17-
import { UpdateMetricaDto } from './dto/update-metrica-dto';
18-
import { HttpResponse } from '../shared/classes/http-response';
1918
import { CreateMetricaDto } from './dto/create-metrica-dto';
20-
import { PublicRoute } from '../shared/decorators/public-route.decorator';
21-
import { Filtering, Filtrate } from '../shared/decorators/filtrate.decorator';
19+
import { UpdateMetricaDto } from './dto/update-metrica-dto';
20+
import { Metrica } from './entities/metrica.entity';
2221
import { IMetricaFilter } from './interfaces/metrica-filter.interface';
22+
import { MetricaService } from './metrica.service';
2323

2424
@Controller('metrica')
2525
export class MetricaController {
@@ -38,6 +38,12 @@ export class MetricaController {
3838
async findOne(@Param() param: IdValidator): Promise<Metrica> {
3939
return this._service.findOne(param.id);
4040
}
41+
42+
@Get('soma-hidratacao/:id')
43+
async getSomaHidratacao(@Param() param: IdValidator): Promise<number> {
44+
return this._service.getSomaHidratacao(param.id);
45+
}
46+
4147
@Patch(':id')
4248
async update(
4349
@Param() param: IdValidator,

src/metrica/metrica.module.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import { MetricaController } from './metrica.controller';
66
import { MetricaService } from './metrica.service';
77

88
@Module({
9-
imports: [TypeOrmModule.forFeature([Metrica])],
10-
controllers: [MetricaController],
11-
providers: [MetricaService, Repository],
12-
exports: [MetricaService],
9+
imports: [TypeOrmModule.forFeature([Metrica])],
10+
controllers: [MetricaController],
11+
providers: [MetricaService, Repository],
12+
exports: [MetricaService],
1313
})
14-
export class MetricaModule { }
14+
export class MetricaModule {}

src/metrica/metrica.service.ts

+26-3
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import { Pagination } from '../shared/decorators/paginate.decorator';
66
import { getWhereClauseNumber } from '../shared/helpers/sql-query-helper';
77
import { ResponsePaginate } from '../shared/interfaces/response-paginate.interface';
88
import { CreateMetricaDto } from './dto/create-metrica-dto';
9-
import { Metrica } from './entities/metrica.entity';
109
import { UpdateMetricaDto } from './dto/update-metrica-dto';
10+
import { Metrica } from './entities/metrica.entity';
1111
import { IMetricaFilter } from './interfaces/metrica-filter.interface';
1212

1313
@Injectable()
@@ -23,8 +23,31 @@ export class MetricaService {
2323
}
2424

2525
async findOne(id: number) {
26-
const metrica = await this._repository.findOneOrFail({ where: { id } });
27-
return metrica;
26+
return this._repository.findOneOrFail({ where: { id } });
27+
}
28+
29+
async getSomaHidratacao(id: number) {
30+
const start = new Date();
31+
start.setUTCHours(0, 0, 0);
32+
const startString = start.toISOString();
33+
34+
const end = new Date();
35+
end.setUTCHours(23, 59, 59);
36+
const endString = end.toISOString();
37+
38+
const result = (await this._repository
39+
.createQueryBuilder('metrica')
40+
.leftJoinAndSelect('metrica.valoresMetricas', 'valoresMetricas')
41+
.select('valoresMetricas.valor AS valor')
42+
.where('metrica.id = :id', { id })
43+
.andWhere(
44+
`"valoresMetricas"."dataHora"::date BETWEEN '${startString}'::date AND '${endString}'::date`,
45+
)
46+
.getRawMany()) as { valor: string }[];
47+
48+
return result.reduce((accumulator, valorMetrica) => {
49+
return accumulator + Number(valorMetrica.valor);
50+
}, 0);
2851
}
2952

3053
async update(id: number, body: UpdateMetricaDto): Promise<Metrica> {
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
1-
import { MigrationInterface, QueryRunner } from "typeorm";
1+
import { MigrationInterface, QueryRunner } from 'typeorm';
22

33
export class CreateTableMetrica1701549606356 implements MigrationInterface {
4-
name = 'CreateTableMetrica1701549606356'
4+
name = 'CreateTableMetrica1701549606356';
55

6-
public async up(queryRunner: QueryRunner): Promise<void> {
7-
await queryRunner.query(`CREATE TYPE "public"."metrica_categoria_enum" AS ENUM('Frequência Cardíaca', 'Pressão', 'Temperatura', 'Peso', 'Glicemia', 'Saturação')`);
8-
await queryRunner.query(`CREATE TABLE "metrica" ("id" SERIAL NOT NULL, "categoria" "public"."metrica_categoria_enum" NOT NULL, "idIdoso" integer, CONSTRAINT "PK_37eda6d5162b9305738916e1712" PRIMARY KEY ("id"))`);
9-
await queryRunner.query(`ALTER TABLE "metrica" ADD CONSTRAINT "FK_574d03daab9657eaa6cc7d5d726" FOREIGN KEY ("idIdoso") REFERENCES "idoso"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
10-
}
11-
12-
public async down(queryRunner: QueryRunner): Promise<void> {
13-
await queryRunner.query(`ALTER TABLE "metrica" DROP CONSTRAINT "FK_574d03daab9657eaa6cc7d5d726"`);
14-
await queryRunner.query(`DROP TABLE "metrica"`);
15-
await queryRunner.query(`DROP TYPE "public"."metrica_categoria_enum"`);
16-
}
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(
8+
`CREATE TYPE "public"."metrica_categoria_enum" AS ENUM('Frequência Cardíaca', 'Pressão', 'Temperatura', 'Peso', 'Glicemia', 'Saturação')`,
9+
);
10+
await queryRunner.query(
11+
`CREATE TABLE "metrica" ("id" SERIAL NOT NULL, "categoria" "public"."metrica_categoria_enum" NOT NULL, "idIdoso" integer, CONSTRAINT "PK_37eda6d5162b9305738916e1712" PRIMARY KEY ("id"))`,
12+
);
13+
await queryRunner.query(
14+
`ALTER TABLE "metrica" ADD CONSTRAINT "FK_574d03daab9657eaa6cc7d5d726" FOREIGN KEY ("idIdoso") REFERENCES "idoso"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
15+
);
16+
}
1717

18+
public async down(queryRunner: QueryRunner): Promise<void> {
19+
await queryRunner.query(
20+
`ALTER TABLE "metrica" DROP CONSTRAINT "FK_574d03daab9657eaa6cc7d5d726"`,
21+
);
22+
await queryRunner.query(`DROP TABLE "metrica"`);
23+
await queryRunner.query(`DROP TYPE "public"."metrica_categoria_enum"`);
24+
}
1825
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
1-
import { MigrationInterface, QueryRunner } from "typeorm";
1+
import { MigrationInterface, QueryRunner } from 'typeorm';
22

3-
export class CreateTableValorMetrica1701559083238 implements MigrationInterface {
4-
name = 'CreateTableValorMetrica1701559083238'
3+
export class CreateTableValorMetrica1701559083238
4+
implements MigrationInterface
5+
{
6+
name = 'CreateTableValorMetrica1701559083238';
57

6-
public async up(queryRunner: QueryRunner): Promise<void> {
7-
await queryRunner.query(`CREATE TABLE "valorMetrica" ("id" SERIAL NOT NULL, "valor" double precision NOT NULL, "dataHora" TIMESTAMP NOT NULL, "idMetrica" integer, CONSTRAINT "PK_9e8ca5a7cfc9169850aa35d4fe2" PRIMARY KEY ("id"))`);
8-
await queryRunner.query(`ALTER TABLE "valorMetrica" ADD CONSTRAINT "FK_80f274382900aafd3a667034d46" FOREIGN KEY ("idMetrica") REFERENCES "metrica"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
9-
}
10-
11-
public async down(queryRunner: QueryRunner): Promise<void> {
12-
await queryRunner.query(`ALTER TABLE "valorMetrica" DROP CONSTRAINT "FK_80f274382900aafd3a667034d46"`);
13-
await queryRunner.query(`DROP TABLE "valorMetrica"`);
14-
}
8+
public async up(queryRunner: QueryRunner): Promise<void> {
9+
await queryRunner.query(
10+
`CREATE TABLE "valorMetrica" ("id" SERIAL NOT NULL, "valor" double precision NOT NULL, "dataHora" TIMESTAMP NOT NULL, "idMetrica" integer, CONSTRAINT "PK_9e8ca5a7cfc9169850aa35d4fe2" PRIMARY KEY ("id"))`,
11+
);
12+
await queryRunner.query(
13+
`ALTER TABLE "valorMetrica" ADD CONSTRAINT "FK_80f274382900aafd3a667034d46" FOREIGN KEY ("idMetrica") REFERENCES "metrica"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
14+
);
15+
}
1516

17+
public async down(queryRunner: QueryRunner): Promise<void> {
18+
await queryRunner.query(
19+
`ALTER TABLE "valorMetrica" DROP CONSTRAINT "FK_80f274382900aafd3a667034d46"`,
20+
);
21+
await queryRunner.query(`DROP TABLE "valorMetrica"`);
22+
}
1623
}
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,39 @@
1-
import { MigrationInterface, QueryRunner } from "typeorm";
1+
import { MigrationInterface, QueryRunner } from 'typeorm';
22

33
export class AlterTableValorMetrica1701996752336 implements MigrationInterface {
4-
name = 'AlterTableValorMetrica1701996752336'
4+
name = 'AlterTableValorMetrica1701996752336';
55

6-
public async up(queryRunner: QueryRunner): Promise<void> {
7-
await queryRunner.query(`ALTER TYPE "public"."metrica_categoria_enum" RENAME TO "metrica_categoria_enum_old"`);
8-
await queryRunner.query(`CREATE TYPE "public"."metrica_categoria_enum" AS ENUM('Frequência Cardíaca', 'Pressão', 'Temperatura', 'Peso', 'Glicemia', 'Saturação', 'Horas Dormidas', 'Altura', 'IMC')`);
9-
await queryRunner.query(`ALTER TABLE "metrica" ALTER COLUMN "categoria" TYPE "public"."metrica_categoria_enum" USING "categoria"::"text"::"public"."metrica_categoria_enum"`);
10-
await queryRunner.query(`DROP TYPE "public"."metrica_categoria_enum_old"`);
11-
await queryRunner.query(`ALTER TABLE "valorMetrica" DROP COLUMN "valor"`);
12-
await queryRunner.query(`ALTER TABLE "valorMetrica" ADD "valor" character varying(10) NOT NULL`);
13-
}
14-
15-
public async down(queryRunner: QueryRunner): Promise<void> {
16-
await queryRunner.query(`ALTER TABLE "valorMetrica" DROP COLUMN "valor"`);
17-
await queryRunner.query(`ALTER TABLE "valorMetrica" ADD "valor" double precision NOT NULL`);
18-
await queryRunner.query(`CREATE TYPE "public"."metrica_categoria_enum_old" AS ENUM('Frequência Cardíaca', 'Pressão', 'Temperatura', 'Peso', 'Glicemia', 'Saturação')`);
19-
await queryRunner.query(`ALTER TABLE "metrica" ALTER COLUMN "categoria" TYPE "public"."metrica_categoria_enum_old" USING "categoria"::"text"::"public"."metrica_categoria_enum_old"`);
20-
await queryRunner.query(`DROP TYPE "public"."metrica_categoria_enum"`);
21-
await queryRunner.query(`ALTER TYPE "public"."metrica_categoria_enum_old" RENAME TO "metrica_categoria_enum"`);
22-
}
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(
8+
`ALTER TYPE "public"."metrica_categoria_enum" RENAME TO "metrica_categoria_enum_old"`,
9+
);
10+
await queryRunner.query(
11+
`CREATE TYPE "public"."metrica_categoria_enum" AS ENUM('Frequência Cardíaca', 'Pressão', 'Temperatura', 'Peso', 'Glicemia', 'Saturação', 'Horas Dormidas', 'Altura', 'IMC')`,
12+
);
13+
await queryRunner.query(
14+
`ALTER TABLE "metrica" ALTER COLUMN "categoria" TYPE "public"."metrica_categoria_enum" USING "categoria"::"text"::"public"."metrica_categoria_enum"`,
15+
);
16+
await queryRunner.query(`DROP TYPE "public"."metrica_categoria_enum_old"`);
17+
await queryRunner.query(`ALTER TABLE "valorMetrica" DROP COLUMN "valor"`);
18+
await queryRunner.query(
19+
`ALTER TABLE "valorMetrica" ADD "valor" character varying(10) NOT NULL`,
20+
);
21+
}
2322

23+
public async down(queryRunner: QueryRunner): Promise<void> {
24+
await queryRunner.query(`ALTER TABLE "valorMetrica" DROP COLUMN "valor"`);
25+
await queryRunner.query(
26+
`ALTER TABLE "valorMetrica" ADD "valor" double precision NOT NULL`,
27+
);
28+
await queryRunner.query(
29+
`CREATE TYPE "public"."metrica_categoria_enum_old" AS ENUM('Frequência Cardíaca', 'Pressão', 'Temperatura', 'Peso', 'Glicemia', 'Saturação')`,
30+
);
31+
await queryRunner.query(
32+
`ALTER TABLE "metrica" ALTER COLUMN "categoria" TYPE "public"."metrica_categoria_enum_old" USING "categoria"::"text"::"public"."metrica_categoria_enum_old"`,
33+
);
34+
await queryRunner.query(`DROP TYPE "public"."metrica_categoria_enum"`);
35+
await queryRunner.query(
36+
`ALTER TYPE "public"."metrica_categoria_enum_old" RENAME TO "metrica_categoria_enum"`,
37+
);
38+
}
2439
}

0 commit comments

Comments
 (0)