Skip to content

Commit d37a377

Browse files
chore: wip
1 parent 8ccc5f0 commit d37a377

File tree

8 files changed

+127
-42
lines changed

8 files changed

+127
-42
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { db } from '@stacksjs/database'
2+
3+
/**
4+
* Delete an order by ID
5+
*
6+
* @param id The ID of the order to delete
7+
* @returns True if the order was deleted, false otherwise
8+
*/
9+
export async function destroy(id: number): Promise<boolean> {
10+
try {
11+
// Perform the delete operation
12+
const result = await db
13+
.deleteFrom('payments')
14+
.where('id', '=', id)
15+
.executeTakeFirst()
16+
17+
// Return true if any row was affected (deleted)
18+
return Number(result.numDeletedRows) > 0
19+
}
20+
catch (error) {
21+
if (error instanceof Error) {
22+
throw new TypeError(`Failed to delete order: ${error.message}`)
23+
}
24+
25+
throw error
26+
}
27+
}
28+
29+
/**
30+
* Delete multiple payments by ID
31+
*
32+
* @param ids Array of order IDs to delete
33+
* @returns Number of payments deleted
34+
*/
35+
export async function bulkDestroy(ids: number[]): Promise<number> {
36+
if (!ids.length)
37+
return 0
38+
39+
try {
40+
// Perform the delete operation
41+
const result = await db
42+
.deleteFrom('payments')
43+
.where('id', 'in', ids)
44+
.executeTakeFirst()
45+
46+
// Return the number of deleted rows
47+
return Number(result.numDeletedRows)
48+
}
49+
catch (error) {
50+
if (error instanceof Error) {
51+
throw new TypeError(`Failed to delete payments: ${error.message}`)
52+
}
53+
54+
throw error
55+
}
56+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import type { PaymentRequestType } from '@stacksjs/orm'
2+
import type { NewPayment, PaymentJsonResponse } from '../../../../orm/src/models/Payment'
3+
import { db } from '@stacksjs/database'
4+
5+
/**
6+
* Create a new payment
7+
*
8+
* @param request The payment data to store
9+
* @returns The newly created payment record
10+
*/
11+
export async function store(request: PaymentRequestType): Promise<PaymentJsonResponse | undefined> {
12+
await request.validate()
13+
14+
const paymentData: NewPayment = {
15+
order_id: request.get<number>('order_id'),
16+
user_id: request.get<number>('user_id'),
17+
amount: request.get<number>('amount'),
18+
method: request.get('method'),
19+
status: request.get('status') || 'PENDING',
20+
currency: request.get('currency') || 'USD',
21+
reference_number: request.get('reference_number'),
22+
card_last_four: request.get('card_last_four'),
23+
card_brand: request.get('card_brand'),
24+
billing_email: request.get('billing_email'),
25+
transaction_id: request.get('transaction_id'),
26+
payment_provider: request.get('payment_provider'),
27+
refund_amount: request.get<number>('refund_amount'),
28+
notes: request.get('notes'),
29+
uuid: request.get('uuid'),
30+
}
31+
32+
try {
33+
// Insert the payment record
34+
const createdPayment = await db
35+
.insertInto('payments')
36+
.values(paymentData)
37+
.executeTakeFirst()
38+
39+
// If insert was successful, retrieve the newly created payment
40+
if (createdPayment.insertId) {
41+
const payment = await db
42+
.selectFrom('payments')
43+
.where('id', '=', Number(createdPayment.insertId))
44+
.selectAll()
45+
.executeTakeFirst()
46+
47+
return payment
48+
}
49+
50+
return undefined
51+
}
52+
catch (error) {
53+
if (error instanceof Error) {
54+
// Handle specific error cases
55+
if (error.message.includes('Duplicate entry') && error.message.includes('transaction_id')) {
56+
throw new Error('A payment with this transaction ID already exists')
57+
}
58+
59+
// Check for insufficient amount errors or other payment-specific validations
60+
if (error.message.includes('Insufficient funds')) {
61+
throw new Error('Insufficient funds for this payment')
62+
}
63+
64+
throw new Error(`Failed to create payment: ${error.message}`)
65+
}
66+
67+
throw error
68+
}
69+
}

storage/framework/defaults/models/Payment.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,6 @@ export default {
7777
]),
7878
},
7979

80-
date: {
81-
required: true,
82-
order: 6,
83-
fillable: true,
84-
validation: {
85-
rule: schema.date(),
86-
},
87-
factory: faker => faker.date.recent().toISOString(),
88-
},
89-
9080
currency: {
9181
required: false,
9282
order: 7,

storage/framework/orm/src/models/Payment.ts

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ export interface PaymentsTable {
2121
amount: number
2222
method: string
2323
status: string
24-
date: Date | string
2524
currency?: string
2625
reference_number?: string
2726
card_last_four?: string
@@ -68,7 +67,7 @@ interface QueryOptions {
6867

6968
export class PaymentModel {
7069
private readonly hidden: Array<keyof PaymentJsonResponse> = []
71-
private readonly fillable: Array<keyof PaymentJsonResponse> = ['amount', 'method', 'status', 'date', 'currency', 'reference_number', 'card_last_four', 'card_brand', 'billing_email', 'transaction_id', 'payment_provider', 'refund_amount', 'notes', 'uuid']
70+
private readonly fillable: Array<keyof PaymentJsonResponse> = ['amount', 'method', 'status', 'currency', 'reference_number', 'card_last_four', 'card_brand', 'billing_email', 'transaction_id', 'payment_provider', 'refund_amount', 'notes', 'uuid']
7271
private readonly guarded: Array<keyof PaymentJsonResponse> = []
7372
protected attributes = {} as PaymentJsonResponse
7473
protected originalAttributes = {} as PaymentJsonResponse
@@ -182,10 +181,6 @@ export class PaymentModel {
182181
return this.attributes.status
183182
}
184183

185-
get date(): Date | string {
186-
return this.attributes.date
187-
}
188-
189184
get currency(): string | undefined {
190185
return this.attributes.currency
191186
}
@@ -246,10 +241,6 @@ export class PaymentModel {
246241
this.attributes.status = value
247242
}
248243

249-
set date(value: Date | string) {
250-
this.attributes.date = value
251-
}
252-
253244
set currency(value: string) {
254245
this.attributes.currency = value
255246
}
@@ -1257,14 +1248,6 @@ export class PaymentModel {
12571248
return instance
12581249
}
12591250

1260-
static whereDate(value: string): PaymentModel {
1261-
const instance = new PaymentModel(undefined)
1262-
1263-
instance.selectFromQuery = instance.selectFromQuery.where('date', '=', value)
1264-
1265-
return instance
1266-
}
1267-
12681251
static whereCurrency(value: string): PaymentModel {
12691252
const instance = new PaymentModel(undefined)
12701253

@@ -1900,7 +1883,6 @@ export class PaymentModel {
19001883
amount: this.amount,
19011884
method: this.method,
19021885
status: this.status,
1903-
date: this.date,
19041886
currency: this.currency,
19051887
reference_number: this.reference_number,
19061888
card_last_four: this.card_last_four,
@@ -1990,13 +1972,6 @@ export async function whereStatus(value: string): Promise<PaymentModel[]> {
19901972
return results.map((modelItem: PaymentJsonResponse) => new PaymentModel(modelItem))
19911973
}
19921974

1993-
export async function whereDate(value: Date | string): Promise<PaymentModel[]> {
1994-
const query = DB.instance.selectFrom('payments').where('date', '=', value)
1995-
const results: PaymentJsonResponse = await query.execute()
1996-
1997-
return results.map((modelItem: PaymentJsonResponse) => new PaymentModel(modelItem))
1998-
}
1999-
20001975
export async function whereCurrency(value: string): Promise<PaymentModel[]> {
20011976
const query = DB.instance.selectFrom('payments').where('currency', '=', value)
20021977
const results: PaymentJsonResponse = await query.execute()

storage/framework/orm/src/models/ProductItem.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ export class ProductItemModel {
135135
}
136136
}
137137

138-
async mapCustomSetters(model: NewProductItem): Promise<void> {
138+
async mapCustomSetters(model: NewProductItem | ProductItemUpdate): Promise<void> {
139139
const customSetter = {
140140
default: () => {
141141
},

storage/framework/requests/PaymentRequest.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ interface RequestDataPayment {
1616
amount: number
1717
method: string
1818
status: string
19-
date: date
2019
currency: string
2120
reference_number: string
2221
card_last_four: string
@@ -34,7 +33,6 @@ export class PaymentRequest extends Request<RequestDataPayment> implements Payme
3433
public amount = 0
3534
public method = ''
3635
public status = ''
37-
public date = ''
3836
public currency = ''
3937
public reference_number = ''
4038
public card_last_four = ''

storage/framework/types/attributes.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export interface Attributes {
3131
body: string
3232
amount: number
3333
method: string
34-
date: Date | string
3534
currency: string
3635
reference_number: string
3736
card_last_four: string

storage/framework/types/requests.d.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,6 @@ interface RequestDataPayment {
229229
amount: number
230230
method: string
231231
status: string
232-
date: date
233232
currency: string
234233
reference_number: string
235234
card_last_four: string
@@ -250,7 +249,6 @@ export interface PaymentRequestType extends Request {
250249
amount: number
251250
method: string
252251
status: string
253-
date: date
254252
currency: string
255253
reference_number: string
256254
card_last_four: string

0 commit comments

Comments
 (0)