Skip to content

Commit c2c4254

Browse files
delete files endpoints
1 parent acb9d30 commit c2c4254

File tree

7 files changed

+109
-1
lines changed

7 files changed

+109
-1
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,4 @@ setup.sh
4444
.ignore
4545

4646
node_modules
47-
apps/pdf-analyzer-service/data
4847
sample-pay-statement.pdf

apps/pdf-analyzer-service/api/openapi.yaml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,43 @@ paths:
180180
properties:
181181
error:
182182
type: string
183+
/v1/files:
184+
get:
185+
summary: List uploaded files
186+
operationId: listFiles
187+
tags: [files]
188+
responses:
189+
'200':
190+
description: List of files in storage
191+
content:
192+
application/json:
193+
schema:
194+
type: object
195+
properties:
196+
files:
197+
type: array
198+
items:
199+
type: object
200+
properties:
201+
name:
202+
type: string
203+
size:
204+
type: integer
205+
format: int64
206+
mtime:
207+
type: string
208+
format: date-time
209+
delete:
210+
summary: Delete all uploaded files
211+
operationId: deleteAllFiles
212+
tags: [files]
213+
responses:
214+
'200':
215+
description: Deletion summary
216+
content:
217+
application/json:
218+
schema:
219+
type: object
220+
properties:
221+
deleted:
222+
type: integer
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import fs from 'fs';
2+
import path from 'path';
3+
import { Request, Response } from 'express';
4+
import { paths } from '../config/index.js';
5+
6+
export const listFiles = (_req: Request, res: Response) => {
7+
if (!fs.existsSync(paths.uploadsDir)) {
8+
res.json({ files: [] });
9+
return;
10+
}
11+
const names = fs.readdirSync(paths.uploadsDir);
12+
const files = names.map((name) => {
13+
const full = path.join(paths.uploadsDir, name);
14+
const st = fs.statSync(full);
15+
return { name, size: st.size, mtime: st.mtime.toISOString() };
16+
});
17+
res.json({ files });
18+
};
19+
20+
export const deleteAllFiles = (_req: Request, res: Response) => {
21+
if (!fs.existsSync(paths.uploadsDir)) {
22+
res.json({ deleted: 0 });
23+
return;
24+
}
25+
const names = fs.readdirSync(paths.uploadsDir);
26+
let deleted = 0;
27+
for (const name of names) {
28+
const full = path.join(paths.uploadsDir, name);
29+
try {
30+
fs.unlinkSync(full);
31+
deleted += 1;
32+
} catch (_) {
33+
// ignore
34+
}
35+
}
36+
res.json({ deleted });
37+
};
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Router } from 'express';
2+
import { listFiles, deleteAllFiles } from '../controllers/files.controller.js';
3+
4+
const router = Router();
5+
6+
router.get('/v1/files', listFiles);
7+
router.delete('/v1/files', deleteAllFiles);
8+
9+
export default router;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { Express } from 'express';
22
import healthRouter from './health.routes.js';
33
import jobsRouter from './jobs.routes.js';
4+
import filesRouter from './files.routes.js';
45

56
export function registerRoutes(app: Express) {
67
app.use(healthRouter);
78
app.use(jobsRouter);
9+
app.use(filesRouter);
810
}

infra/k8s/apps/pdf-analyzer-service-deployment.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ spec:
2727
value: "8080"
2828
- name: COMMIT_SHA
2929
value: "unknown"
30+
- name: STORAGE_DIR
31+
value: "/data"
32+
volumeMounts:
33+
- name: pdf-storage
34+
mountPath: /data
3035
resources:
3136
requests:
3237
memory: "64Mi"
@@ -47,6 +52,10 @@ spec:
4752
port: 8080
4853
initialDelaySeconds: 5
4954
periodSeconds: 5
55+
volumes:
56+
- name: pdf-storage
57+
persistentVolumeClaim:
58+
claimName: pdf-analyzer-pvc
5059
---
5160
apiVersion: v1
5261
kind: Service
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: v1
2+
kind: PersistentVolumeClaim
3+
metadata:
4+
name: pdf-analyzer-pvc
5+
namespace: default
6+
spec:
7+
accessModes:
8+
- ReadWriteOnce
9+
storageClassName: hetzner-volume
10+
resources:
11+
requests:
12+
storage: 10Gi

0 commit comments

Comments
 (0)