|
1 | 1 | import process from 'node:process'
|
2 | 2 | import { log } from '@stacksjs/logging'
|
3 |
| -import { extname } from '@stacksjs/path' |
| 3 | +import { extname, path } from '@stacksjs/path' |
| 4 | +import { glob } from '@stacksjs/storage' |
4 | 5 | import type { Route, RouteParam, StatusCode } from '@stacksjs/types'
|
5 | 6 | import { route } from '.'
|
6 | 7 | import { middlewares } from './middleware'
|
7 | 8 | import { request as RequestParam } from './request'
|
| 9 | +import { getModelName } from '@stacksjs/orm' |
| 10 | +import { lowercase } from '@stacksjs/strings' |
8 | 11 |
|
9 | 12 | interface ServeOptions {
|
10 | 13 | host?: string
|
@@ -71,8 +74,8 @@ export async function serverResponse(req: Request) {
|
71 | 74 |
|
72 | 75 | const routeParams = extractDynamicSegments(foundRoute.uri, url.pathname)
|
73 | 76 |
|
74 |
| - addRouteQuery(url) |
75 |
| - addRouteParam(routeParams) |
| 77 | + await addRouteQuery(url) |
| 78 | + await addRouteParam(routeParams) |
76 | 79 |
|
77 | 80 | await executeMiddleware(foundRoute)
|
78 | 81 |
|
@@ -146,13 +149,43 @@ function noCache(response: Response) {
|
146 | 149 | return response
|
147 | 150 | }
|
148 | 151 |
|
149 |
| -function addRouteQuery(url: URL): void { |
150 |
| - if (!isObjectNotEmpty(url.searchParams)) RequestParam.addQuery(url) |
| 152 | +async function addRouteQuery(url: URL) { |
| 153 | + const modelFiles = glob.sync(path.userModelsPath('*.ts')); |
151 | 154 |
|
152 |
| - // requestInstance.extractParamsFromRoute(route.uri, url.pathname) |
| 155 | + for (const modelFile of modelFiles) { |
| 156 | + const model = (await import(modelFile)).default; |
| 157 | + const modelName = getModelName(model, modelFile); |
| 158 | + const modelNameLower = `${lowercase(modelName)}Request`; |
| 159 | + const requestPath = path.projectStoragePath(`framework/requests/${modelName}Request.ts`); |
| 160 | + const requestImport = await import(requestPath); |
| 161 | + const requestInstance = requestImport[modelNameLower]; |
| 162 | + |
| 163 | + if (requestInstance && !isObjectNotEmpty(url.searchParams)) { |
| 164 | + requestInstance.addQuery(url); |
| 165 | + } |
| 166 | + } |
| 167 | + |
| 168 | + if (!isObjectNotEmpty(url.searchParams)) { |
| 169 | + RequestParam.addQuery(url); |
| 170 | + } |
153 | 171 | }
|
154 | 172 |
|
155 |
| -function addRouteParam(param: RouteParam): void { |
| 173 | +async function addRouteParam(param: RouteParam): Promise<void> { |
| 174 | + const modelFiles = glob.sync(path.userModelsPath('*.ts')); |
| 175 | + |
| 176 | + for (const modelFile of modelFiles) { |
| 177 | + const model = (await import(modelFile)).default; |
| 178 | + const modelName = getModelName(model, modelFile); |
| 179 | + const modelNameLower = `${lowercase(modelName)}Request`; |
| 180 | + const requestPath = path.projectStoragePath(`framework/requests/${modelName}Request.ts`); |
| 181 | + const requestImport = await import(requestPath); |
| 182 | + const requestInstance = requestImport[modelNameLower]; |
| 183 | + |
| 184 | + if (requestInstance) { |
| 185 | + requestInstance.addParam(param); |
| 186 | + } |
| 187 | + } |
| 188 | + |
156 | 189 | RequestParam.addParam(param)
|
157 | 190 | }
|
158 | 191 |
|
|
0 commit comments