Video Upload

This commit is contained in:
2025-11-16 22:40:55 +01:00
parent a3b8900047
commit 1f981376f6
14 changed files with 926 additions and 196 deletions
+16 -6
View File
@@ -136,7 +136,12 @@ class IgelCsvImportService {
// Alternativ: "schlanke" CSV nur mit Messwert-Spalten ohne igel_* → dann importieren wir *alle* Zeilen in diesen Igel.
final hasAnyIgelCol = (hIgelId >= 0) || (hIgelName >= 0);
final res = _ImportResult(rows: 0);
final res = _ImportResult(
rows: 0,
igelsCreated: 0,
igelsMatched: 0,
messwerteCreated: 0,
);
for (var r = 1; r < rows.length; r++) {
final row = rows[r];
@@ -258,7 +263,12 @@ class IgelCsvImportService {
};
final createdIgels = <String, Igel>{};
var res = _ImportResult(rows: rows.length - 1);
var res = _ImportResult(
rows: rows.length - 1,
igelsCreated: 0,
igelsMatched: 0,
messwerteCreated: 0,
);
// jede Datenzeile
for (var r = 1; r < rows.length; r++) {
@@ -422,10 +432,10 @@ class _ImportResult {
final List<String> errors;
_ImportResult({
this.rows = 0,
this.igelsCreated = 0,
this.igelsMatched = 0,
this.messwerteCreated = 0,
required this.rows,
required this.igelsCreated,
required this.igelsMatched,
required this.messwerteCreated,
List<String>? errors,
}) : errors = errors ?? [];
}
+12 -6
View File
@@ -17,8 +17,9 @@ class ShareService {
Uri.parse('$baseUrl/hedgehogs.php?r=/igel/$igelId/shares'),
headers: _auth(token),
);
if (r.statusCode != 200)
if (r.statusCode != 200) {
throw Exception('listShares failed (${r.statusCode}) ${r.body}');
}
final List data = jsonDecode(r.body) as List;
return data.map((e) => Share.fromJson(e as Map<String, dynamic>)).toList();
}
@@ -33,8 +34,9 @@ class ShareService {
headers: _auth(token, extra: {'Content-Type': 'application/json'}),
body: jsonEncode({'email': email, 'role': role}),
);
if (r.statusCode != 201)
if (r.statusCode != 201) {
throw Exception('invite failed (${r.statusCode}) ${r.body}');
}
}
Future<void> updateRole(
@@ -46,8 +48,9 @@ class ShareService {
headers: _auth(token, extra: {'Content-Type': 'application/json'}),
body: jsonEncode({'role': role}),
);
if (r.statusCode != 200)
if (r.statusCode != 200) {
throw Exception('updateRole failed (${r.statusCode}) ${r.body}');
}
}
Future<void> revoke({required int shareId, required String token}) async {
@@ -55,8 +58,9 @@ class ShareService {
Uri.parse('$baseUrl/hedgehogs.php?r=/shares/$shareId'),
headers: _auth(token),
);
if (r.statusCode != 200)
if (r.statusCode != 200) {
throw Exception('revoke failed (${r.statusCode}) ${r.body}');
}
}
Future<void> acceptInvite(
@@ -66,8 +70,9 @@ class ShareService {
headers: _auth(tokenJwt, extra: {'Content-Type': 'application/json'}),
body: jsonEncode({'token': inviteToken}),
);
if (r.statusCode != 200)
if (r.statusCode != 200) {
throw Exception('acceptInvite failed (${r.statusCode}) ${r.body}');
}
}
Future<List<SharedIgelItem>> listSharedWithMe({required String token}) async {
@@ -75,8 +80,9 @@ class ShareService {
Uri.parse('$baseUrl/hedgehogs.php?r=/me/shared'),
headers: _auth(token),
);
if (r.statusCode != 200)
if (r.statusCode != 200) {
throw Exception('listSharedWithMe failed (${r.statusCode}) ${r.body}');
}
final List data = jsonDecode(r.body) as List;
return data
.map((e) => SharedIgelItem.fromJson(e as Map<String, dynamic>))