Skip to content
Snippets Groups Projects
Commit bd3f44f2 authored by Andri Joos's avatar Andri Joos :blush:
Browse files

add membership api endpoint

parent ba5f29c1
No related branches found
No related tags found
Pipeline #6111 passed with stage
in 41 seconds
import 'package:api/converter/request_response/membership.dart';
import 'package:api/model/membership.dart';
import 'package:api/model/user.dart';
import 'package:lib/lib.dart';
class MembershipApiEndpoint extends ApiEndpoint {
static const String teamIdFieldName = "teamId";
static const String userIdFieldName = "userId";
final User requestingUser;
final Stream<Membership> Function(String) getMembershipsByUserId;
final Stream<Membership> Function(String) getMembershipsByTeamId;
final Map<String, dynamic> Function(Membership) itemToResponse = MembershipRequestResponseConverter.toResponseData;
MembershipApiEndpoint({
required this.requestingUser,
required this.getMembershipsByUserId,
required this.getMembershipsByTeamId,
});
@override
Future<Map<String, dynamic>> handleDelete(context) {
throw ApiActionForbiddenException("delete", "membership");
}
@override
Future<Map<String, dynamic>> handleGet(context) async {
Stream<Membership> memberships;
if(ApiHelper.hasBodyField(context, teamIdFieldName)) {
var requestingUserTeamIds = await getMembershipsByUserId(requestingUser.id).map((e) => e.team.id).toList();
var teamId = ApiHelper.fieldFromRequestBody<String>(context, teamIdFieldName);
memberships = getMembershipsByTeamId(teamId).where((e) => requestingUserTeamIds.contains(e.team.id));
}
else {
var userId = ApiHelper.fieldFromRequestBody<String>(context, userIdFieldName);
if(userId != requestingUser.id) {
throw UnauthorizedException();
}
memberships = getMembershipsByUserId(userId);
}
return listResponse(context, await memberships.toList(), itemToResponse);
}
@override
Future<Map<String, dynamic>> handlePost(context) {
throw ApiActionForbiddenException("post", "membership");
}
@override
Future<Map<String, dynamic>> handlePut(context) {
throw ApiActionForbiddenException("put", "membership");
}
}
import 'package:api/model/membership.dart';
class MembershipRequestResponseConverter {
static const String userIdRequestResponseFieldName = "userId";
static const String teamIdRequestResponseFieldName = "teamId";
static Map<String, dynamic> toResponseData(Membership response) {
return {
userIdRequestResponseFieldName: response.user.id,
teamIdRequestResponseFieldName: response.team.id,
};
}
}
import 'dart:async';
import 'dart:io';
import 'package:api/api_endpoint/calendar_event.dart';
import 'package:api/api_endpoint/membership.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';
......@@ -38,6 +39,7 @@ const String drivenDistanceDistributedPaymentApiEndpoint = "/payment/team/driven
const String equallyDistributedPaymentApiEndpoint = "/payment/team/equal";
const String userToUserPaymentApiEndpoint = "/payment/user";
const String debtApiEndpoint = "/debt";
const String membershipApiEndpoint = "/membership";
Future<dynamic> main(final context) async {
final host = "https://${context.req.host}/v1";
......@@ -184,6 +186,14 @@ Future<dynamic> main(final context) async {
);
break;
case membershipApiEndpoint:
var requestingUser = await getRequestingUser(context, userService);
apiEndpoint = MembershipApiEndpoint(
requestingUser: requestingUser,
getMembershipsByTeamId: membershipService.getTeamMemberships,
getMembershipsByUserId: membershipService.getUserMemberships,
);
default:
throw HttpException("Path $requestPath not found", uri: Uri.parse(context.req.url));
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment