438 lines
13 KiB
Markdown
438 lines
13 KiB
Markdown
# Worker App Project Structure
|
|
|
|
```
|
|
lib/
|
|
core/
|
|
constants/
|
|
api_constants.dart # API endpoints, timeouts
|
|
app_constants.dart # App config, defaults, loyalty tiers
|
|
ui_constants.dart # Spacing, sizes, colors
|
|
storage_constants.dart # Hive box names, keys
|
|
theme/
|
|
app_theme.dart # Material 3 theme (primary blue #005B9A)
|
|
colors.dart # Brand color schemes
|
|
typography.dart # Roboto text styles
|
|
network/
|
|
dio_client.dart # HTTP client setup
|
|
api_interceptor.dart # Auth token, logging interceptors
|
|
network_info.dart # Connectivity status
|
|
errors/
|
|
exceptions.dart # Custom exceptions
|
|
failures.dart # Failure classes
|
|
utils/
|
|
formatters.dart # Currency, date, phone formatters
|
|
validators.dart # Form validation (Vietnamese phone, email)
|
|
extensions.dart # Dart extensions
|
|
qr_generator.dart # QR code generation for member cards
|
|
widgets/
|
|
custom_button.dart # Primary, secondary buttons
|
|
loading_indicator.dart # Loading states
|
|
error_widget.dart # Error displays
|
|
empty_state.dart # Empty list UI
|
|
bottom_nav_bar.dart # Main bottom navigation
|
|
floating_chat_button.dart # FAB for chat
|
|
|
|
features/
|
|
auth/
|
|
data/
|
|
datasources/
|
|
auth_remote_datasource.dart # Login, OTP, register APIs
|
|
auth_local_datasource.dart # Token storage
|
|
models/
|
|
user_model.dart # User with tier info
|
|
otp_response_model.dart
|
|
repositories/
|
|
auth_repository_impl.dart
|
|
domain/
|
|
entities/
|
|
user.dart # id, name, phone, email, tier, points
|
|
repositories/
|
|
auth_repository.dart
|
|
usecases/
|
|
login_with_phone.dart
|
|
verify_otp.dart
|
|
register_user.dart
|
|
logout.dart
|
|
get_current_user.dart
|
|
presentation/
|
|
providers/
|
|
auth_provider.dart
|
|
otp_timer_provider.dart
|
|
pages/
|
|
login_page.dart # Phone input
|
|
otp_verification_page.dart # 6-digit OTP
|
|
register_page.dart # Full registration form
|
|
widgets/
|
|
phone_input_field.dart
|
|
otp_input_field.dart # Auto-focus 6 digits
|
|
user_type_selector.dart # Contractor/Architect/etc
|
|
|
|
home/
|
|
data/
|
|
datasources/
|
|
member_card_local_datasource.dart
|
|
models/
|
|
member_card_model.dart
|
|
presentation/
|
|
providers/
|
|
member_card_provider.dart
|
|
pages:
|
|
home_page.dart # Main dashboard
|
|
widgets:
|
|
diamond_member_card.dart # Gradient card with QR
|
|
platinum_member_card.dart
|
|
gold_member_card.dart
|
|
quick_action_grid.dart
|
|
|
|
loyalty/
|
|
data/
|
|
datasources:
|
|
loyalty_remote_datasource.dart
|
|
loyalty_local_datasource.dart
|
|
models:
|
|
loyalty_points_model.dart
|
|
loyalty_transaction_model.dart
|
|
reward_model.dart
|
|
gift_model.dart
|
|
referral_model.dart
|
|
repositories:
|
|
loyalty_repository_impl.dart
|
|
domain:
|
|
entities:
|
|
loyalty_points.dart # currentPoints, tier, nextTierPoints
|
|
loyalty_transaction.dart # id, type, amount, description, date
|
|
reward.dart # id, title, pointsCost, image, expiry
|
|
gift.dart # id, code, status, validFrom, validTo
|
|
referral.dart # code, link, totalReferrals, pointsEarned
|
|
repositories:
|
|
loyalty_repository.dart
|
|
usecases:
|
|
get_loyalty_points.dart
|
|
get_points_history.dart
|
|
redeem_reward.dart
|
|
get_available_rewards.dart
|
|
get_my_gifts.dart
|
|
get_referral_info.dart
|
|
share_referral.dart
|
|
presentation:
|
|
providers:
|
|
loyalty_points_provider.dart
|
|
points_history_provider.dart
|
|
rewards_provider.dart
|
|
gifts_provider.dart
|
|
referral_provider.dart
|
|
pages:
|
|
loyalty_page.dart # Progress bar, tier info
|
|
rewards_page.dart # Grid of redeemable rewards
|
|
points_history_page.dart # Transaction list
|
|
referral_page.dart # Referral link & code
|
|
my_gifts_page.dart # Tabs: Active/Used/Expired
|
|
widgets:
|
|
tier_progress_bar.dart
|
|
points_badge.dart
|
|
reward_card.dart
|
|
gift_card.dart
|
|
referral_share_sheet.dart
|
|
|
|
products/
|
|
data:
|
|
datasources:
|
|
product_remote_datasource.dart
|
|
product_local_datasource.dart
|
|
models:
|
|
product_model.dart # Tile/construction products
|
|
category_model.dart
|
|
repositories:
|
|
product_repository_impl.dart
|
|
domain:
|
|
entities:
|
|
product.dart # id, name, sku, price, images, category
|
|
category.dart
|
|
repositories:
|
|
product_repository.dart
|
|
usecases:
|
|
get_all_products.dart
|
|
search_products.dart
|
|
get_products_by_category.dart
|
|
get_product_details.dart
|
|
presentation:
|
|
providers:
|
|
products_provider.dart
|
|
product_search_provider.dart
|
|
categories_provider.dart
|
|
pages:
|
|
products_page.dart # Grid with search & filters
|
|
product_detail_page.dart
|
|
widgets:
|
|
product_grid.dart
|
|
product_card.dart
|
|
product_search_bar.dart
|
|
category_filter_chips.dart
|
|
|
|
cart/
|
|
data:
|
|
datasources:
|
|
cart_local_datasource.dart # Hive persistence
|
|
models:
|
|
cart_item_model.dart
|
|
repositories:
|
|
cart_repository_impl.dart
|
|
domain:
|
|
entities:
|
|
cart_item.dart # productId, quantity, price
|
|
repositories:
|
|
cart_repository.dart
|
|
usecases:
|
|
add_to_cart.dart
|
|
remove_from_cart.dart
|
|
update_quantity.dart
|
|
clear_cart.dart
|
|
get_cart_items.dart
|
|
calculate_cart_total.dart
|
|
presentation:
|
|
providers:
|
|
cart_provider.dart
|
|
cart_total_provider.dart
|
|
pages:
|
|
cart_page.dart
|
|
checkout_page.dart
|
|
order_success_page.dart
|
|
widgets:
|
|
cart_item_card.dart
|
|
cart_summary.dart
|
|
quantity_selector.dart
|
|
payment_method_selector.dart
|
|
|
|
orders/
|
|
data:
|
|
datasources:
|
|
order_remote_datasource.dart
|
|
order_local_datasource.dart
|
|
models:
|
|
order_model.dart
|
|
order_item_model.dart
|
|
payment_model.dart
|
|
repositories:
|
|
order_repository_impl.dart
|
|
domain:
|
|
entities:
|
|
order.dart # orderNumber, items, total, status
|
|
order_item.dart
|
|
payment.dart
|
|
repositories:
|
|
order_repository.dart
|
|
usecases:
|
|
create_order.dart
|
|
get_orders.dart
|
|
get_order_details.dart
|
|
get_payments.dart
|
|
presentation:
|
|
providers:
|
|
orders_provider.dart
|
|
order_filter_provider.dart
|
|
payments_provider.dart
|
|
pages:
|
|
orders_page.dart # Tabs by status
|
|
order_detail_page.dart
|
|
payments_page.dart
|
|
widgets:
|
|
order_card.dart
|
|
order_status_badge.dart
|
|
order_timeline.dart
|
|
payment_card.dart
|
|
|
|
projects/
|
|
data:
|
|
datasources:
|
|
project_remote_datasource.dart
|
|
project_local_datasource.dart
|
|
models:
|
|
project_model.dart
|
|
quote_model.dart
|
|
repositories:
|
|
project_repository_impl.dart
|
|
domain:
|
|
entities:
|
|
project.dart # name, client, location, progress, status
|
|
quote.dart # number, client, amount, validity, status
|
|
repositories:
|
|
project_repository.dart
|
|
usecases:
|
|
create_project.dart
|
|
get_projects.dart
|
|
update_project_progress.dart
|
|
create_quote.dart
|
|
get_quotes.dart
|
|
presentation:
|
|
providers:
|
|
projects_provider.dart
|
|
project_form_provider.dart
|
|
quotes_provider.dart
|
|
pages:
|
|
projects_page.dart # List with progress bars
|
|
project_create_page.dart # Form
|
|
project_detail_page.dart
|
|
quotes_page.dart
|
|
quote_create_page.dart
|
|
widgets:
|
|
project_card.dart
|
|
project_progress_bar.dart
|
|
quote_card.dart
|
|
project_form.dart
|
|
|
|
chat/
|
|
data:
|
|
datasources:
|
|
chat_remote_datasource.dart # WebSocket/REST
|
|
chat_local_datasource.dart
|
|
models:
|
|
message_model.dart
|
|
chat_room_model.dart
|
|
repositories:
|
|
chat_repository_impl.dart
|
|
domain:
|
|
entities:
|
|
message.dart # id, text, senderId, timestamp, isRead
|
|
chat_room.dart
|
|
repositories:
|
|
chat_repository.dart
|
|
usecases:
|
|
send_message.dart
|
|
get_messages.dart
|
|
mark_as_read.dart
|
|
presentation:
|
|
providers:
|
|
chat_provider.dart
|
|
messages_provider.dart
|
|
typing_indicator_provider.dart
|
|
pages:
|
|
chat_page.dart
|
|
widgets:
|
|
message_bubble.dart
|
|
message_input.dart
|
|
typing_indicator.dart
|
|
chat_app_bar.dart
|
|
|
|
account/
|
|
data:
|
|
datasources:
|
|
profile_remote_datasource.dart
|
|
profile_local_datasource.dart
|
|
address_datasource.dart
|
|
models:
|
|
profile_model.dart
|
|
address_model.dart
|
|
repositories:
|
|
profile_repository_impl.dart
|
|
address_repository_impl.dart
|
|
domain:
|
|
entities:
|
|
profile.dart # Extended user info
|
|
address.dart # Delivery addresses
|
|
repositories:
|
|
profile_repository.dart
|
|
address_repository.dart
|
|
usecases:
|
|
get_profile.dart
|
|
update_profile.dart
|
|
upload_avatar.dart
|
|
change_password.dart
|
|
get_addresses.dart
|
|
add_address.dart
|
|
update_address.dart
|
|
delete_address.dart
|
|
presentation:
|
|
providers:
|
|
profile_provider.dart
|
|
avatar_provider.dart
|
|
addresses_provider.dart
|
|
pages:
|
|
account_page.dart # Menu
|
|
profile_edit_page.dart
|
|
addresses_page.dart
|
|
address_form_page.dart
|
|
password_change_page.dart
|
|
widgets:
|
|
profile_header.dart
|
|
account_menu_item.dart
|
|
address_card.dart
|
|
avatar_picker.dart
|
|
|
|
promotions/
|
|
data:
|
|
datasources:
|
|
promotion_remote_datasource.dart
|
|
models:
|
|
promotion_model.dart
|
|
repositories:
|
|
promotion_repository_impl.dart
|
|
domain:
|
|
entities:
|
|
promotion.dart # title, description, discount, validity
|
|
repositories:
|
|
promotion_repository.dart
|
|
usecases:
|
|
get_active_promotions.dart
|
|
presentation:
|
|
providers:
|
|
promotions_provider.dart
|
|
pages:
|
|
promotions_page.dart
|
|
widgets:
|
|
promotion_card.dart
|
|
promotion_banner.dart
|
|
|
|
notifications/
|
|
data:
|
|
datasources:
|
|
notification_remote_datasource.dart
|
|
notification_local_datasource.dart
|
|
models:
|
|
notification_model.dart
|
|
repositories:
|
|
notification_repository_impl.dart
|
|
domain:
|
|
entities:
|
|
notification.dart # title, body, type, isRead, timestamp
|
|
repositories:
|
|
notification_repository.dart
|
|
usecases:
|
|
get_notifications.dart
|
|
mark_as_read.dart
|
|
clear_all.dart
|
|
presentation:
|
|
providers:
|
|
notifications_provider.dart
|
|
notification_badge_provider.dart
|
|
pages:
|
|
notifications_page.dart # Tabs: All/Orders/System/Promos
|
|
widgets:
|
|
notification_card.dart
|
|
notification_badge.dart
|
|
|
|
shared/
|
|
widgets/
|
|
custom_app_bar.dart
|
|
gradient_card.dart # For member cards
|
|
status_badge.dart
|
|
price_display.dart
|
|
vietnamese_phone_field.dart
|
|
date_picker_field.dart
|
|
|
|
main.dart
|
|
app.dart # Root widget with ProviderScope
|
|
|
|
test/
|
|
unit/
|
|
features/
|
|
auth/
|
|
loyalty/
|
|
products/
|
|
cart/
|
|
orders/
|
|
projects/
|
|
widget/
|
|
widgets/
|
|
integration/
|
|
```
|