| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | import 'package:appflowy_backend/protobuf/flowy-database/calendar_entities.pb.dart';import 'package:appflowy_backend/protobuf/flowy-database/database_entities.pb.dart';import 'package:appflowy_backend/protobuf/flowy-database/group_changeset.pb.dart';import 'package:appflowy_backend/protobuf/flowy-database/setting_entities.pb.dart';import 'package:dartz/dartz.dart';import 'package:appflowy_backend/dispatch/dispatch.dart';import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';import 'package:appflowy_backend/protobuf/flowy-database/group.pb.dart';import 'package:appflowy_backend/protobuf/flowy-database/row_entities.pb.dart';class DatabaseBackendService {  final String viewId;  DatabaseBackendService({    required this.viewId,  });  Future<Either<DatabasePB, FlowyError>> openGrid() async {    await FolderEventSetLatestView(ViewIdPB(value: viewId)).send();    final payload = DatabaseViewIdPB(value: viewId);    return DatabaseEventGetDatabase(payload).send();  }  Future<Either<RowPB, FlowyError>> createRow({    String? startRowId,    String? groupId,    Map<String, String>? cellDataByFieldId,  }) {    var payload = CreateRowPayloadPB.create()..viewId = viewId;    if (startRowId != null) {      payload.startRowId = startRowId;    }    if (groupId != null) {      payload.groupId = groupId;    }    if (cellDataByFieldId != null && cellDataByFieldId.isNotEmpty) {      payload.data = RowDataPB(cellDataByFieldId: cellDataByFieldId);    }    return DatabaseEventCreateRow(payload).send();  }  Future<Either<Unit, FlowyError>> moveRow({    required String fromRowId,    required String? toGroupId,    required String? toRowId,  }) {    var payload = MoveGroupRowPayloadPB.create()      ..viewId = viewId      ..fromRowId = fromRowId;    if (toGroupId != null) {      payload.toGroupId = toGroupId;    }    if (toRowId != null) {      payload.toRowId = toRowId;    }    return DatabaseEventMoveGroupRow(payload).send();  }  Future<Either<Unit, FlowyError>> moveGroup({    required String fromGroupId,    required String toGroupId,  }) {    final payload = MoveGroupPayloadPB.create()      ..viewId = viewId      ..fromGroupId = fromGroupId      ..toGroupId = toGroupId;    return DatabaseEventMoveGroup(payload).send();  }  Future<Either<List<FieldPB>, FlowyError>> getFields(      {List<FieldIdPB>? fieldIds}) {    var payload = GetFieldPayloadPB.create()..viewId = viewId;    if (fieldIds != null) {      payload.fieldIds = RepeatedFieldIdPB(items: fieldIds);    }    return DatabaseEventGetFields(payload).send().then((result) {      return result.fold((l) => left(l.items), (r) => right(r));    });  }  Future<Either<LayoutSettingPB, FlowyError>> getLayoutSetting(      LayoutTypePB layoutType) {    final payload = DatabaseLayoutIdPB.create()      ..viewId = viewId      ..layout = layoutType;    return DatabaseEventGetLayoutSetting(payload).send();  }  Future<Either<Unit, FlowyError>> updateLayoutSetting(      {CalendarLayoutSettingsPB? calendarLayoutSetting}) {    final layoutSetting = LayoutSettingPB.create();    if (calendarLayoutSetting != null) {      layoutSetting.calendar = calendarLayoutSetting;    }    final payload = UpdateLayoutSettingPB.create()      ..viewId = viewId      ..layoutSetting = layoutSetting;    return DatabaseEventSetLayoutSetting(payload).send();  }  Future<Either<Unit, FlowyError>> closeView() {    final request = ViewIdPB(value: viewId);    return FolderEventCloseView(request).send();  }  Future<Either<RepeatedGroupPB, FlowyError>> loadGroups() {    final payload = DatabaseViewIdPB(value: viewId);    return DatabaseEventGetGroups(payload).send();  }}
 |