diff --git a/backend/config/s3.ts b/backend/config/s3.ts index aa2270f..6ef1df1 100644 --- a/backend/config/s3.ts +++ b/backend/config/s3.ts @@ -13,7 +13,7 @@ export function getS3() { s3 = new S3Client({ region: AWS_REGION || 'us-east-1', - + }); return s3; } diff --git a/backend/controllers/resourceController.ts b/backend/controllers/resourceController.ts index 70fd149..85345ac 100644 --- a/backend/controllers/resourceController.ts +++ b/backend/controllers/resourceController.ts @@ -171,22 +171,21 @@ export const updateResource = async (req: Request, res: Response) => { label_ids, } = req.body; - - await prisma.externalResources.deleteMany({ where: { resource_fk: id }}); - if (external_url !== '' && external_url !== null) { + await prisma.externalResources.deleteMany({ where: { resource_fk: id } }); + if (external_url !== '' && external_url !== null) { await prisma.externalResources.create({ - data: { resource_fk: id, external_url }, - }); - } - - // Upsert internal hosted resource - if (image_s3_key) { - await prisma.internalHostedResources.upsert({ - where: { resource_fk: id }, - update: { s3_key: image_s3_key }, - create: { resource_fk: id, s3_key: image_s3_key }, - }); - } + data: { resource_fk: id, external_url }, + }); + } + + // Upsert internal hosted resource + if (image_s3_key) { + await prisma.internalHostedResources.upsert({ + where: { resource_fk: id }, + update: { s3_key: image_s3_key }, + create: { resource_fk: id, s3_key: image_s3_key }, + }); + } const updated = await prisma.resource.update({ where: { id }, diff --git a/backend/controllers/resourceLabelController.ts b/backend/controllers/resourceLabelController.ts index d5911c2..899265e 100644 --- a/backend/controllers/resourceLabelController.ts +++ b/backend/controllers/resourceLabelController.ts @@ -45,7 +45,7 @@ export const getResourceLabelById = async (req: Request, res: Response) => { const label = await prisma.resourceLabel.findUnique({ where: { id }, - include: { resource: true, label: true}, + include: { resource: true, label: true }, }); if (!label) { diff --git a/backend/routes/testS3Routes.ts b/backend/routes/testS3Routes.ts index be1d318..18aefc2 100644 --- a/backend/routes/testS3Routes.ts +++ b/backend/routes/testS3Routes.ts @@ -43,5 +43,4 @@ router.post('/s3-presign', async (req, res) => { } }); - export default router; diff --git a/backend/tests/controllers/resourceLabel.test.ts b/backend/tests/controllers/resourceLabel.test.ts index 97d9fe8..27ce04d 100644 --- a/backend/tests/controllers/resourceLabel.test.ts +++ b/backend/tests/controllers/resourceLabel.test.ts @@ -59,13 +59,11 @@ describe('ResourceLabelController', () => { expect(res.json).toHaveBeenCalledWith(expect.objectContaining({ id: 'cktest1234abcd' })); }); - it('should handle Prisma errors gracefully', async () => { prismaMock.categoryLabel.create.mockRejectedValue(new Error('Database error')); const req = mockReq({ - body: { resource_id: 'cktest2345abcd', - label_id: 'cktest3456abcd'}, + body: { resource_id: 'cktest2345abcd', label_id: 'cktest3456abcd' }, }); const res = mockRes(); @@ -106,8 +104,7 @@ describe('ResourceLabelController', () => { it('should filter labels by category when query param provided', async () => { prismaMock.resourceLabel.findMany.mockResolvedValue([ - { id: 'cktest3333', resource_id: 'cktest4444', - label_id: 'cktest5555', }, + { id: 'cktest3333', resource_id: 'cktest4444', label_id: 'cktest5555' }, ] as any); const req = mockReq({ query: { resource_id: 'cktest4444' } }); @@ -168,8 +165,7 @@ describe('ResourceLabelController', () => { const req = mockReq({ params: { id: 'cktest5555' }, - body: { resource_id: 'cktestUpdate', - label_id: 'newLabelId' }, + body: { resource_id: 'cktestUpdate', label_id: 'newLabelId' }, }); const res = mockRes(); @@ -177,8 +173,7 @@ describe('ResourceLabelController', () => { expect(prismaMock.categoryLabel.update).toHaveBeenCalledWith({ where: { id: 'cktest5555' }, - data: { resource_id: 'cktestUpdate', - label_id: 'newLabelId', }, + data: { resource_id: 'cktestUpdate', label_id: 'newLabelId' }, }); expect(res.json).toHaveBeenCalledWith(updated); }); @@ -227,4 +222,4 @@ describe('ResourceLabelController', () => { ); }); }); -}); \ No newline at end of file +}); diff --git a/frontend/src/components/AdminContentEditComponent/AdminContentEdit.tsx b/frontend/src/components/AdminContentEditComponent/AdminContentEdit.tsx index efeae8d..bc77da7 100644 --- a/frontend/src/components/AdminContentEditComponent/AdminContentEdit.tsx +++ b/frontend/src/components/AdminContentEditComponent/AdminContentEdit.tsx @@ -351,13 +351,11 @@ export default function ResourceEditorForm({ multiple value={form.age_groups ?? []} onChange={(e) => - setForm({ - ...form, - age_groups: Array.from(e.target.selectedOptions).map( - (o) => o.value as AgeGroup - ), - }) - } + setForm({ + ...form, + age_groups: Array.from(e.target.selectedOptions).map((o) => o.value as AgeGroup), + }) + } required className={styles.adminFormInput} > diff --git a/frontend/src/components/AdminContentEditComponent/LabelSelector.tsx b/frontend/src/components/AdminContentEditComponent/LabelSelector.tsx index 9143841..1909e39 100644 --- a/frontend/src/components/AdminContentEditComponent/LabelSelector.tsx +++ b/frontend/src/components/AdminContentEditComponent/LabelSelector.tsx @@ -113,9 +113,9 @@ export default function LabelSelector({ className={styles.adminLabelInput} /> -