kombu_flutter_schema 1.0.1 copy "kombu_flutter_schema: ^1.0.1" to clipboard
kombu_flutter_schema: ^1.0.1 copied to clipboard

discontinued

KOMBU IoT System - GraphQL Schema for Flutter/Dart

kombu_flutter_schema #

KOMBU IoT System - GraphQL Schema for Flutter/Dart

📋 Overview #

This package provides GraphQL schema definitions, models, queries, mutations, and subscriptions for the KOMBU IoT System. It's designed to work with AWS Amplify Flutter.

📦 Installation #

Add this to your package's pubspec.yaml file:

dependencies:
  kombu_flutter_schema: ^1.0.0
  amplify_flutter: ^2.7.0
  amplify_api: ^2.7.0
  amplify_auth_cognito: ^2.7.0

Then run:

flutter pub get

🚀 Usage #

Import #

import 'package:kombu_flutter_schema/kombu_flutter_schema.dart';
import 'package:amplify_flutter/amplify_flutter.dart';
import 'package:amplify_api/amplify_api.dart';
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';

Setup Amplify #

import 'package:amplify_flutter/amplify_flutter.dart';
import 'package:amplify_api/amplify_api.dart';
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';

// Configure Amplify
await Amplify.addPlugins([
  AmplifyAPI(),
  AmplifyAuthCognito(),
]);

await Amplify.configure(amplifyconfig);

Use Models #

// Parse JSON to User model
final userJson = {
  'id': 'user-123',
  'userId': 'user-123',
  'username': 'johndoe',
  'email': 'john@example.com',
  'fullName': 'John Doe',
  'role': 'user',
  'status': 'active',
};
final user = User.fromJson(userJson);

// Convert User to JSON
final json = user.toJson();

🔍 Queries #

User Queries #

List Users

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final request = ModelQueries.list(
    User.classType,
    where: User.EMAIL.contains('example.com'),
    limit: 10,
  );
  
  final response = await Amplify.API.query(request: request).response;
  final users = response.data?.items;
  
  if (users != null) {
    print('Users: $users');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

Get User

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final request = ModelQueries.get(
    User.classType,
    UserModelIdentifier(id: 'user-id-here'),
  );
  
  final response = await Amplify.API.query(request: request).response;
  final user = response.data;
  
  if (user != null) {
    print('User: $user');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

Device Queries #

List Devices

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final request = ModelQueries.list(
    Device.classType,
    where: Device.USER_ID.eq('user-id-here'),
    limit: 20,
  );
  
  final response = await Amplify.API.query(request: request).response;
  final devices = response.data?.items;
  
  if (devices != null) {
    print('Devices: $devices');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

Get Device

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final request = ModelQueries.get(
    Device.classType,
    DeviceModelIdentifier(id: 'device-id-here'),
  );
  
  final response = await Amplify.API.query(request: request).response;
  final device = response.data;
  
  if (device != null) {
    print('Device: $device');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

Device Telemetry Queries #

List Telemetry

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final request = ModelQueries.list(
    DeviceTelemetry.classType,
    where: DeviceTelemetry.DEVICE_ID.eq('device-id-here'),
    limit: 100,
  );
  
  final response = await Amplify.API.query(request: request).response;
  final telemetry = response.data?.items;
  
  if (telemetry != null) {
    print('Telemetry: $telemetry');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

Notification Queries #

List Notifications

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final request = ModelQueries.list(
    Notification.classType,
    where: Notification.USER_ID.eq('user-id-here'),
    limit: 50,
  );
  
  final response = await Amplify.API.query(request: request).response;
  final notifications = response.data?.items;
  
  if (notifications != null) {
    print('Notifications: $notifications');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

✏️ Mutations #

User Mutations #

Create User

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final user = User(
    userId: 'user-123',
    username: 'johndoe',
    email: 'john@example.com',
    phoneNumber: '+84123456789',
    fullName: 'John Doe',
    role: 'user',
    status: 'active',
  );
  
  final request = ModelMutations.create(user);
  final response = await Amplify.API.mutate(request: request).response;
  final createdUser = response.data;
  
  if (createdUser != null) {
    print('User created: $createdUser');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

Update User

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final user = User(
    id: 'user-id-here',
    fullName: 'John Doe Updated',
    status: 'active',
  );
  
  final request = ModelMutations.update(user);
  final response = await Amplify.API.mutate(request: request).response;
  final updatedUser = response.data;
  
  if (updatedUser != null) {
    print('User updated: $updatedUser');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

Delete User

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final user = User(id: 'user-id-here');
  
  final request = ModelMutations.delete(user);
  final response = await Amplify.API.mutate(request: request).response;
  final deletedUser = response.data;
  
  if (deletedUser != null) {
    print('User deleted: $deletedUser');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

Device Mutations #

Create Device

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final device = Device(
    deviceId: 'ESP32-ABC123',
    userId: 'user-id-here',
    deviceName: 'Living Room Heater',
    deviceType: 'kombu-brewer',
    location: 'Living Room',
    status: 'online',
    firmwareVersion: '1.0.0',
    hardwareVersion: '1.0',
    wifiConnected: true,
  );
  
  final request = ModelMutations.create(device);
  final response = await Amplify.API.mutate(request: request).response;
  final createdDevice = response.data;
  
  if (createdDevice != null) {
    print('Device created: $createdDevice');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

Update Device

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final device = Device(
    id: 'device-id-here',
    status: 'offline',
    lastSeen: TemporalDateTime.now(),
  );
  
  final request = ModelMutations.update(device);
  final response = await Amplify.API.mutate(request: request).response;
  final updatedDevice = response.data;
  
  if (updatedDevice != null) {
    print('Device updated: $updatedDevice');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

Delete Device

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final device = Device(id: 'device-id-here');
  
  final request = ModelMutations.delete(device);
  final response = await Amplify.API.mutate(request: request).response;
  final deletedDevice = response.data;
  
  if (deletedDevice != null) {
    print('Device deleted: $deletedDevice');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

Device Telemetry Mutations #

Create Telemetry

import 'package:amplify_flutter/amplify_flutter.dart';

try {
  final telemetry = DeviceTelemetry(
    telemetryId: 'telemetry-123',
    deviceId: 'device-id-here',
    temperatureF1: 75.5,
    temperatureF2: 72.3,
    heaterF1Status: true,
    heaterF2Status: false,
    connectivityStatus: 'connected',
    timestamp: TemporalDateTime.now(),
  );
  
  final request = ModelMutations.create(telemetry);
  final response = await Amplify.API.mutate(request: request).response;
  final createdTelemetry = response.data;
  
  if (createdTelemetry != null) {
    print('Telemetry created: $createdTelemetry');
  }
} on ApiException catch (e) {
  print('Error: ${e.message}');
}

📡 Subscriptions #

User Subscriptions #

Subscribe to User Creation

import 'package:amplify_flutter/amplify_flutter.dart';

final subscription = Amplify.API.onSubscription(
  request: ModelSubscriptions.onCreate(User.classType),
);

subscription.listen((event) {
  if (event.hasError) {
    print('Subscription error: ${event.error}');
  } else {
    final user = event.data;
    print('User created: $user');
  }
});

Subscribe to User Updates

import 'package:amplify_flutter/amplify_flutter.dart';

final subscription = Amplify.API.onSubscription(
  request: ModelSubscriptions.onUpdate(User.classType),
);

subscription.listen((event) {
  if (event.hasError) {
    print('Subscription error: ${event.error}');
  } else {
    final user = event.data;
    print('User updated: $user');
  }
});

Subscribe to User Deletion

import 'package:amplify_flutter/amplify_flutter.dart';

final subscription = Amplify.API.onSubscription(
  request: ModelSubscriptions.onDelete(User.classType),
);

subscription.listen((event) {
  if (event.hasError) {
    print('Subscription error: ${event.error}');
  } else {
    final user = event.data;
    print('User deleted: $user');
  }
});

Device Subscriptions #

Subscribe to Device Creation

import 'package:amplify_flutter/amplify_flutter.dart';

final subscription = Amplify.API.onSubscription(
  request: ModelSubscriptions.onCreate(Device.classType),
);

subscription.listen((event) {
  if (event.hasError) {
    print('Subscription error: ${event.error}');
  } else {
    final device = event.data;
    print('Device created: $device');
  }
});

Subscribe to Device Updates

import 'package:amplify_flutter/amplify_flutter.dart';

final subscription = Amplify.API.onSubscription(
  request: ModelSubscriptions.onUpdate(Device.classType),
);

subscription.listen((event) {
  if (event.hasError) {
    print('Subscription error: ${event.error}');
  } else {
    final device = event.data;
    print('Device updated: $device');
  }
});

Notification Subscriptions #

Subscribe to Notification Creation

import 'package:amplify_flutter/amplify_flutter.dart';

final subscription = Amplify.API.onSubscription(
  request: ModelSubscriptions.onCreate(Notification.classType),
);

subscription.listen((event) {
  if (event.hasError) {
    print('Subscription error: ${event.error}');
  } else {
    final notification = event.data;
    print('New notification: $notification');
  }
});

📦 Models #

User Model #

class User {
  final String id;
  final String userId;
  final String username;
  final String email;
  final String? phoneNumber;
  final String? fullName;
  final String? role;
  final String? status;
  final TemporalDateTime? lastLogin;
  final String? deviceToken;
  final Map<String, dynamic>? notificationPreferences;
  final Map<String, dynamic>? appSettings;
  final TemporalDateTime? createdAt;
  final TemporalDateTime? updatedAt;
  final String? owner;
  
  // fromJson, toJson methods
}

Device Model #

class Device {
  final String id;
  final String deviceId;
  final String userId;
  final String deviceName;
  final String? deviceType;
  final String? location;
  final String? status;
  final String? firmwareVersion;
  final String? hardwareVersion;
  final String? iotThingArn;
  final bool? wifiConnected;
  final String? bleAddress;
  final TemporalDateTime? lastSeen;
  final TemporalDateTime? createdAt;
  final TemporalDateTime? updatedAt;
  final String? owner;
  
  // fromJson, toJson methods
}

DeviceTelemetry Model #

class DeviceTelemetry {
  final String id;
  final String telemetryId;
  final String deviceId;
  final double? temperatureF1;
  final double? temperatureF2;
  final bool? heaterF1Status;
  final bool? heaterF2Status;
  final String? connectivityStatus;
  final TemporalDateTime timestamp;
  final TemporalDateTime? createdAt;
  final TemporalDateTime? updatedAt;
  final String? owner;
  
  // fromJson, toJson methods
}

🔑 Authorization #

Access Control #

  • Owner Access: Users can CRUD their own resources (userId matches authenticated user's ID)
  • Admin Role: Members of 'admin' group have read/update access to all resources
  • Authenticated Users: Can read own data and create new resources
  • Guest Users: Limited read access (firmware, public assets)

Authorization Modes #

  • Default: userPool (Cognito User Pool)
  • API Key: Available for 30 days (for testing)

📝 Model Relationships #

  • User → Devices (one-to-many)
  • User → Notifications (one-to-many)
  • Device → User (many-to-one, owner)
  • Device → DeviceTelemetry (one-to-many)
  • Device → DeviceConfiguration (one-to-many)
  • Device → Timer (one-to-many)
  • Device → Alert (one-to-many)
  • Device → Notification (one-to-many)
  • Notification → User (many-to-one)
  • Notification → Device (many-to-one)

🐛 Error Handling #

All GraphQL operations return exceptions if something goes wrong:

try {
  final request = ModelQueries.get(
    User.classType,
    UserModelIdentifier(id: 'user-id'),
  );
  
  final response = await Amplify.API.query(request: request).response;
  print('Data: ${response.data}');
} on ApiException catch (e) {
  print('API Error: ${e.message}');
  print('Error details: ${e.errors}');
} catch (e) {
  print('Unexpected error: $e');
}

📚 Additional Resources #


📄 License #

MIT

0
likes
0
points
19
downloads

Publisher

unverified uploader

Weekly Downloads

KOMBU IoT System - GraphQL Schema for Flutter/Dart

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

amplify_api, amplify_flutter, graphql

More

Packages that depend on kombu_flutter_schema