Refactor API endpoint usage across multiple repositories to use ClientEndpoints and StaffEndpoints

- Updated ClientOrderQueryRepositoryImpl to replace V2ApiEndpoints with ClientEndpoints for vendor, role, hub, and manager retrieval methods.
- Modified ViewOrdersRepositoryImpl to utilize ClientEndpoints for order viewing, editing, and vendor retrieval.
- Refactored ReportsRepositoryImpl to switch from V2ApiEndpoints to ClientEndpoints for various report fetching methods.
- Changed SettingsRepositoryImpl to use AuthEndpoints for sign-out functionality.
- Adjusted AuthRepositoryImpl to replace V2ApiEndpoints with AuthEndpoints for phone authentication and sign-out processes.
- Updated ProfileSetupRepositoryImpl to utilize StaffEndpoints for profile setup.
- Refactored AvailabilityRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for availability management.
- Changed ClockInRepositoryImpl to use StaffEndpoints for clock-in and clock-out functionalities.
- Updated HomeRepositoryImpl to replace V2ApiEndpoints with StaffEndpoints for dashboard and profile completion retrieval.
- Refactored PaymentsRepositoryImpl to utilize StaffEndpoints for payment summaries and history.
- Changed ProfileRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for staff profile and section status retrieval.
- Updated CertificatesRepositoryImpl to use StaffEndpoints for certificate management.
- Refactored DocumentsRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for document management.
- Changed TaxFormsRepositoryImpl to utilize StaffEndpoints for tax form management.
- Updated BankAccountRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for bank account management.
- Refactored TimeCardRepositoryImpl to use StaffEndpoints for time card retrieval.
- Changed AttireRepositoryImpl to utilize StaffEndpoints for attire management.
- Updated EmergencyContactRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for emergency contact management.
- Refactored ExperienceRepositoryImpl to use StaffEndpoints for industry and skill retrieval.
- Changed PersonalInfoRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for personal information management.
- Updated FaqsRepositoryImpl to utilize StaffEndpoints for FAQs retrieval.
- Refactored PrivacySettingsRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for privacy settings management.
- Changed ShiftsRepositoryImpl to use StaffEndpoints for shift management and retrieval.
- Updated StaffMainRepositoryImpl to switch from V2ApiEndpoints to StaffEndpoints for profile completion checks.
This commit is contained in:
Achintha Isuru
2026-03-17 11:40:15 -04:00
parent 31231c1e6d
commit 57bba8ab4e
46 changed files with 134 additions and 544 deletions

View File

@@ -63,7 +63,7 @@ class AuthRepositoryImpl implements AuthRepositoryInterface {
try {
final domain.ApiResponse startResponse = await _apiService.post(
V2ApiEndpoints.staffPhoneStart,
AuthEndpoints.staffPhoneStart.path,
data: <String, dynamic>{
'phoneNumber': phoneNumber,
},
@@ -182,7 +182,7 @@ class AuthRepositoryImpl implements AuthRepositoryInterface {
// Step 3: Call V2 verify endpoint with the Firebase ID token.
final String v2Mode = mode == AuthMode.signup ? 'sign-up' : 'sign-in';
final domain.ApiResponse response = await _apiService.post(
V2ApiEndpoints.staffPhoneVerify,
AuthEndpoints.staffPhoneVerify.path,
data: <String, dynamic>{
'idToken': idToken,
'mode': v2Mode,
@@ -233,7 +233,7 @@ class AuthRepositoryImpl implements AuthRepositoryInterface {
@override
Future<void> signOut() async {
try {
await _apiService.post(V2ApiEndpoints.staffSignOut);
await _apiService.post(AuthEndpoints.staffSignOut.path);
} catch (_) {
// Sign-out should not fail even if the API call fails.
// The local sign-out below will clear the session regardless.

View File

@@ -27,7 +27,7 @@ class ProfileSetupRepositoryImpl implements ProfileSetupRepository {
required List<String> skills,
}) async {
final ApiResponse response = await _apiService.post(
V2ApiEndpoints.staffProfileSetup,
StaffEndpoints.profileSetup.path,
data: <String, dynamic>{
'fullName': fullName,
if (bio != null && bio.isNotEmpty) 'bio': bio,

View File

@@ -25,7 +25,7 @@ class AvailabilityRepositoryImpl implements AvailabilityRepository {
final String endDate = _toIsoDate(end);
final ApiResponse response = await _apiService.get(
V2ApiEndpoints.staffAvailability,
StaffEndpoints.availability.path,
params: <String, dynamic>{
'startDate': startDate,
'endDate': endDate,
@@ -48,7 +48,7 @@ class AvailabilityRepositoryImpl implements AvailabilityRepository {
required List<TimeSlot> slots,
}) async {
final ApiResponse response = await _apiService.put(
V2ApiEndpoints.staffAvailability,
StaffEndpoints.availability.path,
data: <String, dynamic>{
'dayOfWeek': dayOfWeek,
'availabilityStatus': status.toJson(),
@@ -86,7 +86,7 @@ class AvailabilityRepositoryImpl implements AvailabilityRepository {
}
await _apiService.post(
V2ApiEndpoints.staffAvailabilityQuickSet,
StaffEndpoints.availabilityQuickSet.path,
data: data,
);
}

View File

@@ -5,7 +5,7 @@ import 'package:staff_clock_in/src/domain/repositories/clock_in_repository_inter
/// Implementation of [ClockInRepositoryInterface] using the V2 REST API.
///
/// All backend calls go through [BaseApiService] with [V2ApiEndpoints].
/// All backend calls go through [BaseApiService] with [StaffEndpoints].
/// The old Data Connect implementation has been removed.
class ClockInRepositoryImpl implements ClockInRepositoryInterface {
/// Creates a [ClockInRepositoryImpl] backed by the V2 API.
@@ -17,7 +17,7 @@ class ClockInRepositoryImpl implements ClockInRepositoryInterface {
@override
Future<List<Shift>> getTodaysShifts() async {
final ApiResponse response = await _apiService.get(
V2ApiEndpoints.staffClockInShiftsToday,
StaffEndpoints.clockInShiftsToday.path,
);
final List<dynamic> items = response.data['items'] as List<dynamic>;
// TODO: Ask BE to add latitude, longitude, hourlyRate, and clientName
@@ -33,7 +33,7 @@ class ClockInRepositoryImpl implements ClockInRepositoryInterface {
@override
Future<AttendanceStatus> getAttendanceStatus() async {
final ApiResponse response = await _apiService.get(
V2ApiEndpoints.staffClockInStatus,
StaffEndpoints.clockInStatus.path,
);
return AttendanceStatus.fromJson(response.data as Map<String, dynamic>);
}
@@ -44,7 +44,7 @@ class ClockInRepositoryImpl implements ClockInRepositoryInterface {
String? notes,
}) async {
await _apiService.post(
V2ApiEndpoints.staffClockIn,
StaffEndpoints.clockIn.path,
data: <String, dynamic>{
'shiftId': shiftId,
'sourceType': 'GEO',
@@ -62,7 +62,7 @@ class ClockInRepositoryImpl implements ClockInRepositoryInterface {
String? shiftId,
}) async {
await _apiService.post(
V2ApiEndpoints.staffClockOut,
StaffEndpoints.clockOut.path,
data: <String, dynamic>{
if (shiftId != null) 'shiftId': shiftId,
'sourceType': 'GEO',

View File

@@ -16,19 +16,19 @@ class ClockInPageSkeleton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return UiShimmer(
return const UiShimmer(
child: SingleChildScrollView(
padding: const EdgeInsets.only(
padding: EdgeInsets.only(
bottom: UiConstants.space24,
top: UiConstants.space6,
),
child: Padding(
padding: const EdgeInsets.symmetric(
padding: EdgeInsets.symmetric(
horizontal: UiConstants.space5,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: const <Widget>[
children: <Widget>[
// Date selector row
DateSelectorSkeleton(),
SizedBox(height: UiConstants.space5),

View File

@@ -2,8 +2,6 @@ import 'package:core_localization/core_localization.dart';
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_core/core.dart';
import '../../bloc/geofence/geofence_bloc.dart';
import '../../bloc/geofence/geofence_event.dart';

View File

@@ -17,7 +17,7 @@ class HomeRepositoryImpl implements HomeRepository {
@override
Future<StaffDashboard> getDashboard() async {
final ApiResponse response =
await _apiService.get(V2ApiEndpoints.staffDashboard);
await _apiService.get(StaffEndpoints.dashboard.path);
final Map<String, dynamic> data = response.data as Map<String, dynamic>;
return StaffDashboard.fromJson(data);
}
@@ -25,7 +25,7 @@ class HomeRepositoryImpl implements HomeRepository {
@override
Future<bool> getProfileCompletion() async {
final ApiResponse response =
await _apiService.get(V2ApiEndpoints.staffProfileCompletion);
await _apiService.get(StaffEndpoints.profileCompletion.path);
final Map<String, dynamic> data = response.data as Map<String, dynamic>;
final ProfileCompletion completion = ProfileCompletion.fromJson(data);
return completion.completed;

View File

@@ -24,7 +24,7 @@ class PaymentsRepositoryImpl implements PaymentsRepository {
if (endDate != null) 'endDate': endDate,
};
final ApiResponse response = await _apiService.get(
V2ApiEndpoints.staffPaymentsSummary,
StaffEndpoints.paymentsSummary.path,
params: params.isEmpty ? null : params,
);
return PaymentSummary.fromJson(response.data as Map<String, dynamic>);
@@ -40,7 +40,7 @@ class PaymentsRepositoryImpl implements PaymentsRepository {
if (endDate != null) 'endDate': endDate,
};
final ApiResponse response = await _apiService.get(
V2ApiEndpoints.staffPaymentsHistory,
StaffEndpoints.paymentsHistory.path,
params: params.isEmpty ? null : params,
);
final Map<String, dynamic> body = response.data as Map<String, dynamic>;
@@ -63,7 +63,7 @@ class PaymentsRepositoryImpl implements PaymentsRepository {
if (endDate != null) 'endDate': endDate,
};
final ApiResponse response = await _apiService.get(
V2ApiEndpoints.staffPaymentsChart,
StaffEndpoints.paymentsChart.path,
params: params,
);
final Map<String, dynamic> body = response.data as Map<String, dynamic>;

View File

@@ -14,7 +14,7 @@ class ProfileRepositoryImpl {
/// Fetches the staff profile from the V2 session endpoint.
Future<Staff> getStaffProfile() async {
final ApiResponse response =
await _api.get(V2ApiEndpoints.staffSession);
await _api.get(StaffEndpoints.session.path);
final Map<String, dynamic> json =
response.data['staff'] as Map<String, dynamic>;
return Staff.fromJson(json);
@@ -23,7 +23,7 @@ class ProfileRepositoryImpl {
/// Fetches the profile section completion statuses.
Future<ProfileSectionStatus> getProfileSections() async {
final ApiResponse response =
await _api.get(V2ApiEndpoints.staffProfileSections);
await _api.get(StaffEndpoints.profileSections.path);
final Map<String, dynamic> json =
response.data as Map<String, dynamic>;
return ProfileSectionStatus.fromJson(json);
@@ -31,6 +31,6 @@ class ProfileRepositoryImpl {
/// Signs out the current user.
Future<void> signOut() async {
await _api.post(V2ApiEndpoints.signOut);
await _api.post(AuthEndpoints.signOut.path);
}
}

View File

@@ -27,7 +27,7 @@ class CertificatesRepositoryImpl implements CertificatesRepository {
@override
Future<List<StaffCertificate>> getCertificates() async {
final ApiResponse response =
await _api.get(V2ApiEndpoints.staffCertificates);
await _api.get(StaffEndpoints.certificates.path);
final List<dynamic> items =
response.data['certificates'] as List<dynamic>;
return items
@@ -73,7 +73,7 @@ class CertificatesRepositoryImpl implements CertificatesRepository {
// 4. Save certificate via V2 API
await _api.post(
V2ApiEndpoints.staffCertificates,
StaffEndpoints.certificates.path,
data: <String, dynamic>{
'certificateType': certificateType,
'name': name,
@@ -95,7 +95,7 @@ class CertificatesRepositoryImpl implements CertificatesRepository {
@override
Future<void> deleteCertificate({required String certificateId}) async {
await _api.delete(
V2ApiEndpoints.staffCertificateDelete(certificateId),
StaffEndpoints.certificateDelete(certificateId).path,
);
}
}

View File

@@ -27,7 +27,7 @@ class DocumentsRepositoryImpl implements DocumentsRepository {
@override
Future<List<ProfileDocument>> getDocuments() async {
final ApiResponse response =
await _api.get(V2ApiEndpoints.staffDocuments);
await _api.get(StaffEndpoints.documents.path);
final List<dynamic> items = response.data['documents'] as List<dynamic>;
return items
.map((dynamic json) =>
@@ -64,7 +64,7 @@ class DocumentsRepositoryImpl implements DocumentsRepository {
// 4. Submit upload result to V2 API
await _api.put(
V2ApiEndpoints.staffDocumentUpload(documentId),
StaffEndpoints.documentUpload(documentId).path,
data: <String, dynamic>{
'fileUri': signedUrlRes.signedUrl,
'verificationId': verificationRes.verificationId,

View File

@@ -18,7 +18,7 @@ class TaxFormsRepositoryImpl implements TaxFormsRepository {
@override
Future<List<TaxForm>> getTaxForms() async {
final ApiResponse response =
await _api.get(V2ApiEndpoints.staffTaxForms);
await _api.get(StaffEndpoints.taxForms.path);
final List<dynamic> items = response.data['taxForms'] as List<dynamic>;
return items
.map((dynamic json) =>
@@ -29,7 +29,7 @@ class TaxFormsRepositoryImpl implements TaxFormsRepository {
@override
Future<void> updateTaxForm(TaxForm form) async {
await _api.put(
V2ApiEndpoints.staffTaxFormUpdate(form.formType),
StaffEndpoints.taxFormUpdate(form.formType).path,
data: form.toJson(),
);
}
@@ -37,7 +37,7 @@ class TaxFormsRepositoryImpl implements TaxFormsRepository {
@override
Future<void> submitTaxForm(TaxForm form) async {
await _api.post(
V2ApiEndpoints.staffTaxFormSubmit(form.formType),
StaffEndpoints.taxFormSubmit(form.formType).path,
data: form.toJson(),
);
}

View File

@@ -16,7 +16,7 @@ class BankAccountRepositoryImpl implements BankAccountRepository {
@override
Future<List<BankAccount>> getAccounts() async {
final ApiResponse response =
await _api.get(V2ApiEndpoints.staffBankAccounts);
await _api.get(StaffEndpoints.bankAccounts.path);
final List<dynamic> items = response.data['accounts'] as List<dynamic>;
return items
.map((dynamic json) =>
@@ -27,7 +27,7 @@ class BankAccountRepositoryImpl implements BankAccountRepository {
@override
Future<void> addAccount(BankAccount account) async {
await _api.post(
V2ApiEndpoints.staffBankAccounts,
StaffEndpoints.bankAccounts.path,
data: account.toJson(),
);
}

View File

@@ -16,7 +16,7 @@ class TimeCardRepositoryImpl implements TimeCardRepository {
@override
Future<List<TimeCardEntry>> getTimeCards(DateTime month) async {
final ApiResponse response = await _api.get(
V2ApiEndpoints.staffTimeCard,
StaffEndpoints.timeCard.path,
params: <String, dynamic>{
'year': month.year,
'month': month.month,

View File

@@ -27,7 +27,7 @@ class AttireRepositoryImpl implements AttireRepository {
@override
Future<List<AttireChecklist>> getAttireOptions() async {
final ApiResponse response = await _api.get(V2ApiEndpoints.staffAttire);
final ApiResponse response = await _api.get(StaffEndpoints.attire.path);
final List<dynamic> items = response.data['items'] as List<dynamic>;
return items
.map((dynamic json) =>
@@ -100,7 +100,7 @@ class AttireRepositoryImpl implements AttireRepository {
// 5. Update attire item via V2 API
await _api.put(
V2ApiEndpoints.staffAttireUpload(itemId),
StaffEndpoints.attireUpload(itemId).path,
data: <String, dynamic>{
'photoUrl': photoUrl,
'verificationId': verifyRes.verificationId,

View File

@@ -17,7 +17,7 @@ class EmergencyContactRepositoryImpl
@override
Future<List<EmergencyContact>> getContacts() async {
final ApiResponse response =
await _api.get(V2ApiEndpoints.staffEmergencyContacts);
await _api.get(StaffEndpoints.emergencyContacts.path);
final List<dynamic> items = response.data['contacts'] as List<dynamic>;
return items
.map((dynamic json) =>
@@ -28,7 +28,7 @@ class EmergencyContactRepositoryImpl
@override
Future<void> saveContacts(List<EmergencyContact> contacts) async {
await _api.put(
V2ApiEndpoints.staffEmergencyContacts,
StaffEndpoints.emergencyContacts.path,
data: <String, dynamic>{
'contacts':
contacts.map((EmergencyContact c) => c.toJson()).toList(),

View File

@@ -16,14 +16,14 @@ class ExperienceRepositoryImpl implements ExperienceRepositoryInterface {
@override
Future<List<String>> getIndustries() async {
final ApiResponse response =
await _api.get(V2ApiEndpoints.staffIndustries);
await _api.get(StaffEndpoints.industries.path);
final List<dynamic> items = response.data['industries'] as List<dynamic>;
return items.map((dynamic e) => e.toString()).toList();
}
@override
Future<List<String>> getSkills() async {
final ApiResponse response = await _api.get(V2ApiEndpoints.staffSkills);
final ApiResponse response = await _api.get(StaffEndpoints.skills.path);
final List<dynamic> items = response.data['skills'] as List<dynamic>;
return items.map((dynamic e) => e.toString()).toList();
}
@@ -34,7 +34,7 @@ class ExperienceRepositoryImpl implements ExperienceRepositoryInterface {
List<String> skills,
) async {
await _api.put(
V2ApiEndpoints.staffPersonalInfo,
StaffEndpoints.personalInfo.path,
data: <String, dynamic>{
'industries': industries,
'skills': skills,

View File

@@ -28,7 +28,7 @@ class PersonalInfoRepositoryImpl implements PersonalInfoRepositoryInterface {
@override
Future<StaffPersonalInfo> getStaffProfile() async {
final ApiResponse response =
await _api.get(V2ApiEndpoints.staffPersonalInfo);
await _api.get(StaffEndpoints.personalInfo.path);
final Map<String, dynamic> json =
response.data as Map<String, dynamic>;
return StaffPersonalInfo.fromJson(json);
@@ -40,7 +40,7 @@ class PersonalInfoRepositoryImpl implements PersonalInfoRepositoryInterface {
required Map<String, dynamic> data,
}) async {
final ApiResponse response = await _api.put(
V2ApiEndpoints.staffPersonalInfo,
StaffEndpoints.personalInfo.path,
data: data,
);
final Map<String, dynamic> json =
@@ -65,7 +65,7 @@ class PersonalInfoRepositoryImpl implements PersonalInfoRepositoryInterface {
// 3. Submit the photo URL to the V2 API.
await _api.post(
V2ApiEndpoints.staffProfilePhoto,
StaffEndpoints.profilePhoto.path,
data: <String, dynamic>{
'fileUri': uploadRes.fileUri,
'photoUrl': photoUrl,

View File

@@ -18,7 +18,7 @@ class FaqsRepositoryImpl implements FaqsRepositoryInterface {
Future<List<FaqCategory>> getFaqs() async {
try {
final ApiResponse response =
await _apiService.get(V2ApiEndpoints.staffFaqs);
await _apiService.get(StaffEndpoints.faqs.path);
return _parseCategories(response);
} catch (_) {
return <FaqCategory>[];
@@ -29,7 +29,7 @@ class FaqsRepositoryImpl implements FaqsRepositoryInterface {
Future<List<FaqCategory>> searchFaqs(String query) async {
try {
final ApiResponse response = await _apiService.get(
V2ApiEndpoints.staffFaqsSearch,
StaffEndpoints.faqsSearch.path,
params: <String, dynamic>{'q': query},
);
return _parseCategories(response);

View File

@@ -19,7 +19,7 @@ class PrivacySettingsRepositoryImpl
@override
Future<bool> getProfileVisibility() async {
final ApiResponse response =
await _api.get(V2ApiEndpoints.staffPrivacy);
await _api.get(StaffEndpoints.privacy.path);
final Map<String, dynamic> json =
response.data as Map<String, dynamic>;
final PrivacySettings settings = PrivacySettings.fromJson(json);
@@ -29,7 +29,7 @@ class PrivacySettingsRepositoryImpl
@override
Future<bool> updateProfileVisibility(bool isVisible) async {
await _api.put(
V2ApiEndpoints.staffPrivacy,
StaffEndpoints.privacy.path,
data: <String, dynamic>{'profileVisible': isVisible},
);
return isVisible;

View File

@@ -5,7 +5,7 @@ import 'package:staff_shifts/src/domain/repositories/shifts_repository_interface
/// V2 API implementation of [ShiftsRepositoryInterface].
///
/// Uses [BaseApiService] with [V2ApiEndpoints] for all network access.
/// Uses [BaseApiService] with [StaffEndpoints] for all network access.
class ShiftsRepositoryImpl implements ShiftsRepositoryInterface {
/// Creates a [ShiftsRepositoryImpl].
ShiftsRepositoryImpl({required BaseApiService apiService})
@@ -34,7 +34,7 @@ class ShiftsRepositoryImpl implements ShiftsRepositoryInterface {
required DateTime end,
}) async {
final ApiResponse response = await _apiService.get(
V2ApiEndpoints.staffShiftsAssigned,
StaffEndpoints.shiftsAssigned.path,
params: <String, dynamic>{
'startDate': start.toIso8601String(),
'endDate': end.toIso8601String(),
@@ -59,7 +59,7 @@ class ShiftsRepositoryImpl implements ShiftsRepositoryInterface {
params['search'] = search;
}
final ApiResponse response = await _apiService.get(
V2ApiEndpoints.staffShiftsOpen,
StaffEndpoints.shiftsOpen.path,
params: params,
);
final List<dynamic> items = _extractItems(response.data);
@@ -72,7 +72,7 @@ class ShiftsRepositoryImpl implements ShiftsRepositoryInterface {
@override
Future<List<PendingAssignment>> getPendingAssignments() async {
final ApiResponse response =
await _apiService.get(V2ApiEndpoints.staffShiftsPending);
await _apiService.get(StaffEndpoints.shiftsPending.path);
final List<dynamic> items = _extractItems(response.data);
return items
.map((dynamic json) =>
@@ -83,7 +83,7 @@ class ShiftsRepositoryImpl implements ShiftsRepositoryInterface {
@override
Future<List<CancelledShift>> getCancelledShifts() async {
final ApiResponse response =
await _apiService.get(V2ApiEndpoints.staffShiftsCancelled);
await _apiService.get(StaffEndpoints.shiftsCancelled.path);
final List<dynamic> items = _extractItems(response.data);
return items
.map((dynamic json) =>
@@ -94,7 +94,7 @@ class ShiftsRepositoryImpl implements ShiftsRepositoryInterface {
@override
Future<List<CompletedShift>> getCompletedShifts() async {
final ApiResponse response =
await _apiService.get(V2ApiEndpoints.staffShiftsCompleted);
await _apiService.get(StaffEndpoints.shiftsCompleted.path);
final List<dynamic> items = _extractItems(response.data);
return items
.map((dynamic json) =>
@@ -105,7 +105,7 @@ class ShiftsRepositoryImpl implements ShiftsRepositoryInterface {
@override
Future<ShiftDetail?> getShiftDetail(String shiftId) async {
final ApiResponse response =
await _apiService.get(V2ApiEndpoints.staffShiftDetails(shiftId));
await _apiService.get(StaffEndpoints.shiftDetails(shiftId).path);
if (response.data == null) {
return null;
}
@@ -119,7 +119,7 @@ class ShiftsRepositoryImpl implements ShiftsRepositoryInterface {
bool instantBook = false,
}) async {
await _apiService.post(
V2ApiEndpoints.staffShiftApply(shiftId),
StaffEndpoints.shiftApply(shiftId).path,
data: <String, dynamic>{
if (roleId != null) 'roleId': roleId,
'instantBook': instantBook,
@@ -129,18 +129,18 @@ class ShiftsRepositoryImpl implements ShiftsRepositoryInterface {
@override
Future<void> acceptShift(String shiftId) async {
await _apiService.post(V2ApiEndpoints.staffShiftAccept(shiftId));
await _apiService.post(StaffEndpoints.shiftAccept(shiftId).path);
}
@override
Future<void> declineShift(String shiftId) async {
await _apiService.post(V2ApiEndpoints.staffShiftDecline(shiftId));
await _apiService.post(StaffEndpoints.shiftDecline(shiftId).path);
}
@override
Future<void> requestSwap(String shiftId, {String? reason}) async {
await _apiService.post(
V2ApiEndpoints.staffShiftRequestSwap(shiftId),
StaffEndpoints.shiftRequestSwap(shiftId).path,
data: <String, dynamic>{
if (reason != null) 'reason': reason,
},
@@ -150,7 +150,7 @@ class ShiftsRepositoryImpl implements ShiftsRepositoryInterface {
@override
Future<bool> getProfileCompletion() async {
final ApiResponse response =
await _apiService.get(V2ApiEndpoints.staffProfileCompletion);
await _apiService.get(StaffEndpoints.profileCompletion.path);
final Map<String, dynamic> data = response.data as Map<String, dynamic>;
final ProfileCompletion completion = ProfileCompletion.fromJson(data);
return completion.completed;

View File

@@ -3,7 +3,7 @@ import 'package:krow_domain/krow_domain.dart';
/// Contract for accessing shift-related data from the V2 API.
///
/// Implementations reside in the data layer and use [BaseApiService]
/// with V2ApiEndpoints.
/// with [StaffEndpoints].
abstract interface class ShiftsRepositoryInterface {
/// Retrieves assigned shifts for the current staff within a date range.
Future<List<AssignedShift>> getAssignedShifts({

View File

@@ -1,13 +1,10 @@
import 'package:core_localization/core_localization.dart';
import 'package:design_system/design_system.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_modular/flutter_modular.dart';
import 'package:intl/intl.dart';
import 'package:krow_core/core.dart';
import 'package:krow_domain/krow_domain.dart';
import 'package:staff_shifts/src/presentation/blocs/shifts/shifts_bloc.dart';
import 'package:staff_shifts/src/presentation/widgets/shared/empty_state_view.dart';
/// Tab showing open shifts available for the worker to browse and apply.

View File

@@ -23,7 +23,7 @@ class StaffMainRepositoryImpl implements StaffMainRepositoryInterface {
Future<bool> getProfileCompletion() async {
try {
final ApiResponse response = await _apiService.get(
V2ApiEndpoints.staffProfileCompletion,
StaffEndpoints.profileCompletion.path,
);
if (response.data is Map<String, dynamic>) {