Skip to content
Snippets Groups Projects

Feature/activity log

Merged Neda Moeini requested to merge feature/activity-log into develop
3 files
+ 22
16
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -53,16 +53,9 @@ class CSVUploadAPIView(APIView):
updated_data = self.update_fields(csv_data)
request.session["validated_csv"] = updated_data
request.session["input_file_hash"] = UserActivityLog.generate_file_hash(csv_file)
request.session.modified = True
# Log the user activity
UserActivityLog.objects.create(
user=request.user,
action="upload",
name=csv_file.name,
input_file_hash=UserActivityLog.generate_file_hash(csv_file),
output_file_hash=UserActivityLog.generate_file_hash(updated_data),
timestamp=timezone.now()
)
return Response({
"status": "success",
"message": "File successfully uploaded and processed.",
@@ -111,16 +104,25 @@ class CSVExportAPIView(APIView):
def get(self, request: Request) -> Response:
"""Return processed CSV as a downloadable response."""
csv_data: list[dict[str, str]] = request.session.get("validated_csv", [])
input_file_hash: str = request.session.get("input_file_hash", "")
if not csv_data:
return Response({"status": "error", "message": "No data available for export."},
status=status.HTTP_400_BAD_REQUEST)
file_name = f"Validated_{csv_data[0].get('TransactionReference', 'file')}.csv"
response = HttpResponse(content_type="text/csv")
response["Content-Disposition"] = 'attachment; filename="updated_file.csv"'
response["Content-Disposition"] = f"attachment; filename={file_name}"
writer = csv.DictWriter(response, fieldnames=csv_data[0].keys())
writer.writeheader()
writer.writerows(csv_data)
# Log the user activity
UserActivityLog.objects.create(
user=request.user,
action="download",
name=file_name,
input_file_hash=input_file_hash,
output_file_hash=UserActivityLog.generate_file_hash(csv_data),
timestamp=timezone.now()
)
return response
Loading