diff --git a/components/file_metadata.templ b/components/file_metadata.templ index e833047..453b52e 100644 --- a/components/file_metadata.templ +++ b/components/file_metadata.templ @@ -1000,7 +1000,7 @@ templ FileMetadataSearch(ctx context.Context, data FileMetadataSearchData) {
if data.Page > 1 { - } else if i == 1 || i == data.TotalPages || (i >= data.Page-2 && i <= data.Page+2) { - 100 { + limit = 50 + } + + status := c.Query("status") + jobIDStr := c.Query("job_id") + fileName := c.Query("filename") + hash := c.Query("hash") + startDate := c.Query("start_date") + endDate := c.Query("end_date") + + // Execute the search query + query := h.DB.DB.Model(&db.FileMetadata{}).Joins("JOIN jobs ON file_metadata.job_id = jobs.id") + + // Apply filters + if jobIDStr != "" { + jobID, _ := strconv.ParseUint(jobIDStr, 10, 64) + query = query.Where("file_metadata.job_id = ?", jobID) + } else { + // Only show files from jobs created by the current user + query = query.Where("jobs.created_by = ?", userID) + } + + if status != "" { + query = query.Where("file_metadata.status = ?", status) + } + + if fileName != "" { + query = query.Where("file_metadata.file_name LIKE ?", "%"+fileName+"%") + } + + if hash != "" { + query = query.Where("file_metadata.file_hash = ?", hash) + } + + if startDate != "" { + query = query.Where("file_metadata.processed_time >= ?", startDate) + } + + if endDate != "" { + query = query.Where("file_metadata.processed_time <= ?", endDate+" 23:59:59") + } + + // Count total results + var totalCount int64 + if err := query.Count(&totalCount).Error; err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to count files"}) + return + } + + // Order and paginate the results + var files []db.FileMetadata + if err := query. + Preload("Job"). + Order("file_metadata.processed_time DESC"). + Limit(limit). + Offset((page - 1) * limit). + Find(&files).Error; err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to search files"}) + return + } + + // Build the template data + data := components.FileMetadataSearchData{ + Files: files, + TotalCount: totalCount, + Page: page, + Limit: limit, + TotalPages: int(totalCount) / limit, + Filter: components.FileMetadataFilter{ + Status: status, + JobID: jobIDStr, + FileName: fileName, + Hash: hash, + StartDate: startDate, + EndDate: endDate, + }, + } + + if int(totalCount)%limit > 0 { + data.TotalPages++ + } + + ctx := context.WithValue(c.Request.Context(), "userID", userID) + c.Header("Content-Type", "text/html") + components.FileMetadataSearchContent(data).Render(ctx, c.Writer) +}