diff --git a/client/modules/User/components/APIKeyList.jsx b/client/modules/User/components/APIKeyList.jsx index c7fdf15f4..302592880 100644 --- a/client/modules/User/components/APIKeyList.jsx +++ b/client/modules/User/components/APIKeyList.jsx @@ -3,8 +3,6 @@ import React from 'react'; import { orderBy } from 'lodash'; import { useTranslation } from 'react-i18next'; -import { APIKeyPropType } from './APIKeyForm'; - import dates from '../../../utils/formatDate'; import TrashCanIcon from '../../../images/trash-can.svg'; @@ -49,8 +47,26 @@ function APIKeyList({ apiKeys, onRemove }) { } APIKeyList.propTypes = { - apiKeys: PropTypes.arrayOf(PropTypes.shape(APIKeyPropType)).isRequired, + apiKeys: PropTypes.arrayOf( + PropTypes.shape({ + id: PropTypes.string.isRequired, + token: PropTypes.string, + label: PropTypes.string.isRequired, + createdAt: PropTypes.string.isRequired, + lastUsedAt: PropTypes.string + }) + ), onRemove: PropTypes.func.isRequired }; +APIKeyList.defaultProps = { + apiKeys: PropTypes.arrayOf( + PropTypes.shape({ + id: 0, + label: 'api-key', + createdAt: new Date() + }) + ) +}; + export default APIKeyList; diff --git a/server/controllers/aws.controller.js b/server/controllers/aws.controller.js index dcc478900..1772e4e72 100644 --- a/server/controllers/aws.controller.js +++ b/server/controllers/aws.controller.js @@ -8,8 +8,8 @@ import { DeleteObjectsCommand } from '@aws-sdk/client-s3'; import mongoose from 'mongoose'; -import { getProjectsForUserId } from './project.controller'; import User from '../models/user'; +import Project from '../models/project'; const { ObjectId } = mongoose.Types; @@ -194,7 +194,7 @@ export async function listObjectsInS3ForUser(userId) { size: object.Size })); - const projects = await getProjectsForUserId(userId); + const projects = await Project.getProjectsForUserId(userId); const projectAssets = []; let totalSize = 0; diff --git a/server/controllers/project.controller.js b/server/controllers/project.controller.js index 21bb41018..c2e21d286 100644 --- a/server/controllers/project.controller.js +++ b/server/controllers/project.controller.js @@ -100,13 +100,6 @@ export async function getProject(req, res) { return res.json(project); } -export function getProjectsForUserId(userId) { - return Project.find({ user: userId }) - .sort('-createdAt') - .select('name files id createdAt updatedAt') - .exec(); -} - export async function getProjectAsset(req, res) { const projectId = req.params.project_id; const project = await Project.findOne({ @@ -141,7 +134,7 @@ export async function getProjectAsset(req, res) { export async function getProjects(req, res) { if (req.user) { - const projects = await getProjectsForUserId(req.user._id); + const projects = await Project.getProjectsForUserId(req.user._id); res.json(projects); } else { // could just move this to client side diff --git a/server/models/project.js b/server/models/project.js index a909591f1..5452eb149 100644 --- a/server/models/project.js +++ b/server/models/project.js @@ -76,5 +76,21 @@ projectSchema.methods.isSlugUnique = async function isSlugUnique() { }; }; +/** + * Queries Project collection by userId and returns all Projects that match. + * @return {Promise<{ isUnique: boolean; conflictingIds: string[] }>} + */ +projectSchema.static.getProjectsForUserId = async function getProjectsForUserId( + userId +) { + const project = this; + + return project + .find({ user: userId }) + .sort('-createdAt') + .select('name files id createdAt updatedAt') + .exec(); +}; + export default mongoose.models.Project || mongoose.model('Project', projectSchema);