254 lines
6 KiB
TypeScript
254 lines
6 KiB
TypeScript
import type { RequestHandler } from './$types'
|
|
import { prisma } from '$lib/server/database'
|
|
import { jsonResponse, errorResponse } from '$lib/server/api-utils'
|
|
import { logger } from '$lib/server/logger'
|
|
|
|
// GET /api/test-photos - Test endpoint to debug photo visibility
|
|
export const GET: RequestHandler = async () => {
|
|
try {
|
|
// Query 1: Get all photos with showInPhotos=true and albumId=null
|
|
const photosWithShowInPhotos = await prisma.photo.findMany({
|
|
where: {
|
|
showInPhotos: true,
|
|
albumId: null
|
|
},
|
|
select: {
|
|
id: true,
|
|
slug: true,
|
|
filename: true,
|
|
url: true,
|
|
status: true,
|
|
showInPhotos: true,
|
|
albumId: true,
|
|
publishedAt: true,
|
|
createdAt: true,
|
|
title: true,
|
|
description: true,
|
|
caption: true
|
|
},
|
|
orderBy: { createdAt: 'desc' }
|
|
})
|
|
|
|
// Query 2: Get count of photos by status with showInPhotos=true and albumId=null
|
|
const photosByStatus = await prisma.photo.groupBy({
|
|
by: ['status'],
|
|
where: {
|
|
showInPhotos: true,
|
|
albumId: null
|
|
},
|
|
_count: {
|
|
id: true
|
|
}
|
|
})
|
|
|
|
// Query 3: Get all photos regardless of status to see what exists
|
|
const allPhotosNoAlbum = await prisma.photo.findMany({
|
|
where: {
|
|
albumId: null
|
|
},
|
|
select: {
|
|
id: true,
|
|
slug: true,
|
|
filename: true,
|
|
status: true,
|
|
showInPhotos: true,
|
|
albumId: true,
|
|
publishedAt: true,
|
|
createdAt: true
|
|
},
|
|
orderBy: { createdAt: 'desc' }
|
|
})
|
|
|
|
// Query 3b: Get ALL photos to see what's in the database
|
|
const allPhotos = await prisma.photo.findMany({
|
|
select: {
|
|
id: true,
|
|
slug: true,
|
|
filename: true,
|
|
status: true,
|
|
showInPhotos: true,
|
|
albumId: true,
|
|
publishedAt: true,
|
|
createdAt: true,
|
|
album: {
|
|
select: {
|
|
title: true
|
|
}
|
|
}
|
|
},
|
|
orderBy: { createdAt: 'desc' }
|
|
})
|
|
|
|
// Query 4: Get specific published photos that should appear
|
|
const publishedPhotos = await prisma.photo.findMany({
|
|
where: {
|
|
status: 'published',
|
|
showInPhotos: true,
|
|
albumId: null
|
|
},
|
|
select: {
|
|
id: true,
|
|
slug: true,
|
|
filename: true,
|
|
url: true,
|
|
status: true,
|
|
showInPhotos: true,
|
|
albumId: true,
|
|
publishedAt: true,
|
|
createdAt: true,
|
|
title: true
|
|
}
|
|
})
|
|
|
|
// Query 5: Raw SQL query to double-check
|
|
const rawQuery = await prisma.$queryRaw`
|
|
SELECT id, slug, filename, status, "showInPhotos", "albumId", "publishedAt", "createdAt"
|
|
FROM "Photo"
|
|
WHERE "showInPhotos" = true AND "albumId" IS NULL
|
|
ORDER BY "createdAt" DESC
|
|
`
|
|
|
|
// Query 6: Get all albums and their isPhotography flag
|
|
const allAlbums = await prisma.album.findMany({
|
|
select: {
|
|
id: true,
|
|
title: true,
|
|
slug: true,
|
|
isPhotography: true,
|
|
status: true,
|
|
createdAt: true,
|
|
_count: {
|
|
select: {
|
|
photos: true
|
|
}
|
|
}
|
|
},
|
|
orderBy: { id: 'asc' }
|
|
})
|
|
|
|
// Query 7: Get photos from albums with isPhotography=true
|
|
const photosFromPhotographyAlbums = await prisma.photo.findMany({
|
|
where: {
|
|
album: {
|
|
isPhotography: true
|
|
}
|
|
},
|
|
select: {
|
|
id: true,
|
|
slug: true,
|
|
filename: true,
|
|
status: true,
|
|
showInPhotos: true,
|
|
albumId: true,
|
|
album: {
|
|
select: {
|
|
id: true,
|
|
title: true,
|
|
isPhotography: true
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
// Query 8: Specifically check album with ID 5
|
|
const albumFive = await prisma.album.findUnique({
|
|
where: { id: 5 },
|
|
include: {
|
|
photos: {
|
|
select: {
|
|
id: true,
|
|
slug: true,
|
|
filename: true,
|
|
status: true,
|
|
showInPhotos: true
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
const response = {
|
|
summary: {
|
|
totalPhotosWithShowInPhotos: photosWithShowInPhotos.length,
|
|
totalPublishedPhotos: publishedPhotos.length,
|
|
totalPhotosNoAlbum: allPhotosNoAlbum.length,
|
|
totalPhotosInDatabase: allPhotos.length,
|
|
photosByStatus: photosByStatus.map((item) => ({
|
|
status: item.status,
|
|
count: item._count.id
|
|
})),
|
|
photosWithShowInPhotosFlag: allPhotos.filter((p) => p.showInPhotos).length,
|
|
photosByFilename: allPhotos
|
|
.filter((p) => p.filename?.includes('B0000057'))
|
|
.map((p) => ({
|
|
filename: p.filename,
|
|
showInPhotos: p.showInPhotos,
|
|
status: p.status,
|
|
albumId: p.albumId,
|
|
albumTitle: p.album?.title
|
|
}))
|
|
},
|
|
albums: {
|
|
totalAlbums: allAlbums.length,
|
|
photographyAlbums: allAlbums
|
|
.filter((a) => a.isPhotography)
|
|
.map((a) => ({
|
|
id: a.id,
|
|
title: a.title,
|
|
slug: a.slug,
|
|
isPhotography: a.isPhotography,
|
|
status: a.status,
|
|
photoCount: a._count.photos
|
|
})),
|
|
nonPhotographyAlbums: allAlbums
|
|
.filter((a) => !a.isPhotography)
|
|
.map((a) => ({
|
|
id: a.id,
|
|
title: a.title,
|
|
slug: a.slug,
|
|
isPhotography: a.isPhotography,
|
|
status: a.status,
|
|
photoCount: a._count.photos
|
|
})),
|
|
albumFive: albumFive
|
|
? {
|
|
id: albumFive.id,
|
|
title: albumFive.title,
|
|
slug: albumFive.slug,
|
|
isPhotography: albumFive.isPhotography,
|
|
status: albumFive.status,
|
|
publishedAt: albumFive.publishedAt,
|
|
photoCount: albumFive.photos.length,
|
|
photos: albumFive.photos
|
|
}
|
|
: null,
|
|
photosFromPhotographyAlbums: photosFromPhotographyAlbums.length,
|
|
photosFromPhotographyAlbumsSample: photosFromPhotographyAlbums.slice(0, 5)
|
|
},
|
|
queries: {
|
|
photosWithShowInPhotos: photosWithShowInPhotos,
|
|
publishedPhotos: publishedPhotos,
|
|
allPhotosNoAlbum: allPhotosNoAlbum,
|
|
allPhotos: allPhotos,
|
|
rawQueryResults: rawQuery,
|
|
allAlbums: allAlbums
|
|
},
|
|
debug: {
|
|
expectedQuery: 'WHERE status = "published" AND showInPhotos = true AND albumId = null',
|
|
actualPhotosEndpointQuery: '/api/photos uses this exact query',
|
|
albumsWithPhotographyFlagTrue: allAlbums
|
|
.filter((a) => a.isPhotography)
|
|
.map((a) => `${a.id}: ${a.title}`)
|
|
}
|
|
}
|
|
|
|
logger.info('Test photos query results', response.summary)
|
|
|
|
return jsonResponse(response)
|
|
} catch (error) {
|
|
logger.error('Failed to run test photos query', error as Error)
|
|
return errorResponse(
|
|
`Failed to run test query: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
500
|
|
)
|
|
}
|
|
}
|