Fares 10 months ago
parent
commit
062a126b5f
4 changed files with 50 additions and 4 deletions
  1. 2 0
      bin/server.dart
  2. 38 0
      lib/handlers/realtime_handler.dart
  3. 8 2
      lib/handlers/upload_handler.dart
  4. 2 2
      lib/models/data.dart

+ 2 - 0
bin/server.dart

@@ -1,3 +1,4 @@
+import 'package:myshelf/handlers/realtime_handler.dart';
 import 'package:shelf/shelf.dart';
 import 'package:shelf/shelf_io.dart' as shelf_io;
 import 'package:shelf_router/shelf_router.dart';
@@ -14,6 +15,7 @@ void main() async {
   router.get('/greet', handleGreet);
   router.post('/echo', handleEcho);
   router.post('/upload', handleFileUpload);
+  router.post('/realtime', handleRealtime);
 
   // Create a middleware pipeline
   final handler = const Pipeline()

+ 38 - 0
lib/handlers/realtime_handler.dart

@@ -0,0 +1,38 @@
+import 'package:jiffy/jiffy.dart';
+import 'package:shelf/shelf.dart';
+import 'package:supabase/supabase.dart';
+
+Future<Response> handleRealtime(Request request) async {
+  // Check authorization
+  final authHeader = request.headers['authorization'];
+  if (authHeader == null || !authHeader.startsWith('Bearer ')) {
+    return Response.forbidden('Authorization header missing or invalid');
+  }
+  final token = authHeader.substring(7); // Remove 'Bearer ' prefix
+
+  final contentType = request.headers['content-type'];
+  if (contentType == null || !contentType.contains('multipart/form-data')) {
+    return Response(400, body: 'Unsupported content-type');
+  }
+
+  // Initialize Supabase client with the bearer token
+  final supabase = SupabaseClient(
+    'http://baas.fares.cyou:8000',
+    token,
+  );
+
+  final channel = supabase.channel('csvhichstorage');
+  final res = await channel.sendBroadcastMessage(
+    event: "upload",
+    payload: {
+      "filename": "exportPGRGPN.zip",
+      "updated_at": Jiffy.now().dateTime.toIso8601String(),
+    },
+  );
+  print("res: $res");
+  supabase.dispose();
+  return Response.ok(
+    '{"status": "success","res":$res}',
+    headers: {'Content-Type': 'application/json'},
+  );
+}

+ 8 - 2
lib/handlers/upload_handler.dart

@@ -1,10 +1,14 @@
 import 'dart:io';
+import 'package:jiffy/jiffy.dart';
 import 'package:myshelf/models/data.dart';
+import 'package:myshelf/models/dtinterval.dart';
 import 'package:shelf/shelf.dart';
 import 'package:shelf_multipart/shelf_multipart.dart';
 import 'package:supabase/supabase.dart';
 
 Future<Response> handleFileUpload(Request request) async {
+  final start = Jiffy.now();
+
   // Check authorization
   final authHeader = request.headers['authorization'];
   if (authHeader == null || !authHeader.startsWith('Bearer ')) {
@@ -95,14 +99,16 @@ Future<Response> handleFileUpload(Request request) async {
                 "updated_at": now,
               },
             );
-            //print("realtime response: $res");
+            print("   realtime response: $res");
 
             //add filename ta list
             uploadedFiles.add({
               'filename': filename,
               'updated_at': now,
             });
-            print("...............................................end");
+            final end = Jiffy.now();
+            print(
+                "                                        ${DTInterval(start, end).duration.inSeconds} seconds\n");
             // Clean up temporary file
             await tempFile.delete();
           } catch (e) {

+ 2 - 2
lib/models/data.dart

@@ -1259,7 +1259,7 @@ processCsvData(File tempfile, SupabaseClient supabase) async {
   }
 
   for (final FilesAsData data in csvData) {
-    print("    |--> processing ${data.filename}");
+    print("    processing ${data.filename}");
     //inserting data
     if (tables.keys.contains(data.filename)) {
       final mapsToInsert =
@@ -1327,7 +1327,7 @@ processCsvData(File tempfile, SupabaseClient supabase) async {
           .insert(mapsToInsert);
 
       print(
-          "         insert: ${mapsToInsert.length} remove: ${indexToRemove.length} maintain: ${indexToMaintain.length}");
+          "         insert:${mapsToInsert.length} remove:${indexToRemove.length} maintain:${indexToMaintain.length}");
       // for (var e in splitList(mapsToInsert, headerToNb(mapsToInsert))) {
       //   await supabase
       //       .from(tables[data.filename]!) // Replace with your actual table name