Merge pull request #286 from Oloodi/hub_creation

Hub creation
This commit is contained in:
Achintha Isuru
2026-01-22 12:39:38 -05:00
committed by GitHub
17 changed files with 20055 additions and 19885 deletions

View File

@@ -1,16 +1,16 @@
# Basic Usage # Basic Usage
```dart ```dart
ExampleConnector.instance.createDocument(createDocumentVariables).execute(); ExampleConnector.instance.createTeamHudDepartment(createTeamHudDepartmentVariables).execute();
ExampleConnector.instance.updateDocument(updateDocumentVariables).execute(); ExampleConnector.instance.updateTeamHudDepartment(updateTeamHudDepartmentVariables).execute();
ExampleConnector.instance.deleteDocument(deleteDocumentVariables).execute(); ExampleConnector.instance.deleteTeamHudDepartment(deleteTeamHudDepartmentVariables).execute();
ExampleConnector.instance.createConversation(createConversationVariables).execute(); ExampleConnector.instance.listAssignments(listAssignmentsVariables).execute();
ExampleConnector.instance.updateConversation(updateConversationVariables).execute(); ExampleConnector.instance.getAssignmentById(getAssignmentByIdVariables).execute();
ExampleConnector.instance.updateConversationLastMessage(updateConversationLastMessageVariables).execute(); ExampleConnector.instance.listAssignmentsByWorkforceId(listAssignmentsByWorkforceIdVariables).execute();
ExampleConnector.instance.deleteConversation(deleteConversationVariables).execute(); ExampleConnector.instance.listAssignmentsByWorkforceIds(listAssignmentsByWorkforceIdsVariables).execute();
ExampleConnector.instance.listHubs().execute(); ExampleConnector.instance.listAssignmentsByShiftRole(listAssignmentsByShiftRoleVariables).execute();
ExampleConnector.instance.getHubById(getHubByIdVariables).execute(); ExampleConnector.instance.filterAssignments(filterAssignmentsVariables).execute();
ExampleConnector.instance.getHubsByOwnerId(getHubsByOwnerIdVariables).execute(); ExampleConnector.instance.CreateCertificate(createCertificateVariables).execute();
``` ```
@@ -23,8 +23,8 @@ Optional fields can be discovered based on classes that have `Optional` object t
This is an example of a mutation with an optional field: This is an example of a mutation with an optional field:
```dart ```dart
await ExampleConnector.instance.filterVendorBenefitPlans({ ... }) await ExampleConnector.instance.updateShift({ ... })
.vendorId(...) .title(...)
.execute(); .execute();
``` ```

View File

@@ -4,14 +4,30 @@ class CreateTeamHubVariablesBuilder {
String teamId; String teamId;
String hubName; String hubName;
String address; String address;
String city; Optional<String> _city = Optional.optional(nativeFromJson, nativeToJson);
String state; Optional<String> _state = Optional.optional(nativeFromJson, nativeToJson);
String zipCode; Optional<String> _zipCode = Optional.optional(nativeFromJson, nativeToJson);
String managerName; Optional<String> _managerName = Optional.optional(nativeFromJson, nativeToJson);
Optional<bool> _isActive = Optional.optional(nativeFromJson, nativeToJson); Optional<bool> _isActive = Optional.optional(nativeFromJson, nativeToJson);
Optional<AnyValue> _departments = Optional.optional(AnyValue.fromJson, defaultSerializer); Optional<AnyValue> _departments = Optional.optional(AnyValue.fromJson, defaultSerializer);
final FirebaseDataConnect _dataConnect; CreateTeamHubVariablesBuilder isActive(bool? t) { final FirebaseDataConnect _dataConnect; CreateTeamHubVariablesBuilder city(String? t) {
_city.value = t;
return this;
}
CreateTeamHubVariablesBuilder state(String? t) {
_state.value = t;
return this;
}
CreateTeamHubVariablesBuilder zipCode(String? t) {
_zipCode.value = t;
return this;
}
CreateTeamHubVariablesBuilder managerName(String? t) {
_managerName.value = t;
return this;
}
CreateTeamHubVariablesBuilder isActive(bool? t) {
_isActive.value = t; _isActive.value = t;
return this; return this;
} }
@@ -20,7 +36,7 @@ class CreateTeamHubVariablesBuilder {
return this; return this;
} }
CreateTeamHubVariablesBuilder(this._dataConnect, {required this.teamId,required this.hubName,required this.address,required this.city,required this.state,required this.zipCode,required this.managerName,}); CreateTeamHubVariablesBuilder(this._dataConnect, {required this.teamId,required this.hubName,required this.address,});
Deserializer<CreateTeamHubData> dataDeserializer = (dynamic json) => CreateTeamHubData.fromJson(jsonDecode(json)); Deserializer<CreateTeamHubData> dataDeserializer = (dynamic json) => CreateTeamHubData.fromJson(jsonDecode(json));
Serializer<CreateTeamHubVariables> varsSerializer = (CreateTeamHubVariables vars) => jsonEncode(vars.toJson()); Serializer<CreateTeamHubVariables> varsSerializer = (CreateTeamHubVariables vars) => jsonEncode(vars.toJson());
Future<OperationResult<CreateTeamHubData, CreateTeamHubVariables>> execute() { Future<OperationResult<CreateTeamHubData, CreateTeamHubVariables>> execute() {
@@ -28,7 +44,7 @@ class CreateTeamHubVariablesBuilder {
} }
MutationRef<CreateTeamHubData, CreateTeamHubVariables> ref() { MutationRef<CreateTeamHubData, CreateTeamHubVariables> ref() {
CreateTeamHubVariables vars= CreateTeamHubVariables(teamId: teamId,hubName: hubName,address: address,city: city,state: state,zipCode: zipCode,managerName: managerName,isActive: _isActive,departments: _departments,); CreateTeamHubVariables vars= CreateTeamHubVariables(teamId: teamId,hubName: hubName,address: address,city: _city,state: _state,zipCode: _zipCode,managerName: _managerName,isActive: _isActive,departments: _departments,);
return _dataConnect.mutation("createTeamHub", dataDeserializer, varsSerializer, vars); return _dataConnect.mutation("createTeamHub", dataDeserializer, varsSerializer, vars);
} }
} }
@@ -106,10 +122,10 @@ class CreateTeamHubVariables {
final String teamId; final String teamId;
final String hubName; final String hubName;
final String address; final String address;
final String city; late final Optional<String>city;
final String state; late final Optional<String>state;
final String zipCode; late final Optional<String>zipCode;
final String managerName; late final Optional<String>managerName;
late final Optional<bool>isActive; late final Optional<bool>isActive;
late final Optional<AnyValue>departments; late final Optional<AnyValue>departments;
@Deprecated('fromJson is deprecated for Variable classes as they are no longer required for deserialization.') @Deprecated('fromJson is deprecated for Variable classes as they are no longer required for deserialization.')
@@ -117,18 +133,26 @@ class CreateTeamHubVariables {
teamId = nativeFromJson<String>(json['teamId']), teamId = nativeFromJson<String>(json['teamId']),
hubName = nativeFromJson<String>(json['hubName']), hubName = nativeFromJson<String>(json['hubName']),
address = nativeFromJson<String>(json['address']), address = nativeFromJson<String>(json['address']) {
city = nativeFromJson<String>(json['city']),
state = nativeFromJson<String>(json['state']),
zipCode = nativeFromJson<String>(json['zipCode']),
managerName = nativeFromJson<String>(json['managerName']) {
city = Optional.optional(nativeFromJson, nativeToJson);
city.value = json['city'] == null ? null : nativeFromJson<String>(json['city']);
state = Optional.optional(nativeFromJson, nativeToJson);
state.value = json['state'] == null ? null : nativeFromJson<String>(json['state']);
zipCode = Optional.optional(nativeFromJson, nativeToJson);
zipCode.value = json['zipCode'] == null ? null : nativeFromJson<String>(json['zipCode']);
managerName = Optional.optional(nativeFromJson, nativeToJson);
managerName.value = json['managerName'] == null ? null : nativeFromJson<String>(json['managerName']);
isActive = Optional.optional(nativeFromJson, nativeToJson); isActive = Optional.optional(nativeFromJson, nativeToJson);
@@ -169,10 +193,18 @@ class CreateTeamHubVariables {
json['teamId'] = nativeToJson<String>(teamId); json['teamId'] = nativeToJson<String>(teamId);
json['hubName'] = nativeToJson<String>(hubName); json['hubName'] = nativeToJson<String>(hubName);
json['address'] = nativeToJson<String>(address); json['address'] = nativeToJson<String>(address);
json['city'] = nativeToJson<String>(city); if(city.state == OptionalState.set) {
json['state'] = nativeToJson<String>(state); json['city'] = city.toJson();
json['zipCode'] = nativeToJson<String>(zipCode); }
json['managerName'] = nativeToJson<String>(managerName); if(state.state == OptionalState.set) {
json['state'] = state.toJson();
}
if(zipCode.state == OptionalState.set) {
json['zipCode'] = zipCode.toJson();
}
if(managerName.state == OptionalState.set) {
json['managerName'] = managerName.toJson();
}
if(isActive.state == OptionalState.set) { if(isActive.state == OptionalState.set) {
json['isActive'] = isActive.toJson(); json['isActive'] = isActive.toJson();
} }

View File

@@ -23,10 +23,10 @@ class GetTeamHubByIdTeamHub {
final String teamId; final String teamId;
final String hubName; final String hubName;
final String address; final String address;
final String city; final String? city;
final String state; final String? state;
final String zipCode; final String? zipCode;
final String managerName; final String? managerName;
final bool isActive; final bool isActive;
final AnyValue? departments; final AnyValue? departments;
final Timestamp? createdAt; final Timestamp? createdAt;
@@ -38,10 +38,10 @@ class GetTeamHubByIdTeamHub {
teamId = nativeFromJson<String>(json['teamId']), teamId = nativeFromJson<String>(json['teamId']),
hubName = nativeFromJson<String>(json['hubName']), hubName = nativeFromJson<String>(json['hubName']),
address = nativeFromJson<String>(json['address']), address = nativeFromJson<String>(json['address']),
city = nativeFromJson<String>(json['city']), city = json['city'] == null ? null : nativeFromJson<String>(json['city']),
state = nativeFromJson<String>(json['state']), state = json['state'] == null ? null : nativeFromJson<String>(json['state']),
zipCode = nativeFromJson<String>(json['zipCode']), zipCode = json['zipCode'] == null ? null : nativeFromJson<String>(json['zipCode']),
managerName = nativeFromJson<String>(json['managerName']), managerName = json['managerName'] == null ? null : nativeFromJson<String>(json['managerName']),
isActive = nativeFromJson<bool>(json['isActive']), isActive = nativeFromJson<bool>(json['isActive']),
departments = json['departments'] == null ? null : AnyValue.fromJson(json['departments']), departments = json['departments'] == null ? null : AnyValue.fromJson(json['departments']),
createdAt = json['createdAt'] == null ? null : Timestamp.fromJson(json['createdAt']), createdAt = json['createdAt'] == null ? null : Timestamp.fromJson(json['createdAt']),
@@ -82,10 +82,18 @@ class GetTeamHubByIdTeamHub {
json['teamId'] = nativeToJson<String>(teamId); json['teamId'] = nativeToJson<String>(teamId);
json['hubName'] = nativeToJson<String>(hubName); json['hubName'] = nativeToJson<String>(hubName);
json['address'] = nativeToJson<String>(address); json['address'] = nativeToJson<String>(address);
json['city'] = nativeToJson<String>(city); if (city != null) {
json['state'] = nativeToJson<String>(state); json['city'] = nativeToJson<String?>(city);
json['zipCode'] = nativeToJson<String>(zipCode); }
json['managerName'] = nativeToJson<String>(managerName); if (state != null) {
json['state'] = nativeToJson<String?>(state);
}
if (zipCode != null) {
json['zipCode'] = nativeToJson<String?>(zipCode);
}
if (managerName != null) {
json['managerName'] = nativeToJson<String?>(managerName);
}
json['isActive'] = nativeToJson<bool>(isActive); json['isActive'] = nativeToJson<bool>(isActive);
if (departments != null) { if (departments != null) {
json['departments'] = departments!.toJson(); json['departments'] = departments!.toJson();
@@ -107,10 +115,10 @@ class GetTeamHubByIdTeamHub {
required this.teamId, required this.teamId,
required this.hubName, required this.hubName,
required this.address, required this.address,
required this.city, this.city,
required this.state, this.state,
required this.zipCode, this.zipCode,
required this.managerName, this.managerName,
required this.isActive, required this.isActive,
this.departments, this.departments,
this.createdAt, this.createdAt,

View File

@@ -23,10 +23,10 @@ class GetTeamHubsByTeamIdTeamHubs {
final String teamId; final String teamId;
final String hubName; final String hubName;
final String address; final String address;
final String city; final String? city;
final String state; final String? state;
final String zipCode; final String? zipCode;
final String managerName; final String? managerName;
final bool isActive; final bool isActive;
final AnyValue? departments; final AnyValue? departments;
final Timestamp? createdAt; final Timestamp? createdAt;
@@ -38,10 +38,10 @@ class GetTeamHubsByTeamIdTeamHubs {
teamId = nativeFromJson<String>(json['teamId']), teamId = nativeFromJson<String>(json['teamId']),
hubName = nativeFromJson<String>(json['hubName']), hubName = nativeFromJson<String>(json['hubName']),
address = nativeFromJson<String>(json['address']), address = nativeFromJson<String>(json['address']),
city = nativeFromJson<String>(json['city']), city = json['city'] == null ? null : nativeFromJson<String>(json['city']),
state = nativeFromJson<String>(json['state']), state = json['state'] == null ? null : nativeFromJson<String>(json['state']),
zipCode = nativeFromJson<String>(json['zipCode']), zipCode = json['zipCode'] == null ? null : nativeFromJson<String>(json['zipCode']),
managerName = nativeFromJson<String>(json['managerName']), managerName = json['managerName'] == null ? null : nativeFromJson<String>(json['managerName']),
isActive = nativeFromJson<bool>(json['isActive']), isActive = nativeFromJson<bool>(json['isActive']),
departments = json['departments'] == null ? null : AnyValue.fromJson(json['departments']), departments = json['departments'] == null ? null : AnyValue.fromJson(json['departments']),
createdAt = json['createdAt'] == null ? null : Timestamp.fromJson(json['createdAt']), createdAt = json['createdAt'] == null ? null : Timestamp.fromJson(json['createdAt']),
@@ -82,10 +82,18 @@ class GetTeamHubsByTeamIdTeamHubs {
json['teamId'] = nativeToJson<String>(teamId); json['teamId'] = nativeToJson<String>(teamId);
json['hubName'] = nativeToJson<String>(hubName); json['hubName'] = nativeToJson<String>(hubName);
json['address'] = nativeToJson<String>(address); json['address'] = nativeToJson<String>(address);
json['city'] = nativeToJson<String>(city); if (city != null) {
json['state'] = nativeToJson<String>(state); json['city'] = nativeToJson<String?>(city);
json['zipCode'] = nativeToJson<String>(zipCode); }
json['managerName'] = nativeToJson<String>(managerName); if (state != null) {
json['state'] = nativeToJson<String?>(state);
}
if (zipCode != null) {
json['zipCode'] = nativeToJson<String?>(zipCode);
}
if (managerName != null) {
json['managerName'] = nativeToJson<String?>(managerName);
}
json['isActive'] = nativeToJson<bool>(isActive); json['isActive'] = nativeToJson<bool>(isActive);
if (departments != null) { if (departments != null) {
json['departments'] = departments!.toJson(); json['departments'] = departments!.toJson();
@@ -107,10 +115,10 @@ class GetTeamHubsByTeamIdTeamHubs {
required this.teamId, required this.teamId,
required this.hubName, required this.hubName,
required this.address, required this.address,
required this.city, this.city,
required this.state, this.state,
required this.zipCode, this.zipCode,
required this.managerName, this.managerName,
required this.isActive, required this.isActive,
this.departments, this.departments,
this.createdAt, this.createdAt,

View File

@@ -22,10 +22,10 @@ class ListTeamHubsTeamHubs {
final String teamId; final String teamId;
final String hubName; final String hubName;
final String address; final String address;
final String city; final String? city;
final String state; final String? state;
final String zipCode; final String? zipCode;
final String managerName; final String? managerName;
final bool isActive; final bool isActive;
final AnyValue? departments; final AnyValue? departments;
final Timestamp? createdAt; final Timestamp? createdAt;
@@ -37,10 +37,10 @@ class ListTeamHubsTeamHubs {
teamId = nativeFromJson<String>(json['teamId']), teamId = nativeFromJson<String>(json['teamId']),
hubName = nativeFromJson<String>(json['hubName']), hubName = nativeFromJson<String>(json['hubName']),
address = nativeFromJson<String>(json['address']), address = nativeFromJson<String>(json['address']),
city = nativeFromJson<String>(json['city']), city = json['city'] == null ? null : nativeFromJson<String>(json['city']),
state = nativeFromJson<String>(json['state']), state = json['state'] == null ? null : nativeFromJson<String>(json['state']),
zipCode = nativeFromJson<String>(json['zipCode']), zipCode = json['zipCode'] == null ? null : nativeFromJson<String>(json['zipCode']),
managerName = nativeFromJson<String>(json['managerName']), managerName = json['managerName'] == null ? null : nativeFromJson<String>(json['managerName']),
isActive = nativeFromJson<bool>(json['isActive']), isActive = nativeFromJson<bool>(json['isActive']),
departments = json['departments'] == null ? null : AnyValue.fromJson(json['departments']), departments = json['departments'] == null ? null : AnyValue.fromJson(json['departments']),
createdAt = json['createdAt'] == null ? null : Timestamp.fromJson(json['createdAt']), createdAt = json['createdAt'] == null ? null : Timestamp.fromJson(json['createdAt']),
@@ -81,10 +81,18 @@ class ListTeamHubsTeamHubs {
json['teamId'] = nativeToJson<String>(teamId); json['teamId'] = nativeToJson<String>(teamId);
json['hubName'] = nativeToJson<String>(hubName); json['hubName'] = nativeToJson<String>(hubName);
json['address'] = nativeToJson<String>(address); json['address'] = nativeToJson<String>(address);
json['city'] = nativeToJson<String>(city); if (city != null) {
json['state'] = nativeToJson<String>(state); json['city'] = nativeToJson<String?>(city);
json['zipCode'] = nativeToJson<String>(zipCode); }
json['managerName'] = nativeToJson<String>(managerName); if (state != null) {
json['state'] = nativeToJson<String?>(state);
}
if (zipCode != null) {
json['zipCode'] = nativeToJson<String?>(zipCode);
}
if (managerName != null) {
json['managerName'] = nativeToJson<String?>(managerName);
}
json['isActive'] = nativeToJson<bool>(isActive); json['isActive'] = nativeToJson<bool>(isActive);
if (departments != null) { if (departments != null) {
json['departments'] = departments!.toJson(); json['departments'] = departments!.toJson();
@@ -106,10 +114,10 @@ class ListTeamHubsTeamHubs {
required this.teamId, required this.teamId,
required this.hubName, required this.hubName,
required this.address, required this.address,
required this.city, this.city,
required this.state, this.state,
required this.zipCode, this.zipCode,
required this.managerName, this.managerName,
required this.isActive, required this.isActive,
this.departments, this.departments,
this.createdAt, this.createdAt,

View File

@@ -23,10 +23,10 @@ class ListTeamHubsByOwnerIdTeamHubs {
final String teamId; final String teamId;
final String hubName; final String hubName;
final String address; final String address;
final String city; final String? city;
final String state; final String? state;
final String zipCode; final String? zipCode;
final String managerName; final String? managerName;
final bool isActive; final bool isActive;
final AnyValue? departments; final AnyValue? departments;
final Timestamp? createdAt; final Timestamp? createdAt;
@@ -36,10 +36,10 @@ class ListTeamHubsByOwnerIdTeamHubs {
teamId = nativeFromJson<String>(json['teamId']), teamId = nativeFromJson<String>(json['teamId']),
hubName = nativeFromJson<String>(json['hubName']), hubName = nativeFromJson<String>(json['hubName']),
address = nativeFromJson<String>(json['address']), address = nativeFromJson<String>(json['address']),
city = nativeFromJson<String>(json['city']), city = json['city'] == null ? null : nativeFromJson<String>(json['city']),
state = nativeFromJson<String>(json['state']), state = json['state'] == null ? null : nativeFromJson<String>(json['state']),
zipCode = nativeFromJson<String>(json['zipCode']), zipCode = json['zipCode'] == null ? null : nativeFromJson<String>(json['zipCode']),
managerName = nativeFromJson<String>(json['managerName']), managerName = json['managerName'] == null ? null : nativeFromJson<String>(json['managerName']),
isActive = nativeFromJson<bool>(json['isActive']), isActive = nativeFromJson<bool>(json['isActive']),
departments = json['departments'] == null ? null : AnyValue.fromJson(json['departments']), departments = json['departments'] == null ? null : AnyValue.fromJson(json['departments']),
createdAt = json['createdAt'] == null ? null : Timestamp.fromJson(json['createdAt']); createdAt = json['createdAt'] == null ? null : Timestamp.fromJson(json['createdAt']);
@@ -76,10 +76,18 @@ class ListTeamHubsByOwnerIdTeamHubs {
json['teamId'] = nativeToJson<String>(teamId); json['teamId'] = nativeToJson<String>(teamId);
json['hubName'] = nativeToJson<String>(hubName); json['hubName'] = nativeToJson<String>(hubName);
json['address'] = nativeToJson<String>(address); json['address'] = nativeToJson<String>(address);
json['city'] = nativeToJson<String>(city); if (city != null) {
json['state'] = nativeToJson<String>(state); json['city'] = nativeToJson<String?>(city);
json['zipCode'] = nativeToJson<String>(zipCode); }
json['managerName'] = nativeToJson<String>(managerName); if (state != null) {
json['state'] = nativeToJson<String?>(state);
}
if (zipCode != null) {
json['zipCode'] = nativeToJson<String?>(zipCode);
}
if (managerName != null) {
json['managerName'] = nativeToJson<String?>(managerName);
}
json['isActive'] = nativeToJson<bool>(isActive); json['isActive'] = nativeToJson<bool>(isActive);
if (departments != null) { if (departments != null) {
json['departments'] = departments!.toJson(); json['departments'] = departments!.toJson();
@@ -95,10 +103,10 @@ class ListTeamHubsByOwnerIdTeamHubs {
required this.teamId, required this.teamId,
required this.hubName, required this.hubName,
required this.address, required this.address,
required this.city, this.city,
required this.state, this.state,
required this.zipCode, this.zipCode,
required this.managerName, this.managerName,
required this.isActive, required this.isActive,
this.departments, this.departments,
this.createdAt, this.createdAt,

View File

@@ -2,6 +2,7 @@ library client_hubs;
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_data_connect/krow_data_connect.dart'; import 'package:krow_data_connect/krow_data_connect.dart';
import 'package:firebase_auth/firebase_auth.dart' as firebase;
import 'src/data/repositories_impl/hub_repository_impl.dart'; import 'src/data/repositories_impl/hub_repository_impl.dart';
import 'src/domain/repositories/hub_repository_interface.dart'; import 'src/domain/repositories/hub_repository_interface.dart';
import 'src/domain/usecases/assign_nfc_tag_usecase.dart'; import 'src/domain/usecases/assign_nfc_tag_usecase.dart';
@@ -22,7 +23,10 @@ class ClientHubsModule extends Module {
void binds(Injector i) { void binds(Injector i) {
// Repositories // Repositories
i.addLazySingleton<HubRepositoryInterface>( i.addLazySingleton<HubRepositoryInterface>(
() => HubRepositoryImpl(mock: i.get<BusinessRepositoryMock>()), () => HubRepositoryImpl(
firebaseAuth: firebase.FirebaseAuth.instance,
dataConnect: ExampleConnector.instance,
),
); );
// UseCases // UseCases

View File

@@ -1,45 +1,151 @@
import 'package:krow_data_connect/krow_data_connect.dart'; import 'package:firebase_auth/firebase_auth.dart' as firebase;
import 'package:krow_domain/krow_domain.dart'; import 'package:krow_data_connect/krow_data_connect.dart' as dc;
import 'package:krow_domain/krow_domain.dart' as domain;
import '../../domain/repositories/hub_repository_interface.dart'; import '../../domain/repositories/hub_repository_interface.dart';
/// Implementation of [HubRepositoryInterface] that uses [BusinessRepositoryMock]. /// Implementation of [HubRepositoryInterface] backed by Data Connect.
///
/// This class serves as a data adapter that bridges the domain repository interface
/// with the backend data source provided by the `data_connect` package. It strictly
/// delegates all operations to the [BusinessRepositoryMock], ensuring no business
/// logic resides in the data layer.
class HubRepositoryImpl implements HubRepositoryInterface { class HubRepositoryImpl implements HubRepositoryInterface {
/// The business repository mock from data connect. final firebase.FirebaseAuth _firebaseAuth;
final BusinessRepositoryMock mock; final dc.ExampleConnector _dataConnect;
/// Creates a [HubRepositoryImpl] instance. HubRepositoryImpl({
/// required firebase.FirebaseAuth firebaseAuth,
/// Takes a [BusinessRepositoryMock] as a dependency to perform data operations. required dc.ExampleConnector dataConnect,
HubRepositoryImpl({required this.mock}); }) : _firebaseAuth = firebaseAuth,
_dataConnect = dataConnect;
@override @override
Future<List<Hub>> getHubs() { Future<List<domain.Hub>> getHubs() async {
// In a production environment, the business ID would be retrieved from final business = await _getBusinessForCurrentUser();
// a session manager or authentication state. For the current mock strategy, final teamId = await _getOrCreateTeamId(business);
// we use a hardcoded value 'biz_1' to represent the active client. return _fetchHubsForTeam(teamId: teamId, businessId: business.id);
return mock.getHubs('biz_1');
} }
@override @override
Future<Hub> createHub({required String name, required String address}) { Future<domain.Hub> createHub({
// Delegates hub creation to the mock repository. required String name,
return mock.createHub(businessId: 'biz_1', name: name, address: address); required String address,
}) async {
final business = await _getBusinessForCurrentUser();
final teamId = await _getOrCreateTeamId(business);
final city = business.city;
final result = await _dataConnect
.createTeamHub(
teamId: teamId,
hubName: name,
address: address,
)
.city(city?.isNotEmpty == true ? city : '')
.execute();
final createdId = result.data?.teamHub_insert.id;
if (createdId == null) {
throw Exception('Hub creation failed.');
}
final hubs = await _fetchHubsForTeam(
teamId: teamId,
businessId: business.id,
);
domain.Hub? createdHub;
for (final hub in hubs) {
if (hub.id == createdId) {
createdHub = hub;
break;
}
}
return createdHub ??
domain.Hub(
id: createdId,
businessId: business.id,
name: name,
address: address,
nfcTagId: null,
status: domain.HubStatus.active,
);
} }
@override @override
Future<void> deleteHub(String id) { Future<void> deleteHub(String id) async {
// Delegates hub deletion to the mock repository. await _dataConnect.deleteTeamHub(id: id).execute();
return mock.deleteHub(id);
} }
@override @override
Future<void> assignNfcTag({required String hubId, required String nfcTagId}) { Future<void> assignNfcTag({
// Delegates NFC tag assignment to the mock repository. required String hubId,
return mock.assignNfcTag(hubId: hubId, nfcTagId: nfcTagId); required String nfcTagId,
}) {
throw UnimplementedError('NFC tag assignment is not supported for team hubs.');
}
Future<dc.GetBusinessesByUserIdBusinesses> _getBusinessForCurrentUser() async {
final user = _firebaseAuth.currentUser;
if (user == null) {
throw Exception('User is not authenticated.');
}
final result = await _dataConnect.getBusinessesByUserId(
userId: user.uid,
).execute();
if (result.data.businesses.isEmpty) {
await _firebaseAuth.signOut();
throw Exception('No business found for this user. Please sign in again.');
}
return result.data.businesses.first;
}
Future<String> _getOrCreateTeamId(
dc.GetBusinessesByUserIdBusinesses business,
) async {
final teamsResult = await _dataConnect.getTeamsByOwnerId(
ownerId: business.id,
).execute();
if (teamsResult.data.teams.isNotEmpty) {
return teamsResult.data.teams.first.id;
}
final createTeamBuilder = _dataConnect.createTeam(
teamName: '${business.businessName} Team',
ownerId: business.id,
ownerName: business.contactName ?? '',
ownerRole: 'OWNER',
);
if (business.email != null) {
createTeamBuilder.email(business.email);
}
final createTeamResult = await createTeamBuilder.execute();
final teamId = createTeamResult.data?.team_insert.id;
if (teamId == null) {
throw Exception('Team creation failed.');
}
return teamId;
}
Future<List<domain.Hub>> _fetchHubsForTeam({
required String teamId,
required String businessId,
}) async {
final hubsResult = await _dataConnect.getTeamHubsByTeamId(
teamId: teamId,
).execute();
return hubsResult.data.teamHubs
.map(
(hub) => domain.Hub(
id: hub.id,
businessId: businessId,
name: hub.hubName,
address: hub.address,
nfcTagId: null,
status:
hub.isActive
? domain.HubStatus.active
: domain.HubStatus.inactive,
),
)
.toList();
} }
} }

View File

@@ -1,5 +1,5 @@
connectorId: example connectorId: example
generate: generate:
dartSdk: dartSdk:
- outputDir: ../../../apps/packages/data_connect/lib/src/dataconnect_generated - outputDir: ../../../apps/mobile/packages/data_connect/lib/src/dataconnect_generated
package: dataconnect_generated/generated.dart package: dataconnect_generated/generated.dart

View File

@@ -1,6 +1,6 @@
mutation createTeam( mutation createTeam(
$teamName: String! $teamName: String!
$ownerId: String! $ownerId: UUID!
$ownerName: String! $ownerName: String!
$ownerRole: String! $ownerRole: String!
$email: String $email: String

View File

@@ -44,7 +44,7 @@ query getTeamById($id: UUID!) @auth(level: USER) {
} }
} }
query getTeamsByOwnerId($ownerId: String!) @auth(level: USER) { query getTeamsByOwnerId($ownerId: UUID!) @auth(level: USER) {
teams(where: { ownerId: { eq: $ownerId } }) { teams(where: { ownerId: { eq: $ownerId } }) {
id id
teamName teamName

View File

@@ -2,10 +2,10 @@ mutation createTeamHub(
$teamId: UUID! $teamId: UUID!
$hubName: String! $hubName: String!
$address: String! $address: String!
$city: String! $city: String
$state: String! $state: String
$zipCode: String! $zipCode: String
$managerName: String! $managerName: String
$isActive: Boolean $isActive: Boolean
$departments: Any $departments: Any
) @auth(level: USER) { ) @auth(level: USER) {

View File

@@ -56,7 +56,7 @@ query getTeamHubsByTeamId($teamId: UUID!) @auth(level: USER) {
# LIST TEAM HUBS BY OWNER (Vendor/Business) # LIST TEAM HUBS BY OWNER (Vendor/Business)
# ------------------------------------------------------------ # ------------------------------------------------------------
query listTeamHubsByOwnerId( query listTeamHubsByOwnerId(
$ownerId: String! $ownerId: UUID!
) @auth(level: USER) { ) @auth(level: USER) {
teamHubs( teamHubs(
where: { where: {

View File

@@ -3,7 +3,7 @@ type Team @table(name: "teams") {
id: UUID! @default(expr: "uuidV4()") id: UUID! @default(expr: "uuidV4()")
teamName: String! teamName: String!
ownerId: String! #vendor/business ownerId: UUID! #vendor/business
ownerName: String! ownerName: String!
ownerRole: String! ownerRole: String!
email: String email: String

View File

@@ -6,10 +6,10 @@ type TeamHub @table(name: "team_hubs") {
hubName: String! hubName: String!
address: String! address: String!
city: String! city: String
state: String! state: String
zipCode: String! zipCode: String
managerName: String! managerName: String
isActive: Boolean! @default(expr: "true") isActive: Boolean! @default(expr: "true")
departments: Any departments: Any