Skip to content

Commit

Permalink
fix occupation workaround (#407)
Browse files Browse the repository at this point in the history
  • Loading branch information
fremartini authored Apr 15, 2023
1 parent ac2c74d commit 2374f77
Show file tree
Hide file tree
Showing 48 changed files with 1,449 additions and 435 deletions.
22 changes: 0 additions & 22 deletions lib/cubits/occupation/occupation_cubit.dart

This file was deleted.

116 changes: 0 additions & 116 deletions lib/cubits/user/user_cubit.dart

This file was deleted.

7 changes: 4 additions & 3 deletions lib/data/repositories/shared/account_repository.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import 'package:coffeecard/core/errors/failures.dart';
import 'package:coffeecard/core/network/network_request_executor.dart';
import 'package:coffeecard/features/user/data/models/user_model.dart';
import 'package:coffeecard/features/user/domain/entities/user.dart';
import 'package:coffeecard/generated/api/coffeecard_api.swagger.dart';
import 'package:coffeecard/generated/api/coffeecard_api_v2.swagger.dart'
hide MessageResponseDto;
import 'package:coffeecard/models/account/authenticated_user.dart';
import 'package:coffeecard/models/account/update_user.dart';
import 'package:coffeecard/models/account/user.dart';
import 'package:coffeecard/utils/api_uri_constants.dart';
import 'package:dartz/dartz.dart';

Expand Down Expand Up @@ -68,7 +69,7 @@ class AccountRepository {
apiV1.apiV1AccountGet,
);

return result.map((result) => User.fromDTO(result));
return result.map(UserModel.fromDto);
}

/// Update user information
Expand All @@ -85,7 +86,7 @@ class AccountRepository {
),
);

return result.map(User.fromDTO);
return result.map(UserModel.fromDto);
}

Future<Either<NetworkFailure, void>> requestPasscodeReset(
Expand Down
23 changes: 0 additions & 23 deletions lib/data/repositories/v1/occupation_repository.dart

This file was deleted.

12 changes: 1 addition & 11 deletions lib/data/repositories/v1/ticket_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,6 @@ class TicketRepository {
),
);

return result.map(
(result) => Receipt(
productName: result.productName,
id: result.id,
transactionType: TransactionType.ticketSwipe,
timeUsed: result.dateUsed,
// TODO(fremartini): Find a better alternative to these default values They are unused on the receipt overlay, https://github.com/AnalogIO/coffeecard_app/issues/384
amountPurchased: -1,
price: -1,
),
);
return result.map(Receipt.fromTicketDTO);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import 'package:coffeecard/core/errors/failures.dart';
import 'package:coffeecard/core/network/network_request_executor.dart';
import 'package:coffeecard/features/occupation/data/models/occupation_model.dart';
import 'package:coffeecard/generated/api/coffeecard_api.swagger.dart';
import 'package:dartz/dartz.dart';

class OccupationRemoteDataSource {
final CoffeecardApi api;
final NetworkRequestExecutor executor;

OccupationRemoteDataSource({
required this.api,
required this.executor,
});

Future<Either<NetworkFailure, List<OccupationModel>>> getOccupations() async {
final result = await executor(
() => api.apiV1ProgrammesGet(),
);
return result
.map((result) => result.map(OccupationModel.fromDTOV1).toList());
}
}
27 changes: 27 additions & 0 deletions lib/features/occupation/data/models/occupation_model.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import 'package:coffeecard/features/occupation/domain/entities/occupation.dart';
import 'package:coffeecard/generated/api/coffeecard_api.models.swagger.dart';
import 'package:coffeecard/generated/api/coffeecard_api_v2.models.swagger.dart';

class OccupationModel extends Occupation {
const OccupationModel({
required super.id,
required super.shortName,
required super.fullName,
});

factory OccupationModel.fromDTOV1(ProgrammeDto dto) {
return OccupationModel(
id: dto.id,
shortName: dto.shortName,
fullName: dto.fullName,
);
}

factory OccupationModel.fromDTOV2(ProgrammeResponse dto) {
return OccupationModel(
id: dto.id,
shortName: dto.shortName,
fullName: dto.fullName,
);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'package:coffeecard/generated/api/coffeecard_api.models.swagger.dart';
import 'package:equatable/equatable.dart';

class Occupation extends Equatable {
Expand All @@ -12,11 +11,6 @@ class Occupation extends Equatable {
final String shortName;
final String fullName;

Occupation.fromDTO(ProgrammeDto dto)
: id = dto.id,
shortName = dto.shortName,
fullName = dto.fullName;

const Occupation.empty()
: id = 0,
shortName = 'None',
Expand Down
16 changes: 16 additions & 0 deletions lib/features/occupation/domain/usecases/get_occupations.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import 'package:coffeecard/core/errors/failures.dart';
import 'package:coffeecard/core/usecases/usecase.dart';
import 'package:coffeecard/features/occupation/data/datasources/occupation_remote_data_source.dart';
import 'package:coffeecard/features/occupation/domain/entities/occupation.dart';
import 'package:dartz/dartz.dart';

class GetOccupations implements UseCase<List<Occupation>, NoParams> {
final OccupationRemoteDataSource dataSource;

GetOccupations({required this.dataSource});

@override
Future<Either<Failure, List<Occupation>>> call(NoParams params) {
return dataSource.getOccupations();
}
}
25 changes: 25 additions & 0 deletions lib/features/occupation/presentation/cubit/occupation_cubit.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import 'package:bloc/bloc.dart';
import 'package:coffeecard/core/usecases/usecase.dart';
import 'package:coffeecard/features/occupation/domain/entities/occupation.dart';
import 'package:coffeecard/features/occupation/domain/usecases/get_occupations.dart';
import 'package:equatable/equatable.dart';

part 'occupation_state.dart';

class OccupationCubit extends Cubit<OccupationState> {
final GetOccupations getOccupations;

OccupationCubit({required this.getOccupations})
: super(const OccupationLoading());

Future<void> fetchOccupations() async {
emit(const OccupationLoading());

final either = await getOccupations(NoParams());

either.fold(
(error) => emit(OccupationError(message: error.reason)),
(occupations) => emit(OccupationLoaded(occupations: occupations)),
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class OccupationLoaded extends OccupationState {
class OccupationError extends OccupationState {
final String message;

const OccupationError(this.message);
const OccupationError({required this.message});

@override
List<Object> get props => [message];
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import 'package:coffeecard/base/strings.dart';
import 'package:coffeecard/features/occupation/presentation/cubit/occupation_cubit.dart';
import 'package:coffeecard/features/occupation/presentation/widgets/occupation_form.dart';
import 'package:coffeecard/features/user/presentation/cubit/user_cubit.dart';
import 'package:coffeecard/service_locator.dart';
import 'package:coffeecard/widgets/components/loading.dart';
import 'package:coffeecard/widgets/components/scaffold.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

class ChangeOccupationPage extends StatelessWidget {
const ChangeOccupationPage();

static Route get route =>
MaterialPageRoute(builder: (_) => const ChangeOccupationPage());

@override
Widget build(BuildContext context) {
return AppScaffold.withTitle(
title: Strings.changeOccupation,
body: BlocProvider(
create: (_) => sl<OccupationCubit>()..fetchOccupations(),
child: Padding(
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
child: BlocBuilder<OccupationCubit, OccupationState>(
builder: (_, occupationState) {
if (occupationState is! OccupationLoaded) {
return const SizedBox.shrink();
}

return BlocBuilder<UserCubit, UserState>(
builder: (context, userState) {
return Loading(
loading: userState is UserUpdating,
child: OccupationForm(
occupations: occupationState.occupations,
selectedOccupation: userState is UserLoaded
? userState.user.occupation
: null,
onChange: (occupation) => context
.read<UserCubit>()
.setUserOccupation(occupation.id),
),
);
},
);
},
),
),
),
);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:coffeecard/base/strings.dart';
import 'package:coffeecard/models/occupation.dart';
import 'package:coffeecard/features/occupation/domain/entities/occupation.dart';
import 'package:coffeecard/widgets/components/list_entry.dart';
import 'package:coffeecard/widgets/components/section_title.dart';
import 'package:coffeecard/widgets/components/settings_list_entry.dart';
Expand Down
Loading

0 comments on commit 2374f77

Please sign in to comment.