mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-21 14:21:46 +00:00
103 lines
4.0 KiB
TypeScript
103 lines
4.0 KiB
TypeScript
import express, { Request, Response } from 'express';
|
|
import { authenticate } from '../middleware/auth';
|
|
import { broadcast } from '../websocket';
|
|
import { AuthRequest } from '../types';
|
|
import {
|
|
listTripPhotos,
|
|
listTripAlbumLinks,
|
|
createTripAlbumLink,
|
|
removeAlbumLink,
|
|
addTripPhotos,
|
|
removeTripPhoto,
|
|
setTripPhotoSharing,
|
|
notifySharedTripPhotos,
|
|
} from '../services/memoriesService';
|
|
|
|
const router = express.Router();
|
|
|
|
|
|
router.get('/trips/:tripId/photos', authenticate, (req: Request, res: Response) => {
|
|
const authReq = req as AuthRequest;
|
|
const { tripId } = req.params;
|
|
const result = listTripPhotos(tripId, authReq.user.id);
|
|
if ('error' in result) return res.status(result.status).json({ error: result.error });
|
|
res.json({ photos: result.photos });
|
|
});
|
|
|
|
router.get('/trips/:tripId/album-links', authenticate, (req: Request, res: Response) => {
|
|
const authReq = req as AuthRequest;
|
|
const { tripId } = req.params;
|
|
const result = listTripAlbumLinks(tripId, authReq.user.id);
|
|
if ('error' in result) return res.status(result.status).json({ error: result.error });
|
|
res.json({ links: result.links });
|
|
});
|
|
|
|
router.delete('/trips/:tripId/album-links/:linkId', authenticate, (req: Request, res: Response) => {
|
|
const authReq = req as AuthRequest;
|
|
const { tripId, linkId } = req.params;
|
|
const result = removeAlbumLink(tripId, linkId, authReq.user.id);
|
|
if ('error' in result) return res.status(result.status).json({ error: result.error });
|
|
res.json({ success: true });
|
|
broadcast(tripId, 'memories:updated', { userId: authReq.user.id }, req.headers['x-socket-id'] as string);
|
|
});
|
|
|
|
router.post('/trips/:tripId/photos', authenticate, (req: Request, res: Response) => {
|
|
const authReq = req as AuthRequest;
|
|
const { tripId } = req.params;
|
|
const result = addTripPhotos(
|
|
tripId,
|
|
authReq.user.id,
|
|
req.body?.shared,
|
|
req.body?.selections,
|
|
req.body?.provider,
|
|
req.body?.asset_ids,
|
|
);
|
|
if ('error' in result) return res.status(result.status).json({ error: result.error });
|
|
|
|
res.json({ success: true, added: result.added });
|
|
broadcast(tripId, 'memories:updated', { userId: authReq.user.id }, req.headers['x-socket-id'] as string);
|
|
|
|
if (result.shared && result.added > 0) {
|
|
void notifySharedTripPhotos(
|
|
tripId,
|
|
authReq.user.id,
|
|
authReq.user.username || authReq.user.email,
|
|
result.added,
|
|
).catch(() => {});
|
|
}
|
|
});
|
|
|
|
router.delete('/trips/:tripId/photos', authenticate, (req: Request, res: Response) => {
|
|
const authReq = req as AuthRequest;
|
|
const { tripId } = req.params;
|
|
const result = removeTripPhoto(tripId, authReq.user.id, req.body?.provider, req.body?.asset_id);
|
|
if ('error' in result) return res.status(result.status).json({ error: result.error });
|
|
res.json({ success: true });
|
|
broadcast(tripId, 'memories:updated', { userId: authReq.user.id }, req.headers['x-socket-id'] as string);
|
|
});
|
|
|
|
router.put('/trips/:tripId/photos/sharing', authenticate, (req: Request, res: Response) => {
|
|
const authReq = req as AuthRequest;
|
|
const { tripId } = req.params;
|
|
const result = setTripPhotoSharing(
|
|
tripId,
|
|
authReq.user.id,
|
|
req.body?.provider,
|
|
req.body?.asset_id,
|
|
req.body?.shared,
|
|
);
|
|
if ('error' in result) return res.status(result.status).json({ error: result.error });
|
|
res.json({ success: true });
|
|
broadcast(tripId, 'memories:updated', { userId: authReq.user.id }, req.headers['x-socket-id'] as string);
|
|
});
|
|
|
|
router.post('/trips/:tripId/album-links', authenticate, (req: Request, res: Response) => {
|
|
const authReq = req as AuthRequest;
|
|
const { tripId } = req.params;
|
|
const result = createTripAlbumLink(tripId, authReq.user.id, req.body?.provider, req.body?.album_id, req.body?.album_name);
|
|
if ('error' in result) return res.status(result.status).json({ error: result.error });
|
|
res.json({ success: true });
|
|
});
|
|
|
|
export default router;
|