have the right dispute statuses
This commit is contained in:
@@ -0,0 +1,67 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces stripeDisputeStatus enum with all valid Stripe dispute statuses.
|
||||||
|
* Previous enum had: open, won, lost, warning_closed
|
||||||
|
* Stripe uses: needs_response, under_review, won, lost,
|
||||||
|
* warning_needs_response, warning_under_review, warning_closed
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
up: async (queryInterface) => {
|
||||||
|
// Create new enum type with correct Stripe statuses
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
CREATE TYPE "enum_Rentals_stripeDisputeStatus_new" AS ENUM (
|
||||||
|
'needs_response',
|
||||||
|
'under_review',
|
||||||
|
'won',
|
||||||
|
'lost',
|
||||||
|
'warning_needs_response',
|
||||||
|
'warning_under_review',
|
||||||
|
'warning_closed'
|
||||||
|
);
|
||||||
|
`);
|
||||||
|
|
||||||
|
// Alter column to use new type
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
ALTER TABLE "Rentals"
|
||||||
|
ALTER COLUMN "stripeDisputeStatus"
|
||||||
|
TYPE "enum_Rentals_stripeDisputeStatus_new"
|
||||||
|
USING "stripeDisputeStatus"::text::"enum_Rentals_stripeDisputeStatus_new";
|
||||||
|
`);
|
||||||
|
|
||||||
|
// Drop old enum type
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
DROP TYPE "enum_Rentals_stripeDisputeStatus";
|
||||||
|
`);
|
||||||
|
|
||||||
|
// Rename new type to original name
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
ALTER TYPE "enum_Rentals_stripeDisputeStatus_new"
|
||||||
|
RENAME TO "enum_Rentals_stripeDisputeStatus";
|
||||||
|
`);
|
||||||
|
},
|
||||||
|
|
||||||
|
down: async (queryInterface) => {
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
CREATE TYPE "enum_Rentals_stripeDisputeStatus_old" AS ENUM (
|
||||||
|
'open', 'won', 'lost', 'warning_closed'
|
||||||
|
);
|
||||||
|
`);
|
||||||
|
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
ALTER TABLE "Rentals"
|
||||||
|
ALTER COLUMN "stripeDisputeStatus"
|
||||||
|
TYPE "enum_Rentals_stripeDisputeStatus_old"
|
||||||
|
USING "stripeDisputeStatus"::text::"enum_Rentals_stripeDisputeStatus_old";
|
||||||
|
`);
|
||||||
|
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
DROP TYPE "enum_Rentals_stripeDisputeStatus";
|
||||||
|
`);
|
||||||
|
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
ALTER TYPE "enum_Rentals_stripeDisputeStatus_old"
|
||||||
|
RENAME TO "enum_Rentals_stripeDisputeStatus";
|
||||||
|
`);
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -95,8 +95,17 @@ const Rental = sequelize.define("Rental", {
|
|||||||
type: DataTypes.STRING,
|
type: DataTypes.STRING,
|
||||||
},
|
},
|
||||||
// Dispute tracking fields (for tracking Stripe payment disputes/chargebacks)
|
// Dispute tracking fields (for tracking Stripe payment disputes/chargebacks)
|
||||||
|
// Stripe dispute statuses: https://docs.stripe.com/api/disputes/object#dispute_object-status
|
||||||
stripeDisputeStatus: {
|
stripeDisputeStatus: {
|
||||||
type: DataTypes.ENUM("open", "won", "lost", "warning_closed"),
|
type: DataTypes.ENUM(
|
||||||
|
"needs_response",
|
||||||
|
"under_review",
|
||||||
|
"won",
|
||||||
|
"lost",
|
||||||
|
"warning_needs_response",
|
||||||
|
"warning_under_review",
|
||||||
|
"warning_closed"
|
||||||
|
),
|
||||||
allowNull: true,
|
allowNull: true,
|
||||||
},
|
},
|
||||||
stripeDisputeId: {
|
stripeDisputeId: {
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class DisputeService {
|
|||||||
|
|
||||||
// Update rental with dispute info
|
// Update rental with dispute info
|
||||||
await rental.update({
|
await rental.update({
|
||||||
stripeDisputeStatus: "open",
|
stripeDisputeStatus: dispute.status,
|
||||||
stripeDisputeId: dispute.id,
|
stripeDisputeId: dispute.id,
|
||||||
stripeDisputeReason: dispute.reason,
|
stripeDisputeReason: dispute.reason,
|
||||||
stripeDisputeAmount: dispute.amount,
|
stripeDisputeAmount: dispute.amount,
|
||||||
@@ -106,7 +106,7 @@ class DisputeService {
|
|||||||
const won = dispute.status === "won";
|
const won = dispute.status === "won";
|
||||||
|
|
||||||
await rental.update({
|
await rental.update({
|
||||||
stripeDisputeStatus: dispute.status, // 'won', 'lost', 'warning_closed'
|
stripeDisputeStatus: dispute.status,
|
||||||
stripeDisputeClosedAt: new Date(),
|
stripeDisputeClosedAt: new Date(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user