feat: use SafeInt replace Float (#5613)

This commit is contained in:
DarkSky 2024-01-17 12:36:21 +00:00
parent b9f20877d0
commit ee8ec47a4f
No known key found for this signature in database
GPG Key ID: 97B7D036B1566E9D
11 changed files with 40 additions and 18 deletions

View File

@ -63,6 +63,7 @@
"file-type": "^19.0.0",
"get-stream": "^8.0.1",
"graphql": "^16.8.1",
"graphql-scalars": "^1.22.4",
"graphql-type-json": "^0.3.2",
"graphql-upload": "^16.0.2",
"ioredis": "^5.3.2",

View File

@ -1,5 +1,6 @@
import { createUnionType, Field, Float, ID, ObjectType } from '@nestjs/graphql';
import { createUnionType, Field, ID, ObjectType } from '@nestjs/graphql';
import type { User } from '@prisma/client';
import { SafeIntResolver } from 'graphql-scalars';
@ObjectType('UserQuotaHumanReadable')
export class UserQuotaHumanReadableType {
@ -24,13 +25,13 @@ export class UserQuotaType {
@Field({ name: 'name' })
name!: string;
@Field(() => Float, { name: 'blobLimit' })
@Field(() => SafeIntResolver, { name: 'blobLimit' })
blobLimit!: number;
@Field(() => Float, { name: 'storageQuota' })
@Field(() => SafeIntResolver, { name: 'storageQuota' })
storageQuota!: number;
@Field(() => Float, { name: 'historyPeriod' })
@Field(() => SafeIntResolver, { name: 'historyPeriod' })
historyPeriod!: number;
@Field({ name: 'memberLimit' })

View File

@ -1,7 +1,6 @@
import { HttpStatus, Logger, UseGuards } from '@nestjs/common';
import {
Args,
Float,
Int,
Mutation,
Parent,
@ -10,6 +9,7 @@ import {
Resolver,
} from '@nestjs/graphql';
import { GraphQLError } from 'graphql';
import { SafeIntResolver } from 'graphql-scalars';
import GraphQLUpload from 'graphql-upload/GraphQLUpload.mjs';
import {
@ -100,7 +100,7 @@ export class WorkspaceBlobResolver {
async checkBlobSize(
@CurrentUser() user: UserType,
@Args('workspaceId') workspaceId: string,
@Args('size', { type: () => Float }) blobSize: number
@Args('size', { type: () => SafeIntResolver }) blobSize: number
) {
const canWrite = await this.permissions.tryCheckWorkspace(
workspaceId,

View File

@ -1,6 +1,5 @@
import {
Field,
Float,
ID,
InputType,
ObjectType,
@ -10,6 +9,7 @@ import {
registerEnumType,
} from '@nestjs/graphql';
import type { Workspace } from '@prisma/client';
import { SafeIntResolver } from 'graphql-scalars';
import { UserType } from '../users/types';
@ -78,7 +78,7 @@ export class InvitationWorkspaceType {
@ObjectType()
export class WorkspaceBlobSizes {
@Field(() => Float)
@Field(() => SafeIntResolver)
size!: number;
}

View File

@ -23,13 +23,18 @@ type UserQuotaHumanReadable {
type UserQuota {
name: String!
blobLimit: Float!
storageQuota: Float!
historyPeriod: Float!
blobLimit: SafeInt!
storageQuota: SafeInt!
historyPeriod: SafeInt!
memberLimit: Int!
humanReadable: UserQuotaHumanReadable!
}
"""
The `SafeInt` scalar type represents non-fractional signed whole numeric values that are considered safe as defined by the ECMAScript specification.
"""
scalar SafeInt @specifiedBy(url: "https://www.ecma-international.org/ecma-262/#sec-number.issafeinteger")
type UserType {
id: ID!
@ -172,7 +177,7 @@ type InvitationWorkspaceType {
}
type WorkspaceBlobSizes {
size: Float!
size: SafeInt!
}
type InvitationType {
@ -309,7 +314,7 @@ type Query {
"""List blobs of workspace"""
listBlobs(workspaceId: String!): [String!]! @deprecated(reason: "use `workspace.blobs` instead")
collectAllBlobSizes: WorkspaceBlobSizes! @deprecated(reason: "use `user.storageUsage` instead")
checkBlobSize(workspaceId: String!, size: Float!): WorkspaceBlobSizes! @deprecated(reason: "no more needed")
checkBlobSize(workspaceId: String!, size: SafeInt!): WorkspaceBlobSizes! @deprecated(reason: "no more needed")
"""Get current user"""
currentUser: UserType

View File

@ -74,7 +74,7 @@ export async function checkBlobSize(
.post(gql)
.auth(token, { type: 'bearer' })
.send({
query: `query checkBlobSize($workspaceId: String!, $size: Float!) {
query: `query checkBlobSize($workspaceId: String!, $size: SafeInt!) {
checkBlobSize(workspaceId: $workspaceId, size: $size) {
size
}

View File

@ -16,8 +16,9 @@ config:
Decimal: number
UUID: string
ID: string
JSON: any
JSON: string
Upload: File
SafeInt: number
overwrite: true
schema: ../../backend/server/src/schema.gql
documents: ./src/**/*.gql

View File

@ -1,4 +1,4 @@
query checkBlobSizes($workspaceId: String!, $size: Float!) {
query checkBlobSizes($workspaceId: String!, $size: SafeInt!) {
checkBlobSize(workspaceId: $workspaceId, size: $size) {
size
}

View File

@ -13,7 +13,7 @@ export const checkBlobSizesQuery = {
definitionName: 'checkBlobSize',
containsFile: false,
query: `
query checkBlobSizes($workspaceId: String!, $size: Float!) {
query checkBlobSizes($workspaceId: String!, $size: SafeInt!) {
checkBlobSize(workspaceId: $workspaceId, size: $size) {
size
}

View File

@ -28,6 +28,8 @@ export interface Scalars {
Float: { input: number; output: number };
/** A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date-time format. */
DateTime: { input: string; output: string };
/** The `SafeInt` scalar type represents non-fractional signed whole numeric values that are considered safe as defined by the ECMAScript specification. */
SafeInt: { input: number; output: number };
/** The `Upload` scalar type represents a file upload. */
Upload: { input: File; output: File };
}
@ -93,7 +95,7 @@ export interface UpdateWorkspaceInput {
export type CheckBlobSizesQueryVariables = Exact<{
workspaceId: Scalars['String']['input'];
size: Scalars['Float']['input'];
size: Scalars['SafeInt']['input'];
}>;
export type CheckBlobSizesQuery = {

View File

@ -689,6 +689,7 @@ __metadata:
file-type: "npm:^19.0.0"
get-stream: "npm:^8.0.1"
graphql: "npm:^16.8.1"
graphql-scalars: "npm:^1.22.4"
graphql-type-json: "npm:^0.3.2"
graphql-upload: "npm:^16.0.2"
ioredis: "npm:^5.3.2"
@ -21878,6 +21879,17 @@ __metadata:
languageName: node
linkType: hard
"graphql-scalars@npm:^1.22.4":
version: 1.22.4
resolution: "graphql-scalars@npm:1.22.4"
dependencies:
tslib: "npm:^2.5.0"
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
checksum: 110c1fa29d7564d9967c974de2df08c99d7ed43af98097e5a5729f952c064b21f66a9f5a68143c50eeac6a4ce14f0999aed2ce8f043d02331d133b0c59a9c1ec
languageName: node
linkType: hard
"graphql-tag@npm:2.12.6, graphql-tag@npm:^2.11.0":
version: 2.12.6
resolution: "graphql-tag@npm:2.12.6"