made use of first class citizen objects as json validator functions
This commit is contained in:
@@ -14,7 +14,8 @@ class UserDto with _$UserDto {
|
||||
}) = _UserDto;
|
||||
|
||||
/// JSON-Serialisierung
|
||||
factory UserDto.fromJson(Map<String, dynamic> json) => _$UserDtoFromJson(json);
|
||||
factory UserDto.fromJson(Map<String, dynamic> json) =>
|
||||
_$UserDtoFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
|
||||
@@ -28,7 +28,7 @@ class ProjectTaskDtoMapper {
|
||||
));
|
||||
|
||||
TaskEither<IError, ProjectTaskUpdate> fromUpdateTo(
|
||||
ProjectTaskUpdateDto origin, String id) =>
|
||||
ProjectTaskUpdateDto origin, String id) =>
|
||||
TaskEither.of(ProjectTaskUpdate(
|
||||
id: id,
|
||||
name: origin.name,
|
||||
|
||||
@@ -22,8 +22,8 @@ class ProjectService {
|
||||
.findAll()
|
||||
.flatMap(mapper.listTo)
|
||||
.map((projects) => projects.map((project) => project.toJson()).toList())
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => Response.ok(jsonEncode(right)))
|
||||
.map(jsonEncode)
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@@ -32,35 +32,34 @@ class ProjectService {
|
||||
return projects
|
||||
.findById(projectId)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@Route.post('/')
|
||||
Future<Response> createProject(Request request) async {
|
||||
return requestToJson(request)
|
||||
.flatMap((json) =>
|
||||
validateJsonKeys(json, ['name', 'userId'])) // Add required fields
|
||||
.flatMap(validateJsonKeys(['name', 'userId'])) // Add required fields
|
||||
.flatMap((json) => decodeJson(json, ProjectCreateDto.fromJson))
|
||||
.flatMap(mapper.fromCreateTo)
|
||||
.flatMap(projects.create)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@Route.put('/<projectId>')
|
||||
Future<Response> updateProject(Request request, String projectId) async {
|
||||
return requestToJson(request)
|
||||
.flatMap((json) => validateJsonKeys(json, []))
|
||||
.flatMap(validateJsonKeys([]))
|
||||
.flatMap((json) => decodeJson(json, ProjectUpdateDto.fromJson))
|
||||
.flatMap((dto) => mapper.fromUpdateTo(dto, projectId))
|
||||
.flatMap(projects.update)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@@ -68,8 +67,9 @@ class ProjectService {
|
||||
Future<Response> deleteProject(Request request, String projectId) async {
|
||||
return projects
|
||||
.delete(projectId)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => Response.ok('project deleted'))
|
||||
.flatMap(mapper.to)
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
|
||||
@@ -22,8 +22,8 @@ class ProjectTaskService {
|
||||
.findAll()
|
||||
.flatMap(mapper.listTo)
|
||||
.map((tasks) => tasks.map((task) => task.toJson()).toList())
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => Response.ok(jsonEncode(right)))
|
||||
.map(jsonEncode)
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@@ -32,35 +32,34 @@ class ProjectTaskService {
|
||||
return tasks
|
||||
.findById(taskId)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@Route.post('/')
|
||||
Future<Response> createTask(Request request) async {
|
||||
return requestToJson(request)
|
||||
.flatMap((json) =>
|
||||
validateJsonKeys(json, ['name', 'projectId'])) // Add required fields
|
||||
.flatMap(validateJsonKeys(['name', 'projectId'])) // Add required fields
|
||||
.flatMap((json) => decodeJson(json, ProjectTaskCreateDto.fromJson))
|
||||
.flatMap(mapper.fromCreateTo)
|
||||
.flatMap(tasks.create)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@Route.put('/<taskId>')
|
||||
Future<Response> updateTask(Request request, String taskId) async {
|
||||
return requestToJson(request)
|
||||
.flatMap((json) => validateJsonKeys(json, []))
|
||||
.flatMap(validateJsonKeys([]))
|
||||
.flatMap((json) => decodeJson(json, ProjectTaskUpdateDto.fromJson))
|
||||
.flatMap((dto) => mapper.fromUpdateTo(dto, taskId))
|
||||
.flatMap(tasks.update)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@@ -68,8 +67,9 @@ class ProjectTaskService {
|
||||
Future<Response> deleteTask(Request request, String taskId) async {
|
||||
return tasks
|
||||
.delete(taskId)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => Response.ok('Task deleted'))
|
||||
.flatMap(mapper.to)
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
|
||||
@@ -23,4 +23,4 @@ final projectTaskServiceProvider = Provider<ProjectTaskService>((ref) {
|
||||
final timeEntryServiceProvider = Provider<TimeEntryService>((ref) {
|
||||
final database = ref.read(timeEntryProvider);
|
||||
return TimeEntryService(database);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -22,8 +22,8 @@ class TimeEntryService {
|
||||
.findAll()
|
||||
.flatMap(mapper.listTo)
|
||||
.map((entries) => entries.map((entry) => entry.toJson()).toList())
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => Response.ok(jsonEncode(right)))
|
||||
.map(jsonEncode)
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@@ -32,35 +32,35 @@ class TimeEntryService {
|
||||
return entries
|
||||
.findById(entryId)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@Route.post('/')
|
||||
Future<Response> createEntry(Request request) async {
|
||||
return requestToJson(request)
|
||||
.flatMap((json) => validateJsonKeys(
|
||||
json, ['startTime', 'endTime', 'userId', 'projectId']))
|
||||
.flatMap(
|
||||
validateJsonKeys(['startTime', 'endTime', 'userId', 'projectId']))
|
||||
.flatMap((json) => decodeJson(json, TimeEntryCreateDto.fromJson))
|
||||
.flatMap(mapper.fromCreateTo)
|
||||
.flatMap(entries.create)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@Route.put('/<entryId>')
|
||||
Future<Response> updateEntry(Request request, String entryId) async {
|
||||
return requestToJson(request)
|
||||
.flatMap((json) => validateJsonKeys(json, []))
|
||||
.flatMap(validateJsonKeys([]))
|
||||
.flatMap((json) => decodeJson(json, TimeEntryUpdateDto.fromJson))
|
||||
.flatMap((dto) => mapper.fromUpdateTo(dto, entryId))
|
||||
.flatMap(entries.update)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@@ -68,8 +68,8 @@ class TimeEntryService {
|
||||
Future<Response> deleteEntry(Request request, String entryId) async {
|
||||
return entries
|
||||
.delete(entryId)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => Response.ok('Entry deleted'))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
|
||||
@@ -22,8 +22,8 @@ class UserService {
|
||||
.findAll()
|
||||
.flatMap(mapper.listTo)
|
||||
.map((users) => users.map((user) => user.toJson()).toList())
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => Response.ok(jsonEncode(right)))
|
||||
.map(jsonEncode)
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@@ -32,35 +32,34 @@ class UserService {
|
||||
return users
|
||||
.findById(userId)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@Route.post('/')
|
||||
Future<Response> createUser(Request request) async {
|
||||
return requestToJson(request)
|
||||
.flatMap(
|
||||
(json) => validateJsonKeys(json, ['name', 'email', 'password']))
|
||||
.flatMap(validateJsonKeys(['name', 'email', 'password']))
|
||||
.flatMap((json) => decodeJson(json, UserCreateDto.fromJson))
|
||||
.flatMap(mapper.fromCreateTo)
|
||||
.flatMap(users.create)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@Route.put('/<userId>')
|
||||
Future<Response> updateUser(Request request, String userId) async {
|
||||
return requestToJson(request)
|
||||
.flatMap((json) => validateJsonKeys(json, []))
|
||||
.flatMap(validateJsonKeys([]))
|
||||
.flatMap((json) => decodeJson(json, UserUpdateDto.fromJson))
|
||||
.flatMap((dto) => mapper.fromUpdateTo(dto, userId))
|
||||
.flatMap(users.update)
|
||||
.flatMap(mapper.to)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => ResponseHelpers.jsonOk(right.toJson()))
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
@@ -68,8 +67,9 @@ class UserService {
|
||||
Future<Response> deleteUser(Request request, String userId) async {
|
||||
return users
|
||||
.delete(userId)
|
||||
.match((left) => ResponseHelpers.fromError(left),
|
||||
(right) => Response.ok('user deleted'))
|
||||
.flatMap(mapper.to)
|
||||
.map((dto) => dto.toJson())
|
||||
.toResponse()
|
||||
.run();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user