Explorar o código

improve types for user

Yuki Takei hai 1 mes
pai
achega
95c158c3fa

+ 3 - 2
apps/app/src/server/middlewares/admin-required.ts

@@ -1,5 +1,6 @@
-import type { IUserHasId } from '@growi/core';
+import type { IUser } from '@growi/core';
 import type { NextFunction, Request, Response } from 'express';
+import type { HydratedDocument } from 'mongoose';
 
 import loggerFactory from '~/utils/logger';
 
@@ -7,7 +8,7 @@ import type Crowi from '../crowi';
 
 const logger = loggerFactory('growi:middleware:admin-required');
 
-type RequestWithUser = Request & { user?: IUserHasId };
+type RequestWithUser = Request & { user?: HydratedDocument<IUser> };
 
 type FallbackFunction = (
   req: RequestWithUser,

+ 3 - 2
apps/app/src/server/middlewares/login-required.ts

@@ -1,5 +1,6 @@
-import type { IUserHasId } from '@growi/core';
+import type { IUser } from '@growi/core';
 import type { NextFunction, Request, Response } from 'express';
+import type { HydratedDocument } from 'mongoose';
 
 import { createRedirectToForUnauthenticated } from '~/server/util/createRedirectToForUnauthenticated';
 import loggerFactory from '~/utils/logger';
@@ -10,7 +11,7 @@ import { UserStatus } from '../models/user/conts';
 const logger = loggerFactory('growi:middleware:login-required');
 
 type RequestWithUser = Request & {
-  user?: IUserHasId;
+  user?: HydratedDocument<IUser>;
   isSharedPage?: boolean;
   isBrandLogo?: boolean;
   session?: { redirectTo?: string };

+ 11 - 6
apps/app/src/server/routes/apiv3/page/get-page-info.ts

@@ -1,8 +1,9 @@
-import type { IUserHasId } from '@growi/core';
+import type { IUser } from '@growi/core';
 import { isIPageNotFoundInfo, SCOPE } from '@growi/core';
 import { ErrorV3 } from '@growi/core/dist/models';
 import type { Request, RequestHandler } from 'express';
 import { query } from 'express-validator';
+import type { HydratedDocument } from 'mongoose';
 
 import type Crowi from '~/server/crowi';
 import { accessTokenParser } from '~/server/middlewares/access-token-parser';
@@ -15,8 +16,9 @@ import type { ApiV3Response } from '../interfaces/apiv3-response';
 
 const logger = loggerFactory('growi:routes:apiv3:page:get-page-info');
 
-interface Req extends Request {
-  user?: IUserHasId;
+// Extend Request to include middleware-added properties
+interface RequestWithAuth extends Request {
+  user?: HydratedDocument<IUser>;
   isSharedPage?: boolean;
 }
 
@@ -71,18 +73,21 @@ export const getPageInfoHandlerFactory = (crowi: Crowi): RequestHandler[] => {
     loginRequired,
     ...validator,
     apiV3FormValidator,
-    async (req: Req, res: ApiV3Response) => {
+    async (req: RequestWithAuth, res: ApiV3Response) => {
       const { user, isSharedPage } = req;
       const { pageId } = req.query;
 
+      // pageId is validated by express-validator as MongoId, so it's a string
+      const pageIdString = typeof pageId === 'string' ? pageId : String(pageId);
+
       try {
         const { meta } = await findPageAndMetaDataByViewer(
           pageService,
           pageGrantService,
           {
-            pageId: pageId as string,
+            pageId: pageIdString,
             path: null,
-            user: user as any,
+            user,
             isSharedPage,
           },
         );