Dateien nach "backend/src/tools/dateien" hochladen
This commit is contained in:
@@ -38,13 +38,9 @@ const hasFileAccess = (fileId, userId) => {
|
||||
};
|
||||
|
||||
// ── Ordner ────────────────────────────────────────────────────────────────────
|
||||
// GET /folders?parent_id=
|
||||
router.get('/folders', authenticate, (req, res) => {
|
||||
const uid = req.user.id;
|
||||
const parentId = req.query.parent_id || null;
|
||||
const own = db.prepare('SELECT * FROM folders WHERE user_id=? AND parent_id IS ? ORDER BY name').all(uid, parentId);
|
||||
// Shared folders at root level
|
||||
const shared = parentId ? [] : db.prepare(`
|
||||
// Helper: collect all ancestor folder IDs that are shared with user
|
||||
function getSharedRootFolders(uid) {
|
||||
return db.prepare(`
|
||||
SELECT f.*, u.username as owner, s.shared_by
|
||||
FROM folders f
|
||||
JOIN users u ON u.id=f.user_id
|
||||
@@ -52,6 +48,41 @@ router.get('/folders', authenticate, (req, res) => {
|
||||
WHERE s.shared_with=?
|
||||
ORDER BY f.name
|
||||
`).all(uid);
|
||||
}
|
||||
|
||||
function isInSharedFolder(folderId, uid) {
|
||||
// Walk up the folder tree to check if any ancestor is shared with uid
|
||||
let current = folderId;
|
||||
while (current) {
|
||||
if (db.prepare('SELECT id FROM folder_shares WHERE folder_id=? AND shared_with=?').get(current, uid)) return true;
|
||||
const parent = db.prepare('SELECT parent_id FROM folders WHERE id=?').get(current);
|
||||
current = parent?.parent_id || null;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// GET /folders?parent_id=
|
||||
router.get('/folders', authenticate, (req, res) => {
|
||||
const uid = req.user.id;
|
||||
const parentId = req.query.parent_id || null;
|
||||
const own = db.prepare('SELECT * FROM folders WHERE user_id=? AND parent_id IS ? ORDER BY name').all(uid, parentId);
|
||||
|
||||
let shared = [];
|
||||
if (!parentId) {
|
||||
// Root: directly shared folders
|
||||
shared = getSharedRootFolders(uid);
|
||||
} else {
|
||||
// Inside a folder: show subfolders if parent is accessible
|
||||
const parentOwned = db.prepare('SELECT * FROM folders WHERE id=? AND user_id=?').get(parentId, uid);
|
||||
if (!parentOwned && isInSharedFolder(parentId, uid)) {
|
||||
// Show subfolders of shared folder
|
||||
const parentFolder = db.prepare('SELECT * FROM folders WHERE id=?').get(parentId);
|
||||
if (parentFolder) {
|
||||
const subfolders = db.prepare('SELECT f.*, u.username as owner FROM folders f JOIN users u ON u.id=f.user_id WHERE f.parent_id=? AND f.user_id!=?').all(parentId, uid);
|
||||
shared = subfolders;
|
||||
}
|
||||
}
|
||||
}
|
||||
res.json({ own, shared });
|
||||
});
|
||||
|
||||
@@ -114,8 +145,11 @@ router.get('/', authenticate, (req, res) => {
|
||||
const uid = req.user.id;
|
||||
const folderId = req.query.folder_id || null;
|
||||
const own = db.prepare('SELECT f.*, u.username as owner FROM files f JOIN users u ON u.id=f.user_id WHERE f.user_id=? AND f.folder_id IS ? ORDER BY f.created_at DESC').all(uid, folderId);
|
||||
// Shared files (root only, folders handled separately)
|
||||
const shared = folderId ? [] : db.prepare(`
|
||||
|
||||
let shared = [];
|
||||
if (!folderId) {
|
||||
// Root: directly shared files
|
||||
shared = db.prepare(`
|
||||
SELECT f.*, u.username as owner, s.shared_by, sb.username as shared_by_name
|
||||
FROM files f JOIN users u ON u.id=f.user_id
|
||||
JOIN file_shares s ON s.file_id=f.id
|
||||
@@ -123,6 +157,13 @@ router.get('/', authenticate, (req, res) => {
|
||||
WHERE s.shared_with=?
|
||||
ORDER BY f.created_at DESC
|
||||
`).all(uid);
|
||||
} else if (isInSharedFolder(folderId, uid)) {
|
||||
// Inside a shared folder: show files belonging to folder owner
|
||||
const folder = db.prepare('SELECT * FROM folders WHERE id=?').get(folderId);
|
||||
if (folder) {
|
||||
shared = db.prepare('SELECT f.*, u.username as owner FROM files f JOIN users u ON u.id=f.user_id WHERE f.folder_id=? AND f.user_id=? ORDER BY f.created_at DESC').all(folderId, folder.user_id);
|
||||
}
|
||||
}
|
||||
res.json({ own, shared });
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user