latest server code
Some checks failed
Build and Push Multi-Arch Docker Image / build-and-push (push) Failing after 38s

Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
2025-11-28 21:02:02 +01:00
parent 8f51ac8b24
commit 4defe266eb
10 changed files with 121 additions and 58 deletions

View File

@@ -1,5 +1,6 @@
import 'dart:io';
import 'package:cinema/common/env_module.dart';
import 'package:cinema/feature/version/version.dart';
import 'package:dio/dio.dart';
import 'package:injectable/injectable.dart';
@@ -11,29 +12,27 @@ const dioIMAGES = 'images';
abstract class DioModule {
@Named(dioAPI)
@lazySingleton
Dio get apiDio =>
Dio( // Der Getter selbst wird annotiert und gibt die Instanz zurück
BaseOptions(
baseUrl: 'https://api.themoviedb.org/3',
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
headers: {
'Authorization': 'Bearer ${Platform.environment['TMDB_API_KEY']}',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'Cinema Service (v${Version().appVersion})'
},
),
);
Dio apiDio(@Named(apiKey) String apiKey) => Dio(
BaseOptions(
baseUrl: 'https://api.themoviedb.org/3',
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
headers: {
'Authorization': 'Bearer $apiKey',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'Cinema Service (v${Version().appVersion})',
},
),
);
@Named(dioIMAGES)
@lazySingleton
Dio get imagesDio =>
Dio( // Der Getter selbst wird annotiert und gibt die Instanz zurück
BaseOptions(
baseUrl: 'https://image.tmdb.org/t/p/original',
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
),
);
Dio get imagesDio => Dio(
BaseOptions(
baseUrl: 'https://image.tmdb.org/t/p/original',
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
),
);
}

View File

@@ -0,0 +1,18 @@
import 'dart:io';
import 'package:injectable/injectable.dart';
import 'package:cinema/common/env_not_found_exception.dart';
const apiKey = "apiKey";
@module
abstract class EnvModule {
@lazySingleton
@Named(apiKey)
String get api_key {
final key = Platform.environment['TMDB_API_KEY'];
if (key == null || key.isEmpty) {
throw EnvNotFoundException('TMDB_API_KEY environment variable is missing.');
}
return key;
}
}

View File

@@ -0,0 +1,8 @@
class EnvNotFoundException implements Exception {
final String message;
EnvNotFoundException([this.message = '']);
@override
String toString() => 'EnvNotFoundException: $message';
}

View File

@@ -26,8 +26,11 @@ class TmDBImageLoader implements ImageLoader {
(movie) => Movie(
(b) => b
..id = movie.id
..title = movie.title
..poster = movie.posterPath
..backdrop = movie.backdropPath,
..backdrop = movie.backdropPath
..release = movie.releaseDate
..video = movie.video,
),
)
.toList() ??
@@ -38,12 +41,12 @@ class TmDBImageLoader implements ImageLoader {
@override
Future<bool> downloadImages(Movie movie) async {
await downloadImage(movie.poster, "cache/movie/${movie.id}/poster.png");
await downloadImage(movie.backdrop, "cache/movie/${movie.id}/backdrop.png");
await _downloadImage(movie.poster, "cache/movie/${movie.id}/poster.png");
await _downloadImage(movie.backdrop, "cache/movie/${movie.id}/backdrop.png");
return true;
}
Future<bool> downloadImage(String url, String filename) async {
Future<bool> _downloadImage(String url, String filename) async {
final file = File(filename);
if (await file.exists()) {
return false;

View File

@@ -8,6 +8,12 @@ abstract class Movie implements Built<Movie, MovieBuilder> {
int get id;
String get title;
DateTime get release;
bool get video;
String get poster;
String get backdrop;