Skip to content

Commit bb7e046

Browse files
committed
Photo delete
1 parent 3d1b751 commit bb7e046

File tree

9 files changed

+1585
-1577
lines changed

9 files changed

+1585
-1577
lines changed

src/api/routes/photo-router.ts

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { Photo, SavedFilter } from '../data';
66
import multer from 'multer';
77
import { createThumbnail } from '../utils/image';
88
import { ReturnValidationErrors } from '../middleware';
9+
import knex from 'knex';
910

1011
const photoService = new PhotoService(DB_CONFIG);
1112
const ytPlaceService = new YtPlaceService(DB_CONFIG);
@@ -248,6 +249,30 @@ photoRouter.post(
248249
}
249250
);
250251

252+
photoRouter.delete('/:id', async (req: Request, res: Response) => {
253+
const { id } = req.params;
254+
const db = knex(DB_CONFIG);
255+
256+
db.transaction(async (trx) => {
257+
try {
258+
await trx('place.photo').where({ photo_RowId: id }).delete();
259+
await trx('boat.photo').where({ photo_RowId: id }).delete();
260+
await trx('aircrash.photo').where({ photo_RowId: id }).delete();
261+
await trx('person.photo').where({ photoId: id }).delete();
262+
await trx('burial.photo').where({ photo_RowId: id }).delete();
263+
await trx('interpretiveSite.photos').where({ photo_RowId: id }).delete();
264+
await trx('photo').where({ RowID: id }).delete();
265+
await trx.commit();
266+
267+
return res.json({ data: 'successfully deleted' });
268+
} catch (err) {
269+
console.error('Error deleting photo:', err);
270+
trx.rollback();
271+
res.status(500).json({ errors: err });
272+
}
273+
});
274+
});
275+
251276
photoRouter.put(
252277
'/:id',
253278
multer().single('file'),
@@ -370,16 +395,15 @@ photoRouter.get(
370395
async (req: Request, res: Response) => {
371396
const errors = validationResult(req);
372397

373-
if (!errors.isEmpty()) {
398+
if (!errors.isEmpty())
374399
return res.status(400).json({ errors: errors.array() });
375-
}
376400

377401
await photoService
378402
.getSavedFilterByUser(req.params.id)
379403
.then((item) => {
380404
if (item) return res.json({ data: item });
381405

382-
return res.status(404).send('Filters not found');
406+
return res.json({ data: [] });
383407
})
384408
.catch((err) => {
385409
console.error(err);

src/api/services/photo-service.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ export class PhotoService {
4242
}
4343

4444
async getForPlace(id: number): Promise<Photo[]> {
45-
46-
console.log("GETTING PHOTOS FOR PLACE", id);
4745
return this.knex('photo')
4846
.select<Photo[]>(PHOTO_FIELDS)
4947
.where({ placeId: id })
Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,51 @@
11
<template>
2-
<div>
3-
<button
4-
@click="toggleAccordion()"
5-
class="flex items-center space-x-3"
6-
:aria-controls="`collapse${_uid}`"
7-
>
8-
<slot name="title" />
9-
<v-icon v-if="isOpen" class="chevron" v-text="'mdi-chevron-up'"></v-icon>
10-
<v-icon v-if="!isOpen" class="chevron" v-text="'mdi-chevron-down'"></v-icon>
11-
</button>
12-
13-
<v-divider inset></v-divider>
14-
15-
<div v-show="isOpen" :id="`collapse${_uid}`">
16-
<slot name="content" />
17-
</div>
18-
</div>
2+
<div>
3+
<button
4+
@click="toggleAccordion()"
5+
class="flex items-center space-x-3"
6+
:aria-controls="`collapse${_uid}`"
7+
>
8+
<v-icon
9+
v-if="isOpen"
10+
class="chevron"
11+
v-text="'mdi-chevron-up'"
12+
/>
13+
<v-icon
14+
v-if="!isOpen"
15+
class="chevron"
16+
v-text="'mdi-chevron-down'"
17+
/>
18+
<slot name="title"></slot>
19+
</button>
20+
21+
<v-divider />
22+
23+
<div
24+
v-show="isOpen"
25+
:id="`collapse${_uid}`"
26+
>
27+
<slot name="content" />
28+
</div>
29+
</div>
1930
</template>
2031

2132
<script>
2233
export default {
23-
data() {
24-
return {
25-
isOpen: true,
26-
};
27-
},
28-
methods: {
29-
toggleAccordion() {
30-
this.isOpen = !this.isOpen;
31-
},
32-
},
34+
data() {
35+
return {
36+
isOpen: true,
37+
};
38+
},
39+
methods: {
40+
toggleAccordion() {
41+
this.isOpen = !this.isOpen;
42+
},
43+
},
3344
};
3445
</script>
3546

3647
<style scoped>
37-
.v-icon.v-icon.chevron{
38-
font-size: 36px;
48+
.v-icon.v-icon.chevron {
49+
font-size: 36px;
3950
}
40-
</style>
51+
</style>

0 commit comments

Comments
 (0)