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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -15,8 +15,8 @@ mutation CreateStaff(
$reliabilityScore: Int $reliabilityScore: Int
$bio: String $bio: String
$skills: Any $skills: [String!]
$industries: Any $industries: [String!]
$preferredLocations: [String!] $preferredLocations: [String!]
$maxDistanceMiles: Int $maxDistanceMiles: Int
$languages: Any $languages: Any
@@ -106,8 +106,8 @@ mutation UpdateStaff(
$reliabilityScore: Int $reliabilityScore: Int
$bio: String $bio: String
$skills: Any $skills: [String!]
$industries: Any $industries: [String!]
$preferredLocations: [String!] $preferredLocations: [String!]
$maxDistanceMiles: Int $maxDistanceMiles: Int
$languages: Any $languages: Any

View File

@@ -61,8 +61,8 @@ type Staff @table(name: "staffs") {
# Profile # Profile
bio: String bio: String
skills: Any #changed it for staffRole skills: [String] #changed it for staffRole
industries: Any industries: [String]
preferredLocations: [String] preferredLocations: [String]
maxDistanceMiles: Int maxDistanceMiles: Int
languages: Any languages: Any