Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • car-app/appwrite-functions
1 result
Show changes
Showing
with 289 additions and 101 deletions
import 'package:api/converter/request_response/payment/team.dart';
import 'package:api/model/request/payment/equally_distributed.dart';
import 'package:api/model/response/payment/equally_distributed.dart';
class EquallyDistributedPaymentRequestResponseConverter {
static Map<String, dynamic> toResponseData(EquallyDistributedPaymentResponse response) {
return TeamPaymentRequestResponseConverter.toResponseData(response);
}
static EquallyDistributedPaymentRequest fromRequest(Map<String, dynamic> map) {
var teamPayment = TeamPaymentRequestResponseConverter.fromRequest(map);
return EquallyDistributedPaymentRequest(
id: teamPayment.id,
amount: teamPayment.amount,
teamId: teamPayment.teamId,
paidBy: teamPayment.paidBy,
);
}
}
import 'package:api/model/payment/payment.dart';
import 'package:api/model/response/payment/payment.dart';
import 'package:lib/lib.dart';
extension PaymentRequestResponseConverter on Payment {
class PaymentRequestResponseConverter {
static const String amountRequestResponseFieldName = "amount";
static const String paidByRequestResponseFieldName = "paidBy";
static const String createdAtRequestResponseFieldName = "timeAdded";
Map<String, dynamic> toResponseData() {
static Map<String, dynamic> toResponseData(PaymentResponse response) {
return {
RequestResponseVariables.idFieldName: id,
amountRequestResponseFieldName: amount,
paidByRequestResponseFieldName: paidBy,
createdAtRequestResponseFieldName: createdAt.toIso8601String(),
RequestResponseVariables.idFieldName: response.id,
amountRequestResponseFieldName: response.amount,
paidByRequestResponseFieldName: response.paidBy,
createdAtRequestResponseFieldName: response.createdAt.toIso8601String(),
};
}
}
import 'package:api/converter/payment/request_response_converter.dart';
import 'package:api/model/payment/payment.dart';
import 'package:api/model/payment/team.dart';
import 'package:api/converter/request_response/payment/payment.dart';
import 'package:api/model/request/payment/team.dart';
import 'package:api/model/response/payment/team.dart';
import 'package:lib/lib.dart';
extension TeamPaymentRequestResponseConverter on TeamPayment {
class TeamPaymentRequestResponseConverter {
static const String teamIdRequestResponseFieldName = "teamId";
Map<String, dynamic> toResponseData() {
static Map<String, dynamic> toResponseData(TeamPaymentResponse response) {
return {
teamIdRequestResponseFieldName: teamId,
...(this as Payment).toResponseData(),
teamIdRequestResponseFieldName: response.teamId,
...PaymentRequestResponseConverter.toResponseData(response),
};
}
static TeamPayment fromRequest(Map<String, dynamic> map) {
return TeamPayment(
static TeamPaymentRequest fromRequest(Map<String, dynamic> map) {
return TeamPaymentRequest(
id: getOptionalMapItem(RequestResponseVariables.idFieldName, map),
teamId: getRequiredMapItem(teamIdRequestResponseFieldName, map),
amount: getRequiredMapItem(PaymentRequestResponseConverter.amountRequestResponseFieldName, map),
createdAt: DateTime.parse(getRequiredMapItem(PaymentRequestResponseConverter.createdAtRequestResponseFieldName, map)),
paidBy: getRequiredMapItem(PaymentRequestResponseConverter.paidByRequestResponseFieldName, map),
);
}
......
import 'package:api/converter/payment/request_response_converter.dart';
import 'package:api/model/payment/payment.dart';
import 'package:api/model/payment/user_to_user.dart';
import 'package:api/converter/request_response/payment/payment.dart';
import 'package:api/model/request/payment/user_to_user.dart';
import 'package:api/model/response/payment/user_to_user.dart';
import 'package:lib/lib.dart';
extension UserToUserPaymentRequestResponseConverter on UserToUserPayment {
class UserToUserPaymentRequestResponseConverter {
static const String paidToRequestResponseFieldName = "paidTo";
Map<String, dynamic> toResponseData() {
static Map<String, dynamic> toResponseData(UserToUserPaymentResponse response) {
return {
paidToRequestResponseFieldName: paidTo,
...(this as Payment).toResponseData()
paidToRequestResponseFieldName: response.paidTo,
...PaymentRequestResponseConverter.toResponseData(response),
};
}
static UserToUserPayment fromRequest(Map<String, dynamic> map) {
return UserToUserPayment(
static UserToUserPaymentRequest fromRequest(Map<String, dynamic> map) {
return UserToUserPaymentRequest(
id: getOptionalMapItem(RequestResponseVariables.idFieldName, map),
amount: getRequiredMapItem(PaymentRequestResponseConverter.amountRequestResponseFieldName, map),
createdAt: DateTime.parse(getRequiredMapItem(PaymentRequestResponseConverter.createdAtRequestResponseFieldName, map)),
paidBy: getRequiredMapItem(PaymentRequestResponseConverter.paidByRequestResponseFieldName, map),
paidTo: getRequiredMapItem(paidToRequestResponseFieldName, map)
);
......
import 'package:api/model/request/point.dart';
import 'package:api/model/response/point.dart';
import 'package:lib/lib.dart';
import 'package:api/model/point.dart';
extension PointRequestResponseConverter on Point {
class PointRequestResponseConverter {
static const String latitudeRequestResponseFieldName = "latitude";
static const String longitudeRequestResponseFieldName = "longitude";
Map<String, dynamic> toResponseData() {
static Map<String, dynamic> toResponseData(PointResponse response) {
return {
RequestResponseVariables.idFieldName: id,
latitudeRequestResponseFieldName: latitude,
longitudeRequestResponseFieldName: longitude,
RequestResponseVariables.idFieldName: response.id,
latitudeRequestResponseFieldName: response.latitude,
longitudeRequestResponseFieldName: response.longitude,
};
}
static Point fromRequest(Map<String, dynamic> map) {
return Point(
static PointRequest fromRequest(Map<String, dynamic> map) {
return PointRequest(
id: getOptionalMapItem(RequestResponseVariables.idFieldName, map),
latitude: getRequiredMapItem(latitudeRequestResponseFieldName, map),
longitude: getRequiredMapItem(longitudeRequestResponseFieldName, map),
......
import 'package:api/model/request/route.dart';
import 'package:api/model/response/route.dart';
import 'package:lib/lib.dart';
import 'package:api/converter/point/request_response_converter.dart';
import 'package:api/model/route.dart';
extension RouteRequestResponseConverter on Route {
class RouteRequestResponseConverter {
static const String userIdRequestResponseFieldName = "userId";
static const String teamIdRequestResponseFieldName = "teamId";
static const String pointsRequestResponseFieldName = "points";
static const String startTimeRequestResponseFieldName = "startTime";
static const String endTimeRequestResponseFieldName = "endTime";
Map<String, dynamic> toResponseData() {
static Map<String, dynamic> toResponseData(RouteResponse response) {
return {
RequestResponseVariables.idFieldName: id,
pointsRequestResponseFieldName : points.map((e) => e.toResponseData()).toList(growable: false),
userIdRequestResponseFieldName: userId,
teamIdRequestResponseFieldName: teamId,
RequestResponseVariables.idFieldName: response.id,
pointsRequestResponseFieldName : response.pointIds.toList(),
userIdRequestResponseFieldName: response.userId,
teamIdRequestResponseFieldName: response.teamId,
};
}
static Route fromRequest(Map<String, dynamic> map, String userId) {
return Route(
static RouteRequest fromRequest(Map<String, dynamic> map) {
return RouteRequest(
id: getOptionalMapItem(RequestResponseVariables.idFieldName, map),
points: getRequiredMapItem<Iterable>(pointsRequestResponseFieldName, map).map((e) => PointRequestResponseConverter.fromRequest(e)).toList(growable: false),
userId: userId,
pointIds: getRequiredMapItem<Iterable>(pointsRequestResponseFieldName, map).map((e) => e as String),
userId: getRequiredMapItem(userIdRequestResponseFieldName, map),
teamId: getOptionalMapItem(teamIdRequestResponseFieldName, map),
startTime: DateTime.parse(getRequiredMapItem(startTimeRequestResponseFieldName, map)),
endTime: DateTime.parse(getRequiredMapItem(endTimeRequestResponseFieldName, map)),
);
}
}
\ No newline at end of file
}
import 'package:api/model/team.dart';
extension TeamRequestResponseConverter on Team {
class TeamRequestResponseConverter {
static const String teamIdResponseFieldName = "teamId";
static const String teamNameResponseFieldName = "teamName";
Map<String, dynamic> toResponseData() {
static Map<String, dynamic> toResponseData(Team response) {
return {
teamIdResponseFieldName: id,
teamNameResponseFieldName: name,
teamIdResponseFieldName: response.id,
teamNameResponseFieldName: response.name,
};
}
}
import 'package:lib/lib.dart';
import 'package:api/model/user.dart';
extension UserRequestResponseConverter on User {
class UserRequestResponseConverter {
static const String emailRequestResponseFieldName = "email";
static const String nameRequestResponseFieldName = "name";
Map<String, dynamic> toResponseData() {
static Map<String, dynamic> toResponseData(User response) {
return {
RequestResponseVariables.idFieldName: id,
emailRequestResponseFieldName: email,
nameRequestResponseFieldName: name,
RequestResponseVariables.idFieldName: response.id,
emailRequestResponseFieldName: response.email,
nameRequestResponseFieldName: response.name,
};
}
}
import 'package:api/model/request/calendar_event.dart';
import 'package:api/model/response/calendar_event.dart';
import 'package:lib/lib.dart';
import 'package:api/model/calendar_event.dart';
class CalendarEventDatabase extends BaseDatabase<CalendarEvent, CalendarEvent> {
class CalendarEventDatabase extends BaseDatabase<CalendarEventRequest, CalendarEventResponse> {
@override
String get collectionId => "6619bc4edf8000989821";
final String collectionId = "6619bc4edf8000989821";
@override
String get databaseId => "65fddef523b653ce0952";
final String databaseId = "65fddef523b653ce0952";
CalendarEventDatabase({required super.host, required super.projectId, required super.apiKey, required super.itemToDbMap, required super.itemFromDbMap});
CalendarEventDatabase({
required super.host,
required super.projectId,
required super.apiKey,
required super.itemToDbMap,
required super.itemFromDbMap,
});
}
import 'package:api/model/payment/driven_distance_distributed.dart';
import 'package:api/model/request/payment/driven_distance_distributed.dart';
import 'package:api/model/response/payment/driven_distance_distributed.dart';
import 'package:lib/lib.dart';
class DrivenDistanceDistributedPaymentDatabase extends BaseDatabase<DrivenDistanceDistributedPayment, DrivenDistanceDistributedPayment> {
class DrivenDistanceDistributedPaymentDatabase extends BaseDatabase<DrivenDistanceDistributedPaymentRequest, DrivenDistanceDistributedPaymentResponse> {
@override
final String collectionId = "662e9e3cace23e849ddf";
......@@ -9,5 +10,11 @@ class DrivenDistanceDistributedPaymentDatabase extends BaseDatabase<DrivenDistan
final String databaseId = "65fddef523b653ce0952";
DrivenDistanceDistributedPaymentDatabase({required super.host, required super.projectId, required super.apiKey, required super.itemFromDbMap, required super.itemToDbMap});
DrivenDistanceDistributedPaymentDatabase({
required super.host,
required super.projectId,
required super.apiKey,
required super.itemFromDbMap,
required super.itemToDbMap,
});
}
import 'package:api/model/payment/equally_distributed.dart';
import 'package:api/model/request/payment/equally_distributed.dart';
import 'package:api/model/response/payment/equally_distributed.dart';
import 'package:lib/lib.dart';
class EquallyDistributedPaymentDatabase extends BaseDatabase<EquallyDistributedPayment, EquallyDistributedPayment> {
class EquallyDistributedPaymentDatabase extends BaseDatabase<EquallyDistributedPaymentRequest, EquallyDistributedPaymentResponse> {
@override
final String collectionId = "662eaa4f96d1940ca5d6";
@override
final String databaseId = "65fddef523b653ce0952";
EquallyDistributedPaymentDatabase({required super.host, required super.projectId, required super.apiKey, required super.itemFromDbMap, required super.itemToDbMap});
EquallyDistributedPaymentDatabase({
required super.host,
required super.projectId,
required super.apiKey,
required super.itemFromDbMap,
required super.itemToDbMap,
});
}
import 'package:api/model/payment/user_to_user.dart';
import 'package:api/model/request/payment/user_to_user.dart';
import 'package:api/model/response/payment/user_to_user.dart';
import 'package:lib/lib.dart';
class UserToUserPaymentDatabase extends BaseDatabase<UserToUserPayment, UserToUserPayment> {
class UserToUserPaymentDatabase extends BaseDatabase<UserToUserPaymentRequest, UserToUserPaymentResponse> {
@override
final String collectionId = "662e3e606cc2ebf69b53";
@override
final String databaseId = "65fddef523b653ce0952";
UserToUserPaymentDatabase({required super.host, required super.projectId, required super.apiKey, required super.itemFromDbMap, required super.itemToDbMap});
UserToUserPaymentDatabase({
required super.host,
required super.projectId,
required super.apiKey,
required super.itemFromDbMap,
required super.itemToDbMap,
});
}
import 'package:api/model/request/point.dart';
import 'package:api/model/response/point.dart';
import 'package:dart_appwrite/dart_appwrite.dart';
import 'package:lib/lib.dart';
import 'package:api/converter/point/db_converter.dart';
import 'package:api/model/point.dart';
class PointDatabase extends BaseDatabase<Point, Point> {
class PointDatabase extends BaseDatabase<PointRequest, PointResponse> {
final String latitudeDbFieldName;
final String longitudeDbFieldName;
@override
String get databaseId => "65fddef523b653ce0952";
final String databaseId = "65fddef523b653ce0952";
@override
String get collectionId => "65fddefc7f63cb43b15b";
final String collectionId = "65fddefc7f63cb43b15b";
PointDatabase({
required super.host,
required super.projectId,
required super.apiKey,
required super.itemToDbMap,
required super.itemFromDbMap
required super.itemFromDbMap,
required this.latitudeDbFieldName,
required this.longitudeDbFieldName,
});
@override
Future<Point> create(Point item) async {
Future<PointResponse> create(PointRequest item) async {
var queries = List.of([
Query.equal(PointDbConverter.latitudeDbFieldName, item.latitude),
Query.equal(PointDbConverter.longitudeDbFieldName, item.longitude),
Query.equal(latitudeDbFieldName, item.latitude),
Query.equal(longitudeDbFieldName, item.longitude),
]);
var equalItems = await getFromQueries(queries).toList();
......@@ -33,12 +38,12 @@ class PointDatabase extends BaseDatabase<Point, Point> {
}
@override
Future<Point> update(Point item) {
Future<PointResponse> update(PointRequest item) {
throw DbActionForbiddenException("update", "point");
}
@override
Future<Point> delete(String id) {
Future<PointResponse> delete(String id) {
throw DbActionForbiddenException("delete", "point"); // Maybe deletion is possible
}
}
import 'package:api/model/request/route.dart';
import 'package:api/model/response/route.dart';
import 'package:lib/lib.dart';
import 'package:api/model/point.dart';
import 'package:api/database/point.dart';
import 'package:api/model/route.dart';
class RouteDatabase extends BaseDatabase<Route, Route> {
class RouteDatabase extends BaseDatabase<RouteRequest, RouteResponse> {
final PointDatabase pointDatabase;
@override
......@@ -20,23 +20,4 @@ class RouteDatabase extends BaseDatabase<Route, Route> {
required super.itemToDbMap,
required super.itemFromDbMap,
});
@override
Future<Route> create(Route item) async {
var points = <Point>[];
for (var point in item.points) {
// must be awaited instead of Future.wait to ensure order
points.add(await pointDatabase.create(point));
}
var route = Route(
id: item.id,
points: points,
userId: item.userId,
teamId: item.teamId,
startTime: item.startTime,
endTime: item.endTime,
);
return super.create(route);
}
}
......@@ -4,33 +4,34 @@ import 'package:api/api_endpoint/calendar_event.dart';
import 'package:api/api_endpoint/payment/driven_distance_distributed.dart';
import 'package:api/api_endpoint/payment/equally_distributed.dart';
import 'package:api/api_endpoint/payment/user_to_user.dart';
import 'package:api/converter/payment/user_to_user_payment.dart/request_response_converter.dart';
import 'package:api/converter/db_converter/calendar_event.dart';
import 'package:api/converter/db_converter/payment/equally_distributed.dart';
import 'package:api/converter/db_converter/payment/user_to_user.dart';
import 'package:api/converter/db_converter/point.dart';
import 'package:api/converter/db_converter/route.dart';
import 'package:api/converter/request_response/calendar_event.dart';
import 'package:api/converter/request_response/debt.dart';
import 'package:api/converter/request_response/payment/driven_distance_distributed.dart';
import 'package:api/converter/request_response/payment/equally_distributed.dart';
import 'package:api/converter/request_response/payment/user_to_user.dart';
import 'package:api/converter/request_response/point.dart';
import 'package:api/converter/request_response/user.dart';
import 'package:api/converter/request_response/route.dart';
import 'package:api/converter/request_response/team.dart';
import 'package:api/database/calendar_event.dart';
import 'package:api/converter/calendar_event/db_converter.dart';
import 'package:api/converter/calendar_event/request_response_converter.dart';
import 'package:api/converter/debt/request_response_converter.dart';
import 'package:api/converter/payment/driven_distance_distributed/db_converter.dart';
import 'package:api/converter/payment/driven_distance_distributed/request_response_converter.dart';
import 'package:api/converter/payment/equally_distributed_payment/db_converter.dart';
import 'package:api/converter/payment/equally_distributed_payment/request_response_converter.dart';
import 'package:api/converter/payment/user_to_user_payment.dart/db_converter.dart';
import 'package:api/converter/point/db_converter.dart';
import 'package:api/converter/point/request_response_converter.dart';
import 'package:api/converter/route/db_converter.dart';
import 'package:api/converter/route/request_response_converter.dart';
import 'package:api/converter/team/request_response_converter.dart';
import 'package:api/converter/user/request_response_converter.dart';
import 'package:api/converter/db_converter/payment/driven_distance_distributed.dart';
import 'package:api/api_endpoint/debt.dart';
import 'package:api/model/response/payment/driven_distance_distributed.dart';
import 'package:api/model/response/payment/equally_distributed.dart';
import 'package:api/model/response/payment/user_to_user.dart';
import 'package:api/model/team.dart';
import 'package:api/model/user.dart';
import 'package:api/service/debt.dart';
import 'package:api/database/payment/driven_distance_distributed.dart';
import 'package:api/database/payment/equally_distributed.dart';
import 'package:api/database/payment/user_to_user.dart';
import 'package:api/model/payment/driven_distance_distributed.dart';
import 'package:api/model/payment/equally_distributed.dart';
import 'package:api/model/payment/user_to_user.dart';
import 'package:api/api_endpoint/team.dart';
import 'package:api/service/distance_calculator.dart';
import 'package:api/service/membership_service.dart';
import 'package:api/service/team_service.dart';
import 'package:lib/lib.dart';
......@@ -63,8 +64,10 @@ Future<dynamic> main(final context) async {
host: host,
projectId: projectId,
apiKey: apiKey,
itemToDbMap: (p) => p.toDbData(),
itemToDbMap: PointDbConverter.toDbData,
itemFromDbMap: PointDbConverter.fromDbData,
latitudeDbFieldName: PointDbConverter.latitudeDbFieldName,
longitudeDbFieldName: PointDbConverter.longitudeDbFieldName,
);
var routeDatabase = RouteDatabase(
......@@ -72,7 +75,7 @@ Future<dynamic> main(final context) async {
projectId: projectId,
apiKey: apiKey,
pointDatabase: pointDatabase,
itemToDbMap: (r) => r.toDbData(),
itemToDbMap: RouteDbConverter.toDbData,
itemFromDbMap: RouteDbConverter.fromDbData,
);
......@@ -80,7 +83,7 @@ Future<dynamic> main(final context) async {
host: host,
projectId: projectId,
apiKey: apiKey,
itemToDbMap: (ce) => ce.toDbData(),
itemToDbMap: CalendarEventDbConverter.toDbData,
itemFromDbMap: CalendarEventDbConverter.fromDbData,
);
......@@ -89,7 +92,7 @@ Future<dynamic> main(final context) async {
projectId:
projectId,
apiKey: apiKey,
itemToDbMap: (e) => e.toDbData(),
itemToDbMap: DrivenDistanceDistributedPaymentDbConverter.toDbData,
itemFromDbMap: DrivenDistanceDistributedPaymentDbConverter.fromDbData,
);
......@@ -97,25 +100,27 @@ Future<dynamic> main(final context) async {
host: host,
projectId: projectId,
apiKey: apiKey,
itemToDbMap: EquallyDistributedPaymentDbConverter.toDbData,
itemFromDbMap: EquallyDistributedPaymentDbConverter.fromDbData,
itemToDbMap: (e) => e.toDbData(),
);
var userToUserPaymentDatabase = UserToUserPaymentDatabase(
host: host,
projectId: projectId,
apiKey: apiKey,
itemToDbMap: UserToUserPaymentDbConverter.toDbData,
itemFromDbMap: UserToUserPaymentDbConverter.fromDbData,
itemToDbMap: (e) => e.toDbData(),
);
var teamService = TeamService(host: host, projectId: projectId, apiKey: apiKey);
var userService = UserService(host: host, projectId: projectId, apiKey: apiKey);
var membershipService = MembershipService(host: host, projectId: projectId, apiKey: apiKey, teamService: teamService, userService: userService);
var distanceService = DistanceService(getPointById: pointDatabase.get);
var debtService = DebtService(
getMembershipsByTeamId: membershipService.getTeamMemberships,
getRouteById: routeDatabase.get,
getDistance: distanceService.calculateDistance,
getUserToUserPayments: (userId) => getUserToUserPayments(userId, userToUserPaymentDatabase),
getEquallyDistributedPayments: (userId) => getEquallyDistributedPayments(userId, membershipService, equallyDistributedPaymentDatabase),
getDrivenDistanceDistributedPayments: (userId) => getDrivenDistanceDistributedPayments(userId, membershipService, drivenDistanceDistributedPaymentDatabase),
......@@ -131,7 +136,7 @@ Future<dynamic> main(final context) async {
apiEndpoint = PointApiEndpoint(
database: pointDatabase,
itemFromRequest: PointRequestResponseConverter.fromRequest,
itemToResponse: (p) => p.toResponseData()
itemToResponse: PointRequestResponseConverter.toResponseData,
);
break;
......@@ -143,8 +148,8 @@ Future<dynamic> main(final context) async {
database: routeDatabase,
requestingUser: requestingUser,
requestingUserTeams: requestingUserTeams,
itemFromRequest: (m) => RouteRequestResponseConverter.fromRequest(m, requestingUser.id),
itemToResponse: (r) => r.toResponseData(),
itemFromRequest: RouteRequestResponseConverter.fromRequest,
itemToResponse: RouteRequestResponseConverter.toResponseData,
);
break;
......@@ -153,8 +158,9 @@ Future<dynamic> main(final context) async {
apiEndpoint = TeamApiEndpoint(
requestingUser: requestingUser,
getTeamsOfUser: (user) => getUserTeams(user.id, membershipService),
itemToResponse: (e) => e.toResponseData(),
getTeamById: teamService.getTeam,
isUserInTeam: (user, team) => isUserInTeam(user, team, membershipService),
itemToResponse: TeamRequestResponseConverter.toResponseData,
);
break;
......@@ -164,10 +170,10 @@ Future<dynamic> main(final context) async {
apiEndpoint = CalendarEventApiEndpoint(
database: calendarEventDatabase,
itemFromRequest: (m) => CalendarEventRequestResponseConverter.fromRequest(m, requestingUser.id),
itemToResponse: (ce) => ce.toResponseData(),
requestingUser: requestingUser,
requestingUserTeams: requestingUserTeams,
itemFromRequest: CalendarEventRequestResponseConverter.fromRequest,
itemToResponse: CalendarEventRequestResponseConverter.toResponseData,
);
break;
......@@ -177,7 +183,7 @@ Future<dynamic> main(final context) async {
requestingUser: requestingUser,
getTeamsOfUser: (user) => getUserTeams(user.id, membershipService),
getUserFromId: userService.getUser,
itemToResponse: (e) => e.toResponseData(),
itemToResponse: UserRequestResponseConverter.toResponseData,
);
break;
......@@ -185,11 +191,11 @@ Future<dynamic> main(final context) async {
var requestingUser = await getRequestingUser(context, userService);
apiEndpoint = DrivenDistanceDistributedPaymentApiEndpoint(
database: drivenDistanceDistributedPaymentDatabase,
itemFromRequest: DrivenDistanceDistributedPaymentRequestResponseConverter.fromRequest,
itemToResponse: (e) => e.toResponseData(),
requestingUser: requestingUser,
requestingUserTeams: await getUserTeams(requestingUser.id, membershipService).toList(),
getRouteFromId: routeDatabase.get
getRouteFromId: routeDatabase.get,
itemFromRequest: DrivenDistanceDistributedPaymentRequestResponseConverter.fromRequest,
itemToResponse: DrivenDistanceDistributedPaymentRequestResponseConverter.toResponseData,
);
break;
......@@ -200,7 +206,7 @@ Future<dynamic> main(final context) async {
requestingUser: requestingUser,
requestingUserTeams: await getUserTeams(requestingUser.id, membershipService).toList(),
itemFromRequest: EquallyDistributedPaymentRequestResponseConverter.fromRequest,
itemToResponse: (e) => e.toResponseData(),
itemToResponse: EquallyDistributedPaymentRequestResponseConverter.toResponseData,
);
break;
......@@ -210,7 +216,7 @@ Future<dynamic> main(final context) async {
database: userToUserPaymentDatabase,
requestingUser: requestingUser,
itemFromRequest: UserToUserPaymentRequestResponseConverter.fromRequest,
itemToResponse: (e) => e.toResponseData(),
itemToResponse: UserToUserPaymentRequestResponseConverter.toResponseData,
);
break;
......@@ -218,8 +224,8 @@ Future<dynamic> main(final context) async {
var requestingUser = await getRequestingUser(context, userService);
apiEndpoint = DebtApiEndpoint(
debtService: debtService,
itemToResponse: (e) => e.toResponseData(),
requestingUser: requestingUser,
itemToResponse: DebtRequestResponseConverter.toResponseData,
);
break;
......@@ -240,16 +246,20 @@ Stream<Team> getUserTeams(String userId, MembershipService membershipService) {
return membershipService.getUserMemberships(userId).map((e) => e.team);
}
Stream<UserToUserPayment> getUserToUserPayments(String userId, UserToUserPaymentDatabase userToUserPaymentDatabase) {
Stream<UserToUserPaymentResponse> getUserToUserPayments(String userId, UserToUserPaymentDatabase userToUserPaymentDatabase) {
return userToUserPaymentDatabase.getAll().where((e) => e.paidBy == userId || e.paidTo == userId);
}
Stream<EquallyDistributedPayment> getEquallyDistributedPayments(String userId, MembershipService membershipService, EquallyDistributedPaymentDatabase equallyDistributedPaymentDatabase) async* {
Stream<EquallyDistributedPaymentResponse> getEquallyDistributedPayments(String userId, MembershipService membershipService, EquallyDistributedPaymentDatabase equallyDistributedPaymentDatabase) async* {
var userTeamIds = await membershipService.getUserMemberships(userId).map((e) => e.team.id).toList();
yield* equallyDistributedPaymentDatabase.getAll().where((e) => userTeamIds.contains(e.teamId)); // Would be nice with queries, but appwrite does not support nested queries
}
Stream<DrivenDistanceDistributedPayment> getDrivenDistanceDistributedPayments(String userId, MembershipService membershipService, DrivenDistanceDistributedPaymentDatabase drivenDistanceDistributedPaymentDatabase) async* {
Stream<DrivenDistanceDistributedPaymentResponse> getDrivenDistanceDistributedPayments(String userId, MembershipService membershipService, DrivenDistanceDistributedPaymentDatabase drivenDistanceDistributedPaymentDatabase) async* {
var userTeamIds = await membershipService.getUserMemberships(userId).map((e) => e.team.id).toList();
yield* drivenDistanceDistributedPaymentDatabase.getAll().where((e) => userTeamIds.contains(e.teamId)); // Would be nice with queries, but appwrite does not support nested queries
}
Future<bool> isUserInTeam(User user, Team team, MembershipService membershipService) {
return membershipService.getUserMemberships(user.id).any((e) => e.team.id == team.id);
}
abstract class CalendarEvent {
String? get id;
String get teamId;
String get title;
String? get description;
DateTime get start;
DateTime get end;
String get userId;
}
import 'package:api/model/interface/payment/team.dart';
abstract class DrivenDistanceDistributedPayment extends TeamPayment {
Iterable<String> get routeIds;
}
import 'package:api/model/interface/payment/team.dart';
abstract class EquallyDistributedPayment extends TeamPayment {}
abstract class Payment {
String? get id;
num get amount;
String get paidBy;
}
import 'package:api/model/interface/payment/payment.dart';
abstract class TeamPayment extends Payment {
String get teamId;
}