feat: Refactor code structure and optimize performance across multiple modules

This commit is contained in:
Achintha Isuru
2025-11-17 23:29:28 -05:00
parent 831570f2e0
commit a64cbd9edf
1508 changed files with 105319 additions and 0 deletions

View File

@@ -0,0 +1,119 @@
import 'package:graphql/client.dart';
import 'package:injectable/injectable.dart';
import 'package:krow/core/application/clients/api/api_client.dart';
import 'package:krow/core/data/models/event/addon_model.dart';
import 'package:krow/core/data/models/event/business_member_model.dart';
import 'package:krow/core/data/models/event/hub_model.dart';
import 'package:krow/core/data/models/event/tag_model.dart';
import 'package:krow/core/data/models/shift/business_skill_model.dart';
import 'package:krow/core/data/models/shift/department_model.dart';
import 'package:krow/features/create_event/data/create_event_gql.dart';
@Injectable()
class CreateEventApiProvider {
final ApiClient _client;
CreateEventApiProvider({required ApiClient client}) : _client = client;
Future<List<HubModel>> getHubs() async {
QueryResult result = await _client.query(
schema: getClientHubsQuery,
);
if (result.hasException) {
throw Exception(result.exception.toString());
}
if (result.data == null || result.data!['client_hubs'] == null) {
return [];
}
return (result.data!['client_hubs'] as List)
.map((e) => HubModel.fromJson(e))
.toList();
}
Future<List<AddonModel>> getAddons() async {
QueryResult result = await _client.query(
schema: getClientAddonsQuery,
);
if (result.hasException) {
throw Exception(result.exception.toString());
}
if (result.data == null || result.data!['client_business_addons'] == null) {
return [];
}
return (result.data!['client_business_addons'] as List)
.map((e) => AddonModel.fromJson(e))
.toList();
}
Future<List<TagModel>> getTags() async {
QueryResult result = await _client.query(
schema: getClientTagsQuery,
);
if (result.hasException) {
throw Exception(result.exception.toString());
}
if (result.data == null || result.data!['client_tags'] == null) {
return [];
}
return (result.data!['client_tags'] as List)
.map((e) => TagModel.fromJson(e))
.toList();
}
Future<List<BusinessMemberModel>> getContacts() async {
QueryResult result = await _client.query(
schema: getClientMembersQuery,
);
if (result.hasException) {
throw Exception(result.exception.toString());
}
if (result.data == null || result.data!['client_shift_contacts'] == null) {
return [];
}
return (result.data!['client_shift_contacts'] as List)
.map((e) => BusinessMemberModel.fromJson(e))
.toList();
}
Future<List<BusinessSkillModel>> getSkill() async {
QueryResult result = await _client.query(
schema: getClientBusinessSkillQuery,
);
if (result.hasException) {
throw Exception(result.exception.toString());
}
if (result.data == null || result.data!['client_business_skills'] == null) {
return [];
}
return (result.data!['client_business_skills'] as List)
.map((e) => BusinessSkillModel.fromJson(e))
.toList();
}
Future<List<DepartmentModel>> getDepartments(String hubId) async {
QueryResult result = await _client.query(
schema: getClientDepartmentsQuery,
body: {'hub_id': hubId},
);
if (result.hasException) {
throw Exception(result.exception.toString());
}
if (result.data == null || result.data!['client_hub_departments'] == null) {
return [];
}
return (result.data!['client_hub_departments'] as List)
.map((e) => DepartmentModel.fromJson(e))
.toList();
}
}

View File

@@ -0,0 +1,82 @@
const String getClientHubsQuery = r'''
query getClientHubs() {
client_hubs {
id
name
address
full_address {
street_number
zip_code
latitude
longitude
formatted_address
street
region
city
country
}
}
}
''';
const String getClientAddonsQuery = r'''
query getClientAddons() {
client_business_addons {
id
name
}
}
''';
const String getClientTagsQuery = r'''
query getClientTags() {
client_tags {
id
name
slug
}
}
''';
const String getClientBusinessSkillQuery = r'''
query getClientSkills() {
client_business_skills {
id
skill {
id
name
slug
price
}
price
is_active
}
}
''';
const String getClientMembersQuery = r'''
query getClientMembers() {
client_shift_contacts() {
id
first_name
last_name
title
avatar
auth_info {
email
phone
}
}
}
''';
const String getClientDepartmentsQuery = r'''
query getClientSkills($hub_id: ID!) {
client_hub_departments(hub_id: $hub_id) {
id
name
}
}
''';

View File

@@ -0,0 +1,48 @@
import 'package:injectable/injectable.dart';
import 'package:krow/core/data/models/event/addon_model.dart';
import 'package:krow/core/data/models/event/business_member_model.dart';
import 'package:krow/core/data/models/event/hub_model.dart';
import 'package:krow/core/data/models/event/tag_model.dart';
import 'package:krow/core/data/models/shift/business_skill_model.dart';
import 'package:krow/core/data/models/shift/department_model.dart';
import 'package:krow/features/create_event/data/create_event_api_provider.dart';
import 'package:krow/features/create_event/domain/create_event_repository.dart';
@Singleton(as: CreateEventRepository)
class CreateEventRepositoryImpl extends CreateEventRepository {
final CreateEventApiProvider _apiProvider;
CreateEventRepositoryImpl({required CreateEventApiProvider apiProvider})
: _apiProvider = apiProvider;
@override
Future<List<HubModel>> getHubs() async {
return _apiProvider.getHubs();
}
@override
Future<List<AddonModel>> getAddons() async {
return _apiProvider.getAddons();
}
@override
Future<List<TagModel>> getTags() async {
return _apiProvider.getTags();
}
@override
Future<List<BusinessMemberModel>> getContacts() async {
return _apiProvider.getContacts();
}
@override
Future<List<BusinessSkillModel>> getSkills() {
return _apiProvider.getSkill();
}
@override
Future<List<DepartmentModel>> getDepartments(String hubId) {
return _apiProvider.getDepartments(hubId);
}
}