Implement data sync and cleanup
This commit is contained in:
67
backend/bin/server.dart
Normal file
67
backend/bin/server.dart
Normal file
@@ -0,0 +1,67 @@
|
||||
import 'dart:io';
|
||||
import 'dart:convert';
|
||||
import 'package:shelf/shelf.dart';
|
||||
import 'package:shelf/shelf_io.dart' as io;
|
||||
import 'package:shelf_router/shelf_router.dart';
|
||||
import 'package:tracker_backend/database.dart';
|
||||
|
||||
void main(List<String> args) async {
|
||||
// Use port 8090 as requested
|
||||
final port = 8090;
|
||||
final db = TrackerDatabase();
|
||||
|
||||
final app = Router();
|
||||
|
||||
app.get('/', (Request request) {
|
||||
return Response.ok('Tracker Sync Server Running');
|
||||
});
|
||||
|
||||
// Simple Sync Endpoint (Push)
|
||||
// Expects JSON: { "userId": "...", "entries": [ ... ] }
|
||||
app.post('/sync/push', (Request request) async {
|
||||
try {
|
||||
final payload = await request.readAsString();
|
||||
final data = jsonDecode(payload);
|
||||
final userId = data['userId'];
|
||||
final entries = data['entries'] as List;
|
||||
|
||||
print('Received sync push for $userId with ${entries.length} entries');
|
||||
|
||||
for (var entry in entries) {
|
||||
// Basic upsert handling
|
||||
db.upsertCycleEntry(userId, entry);
|
||||
}
|
||||
|
||||
return Response.ok(
|
||||
jsonEncode({'status': 'success', 'synced': entries.length}));
|
||||
} catch (e) {
|
||||
print('Sync Error: $e');
|
||||
return Response.internalServerError(body: 'Sync Failed: $e');
|
||||
}
|
||||
});
|
||||
|
||||
// Pull Endpoint
|
||||
// GET /sync/pull?userId=...
|
||||
app.get('/sync/pull', (Request request) {
|
||||
final userId = request.url.queryParameters['userId'];
|
||||
if (userId == null) return Response.badRequest(body: 'Missing userId');
|
||||
|
||||
final entries = db.getCycleEntries(userId);
|
||||
return Response.ok(jsonEncode({'entries': entries}));
|
||||
});
|
||||
|
||||
// Enable CORS
|
||||
final handler = Pipeline().addMiddleware((innerHandler) {
|
||||
return (request) async {
|
||||
final response = await innerHandler(request);
|
||||
return response.change(headers: {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
|
||||
'Access-Control-Allow-Headers': 'Origin, Content-Type',
|
||||
});
|
||||
};
|
||||
}).addHandler(app);
|
||||
|
||||
final server = await io.serve(handler, InternetAddress.anyIPv4, port);
|
||||
print('Server running on localhost:${server.port}');
|
||||
}
|
||||
Reference in New Issue
Block a user