Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
-- DropForeignKey
ALTER TABLE "Orders" DROP CONSTRAINT "Orders_fk_address_fkey";

-- AlterTable
ALTER TABLE "Orders" ALTER COLUMN "fk_address" DROP NOT NULL;

-- AddForeignKey
ALTER TABLE "Orders" ADD CONSTRAINT "Orders_fk_address_fkey" FOREIGN KEY ("fk_address") REFERENCES "Addresses"("id_address") ON DELETE SET NULL ON UPDATE CASCADE;
4 changes: 2 additions & 2 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ model Orders {
id_order Int @id @default(autoincrement())
fk_user Int
fk_store Int
fk_address Int
fk_address Int?
fk_cart Int @unique //El carrito se relaciona en un pedido al confirmarse la compra, y ese mismo carrito no puede concretarse en un pedido multiples veces
total Decimal @db.Decimal(10, 2)
order_status OrderStatus @default(PENDING) // por defecto se crea en estado pendiente
Expand All @@ -339,7 +339,7 @@ model Orders {
cart Carts @relation(fields: [fk_cart], references: [id_cart])
user Users @relation(fields: [fk_user], references: [id_user])
store Stores @relation(fields: [fk_store], references: [id_store])
address Addresses @relation(fields: [fk_address], references: [id_address])
address Addresses? @relation(fields: [fk_address], references: [id_address])
order_items OrderItems[]
delivery_assignment DeliveryAssignments?
}
Expand Down
23 changes: 12 additions & 11 deletions src/modules/users/orders/order.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ const mapOrderResponse = (order) => ({
status: order.order_status,
total: Number(order.total),
notes: order.notes ?? null,
address: {
address: order.address ? {
id: order.address.id_address,
address: order.address.address,
city: order.address.city,
region: order.address.region
},
} : null,
items: order.order_items.map((item) => ({
id: item.id_order_item,
quantity: item.quantity,
Expand Down Expand Up @@ -49,7 +49,7 @@ const mapOrderResponse = (order) => ({
export const createOrderService = async (authenticatedUserId, { cartId, addressId, notes, total }) => {
const resolvedUserId = parsePositiveInteger(authenticatedUserId, "userId");
const resolvedCartId = parsePositiveInteger(cartId, "cartId");
const resolvedAddressId = parsePositiveInteger(addressId, "addressId");
const resolvedAddressId = addressId ? parsePositiveInteger(addressId, "addressId") : null;

// Validar que el carrito existe, está activa y pertenece al usuario
const cart = await prisma.carts.findFirst({
Expand Down Expand Up @@ -105,15 +105,16 @@ export const createOrderService = async (authenticatedUserId, { cartId, addressI
throw new ValidationError("Uno o más productos del carrito ya no están disponibles");
}

// Validar que la dirección existe y pertenece al usuario
const address = await prisma.addresses.findFirst({
where: { id_address: resolvedAddressId, fk_user: resolvedUserId, status: true }
});
// Validar la direccion solo si se envia
if (resolvedAddressId) {
const address = await prisma.addresses.findFirst({
where: { id_address: resolvedAddressId, fk_user: resolvedUserId, status: true }
});

if (!address) {
throw new NotFoundError("Dirección no encontrada");
if (!address) {
throw new NotFoundError("Dirección no encontrada");
}
}

// Calcular precios historicos por item
const itemsData = cart.items.map((item) => {
const isOfferApplied = item.product.is_offer && item.product.offer_price != null;
Expand All @@ -138,7 +139,7 @@ export const createOrderService = async (authenticatedUserId, { cartId, addressI
data: {
fk_user: resolvedUserId,
fk_store: cart.fk_store,
fk_address: resolvedAddressId,
fk_address: resolvedAddressId, //pueder ser null si es retiro en tienda
Comment thread
leoAchu16 marked this conversation as resolved.
fk_cart: resolvedCartId,
total,
notes: notes ?? null,
Expand Down
Loading