68 lines
2.1 KiB
Dart
68 lines
2.1 KiB
Dart
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}');
|
|
}
|