diff --git a/lib/api/project.dart b/lib/api/project.dart new file mode 100644 index 0000000..04523e2 --- /dev/null +++ b/lib/api/project.dart @@ -0,0 +1,41 @@ +import 'package:vikunja_app/api/service.dart'; +import 'package:vikunja_app/models/project.dart'; +import 'package:vikunja_app/service/services.dart'; + +class ProjectAPIService extends APIService implements ProjectService { + ProjectAPIService(super.client); + + @override + Future create(Project p) { + // TODO: implement create + throw UnimplementedError(); + } + + @override + Future delete(int projectId) { + // TODO: implement delete + throw UnimplementedError(); + } + + @override + Future get(int projectId) { + // TODO: implement get + throw UnimplementedError(); + } + + @override + Future?> getAll() { + // TODO: implement getAll + return client.get('/projects').then((response) { + if (response == null) return null; + return convertList(response.body, (result) => Project.fromJson(result)); + }); + } + + @override + Future update(int projectId) { + // TODO: implement update + throw UnimplementedError(); + } + +} \ No newline at end of file diff --git a/lib/models/project.dart b/lib/models/project.dart new file mode 100644 index 0000000..484d911 --- /dev/null +++ b/lib/models/project.dart @@ -0,0 +1,40 @@ +import 'package:vikunja_app/models/user.dart'; + +class Project { + final int id; + final User? owner; + final int parentProjectId; + final String description; + final String title; + final DateTime created, updated; + + Project( + {this.id = 0, + this.owner, + this.parentProjectId = 0, + this.description = '', + required this.title, + created, + updated}) : + this.created = created ?? DateTime.now(), + this.updated = updated ?? DateTime.now(); + + Project.fromJson(Map json) + : title = json['title'], + description = json['description'], + id = json['id'], + parentProjectId = json['parent_project_id'], + created = DateTime.parse(json['created']), + updated = DateTime.parse(json['updated']), + owner = json['owner'] != null ? User.fromJson(json['owner']) : null; + + Map toJSON() => { + 'id': id, + 'created': created.toUtc().toIso8601String(), + 'updated': updated.toUtc().toIso8601String(), + 'title': title, + 'owner': owner?.toJSON(), + 'description': description, + 'parent_project_id': parentProjectId + }; +} \ No newline at end of file diff --git a/lib/service/mocked_services.dart b/lib/service/mocked_services.dart index 20b85fc..c5808fc 100644 --- a/lib/service/mocked_services.dart +++ b/lib/service/mocked_services.dart @@ -46,7 +46,7 @@ var _tasks = { created: DateTime.now(), description: 'A descriptive task', done: false, - listId: 1, + projectId: 1, ) }; diff --git a/lib/service/services.dart b/lib/service/services.dart index 2b436b9..38b29c8 100644 --- a/lib/service/services.dart +++ b/lib/service/services.dart @@ -12,6 +12,7 @@ import 'package:vikunja_app/models/task.dart'; import 'package:vikunja_app/models/user.dart'; import 'package:vikunja_app/models/bucket.dart'; +import '../models/project.dart'; import '../models/server.dart'; enum TaskServiceOptionSortBy { @@ -128,6 +129,16 @@ class TaskServiceOptions { } } +abstract class ProjectService { + Future?> getAll(); + + Future get(int projectId); + Future create(Project p); + Future update(int projectId); + Future delete(int projectId); +} + + abstract class NamespaceService { Future?> getAll();