move / check into separat feature ("root")
Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
@@ -1,9 +1,8 @@
|
|||||||
import 'dart:async';
|
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:cinema/feature/poster/poster.service.dart';
|
import 'package:cinema/feature/poster/poster.service.dart';
|
||||||
|
import 'package:cinema/feature/root/root.service.dart';
|
||||||
import 'package:cinema/feature/version/version.dart';
|
import 'package:cinema/feature/version/version.dart';
|
||||||
import 'package:cinema/feature/websocket/websocket.service.dart';
|
|
||||||
import 'package:cinema/injectable.dart';
|
import 'package:cinema/injectable.dart';
|
||||||
import 'package:shelf/shelf.dart';
|
import 'package:shelf/shelf.dart';
|
||||||
import 'package:shelf/shelf_io.dart' as io;
|
import 'package:shelf/shelf_io.dart' as io;
|
||||||
@@ -16,23 +15,17 @@ void main(List<String> args) async {
|
|||||||
|
|
||||||
final router = Router();
|
final router = Router();
|
||||||
router.mount("/poster", getIt<PosterService>().router.call);
|
router.mount("/poster", getIt<PosterService>().router.call);
|
||||||
|
router.mount("/", getIt<RootService>().router.call);
|
||||||
|
|
||||||
// Configure a pipeline that logs requests.
|
// Configure a pipeline that logs requests.
|
||||||
final handler = Pipeline().addMiddleware(logRequests()).addHandler(router.call);
|
final handler = Pipeline().addMiddleware(logRequests()).addHandler(router.call);
|
||||||
|
|
||||||
FutureOr<Response> combinedHandler(Request request) {
|
|
||||||
if (request.url.path == 'ws') {
|
|
||||||
return getIt<WebSocketService>().handler(request);
|
|
||||||
}
|
|
||||||
return handler(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use any available host or container IP (usually `0.0.0.0`).
|
// Use any available host or container IP (usually `0.0.0.0`).
|
||||||
final ip = InternetAddress.anyIPv4;
|
final ip = InternetAddress.anyIPv4;
|
||||||
|
|
||||||
// For running in containers, we respect the PORT environment variable.
|
// For running in containers, we respect the PORT environment variable.
|
||||||
final port = int.parse(Platform.environment['PORT'] ?? '3000');
|
final port = int.parse(Platform.environment['PORT'] ?? '3000');
|
||||||
await io.serve(combinedHandler, ip, port, poweredByHeader: null).then((server) async {
|
await io.serve(handler, ip, port, poweredByHeader: null).then((server) async {
|
||||||
final bannerFile = File('banner.txt');
|
final bannerFile = File('banner.txt');
|
||||||
if (await bannerFile.exists()) {
|
if (await bannerFile.exists()) {
|
||||||
final banner = await bannerFile.readAsString();
|
final banner = await bannerFile.readAsString();
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ part 'poster.service.g.dart';
|
|||||||
@injectable
|
@injectable
|
||||||
class PosterService {
|
class PosterService {
|
||||||
@Route.get('/')
|
@Route.get('/')
|
||||||
Future<Response> listPosters(Request request) async {
|
Future<Response> getRoot(Request request) async {
|
||||||
return Response.ok('deprecated poster endpoint. use POST /poster instead');
|
return Response.ok('deprecated poster endpoint. use POST /poster instead');
|
||||||
}
|
}
|
||||||
|
|
||||||
@Route.post('/')
|
@Route.post('/')
|
||||||
Future<Response> createPoster(Request request) async {
|
Future<Response> postRoot(Request request) async {
|
||||||
final payload = await request.readAsString();
|
final payload = await request.readAsString();
|
||||||
final body = jsonDecode(payload);
|
final body = jsonDecode(payload);
|
||||||
final params = posterSchema.safeParse(body);
|
final params = posterSchema.safeParse(body);
|
||||||
@@ -32,6 +32,5 @@ class PosterService {
|
|||||||
return Response.ok(jsonEncode(params.data), headers: {'Content-Type': 'application/json'});
|
return Response.ok(jsonEncode(params.data), headers: {'Content-Type': 'application/json'});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create router using the generate function defined in 'poster.g.dart'.
|
|
||||||
Router get router => _$PosterServiceRouter(this);
|
Router get router => _$PosterServiceRouter(this);
|
||||||
}
|
}
|
||||||
|
|||||||
25
server/cinema/lib/feature/root/root.service.dart
Normal file
25
server/cinema/lib/feature/root/root.service.dart
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import 'package:cinema/feature/websocket/websocket.service.dart';
|
||||||
|
import 'package:cinema/injectable.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
import 'package:shelf/shelf.dart';
|
||||||
|
import 'package:shelf_router/shelf_router.dart';
|
||||||
|
|
||||||
|
part 'root.service.g.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class RootService {
|
||||||
|
@Route.get('/')
|
||||||
|
Future<Response> getRoot(Request request) async {
|
||||||
|
final isWebSocket =
|
||||||
|
request.headers['connection']?.toLowerCase() == 'upgrade' &&
|
||||||
|
request.headers['upgrade']?.toLowerCase() == 'websocket';
|
||||||
|
|
||||||
|
if (isWebSocket) {
|
||||||
|
return getIt<WebSocketService>().handler(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Response.ok('REST response');
|
||||||
|
}
|
||||||
|
|
||||||
|
Router get router => _$RootServiceRouter(this);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user