Orders en los consumidores y gestion de los demas casos de uso

This commit is contained in:
2026-02-26 17:30:32 +01:00
parent 18422fbe38
commit ca1144b55c
9 changed files with 204 additions and 52 deletions

View File

@@ -2,9 +2,11 @@
* TODO: Usar
*/
import { PoolClient, QueryResult, QueryResultRow } from "pg";
import { CreateOrderDTO, OrderTracking } from "../domain/Order.js";
import { CreateOrderDTO, OrderTracking, UpdateOrderDTO } from "../domain/Order.js";
import { Result } from "../domain/Result.js";
import { PgClient } from "./PgClient.js";
import assert from "node:assert";
import { error } from "node:console";
/**
* Agrupa todas las operaciones de *Order*.
@@ -164,25 +166,35 @@ export class OrderRepository {
return result
}
/**
* Actualizacion "correcta" del estado de un order
*/
public async updateOrder(args: {
id: number,
new_status: string,
reason: string
}) {
public async updateOrder(args: UpdateOrderDTO): Promise<Result<string, OrderTracking<any>>> {
// XOR id o correlation_id
assert((args.id != undefined) != (args.correlation_id != undefined))
const client = await this.pgClient.connect();
await client.query('BEGIN');
const idType = ('id' in args) ? "correlation_id" : "id"
const idValue = (args.id != undefined) ? args.id : args.correlation_id
// 1. Se consulta la order de base
const qCurrentOrder = `
SELECT * FROM order_tracking
WHERE id = $1
WHERE ${idType} = $1
`
const vCurrentOrder = [args.id]
const vCurrentOrder = [idValue]
const currentOrderResult = await this.getFirst(client.query<OrderTracking<any>>(qCurrentOrder, vCurrentOrder))
const orderId = currentOrderResult.data?.id
if (orderId == undefined) {
return {
error: "El order a actualizar no existe " + idType + ": " + idValue
}
}
if (currentOrderResult.error != undefined) {
await client.query("ROLLBACK")
@@ -201,7 +213,7 @@ export class OrderRepository {
WHERE id = $1
RETURNING id, status, update_date;
`
const vOrderTracking = [args.id, args.new_status]
const vOrderTracking = [orderId, args.new_status]
const updatedOrderResult = await this.getFirst(
client.query<{ id: number, status: string, update_date: string }>(uOrderTracking, vOrderTracking)
)