Refactor staff data models to use List<String> for skills and industries

- Updated GetStaffByIdStaff, GetStaffByUserIdStaffs, ListStaffStaffs, and UpdateStaffVariablesBuilder classes to replace AnyValue with List<String> for skills and industries.
- Modified JSON serialization and deserialization logic accordingly.
- Adjusted ExperienceRepositoryImpl to handle List<String> for industries and skills.
- Updated GraphQL mutations and schema to reflect changes in data types for skills and industries.
This commit is contained in:
Achintha Isuru
2026-01-27 14:05:32 -05:00
parent 157ace0e77
commit 8e7caeed48
12 changed files with 17347 additions and 17327 deletions

View File

@@ -15,8 +15,8 @@ class CreateStaffVariablesBuilder {
Optional<int> _cancellationCount = Optional.optional(nativeFromJson, nativeToJson);
Optional<int> _reliabilityScore = Optional.optional(nativeFromJson, nativeToJson);
Optional<String> _bio = Optional.optional(nativeFromJson, nativeToJson);
Optional<AnyValue> _skills = Optional.optional(AnyValue.fromJson, defaultSerializer);
Optional<AnyValue> _industries = Optional.optional(AnyValue.fromJson, defaultSerializer);
Optional<List<String>> _skills = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));
Optional<List<String>> _industries = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));
Optional<List<String>> _preferredLocations = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));
Optional<int> _maxDistanceMiles = Optional.optional(nativeFromJson, nativeToJson);
Optional<AnyValue> _languages = Optional.optional(AnyValue.fromJson, defaultSerializer);
@@ -84,11 +84,11 @@ class CreateStaffVariablesBuilder {
_bio.value = t;
return this;
}
CreateStaffVariablesBuilder skills(AnyValue? t) {
CreateStaffVariablesBuilder skills(List<String>? t) {
_skills.value = t;
return this;
}
CreateStaffVariablesBuilder industries(AnyValue? t) {
CreateStaffVariablesBuilder industries(List<String>? t) {
_industries.value = t;
return this;
}
@@ -262,8 +262,8 @@ class CreateStaffVariables {
late final Optional<int>cancellationCount;
late final Optional<int>reliabilityScore;
late final Optional<String>bio;
late final Optional<AnyValue>skills;
late final Optional<AnyValue>industries;
late final Optional<List<String>>skills;
late final Optional<List<String>>industries;
late final Optional<List<String>>preferredLocations;
late final Optional<int>maxDistanceMiles;
late final Optional<AnyValue>languages;
@@ -339,12 +339,16 @@ class CreateStaffVariables {
bio.value = json['bio'] == null ? null : nativeFromJson<String>(json['bio']);
skills = Optional.optional(AnyValue.fromJson, defaultSerializer);
skills.value = json['skills'] == null ? null : AnyValue.fromJson(json['skills']);
skills = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));
skills.value = json['skills'] == null ? null : (json['skills'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList();
industries = Optional.optional(AnyValue.fromJson, defaultSerializer);
industries.value = json['industries'] == null ? null : AnyValue.fromJson(json['industries']);
industries = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));
industries.value = json['industries'] == null ? null : (json['industries'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList();
preferredLocations = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));

View File

@@ -51,7 +51,7 @@ class FilterStaffStaffs {
final int? totalShifts;
final String? ownerId;
final bool? isRecommended;
final AnyValue? skills;
final List<String>? skills;
final EnumValue<BackgroundCheckStatus>? backgroundCheckStatus;
final EnumValue<EmploymentType>? employmentType;
final String? initial;
@@ -72,7 +72,9 @@ class FilterStaffStaffs {
totalShifts = json['totalShifts'] == null ? null : nativeFromJson<int>(json['totalShifts']),
ownerId = json['ownerId'] == null ? null : nativeFromJson<String>(json['ownerId']),
isRecommended = json['isRecommended'] == null ? null : nativeFromJson<bool>(json['isRecommended']),
skills = json['skills'] == null ? null : AnyValue.fromJson(json['skills']),
skills = json['skills'] == null ? null : (json['skills'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList(),
backgroundCheckStatus = json['backgroundCheckStatus'] == null ? null : backgroundCheckStatusDeserializer(json['backgroundCheckStatus']),
employmentType = json['employmentType'] == null ? null : employmentTypeDeserializer(json['employmentType']),
initial = json['initial'] == null ? null : nativeFromJson<String>(json['initial']),
@@ -147,7 +149,7 @@ class FilterStaffStaffs {
json['isRecommended'] = nativeToJson<bool?>(isRecommended);
}
if (skills != null) {
json['skills'] = skills!.toJson();
json['skills'] = skills?.map((e) => nativeToJson<String>(e)).toList();
}
if (backgroundCheckStatus != null) {
json['backgroundCheckStatus'] =

View File

@@ -37,8 +37,8 @@ class GetStaffByIdStaff {
final AnyValue? badges;
final bool? isRecommended;
final String? bio;
final AnyValue? skills;
final AnyValue? industries;
final List<String>? skills;
final List<String>? industries;
final List<String>? preferredLocations;
final int? maxDistanceMiles;
final AnyValue? languages;
@@ -77,8 +77,12 @@ class GetStaffByIdStaff {
badges = json['badges'] == null ? null : AnyValue.fromJson(json['badges']),
isRecommended = json['isRecommended'] == null ? null : nativeFromJson<bool>(json['isRecommended']),
bio = json['bio'] == null ? null : nativeFromJson<String>(json['bio']),
skills = json['skills'] == null ? null : AnyValue.fromJson(json['skills']),
industries = json['industries'] == null ? null : AnyValue.fromJson(json['industries']),
skills = json['skills'] == null ? null : (json['skills'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList(),
industries = json['industries'] == null ? null : (json['industries'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList(),
preferredLocations = json['preferredLocations'] == null ? null : (json['preferredLocations'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList(),
@@ -204,10 +208,10 @@ class GetStaffByIdStaff {
json['bio'] = nativeToJson<String?>(bio);
}
if (skills != null) {
json['skills'] = skills!.toJson();
json['skills'] = skills?.map((e) => nativeToJson<String>(e)).toList();
}
if (industries != null) {
json['industries'] = industries!.toJson();
json['industries'] = industries?.map((e) => nativeToJson<String>(e)).toList();
}
if (preferredLocations != null) {
json['preferredLocations'] = preferredLocations?.map((e) => nativeToJson<String>(e)).toList();

View File

@@ -36,8 +36,8 @@ class GetStaffByUserIdStaffs {
final AnyValue? badges;
final bool? isRecommended;
final String? bio;
final AnyValue? skills;
final AnyValue? industries;
final List<String>? skills;
final List<String>? industries;
final List<String>? preferredLocations;
final int? maxDistanceMiles;
final AnyValue? languages;
@@ -75,8 +75,12 @@ class GetStaffByUserIdStaffs {
badges = json['badges'] == null ? null : AnyValue.fromJson(json['badges']),
isRecommended = json['isRecommended'] == null ? null : nativeFromJson<bool>(json['isRecommended']),
bio = json['bio'] == null ? null : nativeFromJson<String>(json['bio']),
skills = json['skills'] == null ? null : AnyValue.fromJson(json['skills']),
industries = json['industries'] == null ? null : AnyValue.fromJson(json['industries']),
skills = json['skills'] == null ? null : (json['skills'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList(),
industries = json['industries'] == null ? null : (json['industries'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList(),
preferredLocations = json['preferredLocations'] == null ? null : (json['preferredLocations'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList(),
@@ -198,10 +202,10 @@ class GetStaffByUserIdStaffs {
json['bio'] = nativeToJson<String?>(bio);
}
if (skills != null) {
json['skills'] = skills!.toJson();
json['skills'] = skills?.map((e) => nativeToJson<String>(e)).toList();
}
if (industries != null) {
json['industries'] = industries!.toJson();
json['industries'] = industries?.map((e) => nativeToJson<String>(e)).toList();
}
if (preferredLocations != null) {
json['preferredLocations'] = preferredLocations?.map((e) => nativeToJson<String>(e)).toList();

View File

@@ -36,8 +36,8 @@ class ListStaffStaffs {
final AnyValue? badges;
final bool? isRecommended;
final String? bio;
final AnyValue? skills;
final AnyValue? industries;
final List<String>? skills;
final List<String>? industries;
final List<String>? preferredLocations;
final int? maxDistanceMiles;
final AnyValue? languages;
@@ -74,8 +74,12 @@ class ListStaffStaffs {
badges = json['badges'] == null ? null : AnyValue.fromJson(json['badges']),
isRecommended = json['isRecommended'] == null ? null : nativeFromJson<bool>(json['isRecommended']),
bio = json['bio'] == null ? null : nativeFromJson<String>(json['bio']),
skills = json['skills'] == null ? null : AnyValue.fromJson(json['skills']),
industries = json['industries'] == null ? null : AnyValue.fromJson(json['industries']),
skills = json['skills'] == null ? null : (json['skills'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList(),
industries = json['industries'] == null ? null : (json['industries'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList(),
preferredLocations = json['preferredLocations'] == null ? null : (json['preferredLocations'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList(),
@@ -197,10 +201,10 @@ class ListStaffStaffs {
json['bio'] = nativeToJson<String?>(bio);
}
if (skills != null) {
json['skills'] = skills!.toJson();
json['skills'] = skills?.map((e) => nativeToJson<String>(e)).toList();
}
if (industries != null) {
json['industries'] = industries!.toJson();
json['industries'] = industries?.map((e) => nativeToJson<String>(e)).toList();
}
if (preferredLocations != null) {
json['preferredLocations'] = preferredLocations?.map((e) => nativeToJson<String>(e)).toList();

View File

@@ -16,8 +16,8 @@ class UpdateStaffVariablesBuilder {
Optional<int> _cancellationCount = Optional.optional(nativeFromJson, nativeToJson);
Optional<int> _reliabilityScore = Optional.optional(nativeFromJson, nativeToJson);
Optional<String> _bio = Optional.optional(nativeFromJson, nativeToJson);
Optional<AnyValue> _skills = Optional.optional(AnyValue.fromJson, defaultSerializer);
Optional<AnyValue> _industries = Optional.optional(AnyValue.fromJson, defaultSerializer);
Optional<List<String>> _skills = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));
Optional<List<String>> _industries = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));
Optional<List<String>> _preferredLocations = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));
Optional<int> _maxDistanceMiles = Optional.optional(nativeFromJson, nativeToJson);
Optional<AnyValue> _languages = Optional.optional(AnyValue.fromJson, defaultSerializer);
@@ -93,11 +93,11 @@ class UpdateStaffVariablesBuilder {
_bio.value = t;
return this;
}
UpdateStaffVariablesBuilder skills(AnyValue? t) {
UpdateStaffVariablesBuilder skills(List<String>? t) {
_skills.value = t;
return this;
}
UpdateStaffVariablesBuilder industries(AnyValue? t) {
UpdateStaffVariablesBuilder industries(List<String>? t) {
_industries.value = t;
return this;
}
@@ -274,8 +274,8 @@ class UpdateStaffVariables {
late final Optional<int>cancellationCount;
late final Optional<int>reliabilityScore;
late final Optional<String>bio;
late final Optional<AnyValue>skills;
late final Optional<AnyValue>industries;
late final Optional<List<String>>skills;
late final Optional<List<String>>industries;
late final Optional<List<String>>preferredLocations;
late final Optional<int>maxDistanceMiles;
late final Optional<AnyValue>languages;
@@ -357,12 +357,16 @@ class UpdateStaffVariables {
bio.value = json['bio'] == null ? null : nativeFromJson<String>(json['bio']);
skills = Optional.optional(AnyValue.fromJson, defaultSerializer);
skills.value = json['skills'] == null ? null : AnyValue.fromJson(json['skills']);
skills = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));
skills.value = json['skills'] == null ? null : (json['skills'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList();
industries = Optional.optional(AnyValue.fromJson, defaultSerializer);
industries.value = json['industries'] == null ? null : AnyValue.fromJson(json['industries']);
industries = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));
industries.value = json['industries'] == null ? null : (json['industries'] as List<dynamic>)
.map((e) => nativeFromJson<String>(e))
.toList();
preferredLocations = Optional.optional(listDeserializer(nativeFromJson), listSerializer(nativeToJson));

View File

@@ -1,7 +1,5 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_data_connect/firebase_data_connect.dart' as fdc;
import 'package:krow_data_connect/krow_data_connect.dart' as dc;
import 'package:krow_domain/krow_domain.dart';
import '../../domain/repositories/experience_repository_interface.dart';
/// Implementation of [ExperienceRepositoryInterface] that delegates to Data Connect.
@@ -10,7 +8,7 @@ class ExperienceRepositoryImpl implements ExperienceRepositoryInterface {
// ignore: unused_field
final FirebaseAuth _firebaseAuth;
/// Creates a [ExperienceRepositoryImpl] using Data Connect and Auth.
/// Creates a [ExperienceRepositoryImpl] using Da a Connect and Auth.
ExperienceRepositoryImpl({
required dc.ExampleConnector dataConnect,
required FirebaseAuth firebaseAuth,
@@ -28,13 +26,13 @@ class ExperienceRepositoryImpl implements ExperienceRepositoryInterface {
@override
Future<List<String>> getIndustries(String staffId) async {
final staff = await _getStaff(staffId);
return ExperienceAdapter.fromDynamicList(staff.industries?.value);
return staff.industries ?? [];
}
@override
Future<List<String>> getSkills(String staffId) async {
final staff = await _getStaff(staffId);
return ExperienceAdapter.fromDynamicList(staff.skills?.value);
return staff.skills ?? [];
}
@override
@@ -45,8 +43,8 @@ class ExperienceRepositoryImpl implements ExperienceRepositoryInterface {
) async {
await _dataConnect
.updateStaff(id: staffId)
.industries(fdc.AnyValue(industries))
.skills(fdc.AnyValue(skills))
.industries(industries)
.skills(skills)
.execute();
}
}

View File

@@ -17,16 +17,16 @@ dependencies:
# Architecture Packages
krow_domain:
path: ../../../../../../domain
path: ../../../../../domain
krow_core:
path: ../../../../../../core
path: ../../../../../core
krow_data_connect:
path: ../../../../../../data_connect
firebase_auth: ^5.0.0
path: ../../../../../data_connect
firebase_auth: ^6.1.2
design_system:
path: ../../../../../../design_system
path: ../../../../../design_system
core_localization:
path: ../../../../../../core_localization
path: ../../../../../core_localization
dev_dependencies:
flutter_test: