feat: add a book by scanning

This commit is contained in:
Alzalia 2025-08-09 01:42:22 +02:00
parent 72fd0b66a9
commit 981dce5bfe
14 changed files with 264 additions and 59 deletions

View file

@ -3,19 +3,30 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:mobile_scanner/mobile_scanner.dart';
import 'package:seshat/data/repositories/book_instance_repository.dart';
import 'package:seshat/data/repositories/book_repository.dart';
import 'package:seshat/data/repositories/owner_repository.dart';
import 'package:seshat/domain/models/bal.dart';
import 'package:seshat/domain/models/book.dart';
import 'package:seshat/domain/models/book_instance.dart';
import 'package:seshat/domain/models/owner.dart';
import 'package:seshat/utils/command.dart';
import 'package:seshat/utils/result.dart';
class AddViewModel extends ChangeNotifier {
AddViewModel({required OwnerRepository ownerRepository})
: _ownerRepository = ownerRepository {
AddViewModel({
required OwnerRepository ownerRepository,
required BookRepository bookRepository,
required BookInstanceRepository bookInstanceRepository,
}) : _ownerRepository = ownerRepository,
_bookRepository = bookRepository,
_bookInstanceRepository = bookInstanceRepository {
load = Command0(_load)..execute();
}
final OwnerRepository _ownerRepository;
final BookRepository _bookRepository;
final BookInstanceRepository _bookInstanceRepository;
late final StreamSubscription sub;
/*
@ -87,15 +98,18 @@ class AddViewModel extends ChangeNotifier {
/// Sends an api request with a [bacorde], then gets the [Book] that was
/// either created or retrieved. Sens the [Book] back wrapped in a [Result].
Future<Result<Book>> scanBook(BarcodeCapture barcode) async {
return Result.ok(
Book(
author: "Patrick K. Dewdney",
ean: barcode.barcodes.first.rawValue!,
id: 56,
priceNew: "50 EUR",
title: "Les chiens et la charrue",
),
);
var ean = barcode.barcodes.first.rawValue!;
var result = await _bookRepository.getBookByEAN(ean);
return result;
}
Future<Result<BookInstance>> sendBook(
Book book,
Owner owner,
Bal bal,
double price,
) async {
return await _bookInstanceRepository.sendBook(book, owner, bal, price);
}
/// Sends an api request with