Skip to content

Commit b8556ff

Browse files
chore: wip
1 parent f47ed34 commit b8556ff

File tree

5 files changed

+29
-11
lines changed

5 files changed

+29
-11
lines changed

app/Actions/Cms/CategorizableStoreAction.ts

+18-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,29 @@
1-
import type { CategorizableRequestType } from '@stacksjs/types'
1+
import type { RequestInstance } from '@stacksjs/types'
22
import { Action } from '@stacksjs/actions'
33
import { categorizable } from '@stacksjs/cms'
44
import { response } from '@stacksjs/router'
5+
import { schema } from '@stacksjs/validation'
56

67
export default new Action({
78
name: 'Category Store',
89
description: 'Category Store ORM Action',
910
method: 'POST',
10-
async handle(request: CategorizableRequestType) {
11-
await request.validate()
12-
11+
async handle(request: RequestInstance) {
12+
await request.validate({
13+
name: {
14+
rule: schema.string(),
15+
message: {
16+
name: 'Name is required',
17+
},
18+
},
19+
description: {
20+
rule: schema.string(),
21+
message: {
22+
description: 'Description is required',
23+
},
24+
},
25+
26+
})
1327
const data = {
1428
name: request.get('name'),
1529
description: request.get('description'),

storage/framework/core/router/src/request.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { HttpError } from '@stacksjs/error-handling'
12
import type { AuthToken, CustomAttributes, NumericField, RequestData, RequestInstance, RouteParam, RouteParams } from '@stacksjs/types'
23

34
import { customValidate, validateField } from '@stacksjs/validation'
@@ -76,7 +77,7 @@ export class Request<T extends RequestData = RequestData> implements RequestInst
7677

7778
public async validate(attributes?: CustomAttributes): Promise<void> {
7879
if (attributes === undefined || attributes === null)
79-
throw new Error('Attributes are required')
80+
throw new HttpError(422, 'Attributes are required')
8081
else
8182
await customValidate(attributes, this.all())
8283
}

storage/framework/core/router/src/router.ts

+1
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ export class Router implements RouterInterface {
351351

352352
this.logError(error)
353353

354+
354355
// Return structured error response
355356
if (error.status === 422) {
356357
return { status: 422, body: JSON.parse(error.message), stack: stackTrace }

storage/framework/core/router/src/server.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { middlewares } from './middleware'
1515

1616
import { request as RequestParam } from './request'
1717
import { traitInterfaces } from '@stacksjs/orm'
18+
import { camelCase } from '@stacksjs/strings'
1819

1920
// const limiter = new RateLimiter({
2021
// windowMs: 15 * 60 * 1000, // 15 minutes
@@ -308,12 +309,13 @@ async function execute(foundRoute: Route, req: Request, { statusCode }: Options)
308309
status: 403,
309310
})
310311
}
311-
312+
312313
if (foundCallback.status === 422) {
313314
const { status, ...rest } = await foundCallback
314315

315-
const { errors } = rest
316-
return new Response(JSON.stringify(errors), {
316+
const { body } = rest
317+
318+
return new Response(JSON.stringify(body), {
317319
headers: {
318320
'Content-Type': 'application/json',
319321
'Access-Control-Allow-Origin': '*',
@@ -390,7 +392,7 @@ async function applyToAllRequests(operation: 'addBodies' | 'addParam' | 'addHead
390392
const modelName = getModelName(model, modelFile)
391393
const requestPath = path.frameworkPath(`requests/${modelName}Request.ts`)
392394
const requestImport = await import(requestPath)
393-
const requestInstance = requestImport.request
395+
const requestInstance = requestImport[`${camelCase(modelName)}Request`]
394396

395397
if (requestInstance) {
396398
requestInstance[operation](data)
@@ -402,7 +404,7 @@ async function applyToAllRequests(operation: 'addBodies' | 'addParam' | 'addHead
402404
const requestPath = path.frameworkPath(`requests/${trait.name}Request.ts`)
403405
try {
404406
const requestImport = await import(requestPath)
405-
const requestInstance = requestImport.request
407+
const requestInstance = requestImport[`${camelCase(trait.name)}Request`]
406408

407409
if (requestInstance) {
408410
requestInstance[operation](data)

storage/framework/core/router/src/utils.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export async function findRequestInstance(requestInstance: string): Promise<Mode
7878

7979
const reqInstance = await import(filePath)
8080

81-
return reqInstance.request
81+
return reqInstance[camelCase(requestInstance)]
8282
}
8383

8484
export async function extractDefaultRequest(): Promise<RequestInstance> {

0 commit comments

Comments
 (0)