Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

eng(supabase): add supabase and offline first with supabase packages #403

Merged
merged 7 commits into from
Aug 19, 2024
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .github/workflows/brick_offline_first_with_supabase.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Brick Offline First with Supabase
on:
push:
branches:
- main
pull_request:
paths:
- "packages/brick_offline_first_with_supabase/**"
- ".github/workflows/brick_offline_first_with_supabase.yaml"

env:
PUB_ENVIRONMENT: bot.github

jobs:
analyze_format_test:
uses: ./.github/workflows/reusable-dart-analyze-format-test.yaml
with:
package: brick_offline_first_with_supabase
18 changes: 18 additions & 0 deletions .github/workflows/brick_supabase.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Brick Supabase
on:
push:
branches:
- main
pull_request:
paths:
- "packages/brick_supabase/**"
- ".github/workflows/brick_supabase.yaml"

env:
PUB_ENVIRONMENT: bot.github

jobs:
analyze_format_test:
uses: ./.github/workflows/reusable-dart-analyze-format-test.yaml
with:
package: brick_supabase
4 changes: 2 additions & 2 deletions .github/workflows/reusable-dart-analyze-format-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ jobs:
key: ${{ runner.os }}-${{ inputs.package }}-v1-${{ matrix.sdk_version }}-${{ hashFiles(format('packages/{0}/pubspec.yaml', inputs.package)) }}
restore-keys: |
${{ runner.os }}-${{ inputs.package }}-v1-${{ matrix.sdk_version }}
- id: checkout
uses: actions/checkout@v3

- uses: actions/checkout@v3

- run: dart pub get && dart run melos bootstrap --scope="${{ inputs.package }}"

Expand Down
17 changes: 11 additions & 6 deletions .github/workflows/reusable-flutter-analyze-format-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
flutter_analyze_format_test:
runs-on: ubuntu-latest
container:
image: cirrusci/flutter:${{ matrix.flutter_version }}
image: ghcr.io/cirruslabs/flutter:${{ matrix.flutter_version }}
strategy:
fail-fast: false
matrix:
Expand All @@ -32,17 +32,22 @@ jobs:
restore-keys: |
${{ runner.os }}-${{ inputs.package }}-v1-${{ matrix.flutter_version }}

- id: checkout
uses: actions/checkout@v3
- uses: actions/checkout@v3

- run: flutter pub get
working-directory: packages/${{ inputs.package }}

- run: dart analyze --fatal-infos lib test
- run: dart analyze --fatal-infos lib
working-directory: packages/${{ inputs.package }}

- run: dart format --output=none --line-length 100 --set-exit-if-changed lib test
- run: if [ -d "test" ]; then dart analyze --fatal-infos test; fi
working-directory: packages/${{ inputs.package }}

- run: flutter test
- run: dart format --output=none --line-length 100 --set-exit-if-changed lib
working-directory: packages/${{ inputs.package }}

- run: if [ -d "test" ]; then dart format --output=none --line-length 100 --set-exit-if-changed test; fi
working-directory: packages/${{ inputs.package }}

- run: if [ -d "test" ]; then flutter test; fi
working-directory: packages/${{ inputs.package }}
30 changes: 30 additions & 0 deletions packages/brick_offline_first_with_supabase/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
![brick_offline_first_with_supabase workflow](https://github.com/GetDutchie/brick/actions/workflows/brick_offline_first_with_supabase.yaml/badge.svg)

`OfflineFirstWithSupabaseRepository` streamlines the Supabase integration with an `OfflineFirstRepository`.

The `OfflineFirstWithSupabase` domain uses all the same configurations and annotations as `OfflineFirst`.

## Models

### ConnectOfflineFirstWithSupabase

`@ConnectOfflineFirstWithSupabase` decorates the model that can be serialized by one or more providers. Offline First does not have configuration at the class level and only extends configuration held by its providers:

```dart
@ConnectOfflineFirstWithSupabase(
supabaseConfig: SupabaseSerializable(),
sqliteConfig: SqliteSerializable(),
)
class MyModel extends OfflineFirstModel {}
```

### FAQ

#### Why can't I declare a model argument?

Due to [an open analyzer bug](https://github.com/dart-lang/sdk/issues/38309), a custom model cannot be passed to the repository as a type argument.

## Unsupported Field Types

- Any unsupported field types from `SupabaseProvider`, or `SqliteProvider`
- Future iterables of future models (i.e. `Future<List<Future<Model>>>`).
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export 'package:brick_offline_first_with_supabase/src/offline_first_with_supabase_adapter.dart';
export 'package:brick_offline_first_with_supabase/src/offline_first_with_supabase_model.dart';
export 'package:brick_offline_first_with_supabase/src/offline_first_with_supabase_repository.dart';
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import 'package:brick_offline_first/brick_offline_first.dart';
import 'package:brick_offline_first_with_supabase/src/offline_first_with_supabase_model.dart';
import 'package:brick_supabase/brick_supabase.dart';

/// This adapter fetches first from [SqliteProvider] then hydrates with [SupabaseProvider].
abstract class OfflineFirstWithSupabaseAdapter<_Model extends OfflineFirstWithSupabaseModel>
extends OfflineFirstAdapter<_Model> with SupabaseAdapter<_Model> {
OfflineFirstWithSupabaseAdapter();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import 'package:brick_offline_first/brick_offline_first.dart';
import 'package:brick_supabase_abstract/brick_supabase_abstract.dart';

abstract class OfflineFirstWithSupabaseModel extends OfflineFirstModel with SupabaseModel {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import 'package:brick_offline_first/brick_offline_first.dart';
import 'package:brick_offline_first_with_supabase/src/offline_first_with_supabase_model.dart';
import 'package:brick_supabase/brick_supabase.dart' show SupabaseProvider;

/// Ensures the [remoteProvider] is a [SupabaseProvider].
///
/// OfflineFirstWithSupabaseRepository should accept a type argument such as
/// <_RepositoryModel extends OfflineFirstWithSupabaseModel>, however, this causes a type bound
/// error on runtime. The argument should be reintroduced with a future version of the
/// compiler/analyzer.
abstract class OfflineFirstWithSupabaseRepository
extends OfflineFirstRepository<OfflineFirstWithSupabaseModel> {
/// The type declaration is important here for the rare circumstances that
/// require interfacting with [SupabaseProvider]'s client directly.
@override
// ignore: overridden_fields
final SupabaseProvider remoteProvider;

OfflineFirstWithSupabaseRepository({
super.autoHydrate,
super.loggerName,
super.memoryCacheProvider,
required super.migrations,
required SupabaseProvider supabaseProvider,
required super.sqliteProvider,
}) : remoteProvider = supabaseProvider,
super(
remoteProvider: supabaseProvider,
);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: brick_offline_first_with_supabase_abstract
name: brick_offline_first_with_supabase
description: A Brick domain that routes data fetching through local providers
before a Supabase provider.
homepage: https://github.com/GetDutchie/brick/tree/main/packages/brick_offline_first_with_supabase_abstract
homepage: https://github.com/GetDutchie/brick/tree/main/packages/brick_offline_first_with_supabase
issue_tracker: https://github.com/GetDutchie/brick/issues
repository: https://github.com/GetDutchie/brick

Expand All @@ -11,9 +11,17 @@ environment:
sdk: ">=2.18.0 <4.0.0"

dependencies:
brick_supabase_abstract: ">=0.0.1 <1.0.0"
brick_core: ^1.1.1
brick_offline_first: ">=3.0.0 <4.0.0"
brick_supabase: ">=0.0.1 <2.0.0"
brick_supabase_abstract: ">=0.0.1 <2.0.0"
brick_sqlite: ">=3.0.0 <4.0.0"
logging: ">=1.0.0 <2.0.0"
meta: ">=1.3.0 <2.0.0"
sqflite_common: ">=2.0.0 <3.0.0"

dev_dependencies:
lints: ^2.0.1
mockito: ^5.0.0
test: ^1.16.5
sqflite_common_ffi: ^2.0.0
147 changes: 0 additions & 147 deletions packages/brick_offline_first_with_supabase_abstract/README.md

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Copyright (c) Green Bits, Inc. and its affiliates.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
in the Software without supabaseriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
Expand Down
Loading
Loading