Skip to content

Commit 697d310

Browse files
authored
Zod schema updates (#128)
* add schema updates * fix import
1 parent eb80f51 commit 697d310

File tree

17 files changed

+105
-63
lines changed

17 files changed

+105
-63
lines changed

src/api/functions/apiKey.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { genericConfig } from "common/config.js";
1111
import { AUTH_DECISION_CACHE_SECONDS as API_KEY_DATA_CACHE_SECONDS } from "./authorization.js";
1212
import { unmarshall } from "@aws-sdk/util-dynamodb";
1313
import { ApiKeyMaskedEntry, DecomposedApiKey } from "common/types/apiKey.js";
14-
import { AvailableAuthorizationPolicy } from "api/policies/definition.js";
14+
import { AvailableAuthorizationPolicy } from "common/policies/definition.js";
1515

1616
export type ApiKeyDynamoEntry = ApiKeyMaskedEntry & {
1717
keyHash: string;

src/api/plugins/auth.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
SecretsManagerClient,
77
GetSecretValueCommand,
88
} from "@aws-sdk/client-secrets-manager";
9-
import { AppRoles } from "../../common/roles.js";
9+
import { AppRoles } from "common/roles.js";
1010
import {
1111
BaseError,
1212
InternalServerError,
@@ -15,14 +15,7 @@ import {
1515
} from "../../common/errors/index.js";
1616
import { genericConfig, SecretConfig } from "../../common/config.js";
1717
import { getGroupRoles, getUserRoles } from "../functions/authorization.js";
18-
import {
19-
GetItemCommand,
20-
ReplicaAlreadyExistsException,
21-
} from "@aws-sdk/client-dynamodb";
2218
import { getApiKeyData, getApiKeyParts } from "api/functions/apiKey.js";
23-
import { RequestThrottled } from "@aws-sdk/client-sqs";
24-
import { evaluatePolicy } from "api/policies/evaluator.js";
25-
import { AuthorizationPoliciesRegistry } from "api/policies/definition.js";
2619

2720
export function intersection<T>(setA: Set<T>, setB: Set<T>): Set<T> {
2821
const _intersection = new Set<T>();

src/api/plugins/authorizeFromSchema.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { FastifyPluginAsync } from "fastify";
2-
import { AppRoles } from "common/roles.js";
32
import { InternalServerError } from "common/errors/index.js";
43
import fp from "fastify-plugin";
54
import { FastifyZodOpenApiSchema } from "fastify-zod-openapi";

src/api/plugins/evaluatePolicies.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import fp from "fastify-plugin";
22
import { FastifyPluginAsync, FastifyRequest } from "fastify";
3-
import { UnauthorizedError } from "../../common/errors/index.js";
3+
import { UnauthorizedError } from "common/errors/index.js";
44
import {
55
AuthorizationPoliciesRegistry,
66
AvailableAuthorizationPolicies,
7-
} from "api/policies/definition.js";
8-
import { evaluatePolicy } from "api/policies/evaluator.js";
7+
} from "common/policies/definition.js";
8+
import { evaluatePolicy } from "common/policies/evaluator.js";
99

1010
/**
1111
* Evaluates all policy restrictions for a request

src/api/routes/events.ts

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,10 @@ import {
3939
FastifyPluginAsyncZodOpenApi,
4040
FastifyZodOpenApiSchema,
4141
FastifyZodOpenApiTypeProvider,
42-
serializerCompiler,
43-
validatorCompiler,
4442
} from "fastify-zod-openapi";
4543
import { ts, withRoles, withTags } from "api/components/index.js";
46-
import { MAX_METADATA_KEYS, metadataSchema } from "common/types/events.js";
44+
import { metadataSchema } from "common/types/events.js";
4745
import { evaluateAllRequestPolicies } from "api/plugins/evaluatePolicies.js";
48-
import { request } from "http";
4946

5047
const createProjectionParams = (includeMetadata: boolean = false) => {
5148
// Object mapping attribute names to their expression aliases
@@ -97,12 +94,27 @@ export type EventRepeatOptions = (typeof repeatOptions)[number];
9794
const baseSchema = z.object({
9895
title: z.string().min(1),
9996
description: z.string().min(1),
100-
start: z.string(),
101-
end: z.optional(z.string()),
102-
location: z.string(),
103-
locationLink: z.optional(z.string().url()),
97+
start: z.string().openapi({
98+
description: "Timestamp in the America/Chicago timezone.",
99+
example: "2024-08-27T19:00:00",
100+
}),
101+
end: z.optional(z.string()).openapi({
102+
description: "Timestamp in the America/Chicago timezone.",
103+
example: "2024-08-27T20:00:00",
104+
}),
105+
location: z.string().openapi({
106+
description: "Human-friendly location name.",
107+
example: "Siebel Center for Computer Science",
108+
}),
109+
locationLink: z.optional(z.string().url()).openapi({
110+
description: "Google Maps link for easy navigation to the event location.",
111+
example: "https://maps.app.goo.gl/dwbBBBkfjkgj8gvA8",
112+
}),
104113
host: z.enum(OrganizationList as [string, ...string[]]),
105-
featured: z.boolean().default(false),
114+
featured: z.boolean().default(false).openapi({
115+
description:
116+
"Whether or not the event should be shown on the ACM @ UIUC website home page (and added to Discord, as available).",
117+
}),
106118
paidEventId: z.optional(z.string().min(1)),
107119
metadata: metadataSchema,
108120
});

src/api/routes/ics.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ import { getCacheCounter } from "api/functions/cache.js";
2121
import {
2222
FastifyZodOpenApiSchema,
2323
FastifyZodOpenApiTypeProvider,
24-
serializerCompiler,
25-
validatorCompiler,
2624
} from "fastify-zod-openapi";
2725
import { withTags } from "api/components/index.js";
2826
import { z } from "zod";

src/api/routes/linkry.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,7 @@ import {
3939
import { intersection } from "api/plugins/auth.js";
4040
import { createAuditLogEntry } from "api/functions/auditLog.js";
4141
import { Modules } from "common/modules.js";
42-
import {
43-
FastifyZodOpenApiTypeProvider,
44-
serializerCompiler,
45-
validatorCompiler,
46-
} from "fastify-zod-openapi";
42+
import { FastifyZodOpenApiTypeProvider } from "fastify-zod-openapi";
4743
import { withRoles, withTags } from "api/components/index.js";
4844

4945
type OwnerRecord = {

src/api/routes/roomRequests.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,13 @@ import {
1111
roomRequestStatusUpdateRequest,
1212
} from "common/types/roomRequest.js";
1313
import { AppRoles } from "common/roles.js";
14-
import { zodToJsonSchema } from "zod-to-json-schema";
1514
import {
1615
BaseError,
1716
DatabaseFetchError,
1817
DatabaseInsertError,
1918
InternalServerError,
2019
} from "common/errors/index.js";
2120
import {
22-
PutItemCommand,
2321
QueryCommand,
2422
TransactWriteItemsCommand,
2523
} from "@aws-sdk/client-dynamodb";

src/api/routes/stripe.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import {
2-
PutItemCommand,
32
QueryCommand,
43
ScanCommand,
54
TransactWriteItemsCommand,
6-
TransactWriteItemsCommandInput,
75
} from "@aws-sdk/client-dynamodb";
86
import { marshall, unmarshall } from "@aws-sdk/util-dynamodb";
97
import { withRoles, withTags } from "api/components/index.js";
@@ -33,11 +31,7 @@ import {
3331
invoiceLinkGetResponseSchema,
3432
} from "common/types/stripe.js";
3533
import { FastifyPluginAsync } from "fastify";
36-
import {
37-
FastifyZodOpenApiTypeProvider,
38-
serializerCompiler,
39-
validatorCompiler,
40-
} from "fastify-zod-openapi";
34+
import { FastifyZodOpenApiTypeProvider } from "fastify-zod-openapi";
4135

4236
const stripeRoutes: FastifyPluginAsync = async (fastify, _options) => {
4337
fastify.withTypeProvider<FastifyZodOpenApiTypeProvider>().get(

src/api/routes/tickets.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,8 @@ import { zodToJsonSchema } from "zod-to-json-schema";
2525
import { ItemPostData, postMetadataSchema } from "common/types/tickets.js";
2626
import { createAuditLogEntry } from "api/functions/auditLog.js";
2727
import { Modules } from "common/modules.js";
28-
import {
29-
FastifyZodOpenApiTypeProvider,
30-
serializerCompiler,
31-
validatorCompiler,
32-
} from "fastify-zod-openapi";
28+
import { FastifyZodOpenApiTypeProvider } from "fastify-zod-openapi";
3329
import { withRoles, withTags } from "api/components/index.js";
34-
import { request } from "http";
35-
import authorizeFromSchemaPlugin from "api/plugins/authorizeFromSchema.js";
3630

3731
const postMerchSchema = z.object({
3832
type: z.literal("merch"),

0 commit comments

Comments
 (0)