mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 13:21:46 +00:00
103 lines
3.9 KiB
TypeScript
103 lines
3.9 KiB
TypeScript
import express, { Request, Response } from 'express';
|
|
import { authenticate } from '../../middleware/auth';
|
|
import { AuthRequest } from '../../types';
|
|
import {
|
|
listTripPhotos,
|
|
listTripAlbumLinks,
|
|
createTripAlbumLink,
|
|
removeAlbumLink,
|
|
addTripPhotos,
|
|
removeTripPhoto,
|
|
setTripPhotoSharing,
|
|
} from '../../services/memories/unifiedService';
|
|
import immichRouter from './immich';
|
|
import synologyRouter from './synology';
|
|
|
|
const router = express.Router();
|
|
|
|
router.use('/immich', immichRouter);
|
|
router.use('/synologyphotos', synologyRouter);
|
|
|
|
//------------------------------------------------
|
|
// routes for managing photos linked to trip
|
|
|
|
router.get('/unified/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.error.status).json({ error: result.error.message });
|
|
res.json({ photos: result.data });
|
|
});
|
|
|
|
router.post('/unified/trips/:tripId/photos', authenticate, async (req: Request, res: Response) => {
|
|
const authReq = req as AuthRequest;
|
|
const { tripId } = req.params;
|
|
const sid = req.headers['x-socket-id'] as string;
|
|
|
|
const shared = req.body?.shared === undefined ? true : !!req.body?.shared;
|
|
const result = await addTripPhotos(
|
|
tripId,
|
|
authReq.user.id,
|
|
shared,
|
|
req.body?.selections || [],
|
|
sid,
|
|
);
|
|
if ('error' in result) return res.status(result.error.status).json({ error: result.error.message });
|
|
|
|
res.json({ success: true, added: result.data.added });
|
|
});
|
|
|
|
router.put('/unified/trips/:tripId/photos/sharing', authenticate, async (req: Request, res: Response) => {
|
|
const authReq = req as AuthRequest;
|
|
const { tripId } = req.params;
|
|
const result = await setTripPhotoSharing(
|
|
tripId,
|
|
authReq.user.id,
|
|
req.body?.provider,
|
|
req.body?.asset_id,
|
|
req.body?.shared,
|
|
);
|
|
if ('error' in result) return res.status(result.error.status).json({ error: result.error.message });
|
|
res.json({ success: true });
|
|
});
|
|
|
|
router.delete('/unified/trips/:tripId/photos', authenticate, async (req: Request, res: Response) => {
|
|
const authReq = req as AuthRequest;
|
|
const { tripId } = req.params;
|
|
const result = await removeTripPhoto(tripId, authReq.user.id, req.body?.provider, req.body?.asset_id);
|
|
if ('error' in result) return res.status(result.error.status).json({ error: result.error.message });
|
|
res.json({ success: true });
|
|
});
|
|
|
|
//------------------------------
|
|
// routes for managing album links
|
|
|
|
router.get('/unified/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.error.status).json({ error: result.error.message });
|
|
res.json({ links: result.data });
|
|
});
|
|
|
|
router.post('/unified/trips/:tripId/album-links', authenticate, async (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.error.status).json({ error: result.error.message });
|
|
res.json({ success: true });
|
|
});
|
|
|
|
router.delete('/unified/trips/:tripId/album-links/:linkId', authenticate, async (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.error.status).json({ error: result.error.message });
|
|
res.json({ success: true });
|
|
});
|
|
|
|
|
|
|
|
|
|
export default router;
|