-
Andri Joos authored69386ac7
equally_distributed.dart 2.07 KiB
import 'dart:async';
import 'package:api/model/payment/equally_distributed.dart';
import 'package:api/model/team.dart';
import 'package:api/model/user.dart';
import 'package:lib/lib.dart';
class EquallyDistributedApiEndpoint extends CheckedDbApiEndpoint<EquallyDistributedPayment, EquallyDistributedPayment> {
final User requestingUser;
final Iterable<Team> requestingUserTeams;
@override
Future<bool> Function(EquallyDistributedPayment) get createItemAllowed => _createItemAllowed;
@override
Future<bool> Function(EquallyDistributedPayment) get getItemAllowed => _getItemAllowed;
@override
Future<bool> Function(EquallyDistributedPayment, EquallyDistributedPayment) get updateItemAllowed => _updateItemAllowed;
@override
Future<bool> Function(EquallyDistributedPayment) get deleteItemAllowed => _deleteItemAllowed;
EquallyDistributedApiEndpoint({
required super.database,
required super.itemFromRequest,
required super.itemToResponse,
required this.requestingUser,
required this.requestingUserTeams,
});
Future<bool> _createItemAllowed(EquallyDistributedPayment item) {
return Future.value(
_isUserOwner(item)
&& _isUserInTeam(item)
&& _isAmountOk(item)
);
}
Future<bool> _getItemAllowed(EquallyDistributedPayment item) {
return Future.value(
_isUserInTeam(item)
);
}
Future<bool> _updateItemAllowed(EquallyDistributedPayment item, EquallyDistributedPayment originalItem) {
return Future.value(
item.id == originalItem.id
&& _isUserOwner(item)
&& _isUserOwner(originalItem)
&& _isUserInTeam(item)
&& _isAmountOk(item)
);
}
Future<bool> _deleteItemAllowed(EquallyDistributedPayment item) {
return Future.value(
_isUserOwner(item)
);
}
bool _isUserOwner(EquallyDistributedPayment item) {
return item.paidBy == requestingUser.id;
}
bool _isUserInTeam(EquallyDistributedPayment item) {
return requestingUserTeams.any((team) => team.id == item.teamId);
}
bool _isAmountOk(EquallyDistributedPayment item) {