database_service.dart 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import 'package:appflowy_backend/protobuf/flowy-database/calendar_entities.pb.dart';
  2. import 'package:appflowy_backend/protobuf/flowy-database/database_entities.pb.dart';
  3. import 'package:appflowy_backend/protobuf/flowy-database/group_changeset.pb.dart';
  4. import 'package:appflowy_backend/protobuf/flowy-database/setting_entities.pb.dart';
  5. import 'package:dartz/dartz.dart';
  6. import 'package:appflowy_backend/dispatch/dispatch.dart';
  7. import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
  8. import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
  9. import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';
  10. import 'package:appflowy_backend/protobuf/flowy-database/group.pb.dart';
  11. import 'package:appflowy_backend/protobuf/flowy-database/row_entities.pb.dart';
  12. class DatabaseBackendService {
  13. final String viewId;
  14. DatabaseBackendService({
  15. required this.viewId,
  16. });
  17. Future<Either<DatabasePB, FlowyError>> openGrid() async {
  18. await FolderEventSetLatestView(ViewIdPB(value: viewId)).send();
  19. final payload = DatabaseViewIdPB(value: viewId);
  20. return DatabaseEventGetDatabase(payload).send();
  21. }
  22. Future<Either<RowPB, FlowyError>> createRow({
  23. String? startRowId,
  24. String? groupId,
  25. Map<String, String>? cellDataByFieldId,
  26. }) {
  27. var payload = CreateRowPayloadPB.create()..viewId = viewId;
  28. if (startRowId != null) {
  29. payload.startRowId = startRowId;
  30. }
  31. if (groupId != null) {
  32. payload.groupId = groupId;
  33. }
  34. if (cellDataByFieldId != null && cellDataByFieldId.isNotEmpty) {
  35. payload.data = RowDataPB(cellDataByFieldId: cellDataByFieldId);
  36. }
  37. return DatabaseEventCreateRow(payload).send();
  38. }
  39. Future<Either<Unit, FlowyError>> moveRow({
  40. required String fromRowId,
  41. required String? toGroupId,
  42. required String? toRowId,
  43. }) {
  44. var payload = MoveGroupRowPayloadPB.create()
  45. ..viewId = viewId
  46. ..fromRowId = fromRowId;
  47. if (toGroupId != null) {
  48. payload.toGroupId = toGroupId;
  49. }
  50. if (toRowId != null) {
  51. payload.toRowId = toRowId;
  52. }
  53. return DatabaseEventMoveGroupRow(payload).send();
  54. }
  55. Future<Either<Unit, FlowyError>> moveGroup({
  56. required String fromGroupId,
  57. required String toGroupId,
  58. }) {
  59. final payload = MoveGroupPayloadPB.create()
  60. ..viewId = viewId
  61. ..fromGroupId = fromGroupId
  62. ..toGroupId = toGroupId;
  63. return DatabaseEventMoveGroup(payload).send();
  64. }
  65. Future<Either<List<FieldPB>, FlowyError>> getFields(
  66. {List<FieldIdPB>? fieldIds}) {
  67. var payload = GetFieldPayloadPB.create()..viewId = viewId;
  68. if (fieldIds != null) {
  69. payload.fieldIds = RepeatedFieldIdPB(items: fieldIds);
  70. }
  71. return DatabaseEventGetFields(payload).send().then((result) {
  72. return result.fold((l) => left(l.items), (r) => right(r));
  73. });
  74. }
  75. Future<Either<LayoutSettingPB, FlowyError>> getLayoutSetting(
  76. LayoutTypePB layoutType) {
  77. final payload = DatabaseLayoutIdPB.create()
  78. ..viewId = viewId
  79. ..layout = layoutType;
  80. return DatabaseEventGetLayoutSetting(payload).send();
  81. }
  82. Future<Either<Unit, FlowyError>> updateLayoutSetting(
  83. {CalendarLayoutSettingsPB? calendarLayoutSetting}) {
  84. final layoutSetting = LayoutSettingPB.create();
  85. if (calendarLayoutSetting != null) {
  86. layoutSetting.calendar = calendarLayoutSetting;
  87. }
  88. final payload = UpdateLayoutSettingPB.create()
  89. ..viewId = viewId
  90. ..layoutSetting = layoutSetting;
  91. return DatabaseEventSetLayoutSetting(payload).send();
  92. }
  93. Future<Either<Unit, FlowyError>> closeView() {
  94. final request = ViewIdPB(value: viewId);
  95. return FolderEventCloseView(request).send();
  96. }
  97. Future<Either<RepeatedGroupPB, FlowyError>> loadGroups() {
  98. final payload = DatabaseViewIdPB(value: viewId);
  99. return DatabaseEventGetGroups(payload).send();
  100. }
  101. }