mirror of
https://github.com/AmanTahiliani/PeerNotes.git
synced 2026-08-07 11:55:12 -04:00
get peer's registered files
This commit is contained in:
@@ -247,6 +247,7 @@ class FileFilterView(APIView):
|
|||||||
professor_id = request.query_params.get("professor")
|
professor_id = request.query_params.get("professor")
|
||||||
course_id = request.query_params.get("course")
|
course_id = request.query_params.get("course")
|
||||||
semester_id = request.query_params.get("semester")
|
semester_id = request.query_params.get("semester")
|
||||||
|
peer_id = request.query_params.get("peer_id")
|
||||||
|
|
||||||
# Check if provided filter IDs exist
|
# Check if provided filter IDs exist
|
||||||
if topic_id and not Topic.objects.filter(id=topic_id).exists():
|
if topic_id and not Topic.objects.filter(id=topic_id).exists():
|
||||||
@@ -269,6 +270,11 @@ class FileFilterView(APIView):
|
|||||||
{"error": f"Semester with id {semester_id} does not exist"},
|
{"error": f"Semester with id {semester_id} does not exist"},
|
||||||
status=status.HTTP_400_BAD_REQUEST,
|
status=status.HTTP_400_BAD_REQUEST,
|
||||||
)
|
)
|
||||||
|
if peer_id and not PeerUser.objects.filter(id=peer_id).exists():
|
||||||
|
return Response(
|
||||||
|
{"error": f"Peer with id {peer_id} does not exist"},
|
||||||
|
status=status.HTTP_400_BAD_REQUEST,
|
||||||
|
)
|
||||||
|
|
||||||
# Start with the base queryset
|
# Start with the base queryset
|
||||||
queryset = File.objects.all()
|
queryset = File.objects.all()
|
||||||
@@ -282,16 +288,20 @@ class FileFilterView(APIView):
|
|||||||
queryset = queryset.filter(course__id=course_id)
|
queryset = queryset.filter(course__id=course_id)
|
||||||
if semester_id:
|
if semester_id:
|
||||||
queryset = queryset.filter(semester__id=semester_id)
|
queryset = queryset.filter(semester__id=semester_id)
|
||||||
|
|
||||||
|
|
||||||
queryset = queryset.annotate(
|
queryset = queryset.annotate(
|
||||||
upvote_count=Count("upvotes"), downvote_count=Count("downvotes")
|
upvote_count=Count("upvotes"), downvote_count=Count("downvotes")
|
||||||
).order_by(F("downvote_count") - F("upvote_count"))
|
).order_by(F("downvote_count") - F("upvote_count"))
|
||||||
|
|
||||||
# Filter files based on active peers in the past hour
|
# Filter files based on active peers in the past hour
|
||||||
active_peer_ids = PeerUser.objects.filter(
|
if peer_id:
|
||||||
last_poll__gte=timezone.now() - timedelta(hours=1)
|
queryset = queryset.filter(peer_users__in=peer_id)
|
||||||
).values_list("id", flat=True)
|
else:
|
||||||
queryset = queryset.filter(peer_users__in=active_peer_ids).distinct()
|
active_peer_ids = PeerUser.objects.filter(
|
||||||
|
last_poll__gte=timezone.now() - timedelta(hours=1)
|
||||||
|
).values_list("id", flat=True)
|
||||||
|
queryset = queryset.filter(peer_users__in=active_peer_ids).distinct()
|
||||||
|
|
||||||
serializer = FileSerializer(queryset, many=True)
|
serializer = FileSerializer(queryset, many=True)
|
||||||
# Loop through each serialized file to sort its peer_users
|
# Loop through each serialized file to sort its peer_users
|
||||||
|
|||||||
@@ -83,6 +83,13 @@ def request_file():
|
|||||||
print("Error:", error)
|
print("Error:", error)
|
||||||
return error, response.status_code
|
return error, response.status_code
|
||||||
|
|
||||||
|
@app.route("/files", methods=["GET"])
|
||||||
|
def list_files():
|
||||||
|
files = os.listdir("./uploads")
|
||||||
|
newFiles = []
|
||||||
|
for file in files:
|
||||||
|
newFiles.append(file.split("_")[1])
|
||||||
|
return {"files": newFiles}, 200
|
||||||
|
|
||||||
@app.route("/request-tests", methods=["GET"])
|
@app.route("/request-tests", methods=["GET"])
|
||||||
def request_test_():
|
def request_test_():
|
||||||
|
|||||||
@@ -1,22 +1,48 @@
|
|||||||
import "../styles/RegisterFile.css";
|
import "../styles/RegisterFile.css";
|
||||||
import { RegisteredFile } from "../types/types";
|
import { RegisteredFile, Status } from "../types/types";
|
||||||
import { useState, useEffect } from "react";
|
import { useState, useEffect } from "react";
|
||||||
|
import { getAuthHeaders } from "../utils/getAuthHeaders";
|
||||||
|
|
||||||
export default function RegisterFile() {
|
export default function RegisterFile() {
|
||||||
|
const [serverFiles, setServerFiles] = useState<RegisteredFile[]>([]);
|
||||||
const [registeredFiles, setRegisteredFiles] = useState<RegisteredFile[]>([]);
|
const [registeredFiles, setRegisteredFiles] = useState<RegisteredFile[]>([]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchRegisteredFiles();
|
fetchServerFiles();
|
||||||
}, [])
|
}, [])
|
||||||
const fetchRegisteredFiles = () => {
|
|
||||||
return
|
useEffect(() => {
|
||||||
fetch("http://localhost:5000/files") // replace with local api endpoint
|
fetch(`http://localhost:8080/files`, {
|
||||||
|
method: 'GET',
|
||||||
|
})
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
setRegisteredFiles(data);
|
const files: string[] = data.files
|
||||||
|
setRegisteredFiles(
|
||||||
|
serverFiles.map((file) => {
|
||||||
|
if (files.includes(file.filename)) {
|
||||||
|
file.status = Status.HOSTED;
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
file.status = Status.PRIVATE;
|
||||||
|
return file;
|
||||||
|
})
|
||||||
|
)
|
||||||
})
|
})
|
||||||
.catch(error => console.error(error));
|
}, [serverFiles])
|
||||||
|
|
||||||
|
const fetchServerFiles = () => {
|
||||||
|
fetch(`http://localhost:8000/api/files/filter?peer_id=1`, {
|
||||||
|
method: 'GET',
|
||||||
|
headers: getAuthHeaders()
|
||||||
|
}) // replace with local api endpoint
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
setServerFiles(data)
|
||||||
|
})
|
||||||
|
.catch(error => console.error(error));
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {
|
const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
// handle file upload
|
// handle file upload
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { useLocation, useNavigate } from 'react-router-dom';
|
|||||||
import styles from '../styles/Results.module.css'; // Make sure this path is correct
|
import styles from '../styles/Results.module.css'; // Make sure this path is correct
|
||||||
import { getAuthHeaders } from '../utils/getAuthHeaders';
|
import { getAuthHeaders } from '../utils/getAuthHeaders';
|
||||||
import { File } from '../types/types';
|
import { File } from '../types/types';
|
||||||
|
import { Link } from 'react-router-dom';
|
||||||
|
|
||||||
const Results: React.FC = () => {
|
const Results: React.FC = () => {
|
||||||
const [files, setFiles] = useState<File[]>([]);
|
const [files, setFiles] = useState<File[]>([]);
|
||||||
@@ -113,7 +114,7 @@ function DownloadButton({ file }: { file: File }) {
|
|||||||
<>
|
<>
|
||||||
{
|
{
|
||||||
success === true ?
|
success === true ?
|
||||||
<p>Downloaded!</p> :
|
<Link to="/register">Downloaded!</Link> :
|
||||||
<button onClick={handleDownload}>Download</button>
|
<button onClick={handleDownload}>Download</button>
|
||||||
}
|
}
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ export interface File {
|
|||||||
downvotes: number[];
|
downvotes: number[];
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Status {
|
export enum Status {
|
||||||
HOSTED = "HOSTED",
|
HOSTED = "HOSTED",
|
||||||
PRIVATE = 'PRIVATE',
|
PRIVATE = 'PRIVATE',
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user