openapi-backend icon indicating copy to clipboard operation
openapi-backend copied to clipboard

Parameter query is not converted to correct type

Open davidnewcomb opened this issue 1 year ago • 1 comments

I have a definition:

      parameters:
      - name: from
        in: query
        description: Which page to get
        required: false
        schema:
          type: integer
          format: int64

But when it hits my handler e.g.:

export async function newslist(c, req, res) {
    console.log('newslist:c.request.query: ' + JSON.stringify(c.request.query))

it becomes:

newslist:c.request.query: {"from":"123"}

instead of:

newslist:c.request.query: {"from":123}

So I have to do all the type converting which I would have thought openapi-backend would do for me.

On a similar note, I included the ajv-formats to use date-time string format and was expecting to get a native Javascript Date but I don't, I just get a string that's been parsed for correctness.

I think openapi-backend should do these kinds of conversions but if it can't, do you have an easy way for me to add type converters?

davidnewcomb avatar Apr 17 '23 02:04 davidnewcomb

@davidnewcomb I have a similar issue.

namespace Parameters {
            export type ContainsText = string;
            export type CreatedAfter = string; // date-time
            export type MessageScope = "all" | "user" | "system";
            export type OrderBy = "title" | "message" | "created" | "topic" | "origin";
            export type OrderByDirec = "asc" | "desc";
            export type PageNumber = number;
            export type PageSize = number;
            export type Read = boolean;
            export type User = string;
        }
        export interface QueryParameters {
            pageSize?: Parameters.PageSize;
            pageNumber?: Parameters.PageNumber;
            orderBy?: Parameters.OrderBy;
            orderByDirec?: Parameters.OrderByDirec;
            containsText?: Parameters.ContainsText;
            createdAfter?: Parameters.CreatedAfter /* date-time */;
            messageScope?: Parameters.MessageScope;
            user?: Parameters.User;
            read?: Parameters.Read;
        }
        namespace Responses {
            export type $200 = Components.Schemas.Notifications;
        }
        }```
The number fields, such as pageSize, are in runtime of type string.

@davidnewcomb how did u enable 'date-time'

ydayagi avatar Dec 05 '23 07:12 ydayagi