Skip to content

Commit 0298720

Browse files
committed
Include attachments queue in FlutterFlow schema
1 parent cf023a7 commit 0298720

File tree

3 files changed

+46
-7
lines changed

3 files changed

+46
-7
lines changed

.changeset/flat-bees-dream.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@powersync/service-sync-rules': patch
3+
---
4+
5+
Include local `attachments_queue` table when exporting schema for FlutterFlow.

packages/sync-rules/src/DartSchemaGenerator.ts

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ColumnDefinition, TYPE_INTEGER, TYPE_REAL, TYPE_TEXT } from './ExpressionType.js';
1+
import { ColumnDefinition, ExpressionType, TYPE_INTEGER, TYPE_REAL, TYPE_TEXT } from './ExpressionType.js';
22
import { GenerateSchemaOptions, SchemaGenerator } from './SchemaGenerator.js';
33
import { SqlSyncRules } from './SqlSyncRules.js';
44
import { SourceSchema } from './types.js';
@@ -52,16 +52,50 @@ export class DartFlutterFlowSchemaGenerator extends SchemaGenerator {
5252
readonly fileName = 'schema.json';
5353

5454
generate(source: SqlSyncRules, schema: SourceSchema, options?: GenerateSchemaOptions): string {
55-
return JSON.stringify({
56-
tables: this.getAllTables(source, schema).map((e) => this.generateTable(e.name, e.columns))
57-
});
55+
const serializedTables = this.getAllTables(source, schema).map((e) => this.generateTable(e.name, e.columns));
56+
// Not all FlutterFlow apps will use the attachments queue table, but it needs to be part of the app schema if used
57+
// and does no harm otherwise. So, we just include it by default.
58+
serializedTables.push(
59+
this.generateTable(
60+
'attachments_queue',
61+
[
62+
{
63+
name: 'filename',
64+
type: ExpressionType.TEXT
65+
},
66+
{
67+
name: 'local_uri',
68+
type: ExpressionType.TEXT
69+
},
70+
{
71+
name: 'timestamp',
72+
type: ExpressionType.INTEGER
73+
},
74+
{
75+
name: 'size',
76+
type: ExpressionType.INTEGER
77+
},
78+
{
79+
name: 'media_type',
80+
type: ExpressionType.TEXT
81+
},
82+
{
83+
name: 'state',
84+
type: ExpressionType.INTEGER
85+
}
86+
],
87+
true
88+
)
89+
);
90+
91+
return JSON.stringify({ tables: serializedTables });
5892
}
5993

60-
private generateTable(name: string, columns: ColumnDefinition[]): object {
94+
private generateTable(name: string, columns: ColumnDefinition[], localOnly = false): object {
6195
return {
6296
name,
6397
view_name: null,
64-
local_only: false,
98+
local_only: localOnly,
6599
insert_only: false,
66100
columns: columns.map(this.generateColumn),
67101
indexes: []

packages/sync-rules/test/src/generate_schema.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ bucket_definitions:
8080

8181
test('flutterflow', () => {
8282
expect(new DartFlutterFlowSchemaGenerator().generate(rules, schema)).toEqual(
83-
'{"tables":[{"name":"assets1","view_name":null,"local_only":false,"insert_only":false,"columns":[{"name":"name","type":"text"},{"name":"count","type":"integer"},{"name":"owner_id","type":"text"}],"indexes":[]},{"name":"assets2","view_name":null,"local_only":false,"insert_only":false,"columns":[{"name":"name","type":"text"},{"name":"count","type":"integer"},{"name":"other_id","type":"text"},{"name":"foo","type":"text"}],"indexes":[]}]}'
83+
'{"tables":[{"name":"assets1","view_name":null,"local_only":false,"insert_only":false,"columns":[{"name":"name","type":"text"},{"name":"count","type":"integer"},{"name":"owner_id","type":"text"}],"indexes":[]},{"name":"assets2","view_name":null,"local_only":false,"insert_only":false,"columns":[{"name":"name","type":"text"},{"name":"count","type":"integer"},{"name":"other_id","type":"text"},{"name":"foo","type":"text"}],"indexes":[]},{"name":"attachments_queue","view_name":null,"local_only":true,"insert_only":false,"columns":[{"name":"filename","type":"text"},{"name":"local_uri","type":"text"},{"name":"timestamp","type":"integer"},{"name":"size","type":"integer"},{"name":"media_type","type":"text"},{"name":"state","type":"integer"}],"indexes":[]}]}'
8484
);
8585
});
8686

0 commit comments

Comments
 (0)